AD CS Certificate Theft

Reading time: 7 minutes

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기

이것은 https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf에서의 훌륭한 연구의 도난 장에 대한 간단한 요약입니다.

인증서로 무엇을 할 수 있나요

인증서를 훔치는 방법을 확인하기 전에, 인증서가 무엇에 유용한지 찾는 방법에 대한 정보가 있습니다:

bash
# Powershell
$CertPath = "C:\path\to\cert.pfx"
$CertPass = "P@ssw0rd"
$Cert = New-Object
System.Security.Cryptography.X509Certificates.X509Certificate2 @($CertPath, $CertPass)
$Cert.EnhancedKeyUsageList

# cmd
certutil.exe -dump -v cert.pfx

Exporting Certificates Using the Crypto APIs – THEFT1

In an interactive desktop session, 사용자의 인증서 또는 머신 인증서를 개인 키와 함께 추출하는 것은 개인 키가 내보낼 수 있는 경우 특히 쉽게 수행할 수 있습니다. 이는 certmgr.msc에서 인증서를 찾아 마우스 오른쪽 버튼을 클릭하고 모든 작업 → 내보내기를 선택하여 비밀번호로 보호된 .pfx 파일을 생성함으로써 달성할 수 있습니다.

For a programmatic approach, PowerShell ExportPfxCertificate cmdlet 또는 TheWover’s CertStealer C# project와 같은 도구가 제공됩니다. 이들은 Microsoft CryptoAPI (CAPI) 또는 Cryptography API: Next Generation (CNG)을 사용하여 인증서 저장소와 상호작용합니다. 이러한 API는 인증서 저장 및 인증에 필요한 다양한 암호화 서비스를 제공합니다.

그러나 개인 키가 내보낼 수 없는 것으로 설정된 경우, CAPI와 CNG는 일반적으로 이러한 인증서의 추출을 차단합니다. 이 제한을 우회하기 위해 Mimikatz와 같은 도구를 사용할 수 있습니다. Mimikatz는 개인 키의 내보내기를 허용하기 위해 해당 API를 패치하는 crypto::capicrypto::cng 명령을 제공합니다. 구체적으로, crypto::capi는 현재 프로세스 내의 CAPI를 패치하고, crypto::cng는 패치를 위해 lsass.exe의 메모리를 타겟팅합니다.

User Certificate Theft via DPAPI – THEFT2

More info about DPAPI in:

DPAPI - Extracting Passwords

In Windows, certificate private keys are safeguarded by 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:

  1. 대상 인증서 선택 사용자의 저장소에서 키 저장소 이름을 검색합니다.
  2. 해당 개인 키를 해독하기 위한 DPAPI 마스터 키 찾기.
  3. 평문 DPAPI 마스터 키를 사용하여 개인 키 해독하기.

For acquiring the plaintext DPAPI masterkey, the following approaches can be used:

bash
# With mimikatz, when running in the user's context
dpapi::masterkey /in:"C:\PATH\TO\KEY" /rpc

# With mimikatz, if the user's password is known
dpapi::masterkey /in:"C:\PATH\TO\KEY" /sid:accountSid /password:PASS

마스터키 파일과 개인 키 파일의 복호화를 간소화하기 위해, SharpDPAPIcertificates 명령이 유용합니다. 이 명령은 개인 키와 연결된 인증서를 복호화하기 위해 /pvk, /mkfile, /password 또는 {GUID}:KEY를 인수로 받아들여, 이후 .pem 파일을 생성합니다.

bash
# Decrypting using SharpDPAPI
SharpDPAPI.exe certificates /mkfile:C:\temp\mkeys.txt

# Converting .pem to .pfx
openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx

Machine Certificate Theft via DPAPI – THEFT3

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 마스터 키를 복호화한 후, 이러한 평문 키를 조회 테이블로 사용하여 모든 머신 인증서 개인 키를 복호화합니다.

Finding Certificate Files – THEFT4

