
Proof-of-Concept-Exploit für Windows lokale Berechtigungserweiterung (CVE-2023-21746), der die NTLM-lokale Authentifizierung ausnutzt, um über SMB-Freigabezugriff und DLL-Hijacking SYSTEM-Privilegien zu erlangen.
Eine lokale Privilegienausweitung (LPE) Schwachstelle in Windows wurde Microsoft am 9. September 2022 von Andrea Pierini (@decoder_it) und Antonio Cocomazzi (@splinter_code) gemeldet. Die Schwachstelle würde einem Angreifer mit einem Konto mit niedrigen Berechtigungen auf einem Host ermöglichen, beliebige Dateien mit SYSTEM-Berechtigungen zu lesen/schreiben.
Obwohl die Schwachstelle an sich keinen direkten Befehlssystem als SYSTEM ermöglichen würde, können wir sie mit mehreren Vektoren kombinieren, um dieses Ergebnis zu erzielen. Praktischerweise wurde am 13. Februar ein weiterer Privilegienausweitungs-PoC von BlackArrowSec veröffentlicht, der den StorSvc-Dienst missbraucht und es einem Angreifer ermöglicht, Code als SYSTEM auszuführen, solange er eine DLL-Datei in ein beliebiges Verzeichnis im PATH schreiben kann.
Der LocalPotato-PoC nutzt einen Fehler in einem Sonderfall der NTLM-Authentifizierung namens NTLM-Lokale Authentifizierung aus, um einen privilegierten Prozess dazu zu bringen, eine Sitzung zu authentifizieren, die der Angreifer gegen den lokalen SMB-Server startet. Infolgedessen erhält der Angreifer eine Verbindung, die ihm Zugriff auf alle Freigaben mit den Berechtigungen des getäuschten Prozesses gewährt, einschließlich spezieller Freigaben wie C$ oder ADMIN$.
Der vom Exploit befolgte Prozess ist wie folgt:
Durch eine privilegierte Verbindung zu SMB-Freigaben kann der Angreifer Dateien an jedem Speicherort auf dem Zielcomputer lesen oder schreiben. Obwohl dies nicht erlaubt, Befehle direkt gegen den angreifbaren Rechner auszuführen, werden wir dies mit einem anderen Angriffsvektor kombinieren, um dieses Ziel zu erreichen.
Beachten Sie, dass die Schwachstelle im NTLM-Protokoll und nicht im SMB-Server liegt, sodass dieser Angriffsvektor theoretisch gegen jeden Dienst verwendet werden könnte, der Authentifizierung über NTLM nutzt. In der Praxis müssen jedoch einige Einschränkungen bei der Auswahl des anzugreifenden Protokolls berücksichtigt werden. Der PoC verwendet den SMB-Server, um einige zusätzliche Schutzmaßnahmen zu umgehen, die für andere Protokolle gegen ähnliche Angriffsvektoren bestehen, und implementiert sogar einen schnellen Bypass, um den Exploit gegen den SMB-Server zum Laufen zu bringen. Originalbeitrag des Exploit-Autors – (https://decoder.cloud/2023/02/13/localpotato-when-swapping-the-context-leads-you-to-system/)
Bisher haben wir LocalPotato verwendet, um beliebige Dateien auf den Zielcomputer zu schreiben. Um eine privilegierte Shell zu erhalten, müssen wir noch herausfinden, wie wir das beliebige Schreiben nutzen können, um einen Befehl auszuführen.
Kürzlich wurde ein weiterer Privilegienausweitungsvektor gefunden, bei dem ein Angreifer eine fehlende DLL kapern kann, um beliebige Befehle mit SYSTEM-Berechtigungen auszuführen. Das einzige Problem bei diesem Vektor war, dass ein Angreifer eine DLL in den PATH des Systems schreiben müsste, um ihn auszulösen. Standardmäßig enthält der Windows PATH nur Verzeichnisse, in die nur privilegierte Konten schreiben können. Obwohl es möglich sein könnte, Maschinen zu finden, auf denen die Installation bestimmter Anwendungen die PATH-Variable geändert und die Maschine angreifbar gemacht hat, gilt der Angriffsvektor nur für bestimmte Szenarien. Die Kombination dieses Angriffs mit LocalPotato ermöglicht es uns, diese Einschränkung zu überwinden und einen voll funktionsfähigen Privilegienausweitungs-Exploit zu haben.
StorSvc und DLL-Hijacking Wie von BlackArrowSec entdeckt (https://github.com/blackarrowsec/redteam-research/tree/26e6fc0c0d30d364758fa11c2922064a9a7fd309/LPE via StorSvc), kann ein Angreifer einen RPC-Aufruf an die Methode "SvcRebootToFlashingMode" des Dienstes "StorSvc" senden, der wiederum den Versuch auslöst, eine fehlende DLL namens "SprintCSP.dll" zu laden. Falls Sie mit RPC nicht vertraut sind: Stellen Sie es sich wie eine API vor, die Funktionen bereitstellt, sodass sie remote verwendet werden können. In diesem Fall stellt der StorSvc-Dienst die Methode SvcRebootToFlashingMode zur Verfügung, die jeder mit Zugriff auf die Maschine aufrufen kann. Da StorSvc mit SYSTEM-Berechtigungen läuft, führt die Erstellung von SprintCSP.dll irgendwo im PATH dazu, dass sie geladen wird, sobald ein Aufruf von SvcRebootToFlashingMode erfolgt.
Kompilieren des Exploits Exploit-Link – (https://github.com/decoder-it/LocalPotato) Um diesen Exploit zu nutzen, müssen Sie zuerst beide bereitgestellten Dateien kompilieren:
Beginnen wir mit "RpcClient.exe". Wie bereits erwähnt, müssen wir den Exploit je nach Windows-Version des Zielcomputers ändern. Dazu müssen wir die ersten Zeilen von "LPE via StorSvc\RpcClient\RpcClient\storsvc_c.c" ändern, sodass das richtige Betriebssystem ausgewählt wird. Dadurch wird der Exploit so eingestellt, dass er die richtige RPC-Schnittstellenkennung verwendet. Nachdem der Code korrigiert wurde, öffnen wir eine Entwickler-Eingabeaufforderung und erstellen das Projekt mit dem folgenden Befehl: Befehle: C:\LPE via StorSvc\RpcClient> msbuild RpcClient.sln C:\LPE via StorSvc\RpcClient> move x64\Debug\RpcClient.exe C:\Users\user\Desktop\ (Die kompilierte ausführbare Datei befindet sich auf Ihrem Desktop.)
Um nun "SprintCSP.dll" zu kompilieren, müssen wir nur die Funktion "DoStuff()" in "C:\LPE via StorSvc\SprintCSP\SprintCSP\main.c" ändern, sodass sie einen Befehl ausführt, der uns privilegierten Zugriff auf die Maschine verschafft. Der Einfachheit halber lassen wir die DLL unseren aktuellen Benutzer zur Gruppe "Administratoren" hinzufügen. Wir können auch eine Reverse-Shell von diesem Ziel zu unserer Maschine erhalten. Wir kompilieren die DLL nun mit dem folgenden Befehl und verschieben das Ergebnis zurück auf unseren Desktop: Befehle: C:\LPE via StorSvc\SprintCSP> msbuild SprintCSP.sln C:\LPE via StorSvc\SprintCSP> move x64\Debug\SprintCSP.dll C:\Users\user\Desktop\
Wir sind nun bereit, den Exploit zu starten. Stellen Sie sicher, dass Sie die Dateien "LocalPotato.exe", "RpcClient.exe" und "SprintCSP.dll" haben.
Erkennung & Eindämmung
Erkennung Nachdem wir nun verstanden haben, wie der LocalPotato-Exploit funktioniert und wie er mit dem StorSrv-Dienst verkettet werden kann, um als SYSTEM Code auszuführen, ist es an der Zeit zu sehen, wie dies im System erkannt werden kann und wie solche Angriffe verhindert werden können.
YARA-Regel: Da dieser Angriff eine ausführbare Datei beinhaltet, die mit Argumenten im Befehlszeilenterminal ausgeführt wird, wären zwei gängige Methoden zur Erkennung dieser Aktivität die Verwendung des Mustermatching-Tools YARA zur Erkennung der Dateimuster und die Untersuchung der Ereignisse, die durch die Ausführung dieses Hacking-Tools localpotato.exe generiert werden. Da der Angriff das Hacking-Tool namens localpotato.exe verwendet, können wir eine YARA-Regel erstellen, um das Vorhandensein dieses Tools im System mithilfe von YARA oder anderen Erkennungstools wie THOR zu überprüfen, um den Host zu scannen. (Die YARA-Regel ist in diesem Repository enthalten. Diese minimale Regel sucht nach häufigen Zeichenfolgenmustern in der ausführbaren Datei localpotato.)
Sigma-Regel: SIGMA ist eine generische Signatursprache, mit der Erkennungsregeln basierend auf den in Ereignisprotokollen gefundenen Mustern geschrieben werden können. Um LocalPotato im Netzwerk zu erkennen, wird erwartet, dass eine zentralisierte Protokollüberwachung eingerichtet ist. Die folgende SIGMA-Regel stammt aus dem offiziellen SIGMA-Repository (https://github.com/SigmaHQ/sigma/blob/master/rules/windows/process_creation/proc_creation_win_hktl_localpotato.yml).
Wir können diese Sigma-Regeln in das vorhandene Erkennungs-/Überwachungstool konvertieren und die Ereignisprotokolle durchsuchen, um nach potenziellen Angriffen zu jagen.
Eindämmung