REW dividido es una herramienta para emular y analizar MSF y diverso Ataques. Necesita ayuda para analizar el shellcode de Windows o los ataques de Marco de Metasploit o Huelga de cobalto (¿O podría ser también otro código malicioso u ofuscado)? ¿Necesita automatizar tareas con secuencias de comandos simples? ¿Le gustaría ayuda para descifrar? Médicos Sin Fronteras tráfico generado al extraer claves de cargas útiles?
REW dividido está aquí para ayudar a Blue Teams!
Instalar
La instalación es muy sencilla. Recomiendo encarecidamente crear un entorno Python específico para esto:
#python -m venv / rew-sploit
Activar #source / bin /
# git clone https://github.com/REW-sploit/REW-sploit.git
#cd REW-sploit
#pip install -r requirements.txt
#. / apply_patch.py -f
#. / rew-split
Puede usar el Dockerfile si lo desea. Para crear la imagen:
docker build -t rew-sploit / rew-sploit.
y luego empezar (compartir el /tmp/
Carpeta):
Docker ejecutar –rm -it –name rew-sploit -v / tmp: / tmp rew-sploit / rew-sploit
Se dieron cuenta apply_patch.py
Script en el orden de instalación. Esto es necesario para aplicar un pequeño parche a la speakeasy-emulator
(https://github.com/fireeye/speakeasy/) para que sea compatible con REW-sploit
. Puede restaurar fácilmente el parche con ./apply_patch.py -r
Si es requerido.
Opcionalmente, también puede instalar Cobalt-Strike Parser:
#cd REW-sploit / extras
# git clone https://github.com/Sentinel-One/CobaltStrikeParser.git
Pararse en los hombros de los gigantes
REW-sploit
basado en algunos marcos geniales, Unicorn
y speakeasy-emulator
(pero también otras bibliotecas). ¡Gracias a todos y gracias al movimiento OSS!
Cómo funciona
En general, podemos decir que mientras los Equipos Rojos tienen muchas herramientas para ayudarlos a «automatizar» los ataques, los Equipos Azules son un poco «sin herramientas». Así que pensé en construir algo para ayudar a Blue Team Analysis.
REW-sploit
puede obtener un shellcode / DLL / EXE, emular su ejecución y brindarle una variedad de información para ayudarlo a comprender lo que está sucediendo. Ejemplos de información extraída son:
- Llamadas a la API
- Clave de cifrado utilizada por Médicos Sin Fronteras Cargas útiles
- 2da etapa descifrada Médicos Sin Fronteras
- Configuraciones de Cobalt Strike (si está instalado el analizador CobaltStrike)
A continuación se muestran algunos ejemplos de las habilidades actuales:
- Extracción de clave RC4
- Extracción de clave RC4 + descifrado PCAP de segunda etapa
- Extracción de llaves ChaCha
- Descifrado de la sesión de Meterpreter (sin RSA)
- Emulación de baliza de impacto de cobalto
- Extracción de la configuración de impacto de cobalto
- Opciones de depuración
- Hilos de volcado
Soporte de donas
Probablemente esté familiarizado con el paquete donut que PIC puede crear a partir de EXE, DLL, VBScript y JScript.
Donut
para evitar la detección, utiliza una enumeración de exportación de API basada en hashes calculados para cada nombre de API, como es el caso de muchos PIC. Esto es muy intensivo en la CPU (especialmente en un entorno emulado como REW-sploit
). Entonces, saber qué API necesita Donut
stub (puede obtenerlo en donut.c), implementé un atajo para evitar el cálculo de hash cuando la API no es la lista en uso. Esto hace que la emulación sea mucho más rápida (incluso si lleva unos minutos).
Para completar correctamente la emulación, también debe proporcionar lo siguiente: Speakeasy
la DLL para obtener las exportaciones completas. Para hacer esto, copie las siguientes DLL
kernel32.dll
mscoree.dll
ole32.dll
oleaut32.dll
wininet.dll
haciendo Speakeasy
Carpeta winenv/decoys/amd64
y o winenv/decoys/x86
(Consulte el archivo README de Speakeasy para obtener más información). Cuando no los necesite, no deje los archivos DLL allí, ya que ralentizarán la emulación.
correcciones
En algunos casos, la emulación simplemente se detuvo por varias razones. En algunos casos, la ofuscación utilizó algunas técnicas que confundieron al motor de emulación. Así que implementé algunas correcciones ad hoc (puede habilitarlas haciendo clic en -F
Opción de emulate_payload
Mando). Las reparaciones se implementan en modules/emulate_fixups.py
. Ahora mismo tenemos
Problema de unicornio # 1092:
Corrección No. 1
Salida de unicornio # 1092 (comando XOR ejecutado dos veces)
https://github.com/unicorn-engine/unicorn/issues/1092
# 820 (Vista de memoria incorrecta después de ejecutar código de modificación automática)
https://github.com/unicorn-engine/unicorn/issues/820
Problema: Código de modificación automática en el mismo bloque traducido (¿16 bytes?)
Sí, lo sé … eso es un gran chisme …: – /
Problema con la emulación FPU:
Corrección # 2
Las instrucciones relacionadas con «fpu» (FPU / FNSTENV) a veces se utilizan para restaurar EIP
devuelve las direcciones incorrectas.
En este caso, necesito rastrear la primera instrucción FPU y luego colocarla
su dirección en STACK cuando se llama a FNSTENV
Pasando por alto la bandera de trampa:
# Reparación # 3
# Técnica de evitación para banderas trampa
#https: //unit42.paloaltonetworks.com/single-bit-trap-flag-intel-cpu/
# Llamar al RDTSC con la bandera de trampa activada conduce a una
#interrumpir. Código de muestra:
#pushf
# o dword [esp], 0x100
#popf
#rdtsc
# Cada llamada a RDTSC con la bandera de trampa establecida es interceptada y TF se intercepta
#para ser eliminado
Ajusta las reglas de YARA
expediente modules/emulate_rules.py
contiene la HERIDA Reglas utilizadas para captar la parte del código de interés para implementar la instrumentación. Intenté comentar estas secciones tanto como sea posible para que pueda crear su propia regla (compártalas con una solicitud de extracción si cree que pueden ayudar a otros). Por ejemplo:
Nombre de la carga útil: [MSF] windows / meterpreter / reverse_tcp_rc4
Buscar: mov esi, dword ptr [esi]
Coro, 0x
Usado para: esta instrucción xor contiene la constante que se usa para
Cifre la longitud de la carga útil que se enviará en segundo lugar
escenario
Arquitectura: x32
yara_reverse_tcp_rc4_xor_32 = ‘Regla reverse_tcp_rc4_xor
Cuerdas:
$ opcodes_1 = 8b 36
81 f6 ?? ?? ?? ??
Estado:
$ opcodes_1 ‘