
Windows – Instrumentalisierung privilegierter Dateischreibvorgänge mit dem Update Session Orchestrator-Dienst
⚠️ 2020-06-06 Update: dieser Trick funktioniert nicht mehr auf den neuesten Builds der Windows 10 Insider Preview. Das bedeutet, dass er zwar auf der Mainstream-Version von Windows 10 noch funktioniert, Sie aber davon ausgehen sollten, dass er in den kommenden Monaten gepatcht wird.
Dieses PoC zeigt eine Technik, mit der sich privilegierte Dateischreib-Schwachstellen unter Windows ausnutzen lassen. Es bietet eine Alternative zum DiagHub-DLL-Lade-Exploit von James Forshaw (auch bekannt als @tiraniddo), der von Microsoft ab Build-Version 1903 behoben wurde.
Ab Windows 10 hat Microsoft den Update Session Orchestrator-Dienst eingeführt. Als normaler Benutzer können Sie über COM mit diesem Dienst interagieren und z. B. einen "Update-Scan" starten (d. h. prüfen, ob Updates verfügbar sind) oder den Download ausstehender Updates starten. Es gibt sogar ein undokumentiertes integriertes Tool namens usoclient.exe, das diesem Zweck dient.
Aus Sicht eines Angreifers ist dieser Dienst interessant, da er als NT AUTHORITY\System läuft und bei jeder Erstellung einer Update-Session versucht, eine nicht existierende DLL (windowscoredeviceinfo.dll) zu laden.
Das bedeutet, dass wir, wenn wir eine privilegierte Dateischreib-Schwachstelle in Windows oder in Drittanbietersoftware finden, unsere eigene Version von windowscoredeviceinfo.dll in C:\Windows\Sytem32\ kopieren und sie dann vom USO-Dienst laden lassen könnten, um Code als NT AUTHORITY\System auszuführen.
Weitere Informationen:
Teil 1 - https://itm4n.github.io/usodllloader-part1/
Teil 2 - https://itm4n.github.io/usodllloader-part2/
Diese Lösung besteht aus zwei Projekten: WindowsCoreDeviceInfo und UsoDllLoader.
Es stellt eine PoC-DLL bereit, die eine Bind-Shell auf Port 1337 (nur localhost) startet, sobald die Funktion QueryDeviceInformation() aufgerufen wird. Dies ist der Name der Funktion, die von den USO-Workern verwendet wird.
Es ist eine abgespeckte Version von usoclient.exe. Es kann als normaler Benutzer ausgeführt werden, um mit dem USO-Dienst zu interagieren und ihn zu veranlassen, windowscoredeviceinfo.dll zu laden. Anschließend wird versucht, eine Verbindung zur Bind-Shell herzustellen. Bei Fehlern lesen Sie bitte den Abschnitt "Bekannte Probleme".
Die Lösung ist bereits vorkonfiguriert, sodass die Kompilierung einfach sein sollte. Ich verwende Visual Studio 2019. Es könnte mit älteren Versionen nicht funktionieren.
Release und die Architektur x64..\x64\Release\WindowsCoreDeviceInfo.dll und der Loader .\x64\Release\UsoDllLoader.exe.Zu Testzwecken können Sie:
WindowsCoreDeviceInfo.dll nach C:\Windows\System32\.NT AUTHORITY\SYSTEM.Falls UsoDllLoader.exe fehlschlägt, können Sie die obigen Schritte manuell durchführen.
WindowsCoreDeviceInfo.dll nach C:\Windows\System32\.usoclient StartInteractiveScan. Beachten Sie, dass Sie keine Rückmeldung vom Befehl erhalten.nc.exe 127.0.0.1 1337, um eine Verbindung zur Bind-Shell herzustellen.Diese Methode wird wahrscheinlich fehlschlagen, wenn ein oder mehrere Updates auf die Installation warten oder gerade installiert werden.
Abhängig von der Windows-Version kann UsoDllLoader.exe mit verschiedenen Fehlercodes fehlschlagen. Ich habe diese Probleme nicht allzu sehr untersucht. Der Grund dafür ist, dass es sich nur um ein PoC handelt, das ich aus Bequemlichkeit entwickelt habe. Am wichtigsten ist die DLL, nicht der Loader. Siehe "Verwendung 2" für weitere Details.