
Fälschen Sie Zertifikate für die Active Directory-Authentifizierung unter Verwendung gestohlener privater Schlüssel der Zertifizierungsstelle, um mit gefälschten .pfx-Dateien dauerhaften Domänenzugriff zu erlangen.
ForgeCert verwendet die BouncyCastle C# API und ein gestohlenes Zertifikat einer Zertifizierungsstelle (CA) zusammen mit dem privaten Schlüssel, um Zertifikate für beliebige Benutzer zu fälschen, die zur Authentifizierung bei Active Directory berechtigt sind.
Dieser Angriff ist als DPERSIST1 in unserem „Certified Pre-Owned“ Whitepaper festgehalten. Diese Codebasis wurde etwa 45 Tage nach der Veröffentlichung des Whitepapers freigegeben.
@tifkin_ ist der Hauptautor von ForgeCert.
@tifkin_ und @harmj0y sind die Hauptautoren der zugehörigen Forschung zu Active Directory-Zertifikatsdiensten (Blog und Whitepaper).
Wie in den Abschnitten Background und Forging Certificates with Stolen CA Certificates - DPERSIST1 unseres Whitepapers beschrieben, wird der private Schlüssel für das CA-Zertifikat einer Zertifizierungsstelle auf dem CA-Server entweder über DPAPI oder Hardware (HSM/TPM) geschützt. Zusätzlich wird das Zertifikat (ohne privaten Schlüssel) im NTAuthCertificates-Gesamtstrukturobjekt veröffentlicht, das CA-Zertifikate definiert, die die Authentifizierung bei AD ermöglichen. Zusammengenommen verwendet eine CA, deren Zertifikat in NTAuthCertificates vorhanden ist, ihren privaten Schlüssel, um Zertifikatsignieranforderungen (CSRs) von anfordernden Clients zu signieren. Diese Grafik fasst den Prozess zusammen:

