mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/windows-hardening/active-directory-methodology/ad-certi
This commit is contained in:
parent
ef954a58e8
commit
f6aaf546ec
@ -1,27 +1,27 @@
|
||||
# AD CS Domain Persistence
|
||||
# Persistencia de Dominio de AD CS
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
**Este es un resumen de las técnicas de persistencia de dominio compartidas en [https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf](https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf)**. Revísalo para más detalles.
|
||||
**Esto es un resumen de las técnicas de persistencia en el dominio compartidas en [https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf](https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf)**. Consúltelo para más detalles.
|
||||
|
||||
## Forjando Certificados con Certificados CA Robados - DPERSIST1
|
||||
## Forjando certificados con certificados de CA robados - DPERSIST1
|
||||
|
||||
¿Cómo puedes saber si un certificado es un certificado CA?
|
||||
¿Cómo se puede saber si un certificado es de CA?
|
||||
|
||||
Se puede determinar que un certificado es un certificado CA si se cumplen varias condiciones:
|
||||
Se puede determinar que un certificado es de CA si se cumplen varias condiciones:
|
||||
|
||||
- El certificado está almacenado en el servidor CA, con su clave privada asegurada por el DPAPI de la máquina, o por hardware como un TPM/HSM si el sistema operativo lo soporta.
|
||||
- Los campos de Emisor y Sujeto del certificado coinciden con el nombre distinguido de la CA.
|
||||
- Una extensión de "Versión CA" está presente exclusivamente en los certificados CA.
|
||||
- El certificado carece de campos de Uso de Clave Extendida (EKU).
|
||||
- El certificado está almacenado en el servidor CA, con su clave privada asegurada por el DPAPI de la máquina, o por hardware como TPM/HSM si el sistema operativo lo soporta.
|
||||
- Los campos Issuer y Subject del certificado coinciden con el nombre distinguido de la CA.
|
||||
- Una extensión "CA Version" está presente exclusivamente en los certificados de la CA.
|
||||
- El certificado carece de campos Extended Key Usage (EKU).
|
||||
|
||||
Para extraer la clave privada de este certificado, la herramienta `certsrv.msc` en el servidor CA es el método soportado a través de la GUI incorporada. No obstante, este certificado no difiere de otros almacenados dentro del sistema; por lo tanto, se pueden aplicar métodos como la [técnica THEFT2](certificate-theft.md#user-certificate-theft-via-dpapi-theft2) para la extracción.
|
||||
Para extraer la clave privada de este certificado, la herramienta `certsrv.msc` en el servidor CA es el método soportado a través de la GUI integrada. No obstante, este certificado no difiere de otros almacenados en el sistema; por lo tanto, se pueden aplicar métodos como la técnica [THEFT2](certificate-theft.md#user-certificate-theft-via-dpapi-theft2) para su extracción.
|
||||
|
||||
El certificado y la clave privada también se pueden obtener utilizando Certipy con el siguiente comando:
|
||||
El certificado y la clave privada también pueden obtenerse usando Certipy con el siguiente comando:
|
||||
```bash
|
||||
certipy ca 'corp.local/administrator@ca.corp.local' -hashes :123123.. -backup
|
||||
```
|
||||
Al adquirir el certificado CA y su clave privada en formato `.pfx`, se pueden utilizar herramientas como [ForgeCert](https://github.com/GhostPack/ForgeCert) para generar certificados válidos:
|
||||
Al obtener el certificado de la CA y su clave privada en formato `.pfx`, se pueden utilizar herramientas como [ForgeCert](https://github.com/GhostPack/ForgeCert) para generar certificados válidos:
|
||||
```bash
|
||||
# Generating a new certificate with ForgeCert
|
||||
ForgeCert.exe --CaCertPath ca.pfx --CaCertPassword Password123! --Subject "CN=User" --SubjectAltName localadmin@theshire.local --NewCertPath localadmin.pfx --NewCertPassword Password123!
|
||||
@ -38,26 +38,73 @@ certipy auth -pfx administrator_forged.pfx -dc-ip 172.16.126.128
|
||||
> [!WARNING]
|
||||
> El usuario objetivo para la falsificación de certificados debe estar activo y ser capaz de autenticarse en Active Directory para que el proceso tenga éxito. Falsificar un certificado para cuentas especiales como krbtgt es ineficaz.
|
||||
|
||||
Este certificado falsificado será **válido** hasta la fecha de finalización especificada y **mientras el certificado CA raíz sea válido** (generalmente de 5 a **10+ años**). También es válido para **máquinas**, por lo que, combinado con **S4U2Self**, un atacante puede **mantener persistencia en cualquier máquina del dominio** mientras el certificado CA sea válido.\
|
||||
Además, los **certificados generados** con este método **no pueden ser revocados** ya que la CA no tiene conocimiento de ellos.
|
||||
Este certificado forjado será **válido** hasta la fecha de expiración especificada y mientras el certificado de la CA raíz sea válido (normalmente de 5 a **10+ años**). También es válido para **máquinas**, por lo que combinado con **S4U2Self**, un atacante puede **mantener persistencia en cualquier máquina del dominio** mientras el certificado de la CA sea válido.\ Además, los **certificados generados** con este método **no pueden ser revocados** ya que la CA no tiene conocimiento de ellos.
|
||||
|
||||
## Confianza en Certificados CA Maliciosos - DPERSIST2
|
||||
### Operando bajo Strong Certificate Mapping Enforcement (2025+)
|
||||
|
||||
El objeto `NTAuthCertificates` está definido para contener uno o más **certificados CA** dentro de su atributo `cacertificate`, que utiliza Active Directory (AD). El proceso de verificación por parte del **controlador de dominio** implica comprobar el objeto `NTAuthCertificates` en busca de una entrada que coincida con la **CA especificada** en el campo Emisor del **certificado** autenticador. La autenticación continúa si se encuentra una coincidencia.
|
||||
Desde el 11 de febrero de 2025 (tras el despliegue de KB5014754), los controladores de dominio tienen por defecto **Full Enforcement** para los mapeos de certificados. Prácticamente, esto significa que tus certificados forjados deben o bien:
|
||||
|
||||
Un certificado CA autofirmado puede ser agregado al objeto `NTAuthCertificates` por un atacante, siempre que tenga control sobre este objeto de AD. Normalmente, solo se otorgan permisos para modificar este objeto a los miembros del grupo **Enterprise Admin**, junto con **Domain Admins** o **Administrators** en el **dominio raíz del bosque**. Pueden editar el objeto `NTAuthCertificates` usando `certutil.exe` con el comando `certutil.exe -dspublish -f C:\Temp\CERT.crt NTAuthCA126`, o empleando la [**PKI Health Tool**](https://docs.microsoft.com/en-us/troubleshoot/windows-server/windows-security/import-third-party-ca-to-enterprise-ntauth-store#method-1---import-a-certificate-by-using-the-pki-health-tool).
|
||||
- Contener un enlace fuerte con la cuenta objetivo (por ejemplo, la extensión de seguridad SID), o
|
||||
- Ir acompañados de un mapeo fuerte y explícito en el atributo `altSecurityIdentities` del objeto objetivo.
|
||||
|
||||
Esta capacidad es especialmente relevante cuando se utiliza en conjunto con un método previamente descrito que involucra ForgeCert para generar certificados dinámicamente.
|
||||
Un enfoque confiable para la persistencia es acuñar un certificado forjado encadenado a la Enterprise CA robada y luego añadir un mapeo explícito y fuerte al principal víctima:
|
||||
```powershell
|
||||
# Example: map a forged cert to a target account using Issuer+Serial (strong mapping)
|
||||
$Issuer = 'DC=corp,DC=local,CN=CORP-DC-CA' # reverse DN format expected by AD
|
||||
$SerialR = '1200000000AC11000000002B' # serial in reversed byte order
|
||||
$Map = "X509:<I>$Issuer<SR>$SerialR" # strong mapping format
|
||||
Set-ADUser -Identity 'victim' -Add @{altSecurityIdentities=$Map}
|
||||
```
|
||||
Notas
|
||||
- Si puedes crear certificados forjados que incluyan la extensión de seguridad `SID`, estos se mapearán implícitamente incluso bajo Full Enforcement. De lo contrario, prefiere mapeos explícitos y fuertes. Consulte
|
||||
[account-persistence](account-persistence.md) para más información sobre mapeos explícitos.
|
||||
- La revocación no ayuda a los defensores aquí: los certificados forjados son desconocidos para la base de datos de la CA y, por lo tanto, no pueden ser revocados.
|
||||
|
||||
## Configuración Maliciosa - DPERSIST3
|
||||
## Trusting Rogue CA Certificates - DPERSIST2
|
||||
|
||||
Las oportunidades para la **persistencia** a través de **modificaciones del descriptor de seguridad de los componentes de AD CS** son abundantes. Las modificaciones descritas en la sección "[Domain Escalation](domain-escalation.md)" pueden ser implementadas maliciosamente por un atacante con acceso elevado. Esto incluye la adición de "derechos de control" (por ejemplo, WriteOwner/WriteDACL/etc.) a componentes sensibles como:
|
||||
El objeto `NTAuthCertificates` está definido para contener uno o más **CA certificates** dentro de su atributo `cacertificate`, que utiliza Active Directory (AD). El proceso de verificación por parte del **domain controller** implica comprobar el objeto `NTAuthCertificates` en busca de una entrada que coincida con la **CA specified** en el campo Issuer del **certificate** que autentica. La autenticación continúa si se encuentra una coincidencia.
|
||||
|
||||
- El objeto de computadora AD del **servidor CA**
|
||||
- El **servidor RPC/DCOM del servidor CA**
|
||||
- Cualquier **objeto o contenedor AD descendiente** en **`CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>`** (por ejemplo, el contenedor de Plantillas de Certificado, el contenedor de Autoridades de Certificación, el objeto NTAuthCertificates, etc.)
|
||||
- **Grupos AD con derechos delegados para controlar AD CS** por defecto o por la organización (como el grupo incorporado Cert Publishers y cualquiera de sus miembros)
|
||||
Un certificado CA autofirmado puede ser añadido al objeto `NTAuthCertificates` por un atacante, siempre que tenga control sobre este objeto de AD. Normalmente, solo los miembros del grupo **Enterprise Admin**, junto con **Domain Admins** o **Administrators** en el **forest root’s domain**, tienen permiso para modificar este objeto. Pueden editar el objeto `NTAuthCertificates` usando `certutil.exe` con el comando `certutil.exe -dspublish -f C:\Temp\CERT.crt NTAuthCA`, o empleando la [**PKI Health Tool**](https://docs.microsoft.com/en-us/troubleshoot/windows-server/windows-security/import-third-party-ca-to-enterprise-ntauth-store#method-1---import-a-certificate-by-using-the-pki-health-tool).
|
||||
|
||||
Un ejemplo de implementación maliciosa implicaría a un atacante, que tiene **permisos elevados** en el dominio, agregando el permiso **`WriteOwner`** a la plantilla de certificado **`User`** por defecto, siendo el atacante el principal para el derecho. Para explotar esto, el atacante primero cambiaría la propiedad de la plantilla **`User`** a sí mismo. Después de esto, el **`mspki-certificate-name-flag`** se establecería en **1** en la plantilla para habilitar **`ENROLLEE_SUPPLIES_SUBJECT`**, permitiendo a un usuario proporcionar un Nombre Alternativo de Sujeto en la solicitud. Posteriormente, el atacante podría **inscribirse** usando la **plantilla**, eligiendo un nombre de **administrador de dominio** como nombre alternativo, y utilizar el certificado adquirido para autenticarse como el DA.
|
||||
Additional helpful commands for this technique:
|
||||
```bash
|
||||
# Add/remove and inspect the Enterprise NTAuth store
|
||||
certutil -enterprise -f -AddStore NTAuth C:\Temp\CERT.crt
|
||||
certutil -enterprise -viewstore NTAuth
|
||||
certutil -enterprise -delstore NTAuth <Thumbprint>
|
||||
|
||||
# (Optional) publish into AD CA containers to improve chain building across the forest
|
||||
certutil -dspublish -f C:\Temp\CERT.crt RootCA # CN=Certification Authorities
|
||||
certutil -dspublish -f C:\Temp\CERT.crt CA # CN=AIA
|
||||
```
|
||||
Esta capacidad es especialmente relevante cuando se usa en conjunto con un método descrito previamente que utiliza ForgeCert para generar certificados dinámicamente.
|
||||
|
||||
> Post-2025 mapping considerations: placing a rogue CA in NTAuth only establishes trust in the issuing CA. To use leaf certificates for logon when DCs are in **Full Enforcement**, the leaf must either contain the SID security extension or there must be a strong explicit mapping on the target object (for example, Issuer+Serial in `altSecurityIdentities`). See {{#ref}}account-persistence.md{{#endref}}.
|
||||
|
||||
## Configuración maliciosa - DPERSIST3
|
||||
|
||||
Las oportunidades para **persistence** mediante modificaciones del descriptor de seguridad de los componentes de AD CS son abundantes. Las modificaciones descritas en la sección "[Domain Escalation](domain-escalation.md)" pueden ser implementadas maliciosamente por un atacante con acceso elevado. Esto incluye la adición de "control rights" (p. ej., WriteOwner/WriteDACL/etc.) a componentes sensibles como:
|
||||
|
||||
- El objeto de equipo AD del **CA server**
|
||||
- El **CA server’s RPC/DCOM server**
|
||||
- Cualquier **objeto AD descendiente o contenedor** en **`CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>`** (por ejemplo, el contenedor Certificate Templates, el contenedor Certification Authorities, el objeto NTAuthCertificates, etc.)
|
||||
- **Grupos de AD con derechos delegados para controlar AD CS** por defecto o por la organización (como el grupo incorporado Cert Publishers y cualquiera de sus miembros)
|
||||
|
||||
Un ejemplo de implementación maliciosa implicaría que un atacante, que tiene **permisos elevados** en el dominio, añada el permiso **`WriteOwner`** a la plantilla de certificado por defecto **`User`**, siendo el atacante el principal para ese derecho. Para explotarlo, el atacante primero cambiaría la propiedad (ownership) de la plantilla **`User`** a sí mismo. A continuación, se establecería el **`mspki-certificate-name-flag`** a **1** en la plantilla para habilitar **`ENROLLEE_SUPPLIES_SUBJECT`**, permitiendo que un usuario proporcione un Subject Alternative Name en la solicitud. Posteriormente, el atacante podría **enroll** usando la **template**, escogiendo un nombre de **domain administrator** como nombre alternativo, y utilizar el certificado adquirido para autenticarse como DA.
|
||||
|
||||
Controles prácticos que los atacantes pueden configurar para persistence a largo plazo en el dominio (ver {{#ref}}domain-escalation.md{{#endref}} para detalles completos y detección):
|
||||
|
||||
- Flags de política del CA que permiten SAN desde los solicitantes (p. ej., habilitar `EDITF_ATTRIBUTESUBJECTALTNAME2`). Esto mantiene rutas explotables similares a ESC1.
|
||||
- DACL o ajustes de la template que permitan emisión con capacidad de autenticación (p. ej., añadir Client Authentication EKU, habilitar `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT`).
|
||||
- Controlar el objeto `NTAuthCertificates` o los contenedores del CA para reintroducir continuamente emisores rogue si los defensores intentan limpieza.
|
||||
|
||||
> [!TIP]
|
||||
> En entornos reforzados después de KB5014754, combinar estas malas configuraciones con mapeos fuertes explícitos (`altSecurityIdentities`) asegura que tus certificados emitidos o forjados sigan siendo utilizables incluso cuando los DCs apliquen strong mapping.
|
||||
|
||||
|
||||
|
||||
## Referencias
|
||||
|
||||
- Microsoft KB5014754 – Certificate-based authentication changes on Windows domain controllers (enforcement timeline and strong mappings). https://support.microsoft.com/en-au/topic/kb5014754-certificate-based-authentication-changes-on-windows-domain-controllers-ad2c23b0-15d8-4340-a468-4d4f3b188f16
|
||||
- Certipy – Command Reference and forge/auth usage. https://github.com/ly4k/Certipy/wiki/08-%E2%80%90-Command-Reference
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user