
Una recreación personalizada/mejorada de la cadena de exploits APT "Double Star" de Darkhotel, enfocada en Windows 8.1 y combinada con algunas técnicas propias.
________ . . _________ __
_____ \ ____ __ _ | | | ____ / // | _____ _______
| | \ / _ \ | | | __ \ | | / __ \ _ \ \ \ \ _ __
| ` ( <_> )| | /| _\ | |\ / / \ | | / __ _| | /
/____ / _/ |/ | /|/ ___ > /___ / || (____ /||
/ / / / /
Cadena de explotación RCE de IE/Firefox en Windows 8.1 -> Evasión de sandbox -> EoP a SYSTEM
______________
| Remote PAC |
|____________|
^
| HTTPS
_______________ RPC/ALPC _______________ RPC/ALPC _______________ | firefox.exe | ----------> | svchost.exe | -----------> | spoolsv.exe | || || <----------- || | RPC/Pipe | _______________ | | malware.exe | <---| Execute impersonating NT AUTHORY\SYSTEM ||
~
Uso
Para ejecutar esta cadena de explotación, descargue la estructura completa de release/carpeta en una máquina Windows 8.1 x64 sin parchear y cargue cualquiera de estos dos archivos .html mientras esté conectado a Internet:
La RCE inicial puede ejecutarse a través de IE o FF, y dará como resultado la ejecución de un proceso cmd.exe en su sesión de usuario con privilegios NT AUTHORY\SYSTEM.
Los exploits individuales se han probado con éxito en el siguiente contexto:
Tenga en cuenta que, aunque los exploits individuales pueden funcionar en varias versiones de Windows, la cadena completa solo funcionará en Windows 8.1.
~
Descripción general
Aunque esta cadena de explotación utiliza dos exploits 0day (ya parcheados), también contiene una técnica de evasión de sandbox y EoP que, a fecha de 5/4/2021, siguen sin parchear y siguen siendo viables para su integración en futuras cadenas de ataque.
El grupo APT Darkhotel (del que se cree que se originó en Corea del Sur) lanzó una campaña contra ejecutivos empresariales y funcionarios gubernamentales chinos y japoneses mediante una combinación de spear phishing y piratería de redes de hoteles de lujo a principios de 2020. Los exploits que utilizaron (CVE-2020-0674 y CVE-2019-17026, denominados conjuntamente "Double Star") eran ligeras variaciones 0day de exploits antiguos/existentes de 2019: concretamente, errores de UAF en el motor JavaScript heredado (jscript.dll) y errores de alias en el motor IonMonkey de Firefox.
Lo que hizo interesante el uso de estos 0day fue más allá de su capacidad para lograr RCE a través de los navegadores web Internet Explorer y Firefox: CVE-2020-0674 en particular (un UAF en el motor heredado jscript.dll) es explotable en cualquier proceso en el que se pueda ejecutar código JS heredado mediante jscript.dll. A finales de 2017, Google Project Zero publicó una entrada de blog titulada "aPAColypse now: Exploiting Windows 10 in a Local Network with WPAD/PAC and JScript" [1].
Esta investigación sacó a la luz un vector de ataque muy interesante que (en ese momento) afectaba a todas las versiones de Windows desde 7 en adelante: el servicio WPAD (o "WinHTTP Web Proxy Auto-Discovery Service") contiene una funcionalidad antigua para actualizar configuraciones de proxy mediante un archivo "PAC". Cualquier usuario que pueda comunicarse con el servicio WPAD (que se ejecuta dentro de un proceso svchost.exe como LOCAL SERVICE) a través de RPC puede obligarlo a descargar un archivo PAC desde una URL remota que contenga código JS responsable de establecer la configuración de proxy correcta para una URL proporcionada por el usuario. Cabe destacar que el motor heredado jscript.dll se utiliza para analizar estos archivos PAC.
Esto abrió un vector de ataque en el que cualquier proceso (independientemente de los privilegios limitados del usuario o incluso del sandboxing) podía conectarse al servicio WPAD local a través de ALPC y obligarlo a descargar un archivo PAC malicioso que contuviera un exploit de jscript.dll desde una URL remota. Esto daría como resultado la ejecución de código en el contexto de LOCAL SERVICE.
Darkhotel tomó este concepto y lo utilizó como evasión de sandbox después de obtener RCE a través de Firefox o Internet Explorer. El siguiente paso en su cadena de ataque no está claro: parece que de algún modo elevaron sus privilegios de LOCAL SERVICE a SYSTEM y procedieron a ejecutar su malware desde este contexto. En todo el análisis de la cadena de ataque Darkhotel Double Star, no pude encontrar una explicación detallada de cómo lograron esto, sin embargo, es seguro asumir que su técnica no tuvo por qué ser un exploit 0day. Los procesos lanzados por la cuenta LOCAL SERVICE reciben el privilegio SeImpersonate de forma predeterminada y, por lo tanto, pueden elevar su contexto de seguridad en caso de que puedan coercionar una conexión privilegiada hacia ellos mismos mediante named pipes o ALPC.
Es probable que el grupo APT Darkhotel utilizara Rotten Potato para su EoP desde LOCAL SERVICE, ya que era la técnica más simple y común en uso generalizado hace varios años (además de la técnica utilizada en la investigación "aPAColypse now" de Google Project Zero, sin embargo, me decidí por una técnica más robusta/moderna: la suplantación de named pipe de una conexión RPC coercionada desde Print Spooler [2]. Esta técnica combinaba una antigua interfaz RPC popular entre los Red Teamers para la recolección de TGT en entornos con delegación sin restricciones habilitada (también conocido como el "Printer Bug") con un ataque de estilo suplantación/Rotten Potato adaptado para la escalada de privilegios local.
Además, en lugar de apuntar a Windows 7, decidí centrarme en Windows 8.1 debido al desafío que presentan sus mitigaciones de seguridad mejoradas, como LFH no determinista, ASLR de alta entropía y Control Flow Guard (CFG).
~
CVE-2020-0674
Archivo PAC malicioso que contiene el exploit UAF CVE-2020-0674: descargado en el servicio WPAD svchost.exe (LOCAL SERVICE) mediante un disparador RPC. Contiene el shellcode de la etapa tres (Spool Potato EoP). Este exploit puede cumplir un doble propósito como vector de ataque RCE inicial a través de IE11 de 64 bits también.
_______________ RPC _______________ CVE-2020-0674 ________________ | firefox.exe | -----> | svchost.exe | ---------------> | Spool Potato | || || | shellcode | |______________| ~
CVE-2019-17026
RCE de Firefox de 64 bits por confusión de tipos/JIT de IonMonkey. Representa el vector de ataque inicial cuando un usuario visita una página web infectada con una versión vulnerable de Firefox. Este componente contiene un shellcode de etapa uno (egg hunter) y otro de etapa dos (evasión de sandbox WPAD), este último solo es efectivo en Windows 8.1 debido a los detalles de la interfaz RPC IDL codificados para WPAD.
_______________ JIT spray ______________ DEP bypass _______________________ | firefox.exe | -----------> | Egg hunter | ------------> | WPAD sandbox escape | |___________| | shellcode | | shellcode (heap) | |________| |___________________|
~
Payloads
Esta cadena de explotación tiene tres payloads de shellcode, que se encuentran dentro de este repositorio en Payloads\Compiled\JS en su forma de shellcode codificado en JavaScript:
Cuando se utiliza IE como vector de ataque RCE inicial, solo se necesitan los shellcodes de las etapas dos y tres. Cuando se utiliza FF como vector de ataque RCE inicial, se utilizan los tres.
También he incluido varios shellcodes adicionales para fines de prueba (un shellcode MessageBoxA y WinExec). Tenga en cuenta que, al usarlos, en el caso de Firefox CVE-2019-17026, el shellcode debe representarse como un Uint8Array precedido por el siguiente egg QWORD: 0x8877665544332211. En el caso de CVE-2020-0674, el shellcode debe representarse como una matriz DWORD.
También tenga en cuenta que, al usar un payload WinExec o MessageBoxA junto con Firefox CVE-2019-17026, primero debe ajustar el nivel de contenido del sandbox en "about:config" a 2.
~
Créditos
maxpl0it - por escribir el análisis inicial y el PoC para CVE-2019-17026 con un enfoque en el sistema operativo Linux, y por escribir el análisis inicial y el PoC para CVE-2020-0674 con un enfoque en IE8/11 en Windows 7 x64.
0vercl0k - por documentar los internals de IonMonkey en relación con el aliasing y el GVN.
HackSys Team - por consejos sobre el servicio WPAD y la depuración de JS de bajo nivel.
itm4n - por la investigación original sobre la combinación del bug de impresora RPC con la suplantación de named pipe.
~
Enlaces
[1] https://googleprojectzero.blogspot.com/2017/12/apacolypse-now-exploiting-windows-10-in_18.html [2] https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/