
Kit de herramientas de PowerShell para auditoría de AD CS basado en el kit de herramientas PSPKI.
Kit de herramientas de PowerShell para auditar Active Directory Certificate Services (AD CS).
Está construido sobre el kit de herramientas PSPKI (Microsoft Public License) de PKISolution. Este repositorio contiene una versión más reciente de PSPKI que la disponible en PSGallery (consulte el directorio PSPKI). Vadims Podans (el creador de PSPKI) proporcionó amablemente esta versión, ya que incluye correcciones para varios errores.
Este README es solo un punto de partida; para obtener detalles completos y orientación defensiva, consulte el libro blanco "Certified Pre-Owned".
El módulo contiene las siguientes funciones principales:
ADVERTENCIA: ¡Este código es beta! Confiamos en que Invoke-PKIAudit no afectará el entorno, ya que la cantidad de datos que consulta es bastante limitada. No hemos realizado pruebas rigurosas con Get-CertRequest en cargas de trabajo típicas de servidores CA. Get-CertRequest consulta directamente la base de datos de la CA y puede tener que procesar miles de resultados, lo que podría afectar el rendimiento.
¡SI NO HAY RESULTADOS, ESTO NO ES UNA GARANTÍA DE QUE SU ENTORNO ES SEGURO!
¡TAMPOCO PODEMOS GARANTIZAR QUE NUESTRO CONSEJO DE MITIGACIÓN HARÁ QUE SU ENTORNO SEA SEGURO O NO INTERRUMPIRÁ LAS OPERACIONES!
Es su responsabilidad hablar con su(s) equipo(s) de Active Directory/PKI/Arquitectura para determinar las mejores mitigaciones para su entorno.
Si el código se rompe, o si omitimos algo, ¡por favor envíe un issue o pull request para una solución!
Instale lo siguiente en una máquina Windows usando un símbolo del sistema de PowerShell elevado (PowerShell versión 5.1 o superior):
* El [PSPKI PowerShell module](https://github.com/PKISolutions/PSPKI). Instale con el siguiente comando:```
Install-Module -Name PSPKI
Descarga el módulo y extráelo en una carpeta. Luego, importa el módulo usando los siguientes comandos:``` cd PSPKIAudit Get-ChildItem -Recurse | Unblock-File
Import-Module .\PSPKIAudit.psd1
# Auditoría de configuraciones incorrectas de AD CS
Al ejecutar `Invoke-PKIAudit` se ejecutarán todas las comprobaciones de auditoría contra AD CS en el dominio actual, incluyendo la enumeración de varias configuraciones de la entidad de certificación y de la plantilla de certificado. Para auditar una CA específica, puede ejecutar `Invoke-PKIAudit -CAComputerName CA.DOMAIN.COM` o `Invoke-PKIAudit -CAName X-Y-Z`.
Cualquier configuración incorrecta (ESC1-8) aparecerá como propiedades en los resultados de la CA/plantilla mostrados para identificar la configuración incorrecta específica encontrada.
Si desea cambiar los grupos/usuarios utilizados para probar la inscripción/control de acceso, modifique la expresión regular `$CommonLowprivPrincipals` en la parte superior de `Invoke-PKIAudit.ps1`
Si desea exportar toda la información de la CA a un csv, ejecute: `Get-AuditCertificateAuthority [-CAComputerName CA.DOMAIN.COM | -CAName X-Y-Z] | Export-Csv -NoTypeInformation CAs.csv`
Si desea exportar TODA la información de las plantillas publicadas a un csv (no solo las plantillas vulnerables), ejecute: `Get-AuditCertificateTemplate [-CAComputerName CA.DOMAIN.COM | -CAName X-Y-Z] | Export-Csv -NoTypeInformation templates.csv`
## Explicación de la salida
Hay dos secciones principales de salida: detalles sobre las CA descubiertas y detalles sobre plantillas potencialmente vulnerables.
Para los resultados de la entidad de certificación:
| Propiedad de la entidad de certificación | Descripción |
| ------------------------------ | ------------------------------------------------------------------ |
| ComputerName | El sistema en el que se ejecuta la CA. |
| CAName | El nombre de la CA. |
| ConfigString | La cadena de configuración completa COMPUTER\CA_NAME. |
| IsRoot | Si la CA es una CA raíz. |
| AllowsUserSuppliedSans | Si la CA tiene el indicador `EDITF_ATTRIBUTESUBJECTALTNAME2` establecido. |
| VulnerableACL | Indica si la CA tiene una configuración de ACL vulnerable. |
| EnrollmentPrincipals | Principales que tienen el privilegio `Enroll` a nivel de CA. |
| EnrollmentEndpoints | Los puntos finales de inscripción de servicios web de la CA. |
| NTLMEnrollmentEndpoints | Los puntos finales de inscripción de servicios web de la CA que tienen NTLM habilitado. |
| DACL | La información completa de control de acceso. |
| Misconfigurations | ESCX que indica la configuración incorrecta específica presente (si la hay). |
Para los resultados de la plantilla de certificado:
| Propiedad | Descripción |
| ----------------------- | -------------------------------------------------------------------------------------------------------- |
| CA | El ConfigString completo de la CA en la que se publica la plantilla (nulo si no está publicada). |
| Name | El nombre de la plantilla. |
| SchemaVersion | La versión del esquema (1/2/3) de la plantilla. |
| OID | El identificador único de objeto para la plantilla. |
| VulnerableTemplateACL | True si la plantilla tiene una configuración de ACL vulnerable. |
| LowPrivCanEnroll | True si los usuarios con pocos privilegios pueden inscribirse en la plantilla. |
| EnrolleeSuppliesSubject | True si el indicador `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` está presente (es decir, los usuarios pueden proporcionar SAN arbitrarias). |
| EnhancedKeyUsage | Los EKU de uso habilitados en la plantilla. |
| HasAuthenticationEku | True si la plantilla tiene un EKU que permite la autenticación. |
| HasDangerousEku | True si la plantilla tiene un EKU "peligroso" (Any Purpose o nulo). |
| EnrollmentAgentTemplate | True si la plantilla tiene el EKU "Certificate Request Agent". |
| CAManagerApproval | True si se necesita la aprobación del administrador para la inscripción. |
| IssuanceRequirements | Información de firma autorizada. |
| ValidityPeriod | Período de validez del certificado. |
| RenewalPeriod | El período de renovación del certificado. |
| Owner | El principal que posee el certificado. |
| DACL | La información completa de control de acceso. |
| Misconfigurations | ESCX que indica la configuración incorrecta específica presente (si la hay). |
## ESC1 - Plantillas de certificado mal configuradas
### Details <!-- omit in toc -->
Este escenario de escalada de privilegios ocurre cuando se cumplen las siguientes condiciones:
1. **La CA empresarial concede derechos de inscripción a usuarios con pocos privilegios.** La configuración de la CA empresarial debe permitir que los usuarios con pocos privilegios puedan solicitar certificados. Consulte la sección "Antecedentes - Inscripción" al comienzo del documento técnico para obtener más detalles.
2. **La aprobación del administrador está deshabilitada.** Esta configuración requiere que un usuario con permisos de "administrador" de certificados revise y apruebe el certificado solicitado antes de que se emita. Consulte la sección "Antecedentes - Requisitos de emisión" al comienzo del documento técnico para obtener más detalles.
3. **No se requieren firmas autorizadas.** Esta configuración requiere que cualquier CSR esté firmada por un certificado autorizado existente. Consulte la sección "Antecedentes - Requisitos de emisión" al comienzo del documento técnico para obtener más detalles.
4. **Un descriptor de seguridad de plantilla de certificado excesivamente permisivo otorga derechos de inscripción de certificados a usuarios con pocos privilegios.** Tener derechos de inscripción de certificados permite a un atacante con pocos privilegios solicitar y obtener un certificado basado en la plantilla. Los derechos de inscripción se otorgan a través del descriptor de seguridad del objeto AD de la plantilla de certificado.
5. **La plantilla de certificado define EKU que permiten la autenticación.** Los EKU aplicables incluyen Autenticación de cliente (OID 1.3.6.1.5.5.7.3.2), Autenticación de cliente PKINIT (OID 1.3.6.1.5.2.3.4) o Inicio de sesión con tarjeta inteligente (OID 1.3.6.1.4.1.311.20.2.2).
6. **La plantilla de certificado permite a los solicitantes especificar un subjectAltName (SAN) en la CSR.** Si un solicitante puede especificar la SAN en una CSR, puede solicitar un certificado como cualquier persona (por ejemplo, un usuario administrador de dominio). El objeto AD de la plantilla de certificado especifica si el solicitante puede especificar la SAN en su propiedad mspki-certificate-name-flag. La propiedad mspki-certificate-name-flag es una máscara de bits y si el indicador CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT está presente, un solicitante puede especificar la SAN.
**TL;DR** Esta situación significa que un usuario sin privilegios puede solicitar un certificado que puede usarse para la autenticación de dominio, donde pueden especificar un nombre alternativo arbitrario (como un administrador de dominio). ¡Esto puede resultar en un certificado funcional para un usuario elevado como un administrador de dominio!
### Example <!-- omit in toc -->```
[!] Potentially vulnerable Certificate Templates:
CA : dc.theshire.local\theshire-DC-CA
Name : ESC1Template
SchemaVersion : 2
OID : ESC1 Template (1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.10657968.9897558)
VulnerableTemplateACL : False
LowPrivCanEnroll : True
EnrolleeSuppliesSubject : True
EnhancedKeyUsage : Client Authentication (1.3.6.1.5.5.7.3.2)|Secure Email (1.3.6.1.5.5.7.3.4)|Encrypting File System (1.3.6.1.4.1.311.10.3.4)
HasAuthenticationEku : True
HasDangerousEku : False
EnrollmentAgentTemplate : False
CAManagerApproval : False
IssuanceRequirements : [Issuance Requirements]
Authorized signature count: 0
Reenrollment requires: same criteria as for enrollment.
ValidityPeriod : 1 years
RenewalPeriod : 6 weeks
Owner : THESHIRE\localadmin
DACL : NT AUTHORITY\Authenticated Users (Allow) - Read
THESHIRE\Domain Admins (Allow) - Read, Write, Enroll
THESHIRE\Domain Users (Allow) - Enroll
THESHIRE\Enterprise Admins (Allow) - Read, Write, Enroll
THESHIRE\localadmin (Allow) - Read, Write
Misconfigurations : ESC1
Hay algunas opciones. Primero, haga clic derecho en la plantilla de certificado afectada en la Consola de Plantillas de Certificado (certtmpl.msc) y haga clic en "Propiedades"
Este escenario de escalada de privilegios ocurre cuando se cumplen las siguientes condiciones:
La CA empresarial otorga derechos de inscripción a usuarios con pocos privilegios. Los detalles son los mismos que en ESC1.
La aprobación del administrador está deshabilitada. Los detalles son los mismos que en ESC1.
No se requieren firmas autorizadas. Los detalles son los mismos que en ESC1.
Un descriptor de seguridad de plantilla de certificado demasiado permisivo otorga derechos de inscripción de certificados a usuarios con pocos privilegios. Los detalles son los mismos que en ESC1.
La plantilla de certificado define EKU de cualquier propósito o ningún EKU. El EKU de Cualquier Propósito (OID 2.5.29.37.0) se puede usar para (¡sorpresa!) cualquier propósito, incluida la autenticación de cliente. Si no se especifican EKU, es decir, si pkiextendedkeyusage está vacío o el atributo no existe, entonces el certificado es equivalente a un certificado de CA subordinada y se puede usar para cualquier cosa.
TL;DR Esto es muy similar a ESC1, sin embargo, con el EKU de Cualquier Propósito o sin EKU, no es necesario que esté presente el indicador CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT.
[!] Potentially vulnerable Certificate Templates:
CA : dc.theshire.local\theshire-DC-CA Name : ESC2Template SchemaVersion : 2 OID : ESC2 Template (1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.7730030.4389735) VulnerableTemplateACL : False LowPrivCanEnroll : True EnrolleeSuppliesSubject : False EnhancedKeyUsage : HasAuthenticationEku : True HasDangerousEku : True EnrollmentAgentTemplate : False CAManagerApproval : False IssuanceRequirements : [Issuance Requirements] Authorized signature count: 0 Reenrollment requires: same criteria as for enrollment. ValidityPeriod : 1 years RenewalPeriod : 6 weeks Owner : THESHIRE\localadmin DACL : NT AUTHORITY\Authenticated Users (Allow) - Read THESHIRE\Domain Admins (Allow) - Read, Write, Enroll THESHIRE\Domain Users (Allow) - Enroll THESHIRE\Enterprise Admins (Allow) - Read, Write, Enroll THESHIRE\localadmin (Allow) - Read, Write Misconfigurations : ESC2
### Mitigations <!-- omit in toc -->
Hay algunas opciones. Primero, haga clic derecho en la plantilla de certificado afectada en la Consola de Plantillas de Certificado (certtmpl.msc) y haga clic en "Propiedades"
1. Eliminar la capacidad de los usuarios con pocos privilegios para inscribirse en esta plantilla a través de "Seguridad" y eliminar el privilegio **Inscribir** correspondiente.
* Esta es probablemente la mejor solución, ya que estas EKU sensibles no deberían estar disponibles para usuarios con pocos privilegios.
2. Habilitar **"Aprobación del administrador de certificados de la CA"** en "Requisitos de emisión".
* Esto coloca las solicitudes de esta plantilla en la cola de "Solicitudes pendientes" que deben ser aprobadas manualmente por un administrador de certificados.
3. Habilitar **"Firmas autorizadas"** en "Requisitos de emisión" (si sabe lo que está haciendo).
* Esto obliga a que las CSR sean cofirmadas por un certificado de agente de inscripción.
## ESC3 - Plantillas de Agente de Inscripción Mal Configuradas
### Details <!-- omit in toc -->
Este escenario de escalada de privilegios ocurre cuando se cumplen las siguientes condiciones:
1. **La CA empresarial otorga derechos de inscripción a usuarios con pocos privilegios.** Los detalles son los mismos que en ESC1.
2. **La aprobación del administrador está deshabilitada.** Los detalles son los mismos que en ESC1.
3. **No se requieren firmas autorizadas.** Los detalles son los mismos que en ESC1.
4. **Un descriptor de seguridad de plantilla de certificado demasiado permisivo otorga derechos de inscripción de certificados a usuarios con pocos privilegios.** Los detalles son los mismos que en ESC1.
5. **La plantilla de certificado define la EKU de Agente de Solicitud de Certificado.** La EKU de Agente de Solicitud de Certificado (OID 1.3.6.1.4.1.311.20.2.1) permite a una entidad inscribirse en _otra_ plantilla de certificado en nombre de otro usuario.
6. **Las restricciones de agentes de inscripción no están implementadas en la CA.**
**TL;DR** Alguien con un certificado de Agente de Solicitud de Certificado (también conocido como Agente de Inscripción) puede inscribirse en otros certificados en nombre de cualquier usuario del dominio, para cualquier plantilla de Esquema Versión 1 o cualquier plantilla de Esquema Versión 2+ que requiera el requisito de emisión adecuado de "Firmas autorizadas/Política de aplicación", a menos que las "Restricciones de agente de inscripción" estén implementadas a nivel de la CA.
### Example <!-- omit in toc -->```
[!] Potentially vulnerable Certificate Templates:
CA : dc.theshire.local\theshire-DC-CA
Name : ESC3Template
SchemaVersion : 2
OID : ESC3 Template (1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.4300342.10028552)
VulnerableTemplateACL : False
LowPrivCanEnroll : True
EnrolleeSuppliesSubject : False
EnhancedKeyUsage : Certificate Request Agent (1.3.6.1.4.1.311.20.2.1)
HasAuthenticationEku : False
HasDangerousEku : False
EnrollmentAgentTemplate : True
CAManagerApproval : False
IssuanceRequirements : [Issuance Requirements]
Authorized signature count: 0
Reenrollment requires: same criteria as for enrollment.
ValidityPeriod : 1 years
RenewalPeriod : 6 weeks
Owner : THESHIRE\localadmin
DACL : NT AUTHORITY\Authenticated Users (Allow) - Read
THESHIRE\Domain Admins (Allow) - Read, Write, Enroll
THESHIRE\Domain Users (Allow) - Enroll
THESHIRE\Enterprise Admins (Allow) - Read, Write, Enroll
THESHIRE\localadmin (Allow) - Read, Write
Misconfigurations : ESC3
Existen algunas opciones. Primero, haga clic derecho en la plantilla de certificado afectada en la Consola de Plantillas de Certificado (certtmpl.msc) y haga clic en "Propiedades".
También puede implementar "Restricciones de Agente de Inscripción" a través de la Consola de Autoridad de Certificación (certsrv.msc). En la CA afectada, haga clic derecho en el nombre de la CA y haga clic en "Propiedades" -> "Agentes de Inscripción". Hay más información sobre este enfoque aquí.
Las plantillas de certificado son objetos protegibles en Active Directory, lo que significa que tienen un descriptor de seguridad que especifica qué principales de Active Directory tienen permisos específicos sobre la plantilla. Las plantillas que tienen un control de acceso vulnerable otorgan a principales no intencionados la capacidad de modificar configuraciones en la plantilla. Con derechos de modificación, un atacante puede establecer EKU vulnerables (ESC1-ESC3), cambiar configuraciones como CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT (ESC1) y/o eliminar "Requisitos de Emisión" como la aprobación del administrador o firmas autorizadas.
[!] Potentially vulnerable Certificate Templates:
CA : dc.theshire.local\theshire-DC-CA Name : ESC4Template SchemaVersion : 2 OID : ESC4 Template (1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.1768738.6205646) VulnerableTemplateACL : True LowPrivCanEnroll : True EnrolleeSuppliesSubject : False EnhancedKeyUsage : Client Authentication (1.3.6.1.5.5.7.3.2)|Secure Email (1.3.6.1.5.5.7.3.4)|Encrypting File System (1.3.6.1.4.1.311.10.3.4) HasAuthenticationEku : True HasDangerousEku : False EnrollmentAgentTemplate : False CAManagerApproval : False IssuanceRequirements : [Issuance Requirements] Authorized signature count: 0 Reenrollment requires: same criteria as for enrollment. ValidityPeriod : 1 years RenewalPeriod : 6 weeks Owner : THESHIRE\localadmin DACL : NT AUTHORITY\Authenticated Users (Allow) - Read, Write THESHIRE\Domain Admins (Allow) - Read, Write, Enroll THESHIRE\Domain Users (Allow) - Read, Enroll THESHIRE\Enterprise Admins (Allow) - Read, Write, Enroll THESHIRE\localadmin (Allow) - Read, Write Misconfigurations : ESC4
### Mitigaciones <!-- omit in toc -->
Haga clic derecho en la plantilla de certificado afectada en la Consola de Plantillas de Certificado (certtmpl.msc) y haga clic en "Propiedades".
Vaya a "Seguridad" y elimine la entrada de control de acceso vulnerable.
## ESC5 - Control de Acceso Vulnerable a Objetos PKI de AD
### Detalles <!-- omit in toc -->
Varios objetos fuera de las plantillas de certificado y de la propia entidad de certificación pueden tener un impacto de seguridad en todo el sistema AD CS.
Estas posibilidades incluyen (pero no se limitan a):
- Objeto de equipo AD del servidor de CA (es decir, compromiso a través de RBCD)
- El servidor RPC/DCOM del servidor de CA
- Objetos AD relacionados con PKI. Cualquier objeto AD descendiente o contenedor en el contenedor CN=Public Key Services,CN=Services,CN=Configuration,DC=<COMPANY>,DC=<COM> (por ejemplo, el contenedor de Plantillas de Certificado, el contenedor de Entidades de Certificación, el objeto NTAuthCertificates, etc.)
*Debido al amplio alcance de esta configuración incorrecta específica, actualmente no verificamos ESC5 por defecto en este conjunto de herramientas.*
Las rutas de acceso al propio servidor de CA se pueden encontrar en la recopilación actual de BloodHound.
La seguridad del servidor RPC/DCOM del servidor de CA requiere un análisis manual.
Los siguientes comandos generan una lista de usuarios y el derecho de control/edición que el usuario tiene sobre un objeto AD relacionado con PKI.```
$Controllers = Get-AuditPKIADObjectControllers
Format-PKIAdObjectControllers $Controllers
Asegúrese de que todos los principales en los resultados requieran absolutamente los derechos listados. A menudo, cuentas no de nivel 0 (ya sean usuarios/grupos con pocos privilegios o administradores de servidores no AD con menos privilegios) tienen control de objetos de AD relacionados con PKI.
THESHIRE\Cert Publishers (S-1-5-21-3022474190-4230777124-3051344698-517) GenericAll CN=THESHIRE-DC-CA,CN=Certification Authorities,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=AIA,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=DC,CN=CDP,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=THESHIRE-DC-CA,CN=DC,CN=CDP,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL
THESHIRE\DC$ (S-1-5-21-3022474190-4230777124-3051344698-1000) WriteOwner CN=THESHIRE-DC-CA,CN=Enrollment Services,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=THESHIRE-DC-CA,CN=AIA,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=THESHIRE-DC-CA,CN=DC,CN=CDP,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=THESHIRE-DC-CA,CN=KRA,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL
THESHIRE\Domain Computers (S-1-5-21-3022474190-4230777124-3051344698-515) WriteDacl CN=MisconfiguredTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL
THESHIRE\Domain Users (S-1-5-21-3022474190-4230777124-3051344698-513) WriteAllProperties CN=MisconfiguredTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL
THESHIRE\john-sa (S-1-5-21-3022474190-4230777124-3051344698-1602) GenericAll CN=MisconfiguredTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL
NT AUTHORITY\Authenticated Users (S-1-5-11) Owner CN=MisconfiguredTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL WriteOwner CN=MisconfiguredTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL
### Mitigaciones <!-- omit in toc -->
Elimine cualquier entrada de control de acceso vulnerable a través de Usuarios y Equipos de Active Directory (*dsa.msc*) o ADSIEdit (*adsiedit.msc*) para objetos de configuración.
## ESC6 - EDITF_ATTRIBUTESUBJECTALTNAME2
### Detalles <!-- omit in toc -->
Si el indicador **EDITF_ATTRIBUTESUBJECTALTNAME2** está activado en la configuración de una Autoridad Certificadora, *CUALQUIER* solicitud de certificado puede especificar nombres alternativos del sujeto (SAN) arbitrarios. Esto significa que CUALQUIER plantilla configurada para autenticación de dominio que también permita la inscripción a usuarios sin privilegios (por ejemplo, la plantilla **Usuario** predeterminada) puede ser abusada para obtener un certificado que nos permita autenticarnos como administrador de dominio (o cualquier otro usuario/máquina activo).
**ESTA CONFIGURACIÓN NO DEBE ESTAR ESTABLECIDA EN ABSOLUTO EN SU ENTORNO.**
### Ejemplo <!-- omit in toc -->```
=== Certificate Authority ===
ComputerName : dc.theshire.local
CAName : theshire-DC-CA
ConfigString : dc.theshire.local\theshire-DC-CA
IsRoot : True
AllowsUserSuppliedSans : True
VulnerableACL : False
EnrollmentPrincipals : THESHIRE\Domain Users
THESHIRE\Domain Computers
THESHIRE\certmanager
THESHIRE\certadmin
THESHIRE\Nested3
EnrollmentEndpoints :
NTLMEnrollmentEndpoints :
DACL : BUILTIN\Administrators (Allow) - ManageCA, ManageCertificates
THESHIRE\Domain Admins (Allow) - ManageCA, ManageCertificates
THESHIRE\Domain Users (Allow) - Read, Enroll
THESHIRE\Domain Computers (Allow) - Enroll
THESHIRE\Enterprise Admins (Allow) - ManageCA, ManageCertificates
THESHIRE\certmanager (Allow) - ManageCertificates, Enroll
THESHIRE\certadmin (Allow) - ManageCA, Enroll
THESHIRE\Nested3 (Allow) - ManageCertificates, Enroll
Misconfigurations : ESC6
[!] The above CA is misconfigured!
...(snip)...
[!] EDITF_ATTRIBUTESUBJECTALTNAME2 set on this CA, the following templates may be vulnerable:
CA : dc.theshire.local\theshire-DC-CA
Name : User
SchemaVersion : 1
OID : 1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.1.1
VulnerableTemplateACL : False
LowPrivCanEnroll : True
EnrolleeSuppliesSubject : False
EnhancedKeyUsage : Encrypting File System (1.3.6.1.4.1.311.10.3.4)|Secure Email (1.3.6.1.5.5.7.3.4)|Client Authentication (1.3.6.1.5.5.7.3.2)
HasAuthenticationEku : True
HasDangerousEku : False
EnrollmentAgentTemplate : False
CAManagerApproval : False
IssuanceRequirements : [Issuance Requirements]
Authorized signature count: 0
Reenrollment requires: same criteria as for enrollment.
ValidityPeriod : 1 years
RenewalPeriod : 6 weeks
Owner : THESHIRE\Enterprise Admins
DACL : NT AUTHORITY\Authenticated Users (Allow) - Read
THESHIRE\Domain Admins (Allow) - Read, Write, Enroll
THESHIRE\Domain Users (Allow) - Read, Enroll
THESHIRE\Enterprise Admins (Allow) - Read, Write, Enroll
Misconfigurations :
Elimine inmediatamente este indicador y reinicie la entidad de certificación afectada desde un símbolo del sistema de PowerShell con derechos elevados contra el servidor de CA:``` PS C:> certutil -config "CA_HOST\CA_NAME" -setreg policy\EditFlags -EDITF_ATTRIBUTESUBJECTALTNAME2
PS C:> Get-Service -ComputerName CA_HOST certsvc | Restart-Service -Force
## ESC7 - Control de Acceso Vulnerable de la Autoridad de Certificación
### Detalles <!-- omit in toc -->
Fuera de las plantillas de certificados, una autoridad de certificación en sí misma tiene un conjunto de permisos que protegen diversas acciones de la CA. Se puede acceder a estos permisos desde certsrv.msc, haciendo clic derecho en una CA, seleccionando propiedades y cambiando a la pestaña Seguridad.
Hay dos derechos que son sensibles a la seguridad y peligrosos si entidades no deseadas los poseen:
* **ManageCA** (también conocido como "Administrador de CA") - permite acciones administrativas de la CA, incluyendo (de forma remota) activar el bit EDITF_ATTRIBUTESUBJECTALTNAME2, resultando en ESC6.
* **ManageCertificates** (también conocido como "Administrador/Oficial de Certificados") - permite a la entidad aprobar solicitudes de certificados pendientes, anulando el requisito/protección de "Aprobación del Administrador"
### Ejemplo <!-- omit in toc -->```
=== Certificate Authority ===
ComputerName : dc.theshire.local
CAName : theshire-DC-CA
ConfigString : dc.theshire.local\theshire-DC-CA
IsRoot : True
AllowsUserSuppliedSans : False
VulnerableACL : True
EnrollmentPrincipals : THESHIRE\Domain Users
THESHIRE\Domain Computers
THESHIRE\certmanager
THESHIRE\certadmin
THESHIRE\Nested3
EnrollmentEndpoints :
NTLMEnrollmentEndpoints :
DACL : BUILTIN\Administrators (Allow) - ManageCA, ManageCertificates
THESHIRE\Domain Admins (Allow) - ManageCA, ManageCertificates
THESHIRE\Domain Users (Allow) - ManageCA, Read, Enroll
THESHIRE\Domain Computers (Allow) - Enroll
THESHIRE\Enterprise Admins (Allow) - ManageCA, ManageCertificates
THESHIRE\certmanager (Allow) - ManageCertificates, Enroll
THESHIRE\certadmin (Allow) - ManageCA, Enroll
THESHIRE\Nested3 (Allow) - ManageCertificates, Enroll
Misconfigurations : ESC7
[!] The above CA is misconfigured!
Abra la consola de la Autoridad de Certificación (certsrv.msc) en la CA afectada, haga clic derecho en el nombre de la CA y haga clic en "Propiedades".
Vaya a "Seguridad" y elimine la entrada de control de acceso vulnerable.
NOTA: esta verificación particular en PSPKIAudit solo comprueba si NTLM está presente en cualquier punto final de inscripción publicado. ¡NO comprueba si la Protección Extendida para Autenticación está presente en estos puntos finales habilitados para NTLM, por lo que pueden ocurrir falsos positivos!
[!IMPORTANT]
La autenticación NTLM está deshabilitada para cuentas en el grupo Usuarios Protegidos. Esta verificación puede fallar si se ejecuta PSPKIAudit mientras se ha iniciado sesión como Usuario Protegido.
AD CS admite varios métodos de inscripción basados en HTTP a través de roles de servidor AD CS adicionales que los administradores pueden instalar. Estas interfaces de inscripción de certificados basadas en HTTP son todas vulnerables a ataques de retransmisión NTLM.
Utilizando la retransmisión NTLM, un atacante en una máquina comprometida puede suplantar cualquier cuenta de AD que se autentique mediante NTLM entrante. Mientras suplanta la cuenta de la víctima, un atacante podría acceder a estas interfaces web y solicitar un certificado de autenticación de cliente basado en las plantillas de certificado de Usuario o Máquina.
=== Certificate Authority ===
ComputerName : dc.theshire.local CAName : theshire-DC-CA ConfigString : dc.theshire.local\theshire-DC-CA IsRoot : True AllowsUserSuppliedSans : False VulnerableACL : False EnrollmentPrincipals : THESHIRE\Domain Users THESHIRE\Domain Computers THESHIRE\certmanager THESHIRE\certadmin THESHIRE\Nested3 EnrollmentEndpoints : http://dc.theshire.local/certsrv/ NTLMEnrollmentEndpoints : http://dc.theshire.local/certsrv/ DACL : BUILTIN\Administrators (Allow) - ManageCA, ManageCertificates THESHIRE\Domain Admins (Allow) - ManageCA, ManageCertificates THESHIRE\Domain Users (Allow) - Read, Enroll THESHIRE\Domain Computers (Allow) - Enroll THESHIRE\Enterprise Admins (Allow) - ManageCA, ManageCertificates THESHIRE\certmanager (Allow) - ManageCertificates, Enroll THESHIRE\certadmin (Allow) - ManageCA, Enroll THESHIRE\Nested3 (Allow) - ManageCertificates, Enroll Misconfigurations : ESC8
[!] The above CA is misconfigured!
### Mitigaciones <!-- omit in toc -->
O retire los puntos de conexión de inscripción HTTP(S), deshabilite NTLM para los puntos finales o habilite la Protección Extendida para la Autenticación. Consulte **Harden AD CS HTTP Endpoints – PREVENT8** en el whitepaper para más detalles.
## Misc - Asignaciones Explícitas
Otra mitigación posible para algunas situaciones es imponer asignaciones explícitas para los certificados. Esto deshabilita el uso de SAN alternativas en los certificados al autenticarse en Active Directory.
Para Kerberos, establecer la clave **HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdc ! UseSubjectAltName** a 00000000 fuerza una asignación explícita. Hay más detalles en [KB4043463](https://mskb.pkisolutions.com/kb/4043463).
Deshabilitar las asignaciones explícitas para SChannel no está realmente documentado, pero según nuestra investigación, establecer 0x1 o 0x2 en la clave **HKEY_LOCAL_MACHINE\CurrentControlSet\Control\SecurityProviders\SCHANNEL ! CertificateMappingMethods** parece bloquear las SAN, pero se necesitan más pruebas.
# Clasificación de Solicitudes de Certificado Emitidas Existentes
**ADVERTENCIA:** esta funcionalidad se ha probado mínimamente en entornos grandes.
**Nota:** consulte "Monitor User/Machine Certificate Enrollments - DETECT1" en el whitepaper para obtener información adicional y cómo realizar estas búsquedas con certutil.
Si desea examinar las solicitudes de certificado emitidas existentes, por ejemplo para ver si alguna solicitud especificó SAN arbitrarias, o fueron solicitadas para plantillas específicas/por principales específicos, la función `Get-CertRequest [-CAComputerName COMPUTER.DOMAIN.COM | -CAName X-Y-Z]` se basa en varias funciones PSPKI para brindar información contextual adicional.
Específicamente, la Solicitud de Firma de Certificado (CSR) sin procesar se extrae para cada certificado actualmente emitido en el dominio, y se construye información específica (es decir, si se especificó un SAN, el nombre/máquina/proceso del solicitante, etc.) a partir de la solicitud para enriquecer el objeto CSR.
Las siguientes banderas pueden ser útiles:
| Bandera | Descripción |
| --------------------------- | --------------------------------------------------------------------------------------------- |
| **-HasSAN** | Solo devuelve certificados emitidos que tengan un Nombre Alternativo del Sujeto especificado en la solicitud. |
| **-Requester DOMAIN\USER** | Solo devuelve solicitudes de certificado emitidas para el usuario solicitante específico. |
| **-Template TEMPLATE_NAME** | Solo devuelve solicitudes de certificado emitidas para el nombre de plantilla especificado. |
<br/>
Para exportar TODAS las solicitudes de certificado emitidas a csv, use `Get-CertRequest | Export-CSV -NoTypeInformation requests.csv`.
Aquí hay una entrada de resultado de ejemplo que muestra una situación donde se especificó un Nombre Alternativo del Sujeto (SAN) con Certify:```
CA : dc.theshire.local\theshire-DC-CA
RequestID : 4602
RequesterName : THESHIRE\cody
RequesterMachineName : dev.theshire.local
RequesterProcessName : Certify.exe
SubjectAltNamesExtension :
SubjectAltNamesAttrib : Administrator
SerialNumber : 55000011faef0fab5ffd7f75b30000000011fa
CertificateTemplate : ESC1 Template
(1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.10657968.9897558)
RequestDate : 6/3/2021 5:54:51 PM
StartDate : 6/3/2021 5:44:51 PM
EndDate : 6/3/2022 5:44:51 PM
CA : dc.theshire.local\theshire-DC-CA
RequestID : 4603
RequesterName : THESHIRE\cody
RequesterMachineName : dev.theshire.local
RequesterProcessName : Certify.exe
SubjectAltNamesExtension : Administrator
SubjectAltNamesAttrib :
SerialNumber : 55000011fb021b79cf7276c2de0000000011fb
CertificateTemplate : ESC1 Template
(1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.10657968.9897558)
RequestDate : 6/3/2021 5:55:10 PM
StartDate : 6/3/2021 5:45:10 PM
EndDate : 6/3/2022 5:45:10 PM
La propiedad SubjectAltNamesExtension significa que se utilizó la extensión x509 SubjectAlternativeNames para especificar el SAN, lo que ocurre en plantillas con el indicador CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT. La propiedad SubjectAltNamesAttrib significa que se utilizaron pares nombre/valor x509, lo que ocurre al especificar un SAN cuando el indicador EDITF_ATTRIBUTESUBJECTALTNAME2 de la CA está establecido.
Los certificados emitidos existentes pueden revocarse usando la función Revoke-Certificate de PSPKI:
PS C:\> Get-CertificationAuthority <CAName> | Get-IssuedRequest -RequestID <X> | Revoke-Certificate -Reason "KeyCompromise"
Los valores aplicables para -Reason son "KeyCompromise", "CACompromise" y "Unspecified".