AD CS Certificate Theft
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
이것은 https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf에서의 훌륭한 연구의 도난 장에 대한 간단한 요약입니다.
인증서를 훔치는 방법을 확인하기 전에 인증서가 무엇에 유용한지 찾는 방법에 대한 정보가 있습니다:
In an interactive desktop session, 사용자의 인증서 또는 머신 인증서를 개인 키와 함께 추출하는 것은 개인 키가 내보낼 수 있는 경우 특히 쉽게 수행할 수 있습니다. 이는 certmgr.msc
에서 인증서를 찾아 마우스 오른쪽 버튼을 클릭하고 모든 작업 → 내보내기
를 선택하여 비밀번호로 보호된 .pfx 파일을 생성함으로써 달성할 수 있습니다.
For a programmatic approach, PowerShell ExportPfxCertificate
cmdlet 또는 TheWover의 CertStealer C# 프로젝트와 같은 도구가 제공됩니다. 이들은 Microsoft CryptoAPI (CAPI) 또는 Cryptography API: Next Generation (CNG)을 사용하여 인증서 저장소와 상호작용합니다. 이러한 API는 인증서 저장 및 인증에 필요한 다양한 암호화 서비스를 제공합니다.
However, if a private key is set as non-exportable, both CAPI and CNG will normally block the extraction of such certificates. To bypass this restriction, Mimikatz와 같은 도구를 사용할 수 있습니다. Mimikatz는 개인 키의 내보내기를 허용하기 위해 해당 API를 패치하는 crypto::capi
및 crypto::cng
명령을 제공합니다. 구체적으로, crypto::capi
는 현재 프로세스 내의 CAPI를 패치하고, crypto::cng
는 패치를 위해 lsass.exe의 메모리를 타겟팅합니다.
More info about DPAPI in:
DPAPI - Extracting PasswordsIn Windows, 인증서 개인 키는 DPAPI에 의해 보호됩니다. 사용자 및 머신 개인 키의 저장 위치가 다르며, 파일 구조는 운영 체제가 사용하는 암호화 API에 따라 다르다는 것을 인식하는 것이 중요합니다. SharpDPAPI는 DPAPI 블롭을 해독할 때 이러한 차이를 자동으로 탐색할 수 있는 도구입니다.
사용자 인증서는 주로 HKEY_CURRENT_USER\SOFTWARE\Microsoft\SystemCertificates
의 레지스트리에 저장되지만, 일부는 %APPDATA%\Microsoft\SystemCertificates\My\Certificates
디렉토리에서도 찾을 수 있습니다. 이러한 인증서에 대한 해당 개인 키는 일반적으로 CAPI 키의 경우 %APPDATA%\Microsoft\Crypto\RSA\User SID\
에, CNG 키의 경우 %APPDATA%\Microsoft\Crypto\Keys\
에 저장됩니다.
To extract a certificate and its associated private key, the process involves:
대상 인증서 선택 사용자의 저장소에서 키 저장소 이름을 검색합니다.
해당 개인 키를 해독하기 위한 DPAPI 마스터 키 찾기.
평문 DPAPI 마스터 키를 사용하여 개인 키 해독하기.
For acquiring the plaintext DPAPI masterkey, the following approaches can be used:
마스터키 파일과 개인 키 파일의 복호화를 간소화하기 위해, SharpDPAPI의 certificates
명령이 유용합니다. 이 명령은 개인 키와 연결된 인증서를 복호화하기 위해 /pvk
, /mkfile
, /password
또는 {GUID}:KEY
를 인수로 받아들여, 이후 .pem
파일을 생성합니다.
Windows에 의해 레지스트리에 저장된 머신 인증서 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates
와 관련된 개인 키는 %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\MachineKeys
(CAPI의 경우) 및 %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\Keys
(CNG의 경우)에 위치하며, 머신의 DPAPI 마스터 키를 사용하여 암호화됩니다. 이러한 키는 도메인의 DPAPI 백업 키로 복호화할 수 없으며, 대신 DPAPI_SYSTEM LSA 비밀이 필요합니다. 이 비밀은 오직 SYSTEM 사용자만 접근할 수 있습니다.
수동 복호화는 Mimikatz에서 lsadump::secrets
명령을 실행하여 DPAPI_SYSTEM LSA 비밀을 추출한 다음, 이 키를 사용하여 머신 마스터 키를 복호화함으로써 달성할 수 있습니다. 또는, 이전에 설명한 대로 CAPI/CNG를 패치한 후 Mimikatz의 crypto::certificates /export /systemstore:LOCAL_MACHINE
명령을 사용할 수 있습니다.
SharpDPAPI는 인증서 명령을 통해 보다 자동화된 접근 방식을 제공합니다. /machine
플래그가 상승된 권한으로 사용될 때, SYSTEM으로 상승하고 DPAPI_SYSTEM LSA 비밀을 덤프하며, 이를 사용하여 머신 DPAPI 마스터 키를 복호화한 다음, 이러한 평문 키를 조회 테이블로 사용하여 모든 머신 인증서 개인 키를 복호화합니다.
인증서는 때때로 파일 시스템 내에서 직접 발견되며, 파일 공유 또는 다운로드 폴더와 같은 위치에 있습니다. Windows 환경을 대상으로 하는 가장 일반적으로 접하는 인증서 파일 유형은 .pfx
및 .p12
파일입니다. 덜 자주 나타나지만, .pkcs12
및 .pem
확장자를 가진 파일도 있습니다. 추가로 주목할 만한 인증서 관련 파일 확장자는 다음과 같습니다:
개인 키용 .key
,
인증서 전용 .crt
/.cer
,
인증서나 개인 키를 포함하지 않는 인증서 서명 요청용 .csr
,
Java 애플리케이션에서 사용되는 인증서와 개인 키를 포함할 수 있는 Java 키 저장소용 .jks
/.keystore
/.keys
.
이 파일들은 언급된 확장자를 찾아 PowerShell 또는 명령 프롬프트를 사용하여 검색할 수 있습니다.
PKCS#12 인증서 파일이 발견되고 비밀번호로 보호되는 경우, fossies.org에서 제공되는 pfx2john.py
를 사용하여 해시를 추출할 수 있습니다. 이후, JohnTheRipper를 사용하여 비밀번호를 크랙하려고 시도할 수 있습니다.
주어진 내용은 PKINIT를 통한 NTLM 자격 증명 도용 방법, 특히 THEFT5로 레이블이 붙은 도용 방법을 설명합니다. 다음은 수동태로 재설명하며, 내용이 익명화되고 요약된 것입니다:
Kerberos 인증을 지원하지 않는 애플리케이션을 위해 NTLM 인증 [MS-NLMP]을 지원하기 위해, KDC는 PKCA가 사용될 때 권한 속성 인증서(PAC) 내에서 사용자의 NTLM 일방향 함수(OWF)를 PAC_CREDENTIAL_INFO
버퍼에 반환하도록 설계되었습니다. 따라서 계정이 PKINIT를 통해 인증하고 티켓 부여 티켓(TGT)을 확보할 경우, 현재 호스트가 TGT에서 NTLM 해시를 추출하여 레거시 인증 프로토콜을 유지할 수 있도록 하는 메커니즘이 본질적으로 제공됩니다. 이 과정은 NTLM 평문을 NDR 직렬화된 형태로 나타내는 PAC_CREDENTIAL_DATA
구조체의 복호화를 포함합니다.
유틸리티 Kekeo는 https://github.com/gentilkiwi/kekeo에서 접근할 수 있으며, 이 특정 데이터를 포함하는 TGT를 요청할 수 있는 기능이 있다고 언급됩니다. 이를 위한 명령은 다음과 같습니다:
또한, Kekeo는 pin을 검색할 수 있는 경우 스마트카드 보호 인증서를 처리할 수 있다고 언급되며, https://github.com/CCob/PinSwipe와 관련이 있습니다. 동일한 기능이 Rubeus에서도 지원된다고 하며, 이는 https://github.com/GhostPack/Rubeus에서 사용할 수 있습니다.
이 설명은 PKINIT을 통한 NTLM 자격 증명 도용 과정과 도구를 요약하며, PKINIT을 사용하여 얻은 TGT를 통해 NTLM 해시를 검색하는 데 중점을 두고, 이 과정을 용이하게 하는 유틸리티를 다룹니다.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)