AD CS Certificate Theft
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 ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
์ด๊ฒ์ https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf์์์ ํ๋ฅญํ ์ฐ๊ตฌ์ ๋๋ ์ฅ์ ๋ํ ๊ฐ๋จํ ์์ฝ์ ๋๋ค.
์ธ์ฆ์๋ก ๋ฌด์์ ํ ์ ์๋์
์ธ์ฆ์๋ฅผ ํ์น๋ ๋ฐฉ๋ฒ์ ํ์ธํ๊ธฐ ์ ์, ์ธ์ฆ์๊ฐ ๋ฌด์์ ์ ์ฉํ์ง ์ฐพ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ ๋ณด๊ฐ ์์ต๋๋ค:
# 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::capi ๋ฐ crypto::cng ๋ช
๋ น์ ์ ๊ณตํฉ๋๋ค. ๊ตฌ์ฒด์ ์ผ๋ก, crypto::capi๋ ํ์ฌ ํ๋ก์ธ์ค ๋ด์ CAPI๋ฅผ ํจ์นํ๊ณ , crypto::cng๋ ํจ์น๋ฅผ ์ํด lsass.exe์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๊ฒํ
ํฉ๋๋ค.
User Certificate Theft via DPAPI โ THEFT2
More info about DPAPI in:
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:
- ๋์ ์ธ์ฆ์ ์ ํ ์ฌ์ฉ์์ ์ ์ฅ์์์ ํค ์ ์ฅ์ ์ด๋ฆ์ ๊ฒ์ํฉ๋๋ค.
- ํด๋น ๊ฐ์ธ ํค๋ฅผ ํด๋ ํ๊ธฐ ์ํ DPAPI ๋ง์คํฐ ํค ์ฐพ๊ธฐ.
- ํ๋ฌธ DPAPI ๋ง์คํฐ ํค๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ธ ํค ํด๋ ํ๊ธฐ.
For acquiring the plaintext DPAPI masterkey, the following approaches can be used:
# 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
๋ง์คํฐํค ํ์ผ๊ณผ ๊ฐ์ธ ํค ํ์ผ์ ๋ณตํธํ๋ฅผ ๊ฐ์ํํ๊ธฐ ์ํด, SharpDPAPI์ certificates ๋ช
๋ น์ด ์ ์ฉํฉ๋๋ค. ์ด ๋ช
๋ น์ ๊ฐ์ธ ํค์ ์ฐ๊ฒฐ๋ ์ธ์ฆ์๋ฅผ ๋ณตํธํํ๊ธฐ ์ํด /pvk, /mkfile, /password ๋๋ {GUID}:KEY๋ฅผ ์ธ์๋ก ๋ฐ์๋ค์ฌ, ์ดํ .pem ํ์ผ์ ์์ฑํฉ๋๋ค.
# 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๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋ฐ๋ฒํธ๋ฅผ ํฌ๋ํ๋ ค๊ณ ์๋ํ ์ ์์ต๋๋ค.
# 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 ๊ตฌ์กฐ์ฒด์ ๋ณตํธํ๋ฅผ ํฌํจํฉ๋๋ค.
์ ํธ๋ฆฌํฐ Kekeo๋ https://github.com/gentilkiwi/kekeo์์ ์ ๊ทผํ ์ ์์ผ๋ฉฐ, ์ด ํน์ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ TGT๋ฅผ ์์ฒญํ ์ ์๋ ๊ธฐ๋ฅ์ด ์ธ๊ธ๋์ด ์์ด ์ฌ์ฉ์์ NTLM์ ๊ฒ์ํ๋ ๋ฐ ๋์์ ์ค๋๋ค. ์ด ๋ชฉ์ ์ ์ํด ์ฌ์ฉ๋๋ ๋ช ๋ น์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
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 ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


