REW-sploit Emular y Diseccionar MSF y otros Ataques
REW-sploit Emular y Diseccionar MSF y otros Ataques

REW-sploit: Emular y Diseccionar MSF y *otros* Ataques

La herramienta ha sido presentada en Black-Hat Arsenal USA 2021- Ver aquí.

Las diapositivas de la presentación están disponibles en https://github.com/REW-sploit/REW-sploit_docs

¿Necesitas ayuda para analizar el shellcode de Windows o un ataque procedente de Metasploit Framework o Cobalt Strike (o puede ser también otro código malicioso u ofuscado)? ¿Necesitas automatizar tareas con scripts simples? ¿Quiere sayuda para descifrar el tráfico generado por MSF extrayendo las claves de las cargas útiles (payloads)?

REW-sploit está aquí para ayudar a los equipos azules o Blue Teams.

Aquí una demostración rápida:

Instalar REW-sploit

La instalación es muy sencilla. Sugiero encarecidamente crear un Env Python específico para ello:

# python -m venv <your-env-path>/rew-sploit
# source <your-env-path>/bin/activate
# git clone https://github.com/REW-sploit/REW-sploit.git
# cd REW-sploit
# pip install -r requirements.txt
# ./apply_patch.py -f
# ./rew-sploit

Si lo prefieres, puedes utilizar el Dockerfile. Para crear la imagen:

docker build -t rew-sploit/rew-sploit .

y luego iniciarlo (compartiendo la carpeta /tmp/):

docker run --rm -it --name rew-sploit -v /tmp:/tmp rew-sploit/rew-sploit

Verás un script apply_patch.py en la secuencia de instalación. Esto es necesario para aplicar un pequeño parche al speakeasy-emulator (https://github.com/fireeye/speakeasy/) para hacerlo compatible con REW-sploit. Puedes revertir fácilmente el parche con ./apply_patch.py -r si es necesario.

Opcionalmente, también puedes instalar Cobalt-Strike Parser:

# cd REW-sploit/extras
# git clone https://github.com/Sentinel-One/CobaltStrikeParser.git

A hombros de gigantes

REW-sploit se basa en un par de grandes frameworks, Unicorn y speakeasy-emulator (pero también en otras librerías).

Cómo Funciona

En general podemos decir que mientras los Equipos Rojos o Red Teams tienen muchas herramientas que les ayudan a “automatizar” los ataques, los Equipos Azules o Blue Team están un poco “sin herramientas”. Así que, lo que se ha pensado es construir algo que ayude al análisis de los equipos azules.

REW-sploit puede obtener un shellcode/DLL/EXE, emular la ejecución, y darte un conjunto de información para ayudarte a entender lo que está pasando. Ejemplos de información extraída son:

  • Llamadas a la API
  • Claves de cifrado utilizadas por las cargas útiles de MSF
  • Segunda etapa descifrada procedente de MSF
  • Configuraciones de Cobalt-Strike (si el CobaltStrikeParser está instalado)

Puede encontrar varios ejemplos sobre las capacidades actuales aquí abajo:

Soporte de Donut

Ya conoces el paquete Donut, capaz de crear PIC desde EXE, DLL, VBScript y JScript.

Donut, para evadir la detección, utiliza una enumeración de exportaciones de la API basada en hashes calculados en cada nombre de la API, como hacen muchos PIC. Esto es muy intensivo para la CPU (especialmente en un entorno emulado como REW-sploit). Así que el autor implementó una especie de atajo (cambiado desde la versión 0.3.3) para desenganchar algunas de las partes más lentas de la emulación cuando se detecta un stub de Donut.

Además, para poder completar correctamente la emulación, es necesario dar a Speakeasy la DLL para obtener las exportaciones completas. Para ello copia las siguientes DLLs

kernel32.dll
mscoree.dll
ole32.dll
oleaut32.dll
wininet.dll

en la carpeta de Speakeasy winenv/decoys/amd64 y/o winenv/decoys/x86 (ver el README de Speakeasy para más detalles). Si no los necesitas, no dejes los DLLs allí, en otro caso pueden ralentizar la emulación.

Un Par de Palabras sobre el Rendimiento

Obviamente la emulación ralentiza todo. Además, enganchar cada instrucción para interactuar con la ejecución, hace las cosas aún más lentas. En general, esto funciona bien con código shell pequeño, pero tiene algunos problemas con código complejo. Por eso el autor ha añadido una opción para desactivar el hooking para acelerar la ejecución:

emulate_payload -P <ruta_archivo> -U 0

De esta manera puedes obtener una imagen de lo que el código emulado está haciendo (con el seguimiento de la API), pero no se hará nada más (no habrá fixups, ni extracciones de claves, etc). Si se especifica algo diferente a 0 el hooking se volverá a activar cuando el IP (puntero de instrucción) alcance la dirección especificada (los fixups se aplicarán desde la misma dirección).

Personalizar las Reglas de YARA

El archivo modules/emulate_rules.py contiene las reglas YARA utilizadas para interceptar la parte interesante del código, con el fin de implementar la instrumentación. El autor ha intentado comentar al máximo estas secciones para que puedas crear tu propia regla (por favor, compártelas con un pull request si crees que pueden ayudar a otros). Por ejemplo:

#
# Payload Name: [MSF] windows/meterpreter/reverse_tcp_rc4
# Search for  : mov esi,dword ptr [esi]
#               xor esi,0x<const>
# Used for    : this xor instruction contains the constant used to
#               encrypt the lenght of the payload that will be sent as 2nd
#               stage
# Architecture: x32
#
yara_reverse_tcp_rc4_xor_32 = 'rule reverse_tcp_rc4_xor {                \
                               strings:                                  \
                                   $opcodes_1 = { 8b 36                  \
                                                  81 f6 ?? ?? ?? ?? }    \
                               condition:                                \
                                   $opcodes_1 }'

Por favor, abre los Issues si encuentras algo que no funciona o que se puede mejorar. Gracias.

Mi Carro Close (×)

Tu carrito está vacío
Ver tienda