
Forjar certificados para autenticación en Active Directory utilizando claves privadas de una Autoridad de Certificación robadas, permitiendo acceso persistente al dominio con archivos .pfx falsificados.
ForgeCert utiliza la API de BouncyCastle C# y un certificado de Autoridad de Certificación (CA) robado + clave privada para falsificar certificados para usuarios arbitrarios capaces de autenticarse en Active Directory.
Este ataque está codificado como DPERSIST1 en nuestro documento técnico "Certified Pre-Owned". Esta base de código se publicó ~45 días después de la publicación del documento.
@tifkin_ es el autor principal de ForgeCert.
@tifkin_ y @harmj0y son los autores principales de la investigación asociada sobre el Servicio de Certificados de Active Directory (blog y documento técnico).
Como se describe en las secciones Background y Forging Certificates with Stolen CA Certificates - DPERSIST1 de nuestro documento técnico, la clave privada del certificado de CA de una Autoridad de Certificación está protegida en el servidor de CA mediante DPAPI o hardware (HSM/TPM). Además, el certificado (sin la clave privada) se publica en el objeto de bosque , que define los certificados de CA que permiten la autenticación en AD. En conjunto, una CA cuyo certificado está presente en utiliza su clave privada para firmar las solicitudes de firma de certificados (CSR) de los clientes solicitantes. Este gráfico resume el proceso:

La seguridad de la clave privada de la CA es primordial. Como se mencionó, si la clave privada no está protegida por una solución de hardware como un TPM o un HSM, la clave se cifrará con la API de Protección de Datos (DPAPI) y se almacenará en disco en el servidor de CA. Si un atacante logra comprometer un servidor de CA, puede extraer la clave privada de cualquier certificado de CA no protegido por hardware utilizando el proyecto Mimikatz de @gentilkiwi o SharpDPAPI de GhostPack. THEFT3 en el documento técnico describe este proceso para certificados de máquina.
Debido a que el único material de clave utilizado para firmar los certificados emitidos es la clave privada de la CA, si un atacante roba dicha clave (para un certificado en NTAuthCertificates) puede falsificar certificados capaces de autenticación en el dominio. Estos certificados falsificados pueden ser para cualquier principal en el dominio (aunque la cuenta debe estar "activa" para que la autenticación sea posible, por lo que cuentas como krbtgt no funcionarán) y los certificados serán válidos mientras el certificado de CA sea válido (normalmente 5 años por defecto, pero puede configurarse para que sea más largo).
Además, como estos certificados no son producto del proceso de emisión normal, la CA no sabe que fueron creados. Por lo tanto, los certificados no pueden revocarse.
Nota: la clave privada de CUALQUIER certificado de CA en NTAuthCertificates (CA raíz o subordinada) se puede utilizar para falsificar certificados capaces de autenticación en el bosque. Si el certificado/clave proviene de una CA subordinada, se debe proporcionar una CRL legítima para la verificación de la cadena de certificados.
ForgeCert utiliza el X509V3CertificateGenerator de BouncyCastle para realizar las falsificaciones.
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.
Nota: para obtener una guía completa sobre cómo robar una clave privada de CA y falsificar certificados de autenticación, consulte DPERSIST1 en el documento técnico.
Contexto:
ca.pfx, cifrado con una contraseña de Password123![email protected].localadmin.pfx, cifrado con la contraseña 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!'
Esta falsificación se puede realizar en un sistema controlado por el atacante, y el certificado resultante se puede utilizar con Rubeus para solicitar un TGT (y/o recuperar el NTLM del usuario ;)
El TypeRefHash de la base de código actual de ForgeCert es b26b451ff2c947ae5904f962e56facbb45269995fbb813070386472f307cfcf0.
El GUID de TypeLib de ForgeCert es bd346689-8ee6-40b3-858b-4ed94f08d40a. Esto se refleja en las reglas Yara actualmente en este repositorio.
Consulte PREVENT1, DETECT3 y DETECT5 en nuestro documento técnico para obtener orientación sobre prevención y detección.
Fabian Bader publicó una excelente publicación sobre cómo mitigar muchos usos de los "Golden Certificates" mediante ajustes en el OCSP de Microsoft. Sin embargo, tenga en cuenta que en la sección de Reflexiones finales menciona: 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. Esto se implementó en su PR, aunque recuerde que, de forma predeterminada, el número de serie se aleatorizará, lo que significa que la prevención de OSCP debería funcionar en muchos casos y vale la pena implementarla en nuestra opinión.
Creemos que puede haber oportunidades para construir reglas Yara/de otra detección para los tipos de certificados falsificados que produce este proyecto; si algún investigador defensivo encuentra una buena manera de firmar estos archivos, por favor infórmenos y actualizaremos las reglas Yara/la orientación defensiva aquí.
Existe un paralelo claro entre los "Golden Tickets" (TGT falsificados) y estos "Golden Certificates" (certificados AD CS falsificados). Tanto el hash de krbtgt como la clave privada de la CA son material criptográfico crítico para la seguridad de un entorno de Active Directory, y ambos pueden utilizarse para falsificar autenticadores para usuarios arbitrarios. Sin embargo, mientras que el hash de krbtgt se puede recuperar de forma remota a través de DCSync, una clave privada de CA debe (al menos hasta donde sabemos) recuperarse mediante ejecución de código en la propia máquina de CA. Mientras que un hash de krbtgt se puede rotar relativamente fácil, rotar una clave privada de CA es significativamente más difícil.
En cuanto a la divulgación pública, autoembargamos el lanzamiento de nuestras herramientas ofensivas (ForgeCert así como Certify) durante ~45 días después de publicar nuestro documento técnico para dar a las organizaciones la oportunidad de abordar los problemas relacionados con los Servicios de Certificados de Active Directory. Sin embargo, hemos descubierto que las organizaciones y los proveedores históricamente a menudo no han corregido problemas ni creado detecciones para ataques "teóricos" hasta que alguien demuestra que algo es posible con una prueba de concepto.
Esto se refleja en la reacción de algunas personas a la investigación de this IS StUPId, oF COurse YoU Can FORge CERts WITH ThE ca PriVAtE KeY. A lo cual afirmamos, sí, muchas cosas son posibles, pero PoC||GTFO