
Generar un DLL ofuscado que deshabilitará AMSI & ETW
LightsOut generará un DLL ofuscado que deshabilitará AMSI y ETW mientras intenta evadir el AV. Esto se logra aleatorizando todas las funciones de WinAPI utilizadas, codificando cadenas con XOR y utilizando comprobaciones básicas de sandbox. Mingw-w64 se utiliza para compilar el código C ofuscado en un DLL que puede cargarse en cualquier proceso donde estén presentes AMSI o ETW (por ejemplo, PowerShell).
LightsOut está diseñado para funcionar en sistemas Linux con python3 y mingw-w64 instalados. No se requieren otras dependencias.
Las características actuales incluyen:
_______________________
| |
| AMSI + ETW |
| |
| LIGHTS OUT |
| _______ |
| || || |
| ||_____|| |
| |/ /|| |
| / / || |
| /____/ /-' |
| |____|/ |
| |
| @icyguider |
| |
| RG|
`-----------------------'
uso: lightsout.py [-h] [-m <método>] [-s <opción>] [-sa <valor>] [-k <clave>] [-o <archivo_salida>] [-p <pid>]
Genera un DLL ofuscado que deshabilitará AMSI y ETW
opciones:
-h, --help muestra este mensaje de ayuda y sale
-m <método>, --method <método>
Técnica de bypass (Opciones: patch, hwbp, remote_patch) (Por defecto: patch)
-s <opción>, --sandbox <opción>
Técnica de evasión de sandbox (Opciones: mathsleep, username, hostname, domain) (Por defecto: mathsleep)
-sa <valor>, --sandbox-arg <valor>
Argumento para la técnica de evasión de sandbox (Ej: WIN10CO-DESKTOP, testlab.local)
-k <clave>, --key <clave>
Clave para codificar cadenas (generada aleatoriamente por defecto)
-o <archivo_salida>, --outfile <archivo_salida>
Archivo para guardar el DLL
Opciones remotas:
-p <pid>, --pid <pid>
PID del proceso remoto a parchear
Consideraciones de uso previsto/Opsec
Esta herramienta fue diseñada para ser utilizada en pentests, principalmente para ejecutar scripts maliciosos de powershell sin ser bloqueados por AV/EDR. Debido a esto, la herramienta es muy básica y se puede añadir mucho para mejorar la opsec. No espere que esta herramienta evite completamente la detección por parte del EDR.
Ejemplos de uso
Puede transferir el DLL de salida a su sistema de destino y cargarlo en powershell de varias formas. Por ejemplo, se puede hacer mediante P/Invoke con LoadLibrary:

O incluso más fácil, ¡copie powershell a una ubicación arbitraria y cargue lateralmente el DLL!

Saludos/Créditos/Referencias adicionales: