Pass-the-Hash (PtH)
Bei Pass-the-Hash handelt es sich um eine Angriffstechnik, bei der Angreifer nicht das Klartextkennwort, sondern den NTLM (oder LanMan) Hash eines Benutzers stehlen, um sich damit direkt bei einem Server oder Dienst zu authentifizieren. Aufgrund von Abwärtskompatibilität wird eine solche Authentifizierung mittels NTLM-Hash auch von neueren Windows-Versionen noch unterstützt.
Die Vorteile dieser Angriffstechnik sind, dass gestohlene Hashes nicht gecrackt werden müssen und dass auch lokale Benutzer-Hashes zur Authentifizierung auf Remote Dienste/Server genutzt werden können – sofern der Benutzer dort dasselbe Passwort verwendet.
Reguläre Authentifizierung über NTLM
Um das Problem besser zu verstehen, schauen wir uns zunächst einmal an, wie eine Authentifizierung mittels NTLM funktioniert:
In diesem Beispiel authentifiziert sich der Benutzer „whitehat.de\user1” bei einem Server, indem er sein Klartextpasswort in den Anmeldedialog eingibt. Das lokale Authentifizierungspaket MSV1_0 (msv1_0.dll) generiert daraufhin den entsprechenden NTLM-Hash und sendet diesen zur Authentifizierung an den Server. Das Klartextpasswort selbst wird zu keinem Zeitpunkt an den Server verschickt. Auch von der Erstellung des Hashes bekommt der Server nichts mit, bei ihm kommt lediglich der fertige Hash an.
Pass-the-Hash Authentifizierung
Da der Server zur Authentifizierung nur den Hash erwartet, kann ein Angreifer auf das MSV1_0 Authentifizierungspaket verzichten und sich stattdessen direkt mit dem gestohlenen NTLM-Hash authentifizieren. Das Klartextpasswort muss er hierfür nicht kennen. Der Server merkt keinen Unterschied, da bei ihm – wie immer und wie erwartet – ein Hash ankommt.
Pass-the-Hash Angriff durchführen
Um einen solchen Angriff durchzuführen, kann ein Angreifer beispielsweise mimikatz auf einem System ausführen, auf dem zeitgleich ein weiterer Benutzer eingeloggt ist, um dessen NTLM-Hash zu extrahieren. Der Befehl hierfür lautet in mimikatz wie folgt:
sekurlsa::msv
Alternativ könnten z. B. auch Hashes aus dem lokalen SAM (Security Account Manager) extrahiert werden:
token::elevate # mimikatz Berechtigung zu SYSTEM erhöhen
lsadump::sam
Ist ein entsprechender Hash einmal extrahiert, kann dieser dazu verwendet werden, mittels mimikatz einen neuen cmd.exe Prozess (Windows-Eingabeaufforderung) mit der gestohlenen Identität zu erzeugen. Hierbei setzt mimikatz dann bei NTLM-Authentifizierungen den gestohlenen Hash ein, um gegenüber dem Server als dieser Benutzer in Erscheinung zu treten. Der Befehl zum Starten der cmd.exe (benötigt Debug-Privilegien) lautet in mimikatz:
sekurlsa::pth /user:BENUTZERNAME /domain:DOMÄNE /ntlm:NTLM-HASH
Für unser zuvor gezeigtes Beispiel könnte der PtH Angriff also mit folgendem Befehl gestartet werden:
sekurlsa::pth /user:Administrator /domain:whitehat.de /ntlm:6d4f17e12f9a4a194f8a22430a42d4e4
Nachdem die cmd.exe erfolgreich erzeugt wurde, kann der Angreifer im Kontext der gestohlenen Identität mit dem Server interagieren, um z. B. auf entsprechende Shares oder andere Ressourcen zuzugreifen.