
Eine personalisierte/verbesserte Nachbildung der Darkhotel-„Double Star“-APT-Exploit-Kette mit Schwerpunkt auf Windows 8.1 und kombiniert mit einigen meiner eigenen Techniken.
________ . . _________ __
_____ \ ____ __ _ | | | ____ / // | _____ _______
| | \ / _ \ | | | __ \ | | / __ \ _ \ \ \ \ _ __
| ` ( <_> )| | /| _\ | |\ / / \ | | / __ _| | /
/____ / _/ |/ | /|/ ___ > /___ / || (____ /||
/ / / / /
Windows 8.1 IE/Firefox-RCE -> Sandbox-Escape -> SYSTEM-EoP-Exploit-Kette
______________
| Remote PAC |
|____________|
^
| HTTPS
_______________ RPC/ALPC _______________ RPC/ALPC _______________ | firefox.exe | ----------> | svchost.exe | -----------> | spoolsv.exe | || || <----------- || | RPC/Pipe | _______________ | | malware.exe | <---| Execute impersonating NT AUTHORY\SYSTEM ||
~
Verwendung
Um diese Exploit-Kette auszuführen, laden Sie die vollständige Release-/Ordnerstruktur auf einen nicht gepatchten Windows-8.1-x64-Rechner herunter und öffnen Sie eine dieser beiden .html-Dateien, während Sie mit dem Internet verbunden sind:
Die anfängliche RCE kann entweder über IE oder FF ausgeführt werden und führt zur Ausführung eines cmd.exe-Prozesses in Ihrer Benutzersitzung mit NT-AUTHORY\SYSTEM-Berechtigungen.
Die einzelnen Exploits wurden erfolgreich in folgendem Kontext getestet:
Beachten Sie, dass die einzelnen Exploits zwar unter mehreren Windows-Versionen funktionieren können, die vollständige Kette jedoch nur unter Windows 8.1 funktioniert.
~
Übersicht
Obwohl diese Exploit-Kette zwei (inzwischen gepatchte) 0-Day-Exploits verwendet, enthält sie auch eine Sandbox-Escape- und eine EoP-Technik, die Stand 5/4/2021 weiterhin nicht gepatcht sind und auch heute noch für die Integration in zukünftige Angriffsketten geeignet sind.
Die APT-Gruppe Darkhotel (vermutlich aus Südkorea stammend) startete Anfang 2020 eine Kampagne gegen chinesische und japanische Wirtschaftsführer und Regierungsbeamte, die eine Kombination aus Spear-Phishing und dem Hacken von Luxushotel-Netzwerken nutzte. Die von ihnen verwendeten Exploits (CVE-2020-0674 und CVE-2019-17026, zusammen als „Double Star“ bezeichnet) waren leichte 0-Day-Variationen alter/bestehender Exploits aus dem Jahr 2019: konkret UAF-Bugs in der alten JavaScript-Engine (jscript.dll) und Aliasing-Bugs in der Firefox-IonMonkey-Engine.
Was die Verwendung dieser 0-Days interessant machte, ging über ihre Fähigkeit hinaus, über die Webbrowser Internet Explorer und Firefox RCE zu erzielen: Insbesondere CVE-2020-0674 (ein UAF in der alten jscript.dll-Engine) ist in jedem Prozess ausnutzbar, in dem alter JS-Code über jscript.dll ausgeführt werden kann. Ende 2017 veröffentlichte Google Project Zero einen Blogbeitrag mit dem Titel „aPAColypse now: Exploiting Windows 10 in a Local Network with WPAD/PAC and JScript“ [1].
Diese Forschung brachte einen sehr interessanten Angriffsvektor ans Licht, der (damals) alle Windows-Versionen ab 7 betraf: Der WPAD-Dienst (bzw. „WinHTTP Web Proxy Auto-Discovery Service“) enthält eine uralte Funktionalität zum Aktualisieren von Proxy-Konfigurationen über eine „PAC“-Datei. Jeder Benutzer, der über RPC mit dem WPAD-Dienst (der innerhalb eines svchost.exe-Prozesses als LOCAL SERVICE läuft) kommunizieren kann, kann ihn dazu zwingen, eine PAC-Datei von einer entfernten URL herunterzuladen, die JS-Code enthält, der für das Festlegen der korrekten Proxy-Konfiguration für eine vom Benutzer angegebene URL verantwortlich ist. Besonders bemerkenswert ist, dass die alte jscript.dll-Engine zum Parsen dieser PAC-Dateien verwendet wird.
Dies eröffnete einen Angriffsvektor, bei dem jeder Prozess (unabhängig von eingeschränkten Benutzerrechten oder gar Sandboxing) über ALPC eine Verbindung zum lokalen WPAD-Dienst herstellen und ihn dazu zwingen konnte, eine bösartige PAC-Datei mit einem jscript.dll-Exploit von einer entfernten URL herunterzuladen. Dies würde zu einer Codeausführung im Kontext von LOCAL SERVICE führen.
Darkhotel übernahm dieses Konzept und nutzte es als Sandbox-Escape, nachdem sie über Firefox oder Internet Explorer RCE erlangt hatten. Der nächste Schritt ihrer Angriffskette ist unklar: Es scheint, dass sie ihre Privilegien irgendwie von LOCAL SERVICE auf SYSTEM erhöhten und anschließend ihre Malware aus diesem Kontext heraus ausführten. In der gesamten Analyse der Darkhotel-Double-Star-Angriffskette konnte ich keine detaillierte Erklärung dafür finden, wie sie dies erreichten; es ist jedoch davon auszugehen, dass ihre Technik kein 0-Day-Exploit gewesen sein muss. Prozesse, die vom Konto LOCAL SERVICE gestartet werden, erhalten standardmäßig das SeImpersonate-Privileg und können daher ihren Sicherheitskontext erhöhen, sofern sie über Named Pipes oder ALPC eine privilegierte Verbindung zu sich selbst erzwingen können.
Es ist wahrscheinlich, dass die APT-Gruppe Darkhotel für ihre EoP von LOCAL SERVICE Rotten Potato verwendete, da dies vor einigen Jahren die einfachste und am weitesten verbreitete Technik war (ebenso wie die in der Google-Project-Zero-Forschung „aPAColypse now“ verwendete Technik). Ich entschied mich jedoch stattdessen für eine robustere/modernere Technik: Named-Pipe-Impersonation einer erzwungenen RPC-Verbindung vom Print Spooler [2]. Diese Technik kombinierte eine alte RPC-Schnittstelle, die bei Red Teamern für das Sammeln von TGTs in Umgebungen mit aktivierter uneingeschränkter Delegierung beliebt ist (auch bekannt als „Printer Bug“), mit einem für die lokale Privilegienerweiterung angepassten Impersonation-/Rotten-Potato-Angriff.
Darüber hinaus habe ich mich anstelle von Windows 7 auf Windows 8.1 konzentriert, da dessen verbesserte Sicherheitsmaßnahmen wie nicht-deterministischer LFH, ASLR mit hoher Entropie und Control Flow Guard (CFG) eine besondere Herausforderung darstellen.
~
CVE-2020-0674
Bösartige PAC-Datei, die den CVE-2020-0674-UAF-Exploit enthält - wird per RPC-Trigger in den WPAD-Dienst svchost.exe (LOCAL SERVICE) heruntergeladen. Enthält Stage-Three-Shellcode (Spool Potato EoP). Dieser Exploit kann außerdem als anfänglicher RCE-Angriffsvektor über IE11 64-bit dienen.
_______________ RPC _______________ CVE-2020-0674 ________________ | firefox.exe | -----> | svchost.exe | ---------------> | Spool Potato | || || | shellcode | |______________| ~
CVE-2019-17026
Firefox-64-bit-IonMonkey-JIT-/Type-Confusion-RCE. Stellt den anfänglichen Angriffsvektor dar, wenn ein Benutzer mit einer verwundbaren Firefox-Version eine infizierte Webseite besucht. Diese Komponente enthält einen Stage-One-Shellcode (Egg Hunter) und einen Stage-Two-Shellcode (WPAD-Sandbox-Escape); letzterer ist aufgrund hartcodierter RPC-IDL-Schnittstellendetails für WPAD nur unter Windows 8.1 wirksam.
_______________ JIT spray ______________ DEP bypass _______________________ | firefox.exe | -----------> | Egg hunter | ------------> | WPAD sandbox escape | |___________| | shellcode | | shellcode (heap) | |________| |___________________|
~
Payloads
Diese Exploit-Kette enthält drei Shellcode-Payloads, die in diesem Repository unter Payloads\Compiled\JS in ihrer JavaScript-codierten Shellcode-Form zu finden sind:
Wenn IE als anfänglicher RCE-Angriffsvektor verwendet wird, werden nur die Shellcodes der Stufen zwei und drei benötigt. Wenn FF als anfänglicher RCE-Angriffsvektor verwendet wird, werden alle drei verwendet.
Ich habe außerdem mehrere zusätzliche Shellcodes zu Testzwecken beigefügt (einen MessageBoxA- und einen WinExec-Shellcode). Beachten Sie bei deren Verwendung, dass der Shellcode im Fall von Firefox CVE-2019-17026 als Uint8Array dargestellt werden sollte, dem das folgende Egg-QWORD vorangestellt ist: 0x8877665544332211. Im Fall von CVE-2020-0674 sollte der Shellcode als DWORD-Array dargestellt werden.
Beachten Sie außerdem, dass Sie bei Verwendung eines WinExec- oder MessageBoxA-Payloads in Verbindung mit Firefox CVE-2019-17026 zunächst die Sandbox-Content-Stufe in „about:config“ auf 2 herabsetzen müssen.
~
Credits
maxpl0it - für die Erstellung der ersten Analyse und des PoC für CVE-2019-17026 mit Fokus auf dem Linux-Betriebssystem sowie für die Erstellung der ersten Analyse und des PoC für CVE-2020-0674 mit Fokus auf IE8/11 unter Windows 7 x64.
0vercl0k - für die Dokumentation der IonMonkey-Interna in Bezug auf Aliasing und das GVN.
HackSys Team - für Tipps zum WPAD-Dienst und Low-Level-JS-Debugging.
itm4n - für die ursprüngliche Forschung zur Kombination des RPC-Printer-Bugs mit Named-Pipe-Impersonation.
~
Links
[1] https://googleprojectzero.blogspot.com/2017/12/apacolypse-now-exploiting-windows-10-in_18.html [2] https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/