hacktricks/windows-hardening/active-directory-methodology/ad-certificates/certificate-theft.md
2024-02-10 15:36:32 +00:00

13 KiB
Raw Blame History

AD CS Zertifikat Diebstahl

Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Dies ist eine kurze Zusammenfassung der Diebstahlkapitel der großartigen Forschung von https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf

Was kann ich mit einem Zertifikat tun

Bevor Sie herausfinden, wie Sie die Zertifikate stehlen können, finden Sie hier einige Informationen darüber, wofür das Zertifikat nützlich ist:

# 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

Exportieren von Zertifikaten mithilfe der Crypto-APIs DIEBSTAHL1

In einer interaktiven Desktop-Sitzung kann das Extrahieren eines Benutzer- oder Maschinenzertifikats zusammen mit dem privaten Schlüssel einfach durchgeführt werden, insbesondere wenn der private Schlüssel exportierbar ist. Dies kann erreicht werden, indem man zum Zertifikat in certmgr.msc navigiert, mit der rechten Maustaste darauf klickt und Alle Aufgaben → Exportieren auswählt, um eine passwortgeschützte .pfx-Datei zu generieren.

Für einen programmatischen Ansatz stehen Tools wie das PowerShell-Cmdlet ExportPfxCertificate oder Projekte wie TheWover's CertStealer C#-Projekt zur Verfügung. Diese nutzen die Microsoft CryptoAPI (CAPI) oder die Cryptography API: Next Generation (CNG), um mit dem Zertifikatsspeicher zu interagieren. Diese APIs bieten eine Reihe von kryptografischen Diensten, einschließlich derjenigen, die für die Zertifikatspeicherung und -authentifizierung erforderlich sind.

Wenn jedoch ein privater Schlüssel als nicht exportierbar festgelegt ist, blockieren sowohl CAPI als auch CNG normalerweise die Extraktion solcher Zertifikate. Um diese Einschränkung zu umgehen, können Tools wie Mimikatz eingesetzt werden. Mimikatz bietet die Befehle crypto::capi und crypto::cng, um die jeweiligen APIs zu patchen und so die Exportierung privater Schlüssel zu ermöglichen. Speziell crypto::capi patcht die CAPI im aktuellen Prozess, während crypto::cng den Speicher von lsass.exe zum Patchen verwendet.

Diebstahl von Benutzerzertifikaten über DPAPI DIEBSTAHL2

Weitere Informationen zu DPAPI finden Sie unter:

{% content-ref url="../../windows-local-privilege-escalation/dpapi-extracting-passwords.md" %} dpapi-extracting-passwords.md {% endcontent-ref %}

In Windows werden private Schlüssel von Zertifikaten durch DPAPI geschützt. Es ist wichtig zu beachten, dass die Speicherorte für Benutzer- und Maschinenprivate Schlüssel unterschiedlich sind und die Dateistrukturen je nach der von dem Betriebssystem verwendeten kryptografischen API variieren. Das Tool SharpDPAPI kann diese Unterschiede automatisch erkennen, wenn es die DPAPI-Blobs entschlüsselt.

Benutzerzertifikate befinden sich hauptsächlich in der Registrierung unter HKEY_CURRENT_USER\SOFTWARE\Microsoft\SystemCertificates, aber einige können auch im Verzeichnis %APPDATA%\Microsoft\SystemCertificates\My\Certificates gefunden werden. Die entsprechenden privaten Schlüssel für diese Zertifikate werden in der Regel in %APPDATA%\Microsoft\Crypto\RSA\User SID\ für CAPI-Schlüssel und %APPDATA%\Microsoft\Crypto\Keys\ für CNG-Schlüssel gespeichert.

Um ein Zertifikat und den zugehörigen privaten Schlüssel zu extrahieren, umfasst der Prozess folgende Schritte:

  1. Auswahl des Zielzertifikats aus dem Speicher des Benutzers und Abrufen des Namen des Schlüsselspeichers.
  2. Auffinden des erforderlichen DPAPI-Meisterkeys, um den entsprechenden privaten Schlüssel zu entschlüsseln.
  3. Entschlüsseln des privaten Schlüssels, indem der Klartext-DPAPI-Meisterkey verwendet wird.

Für das Erhalten des Klartext-DPAPI-Meisterkeys können die folgenden Ansätze verwendet werden:

# 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

Um die Entschlüsselung von Masterkey-Dateien und privaten Schlüsseldateien zu optimieren, erweist sich der Befehl certificates von SharpDPAPI als nützlich. Er akzeptiert /pvk, /mkfile, /password oder {GUID}:KEY als Argumente, um die privaten Schlüssel und zugehörigen Zertifikate zu entschlüsseln und anschließend eine .pem-Datei zu generieren.

# 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

Maschinenzertifikat-Diebstahl über DPAPI THEFT3

Maschinenzertifikate, die von Windows im Registrierungsschlüssel HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates gespeichert werden, und die dazugehörigen privaten Schlüssel, die sich in %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\MachineKeys (für CAPI) und %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\Keys (für CNG) befinden, werden mit den DPAPI-Masterschlüsseln der Maschine verschlüsselt. Diese Schlüssel können nicht mit dem DPAPI-Backup-Schlüssel der Domäne entschlüsselt werden. Stattdessen wird der DPAPI_SYSTEM LSA-Secret benötigt, auf den nur der SYSTEM-Benutzer zugreifen kann.