Die Sicherheit des privaten Schlüssels der CA ist von größter Bedeutung. Wie erwähnt, wird der Schlüssel, sofern er nicht durch eine Hardwarelösung wie TPM oder HSM geschützt ist, mit der Data Protection API (DPAPI) verschlüsselt und auf der Festplatte des CA-Servers gespeichert. Wenn ein Angreifer in der Lage ist, einen CA-Server zu kompromittieren, kann er den privaten Schlüssel für jedes CA-Zertifikat, das nicht durch Hardware geschützt ist, extrahieren, indem er @gentilkiwis Mimikatz oder GhostPacks SharpDPAPI-Projekt verwendet. THEFT3 im Whitepaper beschreibt diesen Prozess für Maschinenzertifikate.
Da das einzige Schlüsselmaterial, das zum Signieren ausgestellter Zertifikate verwendet wird, der private Schlüssel der CA ist, kann ein Angreifer, der einen solchen Schlüssel stiehlt (für ein Zertifikat in NTAuthCertificates), Zertifikate fälschen, die eine Domänenauthentifizierung ermöglichen. Diese gefälschten Zertifikate können für jeden Principal in der Domäne ausgestellt werden (wobei das Konto für die Authentifizierung „aktiv“ sein muss, sodass Konten wie krbtgt nicht funktionieren), und die Zertifikate sind so lange gültig wie das CA-Zertifikat (standardmäßig normalerweise 5 Jahre, kann aber auch länger eingestellt werden).
Da diese Zertifikate nicht aus dem normalen Ausstellungsprozess stammen, ist der CA nicht bekannt, dass sie erstellt wurden. Daher können die Zertifikate nicht widerrufen werden.
Hinweis: Der private Schlüssel für ein beliebiges CA-Zertifikat in NTAuthCertificates (Stamm- oder untergeordnete CA) kann verwendet werden, um Zertifikate zu fälschen, die eine Authentifizierung in der Gesamtstruktur ermöglichen. Wenn das Zertifikat/der Schlüssel von einer untergeordneten CA stammt, muss eine legitime CRL zur Überprüfung der Zertifikatskette bereitgestellt werden.
ForgeCert verwendet den BouncyCastle's X509V3CertificateGenerator zur Durchführung der Fälschungen.
C:\Temp>ForgeCert.exe
ForgeCert 1.0.0.0
Copyright c 2021
ERROR(S):
Required option 'CaCertPath' is missing.
Required option 'SubjectAltName' is missing.
Required option 'NewCertPath' is missing.
Required option 'NewCertPassword' is missing.
--CaCertPath Required. CA private key as a .pfx or .p12 file
--CaCertPassword Password to the CA private key file
--Subject (Default: CN=User) Subject name in the certificate
--SubjectAltName Required. UPN of the user to authenticate as
--NewCertPath Required. Path where to save the new .pfx certificate
--NewCertPassword Required. Password to the .pfx file
--CRL ldap path to a CRL for the forged certificate
--help Display this help screen.
--version Display version information.
Hinweis: Eine vollständige Anleitung zum Stehlen eines CA-privaten Schlüssels und zum Fälschen von Authentifizierungszertifikaten finden Sie unter DPERSIST1 im Whitepaper.
Kontext:
ca.pfx, verschlüsselt mit dem Passwort Password123![email protected].localadmin.pfx gespeichert, verschlüsselt mit dem Passwort NewPassword123!C:\Tools\ForgeCert>ForgeCert.exe --CaCertPath ca.pfx --CaCertPassword "Password123!" --Subject "CN=User" --SubjectAltName "[email protected]" --NewCertPath localadmin.pfx --NewCertPassword "NewPassword123!"
CA Certificate Information:
Subject: CN=theshire-DC-CA, DC=theshire, DC=local
Issuer: CN=theshire-DC-CA, DC=theshire, DC=local
Start Date: 1/4/2021 10:48:02 AM
End Date: 1/4/2026 10:58:02 AM
Thumbprint: 187D81530E1ADBB6B8B9B961EAADC1F597E6D6A2
Serial: 14BFC25F2B6EEDA94404D5A5B0F33E21
Forged Certificate Information:
Subject: CN=User
SubjectAltName: [email protected]
Issuer: CN=theshire-DC-CA, DC=theshire, DC=local
Start Date: 7/26/2021 3:38:45 PM
End Date: 7/26/2022 3:38:45 PM
Thumbprint: C5789A24E91A40819EFF7CFD77150595F8B9878D
Serial: 3627A48F90F6869C3215FF05BC3B2E42
Done. Saved forged certificate to localadmin.pfx with the password 'NewPassword123!'
Diese Fälschung kann auf einem vom Angreifer kontrollierten System durchgeführt werden, und das resultierende Zertifikat kann mit Rubeus verwendet werden, um ein TGT anzufordern (und/oder das NTLM des Benutzers abzurufen ;)
Der TypeRefHash der aktuellen ForgeCert-Codebasis lautet b26b451ff2c947ae5904f962e56facbb45269995fbb813070386472f307cfcf0.
Die TypeLib-GUID von ForgeCert ist bd346689-8ee6-40b3-858b-4ed94f08d40a. Dies spiegelt sich in den derzeit in diesem Repository enthaltenen Yara-Regeln wider.
Informationen zu Präventions- und Erkennungsrichtlinien finden Sie unter PREVENT1, DETECT3 und DETECT5 in unserem Whitepaper.
Fabian Bader veröffentlichte einen hervorragenden Beitrag darüber, wie viele Verwendungen von „Golden Certificates“ durch Anpassungen am Microsoft OCSP eingeschränkt werden können. Beachten Sie jedoch, dass er im Abschnitt Final Thoughts erwähnt: This method is not bulletproof at all. Since the attacker is in charge of the certificate creation process, she could just change the serial number to a valid one. Dies wurde in seinem PR implementiert, aber denken Sie daran, dass die Seriennummer standardmäßig zufällig vergeben wird, was bedeutet, dass die OSCP-Prävention in vielen Fällen funktionieren sollte und unserer Meinung nach eine Implementierung wert ist.
Wir glauben, dass es Möglichkeiten gibt, Yara-/andere Erkennungsregeln für die Arten von gefälschten Zertifikaten zu erstellen, die dieses Projekt hervorbringt – falls defensive Forscher einen guten Weg finden, Signaturen für diese Dateien zu erstellen, lassen Sie es uns bitte wissen, und wir werden die Yara-Regeln/Verteidigungsrichtlinien hier aktualisieren.
Es gibt eine deutliche Parallele zwischen „Golden Tickets“ (gefälschten TGTs) und diesen „Golden Certificates“ (gefälschte AD CS-Zertifikate). Sowohl der krbtgt-Hash als auch der private CA-Schlüssel sind kryptografische Materialien, die für die Sicherheit einer Active Directory-Umgebung kritisch sind, und beide können verwendet werden, um Authentifikatoren für beliebige Benutzer zu fälschen. Während der krbtgt-Hash jedoch remote über DCSync abgerufen werden kann, muss ein privater CA-Schlüssel (zumindest nach unserem Kenntnisstand) durch Codeausführung auf der CA-Maschine selbst wiederhergestellt werden. Während ein krbtgt-Hash relativ einfach rotiert werden kann, ist das Rotieren eines privaten CA-Schlüssels erheblich schwieriger.
Zum Thema öffentliche Offenlegung: Wir haben die Veröffentlichung unserer offensiven Werkzeuge (ForgeCert sowie Certify) für etwa 45 Tage nach der Veröffentlichung unseres Whitepapers selbst zurückgehalten, um Organisationen die Möglichkeit zu geben, die Probleme im Zusammenhang mit Active Directory-Zertifikatsdiensten in den Griff zu bekommen. Wir haben jedoch festgestellt, dass Organisationen und Hersteller historisch gesehen oft keine Probleme behoben oder Erkennungen für ‚theoretische‘ Angriffe entwickelt haben, bis jemand mit einem Proof of Concept beweist, dass etwas möglich ist.
Dies spiegelt sich in der Reaktion einiger Leute auf die Forschung wider: this IS StUPId, oF COurse YoU Can FORge CERts WITH ThE ca PriVAtE KeY. Darauf antworten wir: Ja, viele Dinge sind möglich, aber PoC||GTFO