
Une recréation personnalisée/améliorée de la chaîne d'exploitation APT « Double Star » de Darkhotel, axée sur Windows 8.1 et mélangée à certaines de mes propres techniques.
________ . . _________ __
_____ \ ____ __ _ | | | ____ / // | _____ _______
| | \ / _ \ | | | __ \ | | / __ \ _ \ \ \ \ _ __
| ` ( <_> )| | /| _\ | |\ / / \ | | / __ _| | /
/____ / _/ |/ | /|/ ___ > /___ / || (____ /||
/ / / / /
Windows 8.1 IE/Firefox RCE -> Évasion de sandbox -> Chaîne d'exploitation EoP SYSTEM
______________
| Remote PAC |
|____________|
^
| HTTPS
_______________ RPC/ALPC _______________ RPC/ALPC _______________ | firefox.exe | ----------> | svchost.exe | -----------> | spoolsv.exe | || || <----------- || | RPC/Pipe | _______________ | | malware.exe | <---| Execute impersonating NT AUTHORY\SYSTEM ||
~
Usage
Pour exécuter cette chaîne d'exploitation, téléchargez l'arborescence complète du dossier de la version sur une machine Windows 8.1 x64 non patchée et chargez l'un de ces deux fichiers .html tout en étant connecté à Internet :
Le RCE initial peut être lancé via IE ou FF, et aboutira à l'exécution d'un processus cmd.exe dans votre session utilisateur avec les privilèges NT AUTHORY\SYSTEM.
Les exploits individuels ont été testés avec succès dans le contexte suivant :
Notez que même si les exploits individuels peuvent fonctionner sur plusieurs versions de Windows, la chaîne complète ne fonctionnera que sur Windows 8.1.
~
Aperçu
Bien que cette chaîne d'exploitation utilise deux exploits 0day (désormais corrigés), elle contient également une technique d'évasion de sandbox et d'EoP qui, au 5/4/2021, ne sont toujours pas corrigées et restent envisageables pour intégration dans de futures chaînes d'attaque aujourd'hui.
Le groupe APT Darkhotel (que l'on croit originaire de Corée du Sud) a lancé une campagne contre des dirigeants d'entreprises chinois et japonais et des responsables gouvernementaux via une combinaison de spear phishing et de piratage de réseaux d'hôtels de luxe au début 2020. Les exploits qu'ils ont utilisés (CVE-2020-0674 et CVE-2019-17026, surnommés ensemble « Double Star ») étaient de légères variantes 0day d'anciens exploits existants de 2019 : plus précisément des bugs UAF dans l'ancien moteur JavaScript (jscript.dll) et des bugs d'aliasing dans le moteur IonMonkey de Firefox.
Ce qui rendait l'utilisation de ces 0day intéressante allait au-delà de leur capacité à réaliser une RCE via les navigateurs Internet Explorer et Firefox : CVE-2020-0674 en particulier (une UAF dans l'ancien moteur jscript.dll) est exploitable dans tout processus où du code JS hérité peut être exécuté via jscript.dll. Fin 2017, Google Project Zero a publié un article de blog intitulé "aPAColypse now: Exploiting Windows 10 in a Local Network with WPAD/PAC and JScript" [1].
Cette recherche a mis en lumière un vecteur d'attaque très intéressant qui (à l'époque) affectait toutes les versions de Windows à partir de 7 : le service WPAD (ou « WinHTTP Web Proxy Auto-Discovery Service ») contient une fonctionnalité ancienne permettant de mettre à jour les configurations de proxy via un fichier « PAC ». Tout utilisateur pouvant communiquer avec le service WPAD (s'exécutant dans un processus svchost.exe en tant que LOCAL SERVICE) via RPC peut le contraindre à télécharger un fichier PAC depuis une URL distante contenant du code JS chargé de définir la configuration de proxy correcte pour une URL fournie par l'utilisateur. Plus particulièrement, l'ancien moteur jscript.dll est utilisé pour analyser ces fichiers PAC.
Cela a ouvert un vecteur d'attaque dans lequel tout processus (indépendamment de privilèges utilisateur limités ou même d'un sandboxing) pouvait se connecter au service WPAD local via ALPC et le contraindre à télécharger un fichier PAC malveillant contenant un exploit jscript.dll depuis une URL distante. Cela aboutirait à une exécution de code dans le contexte de LOCAL SERVICE.
Darkhotel a repris ce concept et l'a utilisé comme évasion de sandbox après avoir obtenu une RCE via Firefox ou Internet Explorer. L'étape suivante de leur chaîne d'attaque n'est pas claire : il semble qu'ils aient en quelque sorte élevé leurs privilèges de LOCAL SERVICE à SYSTEM et aient ensuite exécuté leur malware depuis ce contexte. Dans toutes les analyses de la chaîne d'attaque Darkhotel Double Star, je n'ai pas trouvé d'explication détaillée de la manière dont ils y sont parvenus ; il est cependant raisonnable de supposer que leur technique n'avait pas besoin d'être un exploit 0day. Les processus lancés par le compte LOCAL SERVICE disposent par défaut du privilège SeImpersonate et peuvent donc élever leur contexte de sécurité s'ils parviennent à forcer une connexion privilégiée vers eux-mêmes via des named pipes ou ALPC.
Il est probable que le groupe APT Darkhotel ait utilisé Rotten Potato pour son EoP depuis LOCAL SERVICE, car c'était la technique la plus simple et la plus courante en usage répandu il y a plusieurs années (ainsi que la technique utilisée dans la recherche "aPAColypse now" de Google Project Zero, mais j'ai plutôt opté pour une technique plus robuste et moderne : l'usurpation de named pipe d'une connexion RPC forcée depuis le Print Spooler [2]. Cette technique combinait une ancienne interface RPC populaire parmi les Red Teamers pour la récolte de TGT dans les environnements avec délégation non contrainte activée (également appelée « Printer Bug ») avec une attaque de style impersonation/Rotten Potato adaptée à l'élévation de privilèges locale.
De plus, plutôt que de cibler Windows 7, j'ai décidé de me concentrer sur Windows 8.1 en raison du défi posé par ses mesures d'atténuation de sécurité renforcées, telles que la LFH non déterministe, l'ASLR à haute entropie et le Control Flow Guard (CFG).
~
CVE-2020-0674
Fichier PAC malveillant contenant l'exploit UAF CVE-2020-0674 - téléchargé dans le service WPAD svchost.exe (LOCAL SERVICE) via un déclencheur RPC. Contient le shellcode de l'étape 3 (Spool Potato EoP). Cet exploit peut servir à double usage comme vecteur d'attaque RCE initial via IE11 64-bit également.
_______________ RPC _______________ CVE-2020-0674 ________________ | firefox.exe | -----> | svchost.exe | ---------------> | Spool Potato | || || | shellcode | |______________|
~
CVE-2019-17026
RCE Firefox 64-bit IonMonkey JIT/Type Confusion. Représente le vecteur d'attaque initial lorsqu'un utilisateur visite une page web infectée avec une version vulnérable de Firefox. Ce composant contient un shellcode d'étape 1 (egg hunter) et un shellcode d'étape 2 (évasion de sandbox WPAD), ce dernier n'étant efficace que sur Windows 8.1 en raison des détails d'interface RPC IDL codés en dur pour WPAD.
_______________ JIT spray ______________ DEP bypass _______________________ | firefox.exe | -----------> | Egg hunter | ------------> | WPAD sandbox escape | |___________| | shellcode | | shellcode (heap) | |________| |___________________|
~
Payloads
Cette chaîne d'exploitation comporte trois payloads de shellcode, disponibles dans ce dépôt sous Payloads\Compiled\JS sous leur forme de shellcode encodé en JavaScript :
Lorsque IE est utilisé comme vecteur d'attaque RCE initial, seuls les shellcodes des étapes 2 et 3 sont nécessaires. Lorsque FF est utilisé comme vecteur d'attaque RCE initial, les trois sont utilisés.
J'ai également inclus plusieurs shellcodes supplémentaires à des fins de test (un shellcode MessageBoxA et WinExec). Notez que lors de leur utilisation, dans le cas de Firefox CVE-2019-17026, le shellcode doit être représenté comme un Uint8Array préfixé par le QWORD egg suivant : 0x8877665544332211. Dans le cas de CVE-2020-0674, le shellcode doit être représenté comme un tableau de DWORD.
Notez également que lors de l'utilisation d'un payload WinExec ou MessageBoxA en conjonction avec Firefox CVE-2019-17026, vous devez d'abord réduire le niveau de contenu du sandbox dans "about:config" à 2.
~
Crédits
maxpl0it - pour avoir rédigé l'analyse initiale et le PoC de CVE-2019-17026 en se concentrant sur le système d'exploitation Linux, et pour avoir rédigé l'analyse initiale et le PoC de CVE-2020-0674 en se concentrant sur IE8/11 sur Windows 7 x64.
0vercl0k - pour avoir documenté les mécanismes internes d'IonMonkey en relation avec l'aliasing et le GVN.
HackSys Team - pour les conseils sur le service WPAD et le débogage JS de bas niveau.
itm4n - pour la recherche originale sur la combinaison du bug RPC de l'imprimante avec l'usurpation de named pipe.
~
Liens
[1] https://googleprojectzero.blogspot.com/2017/12/apacolypse-now-exploiting-windows-10-in_18.html [2] https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/