Kerberoasting con Kali Linux
Kerberoasting con Kali Linux
Kerberoasting es una de las técnicas más populares en auditorías de Active Directory porque permite extraer los hashes de las contraseñas de cuentas de servicio sin necesidad de enviar ni un solo paquete a la máquina víctima.
Aquí tienes una guía rápida para realizarlo desde Kali Linux.
1. El Concepto
El ataque aprovecha cómo funciona el protocolo Kerberos. Cualquier usuario autenticado puede solicitar un ticket de servicio (TGS) para cualquier servicio que tenga un Service Principal Name (SPN) registrado. La parte interesante es que ese ticket está cifrado con el hash de la contraseña de la cuenta de servicio.
2. Herramientas necesarias
En Kali, la suite más común para esto es Impacket. Viene preinstalada, pero si no, puedes obtenerla con sudo apt install python3-impacket.
Paso A: Enumeración y Extracción
Usaremos el script impacket-GetUserSPNs. Este comando busca cuentas con SPN, solicita los tickets y los guarda en un formato que podamos crackear.
impacket-GetUserSPNs -Extensiones -request -dc-ip <IP_DEL_DC> <DOMINIO>/<USUARIO>:<PASSWORD> -outputfile hashes.kerberoast
-request: Solicita el ticket TGS al servidor.-outputfile: Guarda el hash en un archivo para no tener que copiarlo a mano.
Paso B: Crackeo del Hash (Offline)
Una vez que tienes el archivo hashes.kerberoast, el siguiente paso es romper la contraseña por fuerza bruta o usando un diccionario. Puedes usar Hashcat (más rápido por GPU) o John the Ripper.
Con Hashcat:
El código de modo para Kerberos 5 TGS-REP es el 13100.
hashcat -m 13100 hashes.kerberoast /usr/share/wordlists/rockyou.txt
3. Resumen del Flujo de Trabajo
| Paso | Acción | Herramienta |
| 1. Acceso | Necesitas credenciales de usuario normales. | Reconocimiento previo |
| 2. Consulta | Listar cuentas que tengan un SPN. | GetUserSPNs.py |
| 3. Extracción | Solicitar el ticket y volcarlo a un archivo. | GetUserSPNs.py -request |
| 4. Crackeo | Intentar adivinar la clave de la cuenta de servicio. | Hashcat o John |
Tips Pro para Kali
Sin credenciales: Si tienes una sesión de usuario pero no la contraseña en texto claro, puedes usar el hash NT con el parámetro
-hashes.Detección: Ten en cuenta que, aunque es un ataque "silencioso", los EDR modernos y los SIEM monitorean el evento de Windows 4769 (Ticket de servicio solicitado) si ocurre de forma masiva en poco tiempo.
Dependiendo de cómo esté configurada la red (Active Directory), podrías encontrarte con diferentes tipos de cifrado en los tickets de Kerberos. El más común hoy en día es AES-256, que es mucho más lento de crackear que el antiguo RC4.
Aquí tienes los comandos específicos según el tipo de hash que hayas extraído:
1. Kerberos 5, TGS-REP (AES-256)
Este es el estándar en entornos modernos (Windows Server 2012 en adelante). Es un cifrado fuerte, por lo que la velocidad de "intentos por segundo" será menor.
Código Hashcat:
19700Comando:
hashcat -m 19700 -a 0 hashes_aes256.txt /usr/share/wordlists/rockyou.txt
2. Kerberos 5, TGS-REP (RC4)
Si el entorno es antiguo o se ha forzado la compatibilidad hacia atrás, verás hashes que empiezan por $krb5tgs$23$. Estos son muy rápidos de crackear.
Código Hashcat:
13100Comando:
hashcat -m 13100 -a 0 hashes_rc4.txt /usr/share/wordlists/rockyou.txt
3. AS-REP Roasting (AES-256)
Si no estás haciendo Kerberoasting (TGS), sino AS-REP Roasting (donde el usuario no requiere pre-autenticación), el hash es distinto.
Código Hashcat:
18200Comando:
hashcat -m 18200 -a 0 asrep_hashes.txt /usr/share/wordlists/rockyou.txt
Tabla de Referencia Rápida
| Tipo de Ataque | Algoritmo | Prefijo del Hash | Modo Hashcat (-m) |
| Kerberoasting | RC4-HMAC | $krb5tgs$23$ | 13100 |
| Kerberoasting | AES-256-CTS | $krb5tgs$18$ | 19700 |
| AS-REP Roasting | AES-256 | $krb5asrep$18$ | 18200 |
| AS-REP Roasting | RC4 | $krb5asrep$23$ | 18200 (Auto-detect) |
Optimizando el rendimiento en Kali
Si estás usando una máquina virtual (VM), Hashcat irá lento porque usa el procesador (CPU). Si tienes acceso al host (metal real) con una tarjeta NVIDIA o AMD, usa siempre la versión de Windows o Linux directamente sobre el hardware.
Tip: Puedes añadir
-Oal comando para activar las "Optimized Kernels", lo que aumenta la velocidad a cambio de limitar un poco la longitud máxima de la contraseña.
Las reglas (Rules) son la verdadera magia de Hashcat. En lugar de simplemente probar cada palabra de tu diccionario tal cual, una regla toma cada palabra (ej. password) y le aplica transformaciones automáticamente (ej. P4ssw0rd2024!).
Esto es vital porque casi nadie usa una contraseña que esté exactamente en un diccionario, sino una variación.
1. La Regla de Oro: best64.rule
Esta regla viene preinstalada en Kali y es el punto de partida perfecto. Realiza las transformaciones más comunes: poner la primera letra en mayúscula, añadir números al final o cambiar letras por números (leet speak).
Comando:
hashcat -m 13100 hashes.txt /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.rule
-r: Indica la ruta al archivo de reglas.
2. Reglas más potentes (Nivel avanzado)
Si best64 no funciona, puedes subir el nivel de agresividad con estas otras reglas que también están en /usr/share/hashcat/rules/:
dive.rule: Una de las más exhaustivas. Prueba miles de combinaciones por cada palabra. (Cuidado: hace que el proceso sea mucho más lento).generated2.rule: Excelente para contraseñas de empresas que suelen seguir patrones predecibles.toggles1.rule: Prueba todas las combinaciones posibles de mayúsculas y minúsculas.
3. Cómo ver qué está haciendo la regla
Si tienes curiosidad por saber qué variaciones está generando Hashcat sin ejecutar el crackeo real, puedes usar el parámetro --stdout:
echo "admin" | hashcat -r /usr/share/hashcat/rules/best64.rule --stdout
Salida ejemplo:
admin123Admin4dminADMIN!
Comparativa de Eficiencia
| Regla | Complejidad | Cuándo usarla |
| Ninguna | Baja | Solo si crees que la clave es una palabra exacta. |
best64.rule | Media | Siempre. Es el estándar de oro para empezar. |
leetspeak.rule | Media | Si el objetivo es un perfil "tech" que cambia e por 3. |
rockyou-30000.rule | Alta | Cuando tienes tiempo y el diccionario base es pequeño. |
Un truco final: Combinar Diccionario + Máscara
Si sabes que la empresa suele poner el año al final (ej. Password2026), puedes usar un ataque híbrido (modo -a 6):
hashcat -m 13100 hashes.txt /usr/share/wordlists/rockyou.txt ?d?d?d?d
Esto añadirá 4 dígitos (?d) al final de cada palabra del diccionario.