
Generador de macros de Excel 4.0 (XLM) para inyectar DLLs y EXEs en memoria.
_______
| ____\ \/ / ___| ____| | _ __ | |_| _ \ ___ _ __ _ _| |_
| _| \ / | | _| | | | '_ \| __| | | |/ _ \| '_ \| | | | __|
| |___ / \ |___| |___| |___| | | | |_| |_| | (_) | | | | |_| | |_
|_____/_/\_\____|_____|_____|_| |_|\__|____/ \___/|_| |_|\__,_|\__|
by @JoeLeonJr (@FortyNorthSec)
EXCELntDonut es un generador de macros XLM (Excel 4.0). Comience con código fuente C# (EXE) y termine con una macro XLM (Excel 4.0) que ejecutará su código en memoria. Las macros XLM (Excel 4.0) se pueden guardar en archivos .XLS.
chmod +x install.sh
./install.sh
¿Qué se instala?
Si desea ejecutar EXCELntDonut solo como un script de Python, deberá configurar un entorno virtual con dos paquetes: "pandas" y "donut-shellcode". Además, necesitará instalar mono-complete mediante apt-get y llamar al script drive.py con python3. Recomendamos usar simplemente el script bash ./install.sh, pero depende de usted.
Uso:
$ EXCELntDonut -f exe_source.cs -r System.Windows.Forms.dll --sandbox --obfuscate
Banderas:
(obligatorio)
-f ruta al archivo que contiene su código fuente C# (solo exe)
-r Referencias necesarias para compilar su código C# (las mismas que al usar mcs para compilar en Linux)
(ej: -r 'System.Management')
(opcional)
-o nombre del archivo de salida
--sandbox
Realiza comprobaciones básicas de sandbox. Esto se actualizará a medida que se descubran nuevos enfoques.
--obfuscate
Realiza ofuscación básica de macros.
Usted proporciona un archivo C# que contiene su payload (como un EXE con un método main que ejecuta un payload de Cobalt Strike). Ese archivo C# se compila usando MCS en dos ensamblados .NET: x86 y x64. Después de la compilación, las increíbles herramientas Donut (para x86) y CLRvoyance (para x64) convierten cada ensamblado en shellcode independiente de la posición. A continuación, se eliminan todos los bytes nulos, ya que las macros XLM (Excel 4.0) no funcionan bien con bytes nulos, y el payload se divide en líneas de no más de 255 caracteres (para x86) o 10 caracteres (para x64).
Una vez que el shellcode está preparado, se combina con funciones básicas de inyección de procesos (VirtualAlloc, WriteProcessMemory y CreateThread), así como con una función de verificación de arquitectura para determinar qué payload (x86 o x64) ejecutar en el sistema de destino. Si opta por ejecutar comprobaciones de sandbox u ofuscación básica, esas funciones actualizarán su macro. Finalmente, la salida se coloca en un archivo CSV (guardado como .txt).
Una vez que tenga el archivo de salida de EXCELntDonut, abra el archivo de salida en un editor de texto y copie todo su contenido (Ctrl-A, Ctrl-C). Abra Excel en una máquina virtual Windows, haga clic derecho en "Hoja 1" y seleccione "Insertar". Elija "Macro de MS Excel 4.0". Vaya a la celda A1 y pegue la salida de EXCELntDonut. Es probable que todos los datos se peguen en una sola columna. Los datos están separados por punto y coma ";". Vaya a la pestaña "Datos" y luego haga clic en "Texto en columnas". Seleccione "Delimitados" y en la siguiente pantalla seleccione "Punto y coma" y luego haga clic en "Finalizar". La macro se distribuirá en las columnas y filas correspondientes.
(Nota: si seleccionó la bandera "--obfuscate", deberá desplazarse horizontalmente bastante para encontrar su código real, ya que parte de la lógica de ofuscación mueve la macro a una sección aleatoria de la hoja de cálculo).
En este punto, recomendamos dos cosas:
Guarde el archivo (.xls) e intente abrirlo. Debería ejecutar su payload automáticamente.
Estas comprobaciones se basan en lo que los actores de amenazas reales están utilizando en sus malware.
=FORMULA(D3&D23&D54&D23&D44,E45)
La función FORMULA nos permite colocar una fórmula, que luego se puede ejecutar, en otra celda. Entonces, en este caso, colocamos las instrucciones de inyección de procesos y luego usamos la función FORMULA para colocar la función real en otra celda para que se ejecute. Esto evita que los defensores que realizan análisis estático vean cosas como "VirtualAlloc".
root@excelntdonut-test:/opt# EXCELntDonut -f test.cs
_______ ______ _____ _ _ ____ _
| ____\ \/ / ___| ____| | _ __ | |_| _ \ ___ _ __ _ _| |_
| _| \ / | | _| | | | '_ \| __| | | |/ _ \| '_ \| | | | __|
| |___ / \ |___| |___| |___| | | | |_| |_| | (_) | | | | |_| | |_
|_____/_/\_\____|_____|_____|_| |_|\__|____/ \___/|_| |_|\__,_|\__|
by @JoeLeonJr (@FortyNorthSec)
[i] Generando su ensamblado .NET x86.
warning CS8001: No se pudo resolver la ruta del SDK
test.cs(2,14): error CS0234: El tipo o nombre de espacio de nombres `Management' no existe en el espacio de nombres `System'. ¿Le falta una referencia de ensamblado?
Este error probablemente significa que le falta un ensamblado de referencia durante la compilación con mono. Para solucionarlo, simplemente pase el espacio de nombres mencionado en la bandera -r. En este caso, agregaríamos -r 'System.Management' a la línea de comandos. El nuevo comando sería:
root@excelntdonut-test:/opt# EXCELntDonut -f test.cs -r 'System.Management'
root@excelntdonut-test:/opt# EXCELntDonut -f test.cs -r System.Management
_______ ______ _____ _ _ ____ _
| ____\ \/ / ___| ____| | _ __ | |_| _ \ ___ _ __ _ _| |_
| _| \ / | | _| | | | '_ \| __| | | |/ _ \| '_ \| | | | __|
| |___ / \ |___| |___| |___| | | | |_| |_| | (_) | | | | |_| | |_
|_____/_/\_\____|_____|_____|_| |_|\__|____/ \___/|_| |_|\__,_|\__|
by @JoeLeonJr (@FortyNorthSec)
[i] Generando su ensamblado .NET x86.
warning CS8001: No se pudo resolver la ruta del SDK
error CS0006: No se pudo encontrar el archivo de metadatos `System.Management'
[x] Error al generar el ensamblado .NET x86 usando MCS. Vea el mensaje de error anterior.
Este error no debería aparecer a menos que ejecute EXCELntDonut sin usar el script bash install.sh. En ese caso, necesitará instalar mono-complete manualmente. Esto descargará las dependencias relevantes. Puede instalarlo usando apt de la siguiente manera:
apt-get install mono-complete
root@kali:~/Desktop# EXCELntDonut -f test.cs
_______ ______ _____ _ _ ____ _
| ____\ \/ / ___| ____| | _ __ | |_| _ \ ___ _ __ _ _| |_
| _| \ / | | _| | | | '_ \| __| | | |/ _ \| '_ \| | | | __|
| |___ / \ |___| |___| |___| | | | |_| |_| | (_) | | | | |_| | |_
|_____/_/\_\____|_____|_____|_| |_|\__|____/ \___/|_| |_|\__,_|\__|
by @JoeLeonJr (@FortyNorthSec)
[i] Generando su ensamblado .NET x86.
error CS5001: El programa `_excelntdonut_GJAoNuVPMcX.exe' no contiene un método `Main' estático adecuado para un punto de entrada
[x] Error al generar el ensamblado .NET x86 usando MCS. Vea el mensaje de error anterior.
Por el momento, EXCELntDonut solo permite archivos C# con payloads en la función Main.
Aquí hay algunas reglas Yara para comenzar, por @InQuest:
Busque una hoja muy oculta
https://github.com/InQuest/yara-rules/blob/master/Excel_Hidden_Macro_Sheet.rule
Busque la cadena Auto_Open
https://github.com/Neo23x0/signature-base/blob/master/yara/general_officemacros.yar
Hay muchas publicaciones sobre el uso de OLEDUMP.py para revisar archivos XLM. Considere esta:
https://clickallthethings.wordpress.com/2020/04/06/covid-19-excel-4-0-macros-and-sandbox-detection/
Esto ni siquiera estaría en nuestro radar sin el fantástico trabajo realizado por el equipo de Outflank (@outflanknl). Un agradecimiento especial a @StanHacked por su perspicacia durante este proyecto. Además, igualmente, este proyecto no sería posible sin Donut (por @TheWover y @odzhan) y la biblioteca de Python relacionada (por @byt3bl33d3r). Relacionado, el equipo de Accenture creó CLRvoyance, que resolvió algunos problemas x64 que no pudimos resolver con Donut + macros XLM 4.0. Finalmente, gracias a Philip Tsukerman de Cybereason por la increíble investigación sobre cómo hacer que las macros XLM sean compatibles con versiones de Excel de 64 bits.
No somos responsables del mal uso de esta herramienta. Esta herramienta fue generada con fines educativos y de pruebas autorizadas para demostrar cómo se puede inyectar código fuente C# en la memoria utilizando una macro XLM (Excel 4.0). El objetivo final de este proyecto es (1) proporcionar a los equipos rojos otra opción de payload de phishing para emular lo que los adversarios reales están utilizando actualmente, y (2) proporcionar a los defensores un marco de referencia para construir analíticas y mitigaciones. Sin una herramienta para generar rápidamente este tipo de payload, creemos que los defensores no estarán adecuadamente preparados para lo que realmente se avecina. Actúe con responsabilidad.
Consulte el archivo de licencia en esta carpeta. Tenga en cuenta que esta herramienta incorpora otras dos herramientas de código abierto, incluyendo Donut y CLRvoyance.