
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.