hacktricks/windows-hardening/active-directory-methodology/kerberos-double-hop-problem.md
2024-02-10 15:36:32 +00:00

9.4 KiB

Kerberos Double-Hop-Problem

Lernen Sie das Hacken von AWS von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Einführung

Das Kerberos "Double-Hop"-Problem tritt auf, wenn ein Angreifer versucht, die Kerberos-Authentifizierung über zwei Hops zu verwenden, zum Beispiel mit PowerShell/WinRM.

Bei einer Authentifizierung über Kerberos werden Anmeldeinformationen nicht im Speicher zwischengespeichert. Wenn Sie also mimikatz ausführen, finden Sie keine Anmeldeinformationen des Benutzers auf dem Computer, auch wenn er Prozesse ausführt.

Dies liegt daran, dass bei der Verbindung mit Kerberos die folgenden Schritte durchgeführt werden:

  1. Benutzer1 gibt Anmeldeinformationen an und der Domänencontroller gibt ein Kerberos-TGT an Benutzer1 zurück.
  2. Benutzer1 verwendet das TGT, um ein Service Ticket anzufordern, um eine Verbindung mit Server1 herzustellen.
  3. Benutzer1 verbindet sich mit Server1 und gibt das Service Ticket an.
  4. Server1 hat weder die Anmeldeinformationen von Benutzer1 zwischengespeichert, noch das TGT von Benutzer1. Daher kann sich Benutzer1 von Server1 aus nicht bei einem zweiten Server anmelden.

Unbeschränkte Delegation

Wenn die unbeschränkte Delegation auf dem PC aktiviert ist, tritt dieses Problem nicht auf, da der Server ein TGT von jedem darauf zugreifenden Benutzer erhält. Darüber hinaus können Sie bei Verwendung der unbeschränkten Delegation wahrscheinlich den Domänencontroller kompromittieren.
Weitere Informationen auf der Seite zur unbeschränkten Delegation.

CredSSP

Eine weitere Möglichkeit, dieses Problem zu umgehen, die bemerkenswert unsicher ist, ist Credential Security Support Provider (CredSSP). Laut Microsoft:

Bei der CredSSP-Authentifizierung werden die Benutzeranmeldeinformationen vom lokalen Computer an einen Remote-Computer delegiert. Diese Praxis erhöht das Sicherheitsrisiko der Remote-Operation. Wenn der Remote-Computer kompromittiert ist, können die Anmeldeinformationen, wenn sie an ihn übergeben werden, zur Steuerung der Netzwerksitzung verwendet werden.

Es wird dringend empfohlen, CredSSP in Produktionsumgebungen, sensiblen Netzwerken und ähnlichen Umgebungen zu deaktivieren, aufgrund von Sicherheitsbedenken. Um festzustellen, ob CredSSP aktiviert ist, kann der Befehl Get-WSManCredSSP ausgeführt werden. Dieser Befehl ermöglicht die Überprüfung des CredSSP-Status und kann sogar remote ausgeführt werden, sofern WinRM aktiviert ist.

Invoke-Command -ComputerName bizintel -Credential ta\redsuit -ScriptBlock {
Get-WSManCredSSP
}

Workarounds

Invoke Command

Um das Problem des doppelten Hops anzugehen, wird eine Methode mit einer verschachtelten Invoke-Command vorgestellt. Dies löst das Problem nicht direkt, bietet jedoch eine Lösung ohne spezielle Konfigurationen. Der Ansatz ermöglicht die Ausführung eines Befehls (hostname) auf einem sekundären Server über einen PowerShell-Befehl, der von einer initialen angreifenden Maschine ausgeführt wird oder über eine zuvor etablierte PS-Session mit dem ersten Server. So wird es gemacht:

$cred = Get-Credential ta\redsuit
Invoke-Command -ComputerName bizintel -Credential $cred -ScriptBlock {
Invoke-Command -ComputerName secdev -Credential $cred -ScriptBlock {hostname}
}

Alternativ wird empfohlen, eine PS-Sitzung mit dem ersten Server herzustellen und Invoke-Command mit $cred auszuführen, um Aufgaben zu zentralisieren.

PSSession-Konfiguration registrieren

Eine Lösung zur Umgehung des Double-Hop-Problems besteht darin, Register-PSSessionConfiguration mit Enter-PSSession zu verwenden. Diese Methode erfordert einen anderen Ansatz als evil-winrm und ermöglicht eine Sitzung, die nicht unter der Einschränkung des Double-Hop-Problems leidet.

Register-PSSessionConfiguration -Name doublehopsess -RunAsCredential domain_name\username
Restart-Service WinRM
Enter-PSSession -ConfigurationName doublehopsess -ComputerName <pc_name> -Credential domain_name\username
klist

Portweiterleitung

Für lokale Administratoren auf einem Zwischenziel ermöglicht die Portweiterleitung das Senden von Anfragen an einen endgültigen Server. Mit netsh kann eine Regel für die Portweiterleitung hinzugefügt werden, zusammen mit einer Windows-Firewall-Regel, um den weitergeleiteten Port zuzulassen.

netsh interface portproxy add v4tov4 listenport=5446 listenaddress=10.35.8.17 connectport=5985 connectaddress=10.35.8.23
netsh advfirewall firewall add rule name=fwd dir=in action=allow protocol=TCP localport=5446

winrs.exe

winrs.exe kann verwendet werden, um WinRM-Anfragen weiterzuleiten, möglicherweise als eine weniger erkennbare Option, wenn die Überwachung von PowerShell ein Anliegen ist. Der folgende Befehl zeigt seine Verwendung:

winrs -r:http://bizintel:5446 -u:ta\redsuit -p:2600leet hostname

OpenSSH

Die Installation von OpenSSH auf dem ersten Server ermöglicht eine Lösung für das Double-Hop-Problem, was besonders nützlich für Jump-Box-Szenarien ist. Diese Methode erfordert die CLI-Installation und Konfiguration von OpenSSH für Windows. Wenn es für die Passwortauthentifizierung konfiguriert ist, ermöglicht dies dem Zwischenserver, im Namen des Benutzers ein TGT zu erhalten.

Schritte zur Installation von OpenSSH

  1. Laden Sie das neueste OpenSSH Release-Zip herunter und verschieben Sie es auf den Zielserver.
  2. Entpacken Sie es und führen Sie das Skript Install-sshd.ps1 aus.
  3. Fügen Sie eine Firewall-Regel hinzu, um Port 22 zu öffnen, und überprüfen Sie, ob die SSH-Dienste ausgeführt werden.

Um "Verbindungsreset"-Fehler zu beheben, müssen möglicherweise die Berechtigungen aktualisiert werden, um allen Lese- und Ausführungszugriff auf das OpenSSH-Verzeichnis zu ermöglichen.

icacls.exe "C:\Users\redsuit\Documents\ssh\OpenSSH-Win64" /grant Everyone:RX /T

Referenzen

Lernen Sie das Hacken von AWS von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!