Kerberos
Kerberos es el protocolo con el que un usuario de Windows demuestra quién es dentro del dominio. En lugar de enviar la contraseña a cada servidor, pide tickets a un tercero de confianza, el KDC (que vive en el controlador de dominio).
Paso a paso
- AS-REQ: el usuario pide un TGT. Para demostrar que es él, cifra la hora actual con su propio hash (preautenticación).
- AS-REP: el KDC le devuelve un TGT (Ticket Granting Ticket), cifrado con el hash de la cuenta especial
krbtgt. El usuario no puede leerlo; solo lo guarda. - TGS-REQ: cuando quiere usar un servicio (una carpeta compartida, SQL Server), presenta el TGT y pide un ticket para ese SPN.
- TGS-REP: el KDC le da un ticket de servicio (TGS) cifrado con el hash de la cuenta que ejecuta ese servicio.
- AP-REQ: el usuario entrega ese ticket al servicio, que lo descifra con su propia clave y lo deja entrar.
Por qué se puede atacar
| Si consigo… | Puedo… | Técnica |
|---|---|---|
| Un usuario sin preautenticación | Pedir su AS-REP sin contraseña y crackearlo | AS-REP Roasting |
| Cualquier usuario del dominio | Pedir tickets de cuentas con SPN y crackearlos | Kerberoasting |
| Admin local en un equipo | Sacar de memoria los tickets de quien haya iniciado sesión | Pass-the-Ticket |
| El hash de una cuenta de servicio | Fabricar tickets para ese servicio (Silver Ticket) | Domain Dominance |
El hash de krbtgt | Fabricar un TGT para cualquier usuario (Golden Ticket) | Domain Dominance |
| Un equipo con delegación | Pedir tickets en nombre de otros usuarios | Delegación |
Detalles que dan problemas
- La hora importa. Kerberos rechaza peticiones con más de 5 minutos de diferencia con el DC. Desde Kali:
sudo ntpdate <IP-DC>(ofaketime). - Nombres, no IPs. Los tickets van ligados a nombres (
cifs/dc01.corp.local). Si uso la IP, Windows intenta NTLM en su lugar. Conviene añadir el DC a/etc/hosts. - RC4 vs AES. Pedir tickets con el hash NTLM da tickets RC4, más fáciles de detectar. Si tengo la clave AES256 de la cuenta, mejor usarla.