인증서는 때때로 파일 시스템 내에서 직접 발견되며, 파일 공유 또는 다운로드 폴더와 같은 위치에 있습니다. Windows 환경을 대상으로 하는 가장 일반적으로 접하는 인증서 파일 유형은 .pfx.p12 파일입니다. 덜 자주 나타나는 파일 확장자로는 .pkcs12.pem이 있습니다. 추가로 주목할 만한 인증서 관련 파일 확장자는 다음과 같습니다:

  • 개인 키용 .key,
  • 인증서 전용 .crt/.cer,
  • 인증서 또는 개인 키를 포함하지 않는 인증서 서명 요청용 .csr,
  • Java 애플리케이션에서 사용되는 인증서와 개인 키를 포함할 수 있는 Java Keystores용 .jks/.keystore/.keys.

이 파일들은 언급된 확장자를 찾기 위해 PowerShell 또는 명령 프롬프트를 사용하여 검색할 수 있습니다.

PKCS#12 인증서 파일이 발견되고 비밀번호로 보호되는 경우, pfx2john.py를 사용하여 해시를 추출할 수 있으며, 이는 fossies.org에서 사용할 수 있습니다. 이후 JohnTheRipper를 사용하여 비밀번호를 크랙하려고 시도할 수 있습니다.

bash
# Example command to search for certificate files in PowerShell
Get-ChildItem -Recurse -Path C:\Users\ -Include *.pfx, *.p12, *.pkcs12, *.pem, *.key, *.crt, *.cer, *.csr, *.jks, *.keystore, *.keys

# Example command to use pfx2john.py for extracting a hash from a PKCS#12 file
pfx2john.py certificate.pfx > hash.txt

# Command to crack the hash with JohnTheRipper
john --wordlist=passwords.txt hash.txt

NTLM Credential Theft via PKINIT – THEFT5 (UnPAC the hash)

주어진 내용은 PKINIT를 통한 NTLM 자격 증명 도용 방법, 특히 THEFT5로 레이블이 붙은 도용 방법을 설명합니다. 다음은 수동태로 재설명된 내용으로, 필요에 따라 익명화되고 요약되었습니다:

NTLM 인증 MS-NLMP를 지원하기 위해 Kerberos 인증을 지원하지 않는 애플리케이션의 경우, KDC는 PKCA가 사용될 때 권한 속성 인증서(PAC) 내에서 사용자의 NTLM 일방향 함수(OWF)를 반환하도록 설계되었습니다. 따라서 계정이 PKINIT를 통해 티켓 부여 티켓(TGT)을 인증하고 확보할 경우, 현재 호스트가 TGT에서 NTLM 해시를 추출하여 레거시 인증 프로토콜을 유지할 수 있도록 하는 메커니즘이 본질적으로 제공됩니다. 이 과정은 NTLM 평문을 NDR 직렬화된 형태로 나타내는 PAC_CREDENTIAL_DATA 구조체의 복호화를 포함합니다.

유틸리티 Kekeohttps://github.com/gentilkiwi/kekeo에서 접근할 수 있으며, 이 특정 데이터를 포함하는 TGT를 요청할 수 있는 기능이 언급되어 있어 사용자의 NTLM을 검색하는 데 도움을 줍니다. 이 목적을 위해 사용되는 명령은 다음과 같습니다:

bash
tgt::pac /caname:generic-DC-CA /subject:genericUser /castore:current_user /domain:domain.local

**Rubeus**는 asktgt [...] /getcredentials 옵션으로 이 정보를 얻을 수 있습니다.

또한, Kekeo는 핀을 검색할 수 있는 경우 스마트카드 보호 인증서를 처리할 수 있다고 언급되며, https://github.com/CCob/PinSwipe에 대한 참조가 있습니다. 동일한 기능이 Rubeus에서도 지원된다고 하며, https://github.com/GhostPack/Rubeus에서 사용할 수 있습니다.

이 설명은 PKINIT을 통한 NTLM 자격 증명 도용 과정과 도구를 요약하며, PKINIT을 사용하여 얻은 TGT를 통해 NTLM 해시를 검색하는 데 중점을 두고 있으며, 이 과정을 용이하게 하는 유틸리티에 대해 설명합니다.

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기