Die manuelle Entschlüsselung kann durch Ausführen des Befehls lsadump::secrets in Mimikatz erreicht werden, um das DPAPI_SYSTEM LSA-Secret zu extrahieren, und anschließend wird dieser Schlüssel verwendet, um die Maschinen-Masterschlüssel zu entschlüsseln. Alternativ kann der Befehl crypto::certificates /export /systemstore:LOCAL_MACHINE von Mimikatz verwendet werden, nachdem CAPI/CNG wie zuvor beschrieben gepatcht wurde.

SharpDPAPI bietet einen automatisierteren Ansatz mit seinem Befehl certificates. Wenn die Option /machine mit erhöhten Berechtigungen verwendet wird, eskaliert sie zu SYSTEM, dumpet das DPAPI_SYSTEM LSA-Secret, verwendet es zur Entschlüsselung der Maschinen-DPAPI-Masterschlüssel und verwendet dann diese Klartextschlüssel als Suchtabelle zur Entschlüsselung beliebiger privater Maschinenzertifikatsschlüssel.

Auffinden von Zertifikatdateien THEFT4

Zertifikate werden manchmal direkt im Dateisystem gefunden, z. B. in Dateifreigaben oder im Download-Ordner. Die am häufigsten in Windows-Umgebungen anzutreffenden Arten von Zertifikatdateien sind .pfx- und .p12-Dateien. Weniger häufig treten auch Dateien mit den Erweiterungen .pkcs12 und .pem auf. Weitere bemerkenswerte Zertifikatdateierweiterungen sind:

  • .key für private Schlüssel,
  • .crt/.cer nur für Zertifikate,
  • .csr für Zertifikatanforderungen, die keine Zertifikate oder privaten Schlüssel enthalten,
  • .jks/.keystore/.keys für Java Key Stores, die Zertifikate zusammen mit privaten Schlüsseln enthalten können, die von Java-Anwendungen verwendet werden.

Diese Dateien können mit PowerShell oder der Eingabeaufforderung durch Suche nach den genannten Erweiterungen gesucht werden.

In Fällen, in denen eine PKCS#12-Zertifikatdatei gefunden wird und sie durch ein Passwort geschützt ist, ist es möglich, den Hash durch Verwendung von pfx2john.py zu extrahieren, das auf fossies.org verfügbar ist. Anschließend kann JohnTheRipper verwendet werden, um zu versuchen, das Passwort zu knacken.

# 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-Anmeldeinformationen-Diebstahl über PKINIT THEFT5

Der folgende Inhalt erklärt eine Methode für den Diebstahl von NTLM-Anmeldeinformationen über PKINIT, speziell durch die als THEFT5 bezeichnete Diebstahlsmethode. Hier ist eine erneute Erklärung in der Passivform, wobei der Inhalt anonymisiert und gegebenenfalls zusammengefasst wird:

Um die NTLM-Authentifizierung [MS-NLMP] für Anwendungen zu unterstützen, die keine Kerberos-Authentifizierung ermöglichen, ist der KDC so konzipiert, dass er die NTLM-Einwegfunktion (OWF) des Benutzers im Privileg-Attribut-Zertifikat (PAC) zurückgibt, speziell im PAC_CREDENTIAL_INFO-Puffer, wenn PKCA verwendet wird. Folglich wird, wenn ein Konto sich über PKINIT authentifiziert und ein Ticket-Granting Ticket (TGT) sichert, automatisch ein Mechanismus bereitgestellt, der es dem aktuellen Host ermöglicht, den NTLM-Hash aus dem TGT zu extrahieren, um veraltete Authentifizierungsprotokolle aufrechtzuerhalten. Dieser Prozess beinhaltet die Entschlüsselung der PAC_CREDENTIAL_DATA-Struktur, die im Wesentlichen eine NDR-serialisierte Darstellung des NTLM-Klartexts ist.

Das Dienstprogramm Kekeo, erreichbar unter https://github.com/gentilkiwi/kekeo, wird als in der Lage erwähnt, ein TGT anzufordern, das diese spezifischen Daten enthält und somit die Wiederherstellung des NTLM des Benutzers ermöglicht. Der für diesen Zweck verwendete Befehl lautet wie folgt:

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

Zusätzlich wird darauf hingewiesen, dass Kekeo Zertifikate, die durch Smartcards geschützt sind, verarbeiten kann, sofern die PIN abgerufen werden kann. Hierzu wird auf https://github.com/CCob/PinSwipe verwiesen. Die gleiche Funktionalität wird auch von Rubeus unterstützt, das unter https://github.com/GhostPack/Rubeus verfügbar ist.

Diese Erklärung umfasst den Prozess und die Tools, die bei der NTLM-Anmeldeinformationen-Diebstahl über PKINIT beteiligt sind. Dabei liegt der Fokus auf dem Abrufen von NTLM-Hashes über TGT, die mit PKINIT erhalten wurden, sowie den Dienstprogrammen, die diesen Prozess erleichtern.

Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen: