Evil Clippy: herramienta para crear documentos de MS Office maliciosos

Evil Clippy de Stan Hegt (@StanHacked) es un asistente multiplataforma para crear documentos maliciosos de Microsoft Office. Se presentó en la BlackHat Asia (28 de marzo de 2019) y puede ocultar macros VBA, pisar (en adelante stomp) códigoVBA (a través de P-Code) y confundir a las herramientas de análisis de macros.

Actualmente esta herramienta es capaz de obtener una macro predeterminada de Cobalt Strike que puede bypassear todos los principales productos antivirus y la mayoría de las herramientas de análisis de maldoc (mediante el uso de stomping VBA en combinación con nombres de módulos aleatorios).

Evil Clippy usa la librería OpenMCDF para manipular los archivos (Compound File Binary Format) de MS Office y abusa de las especificaciones y características de MS-OVBA. Reutiliza el código de Kavod.VBA.Compression para implementar el algoritmo de compresión que se usa en las secuencias de dir y módulos (consultar MS-OVBA para obtener las especificaciones relevantes).

Evil Clippy funciona perfectamente bien con el compilador Mono C# y ha sido probado en Linux, OSX y Windows.

Repositorio: https://github.com/outflanknl/EvilClippy

Instalación

Se puede encontrar un binario compilado multiplataforma en "releases".

En OSX y Linux hay que tener instalado Mono y ejecutar el siguiente comando desde la línea de comandos:

mcs /reference:OpenMcdf.dll,System.IO.Compression.FileSystem.dll /out:EvilClippy.exe * .cs

Después para ejecutar Evil Clippy desde la línea de comandos:

mono EvilClippy.exe -h

En Windows hay que tener instalado Visual Studio. Luego, ejecutar el siguiente comando desde una ventana de comandos de Visual Studio developer:

csc /reference:OpenMcdf.dll,System.IO.Compression.FileSystem.dll /out:EvilClippy.exe * .cs

Luego ejecutar Evil Clippy desde la línea de comandos:

EvilClippy.exe -h

Ejemplos de uso

Mostrar ayuda

EvilClippy.exe -h

Ocultar macros del GUI

Ocultar todos los módulos de macros (excepto el módulo predeterminado "ThisDocument") del editor de la GUI de VBA. Esto se logra eliminando las líneas de módulos de la secuencia del proyecto [MS-OVBA 2.3.1].

EvilClippy.exe -g macrofile.doc

Stomp VBA (abuso de P-code)

Poner el código fake de VBA del archivo de texto fakecode.vba en todos los módulos, mientras deja el P-code intacto. Esto abusa de una característica no documentada de streams de módulos [MS-OVBA 2.3.4.3]. Hay que tener en cuenta que la versión del proyecto VBA debe coincidir con el programa host para que se ejecute el P-code.

EvilClippy.exe -s fakecode.vba macrofile.doc

Nota: VBA Stomping no funciona para archivos guardados en formato Excel 97-2003 (.xls)

Establecer la versión de Office objetivo para VBA stomping

Igual que el anterior, pero está orientado explícitamente a Word 2016 en x86. Esto significa que Word 2016 en x86 ejecutará el P-code, mientras que otras versiones de Word ejecutarán el código desde fakecode.vba. Esto se logró estableciendo los bytes de versión apropiados en el stream _VBA_PROJECT [MS-OVBA 2.3.4.1].

EvilClippy.exe -s fakecode.vba -t 2016x86 macrofile.doc

Establecer nombres de módulos aleatorios (herramientas "tontas" de análisis)

Establece nombres de módulos ASCII aleatorios en la secuencia dir. [MS-OVBA 2.3.4.2]. Esto abusa de la ambigüedad en los registros de MODULESTREAMNAME [MS-OVBA 2.3.4.2.3.2.3]: la mayoría de las herramientas de analistas usan los nombres de los módulos ASCII que se especifican aquí, mientras que MS Office usó la variante Unicode. Al establecer un módulo ASCII al azar, la mayoría de las herramientas de análisis de P-code y VBA se bloquean, mientras que el P-code real y VBA aún funcionan bien en Word y Excel.

EvilClippy.exe -r macrofile.doc

Nota: se sabe que esto es eficaz para engañar a pcodedmp y VirusTotal

Servir un template stomped VBA a través de HTTP

Sirve macrofile.dot a través del puerto HTTP 8080 después de realizar el stomp VBA. Si se recupera este archivo, automáticamente obtiene la versión de Office destino (utilizando sus encabezados HTTP y, a continuación, establece los bytes _VBA_PROJECT en consecuencia).

EvilClippy.exe -s fakecode.vba -w 8080 macrofile.dot

Nota: El archivo que está sirviendo debe ser una plantilla (.dot en lugar de .doc). Se puede configurar una plantilla a través de una URL (¡no se requiere la extensión .dot!) Desde la barra de herramientas del desarrollador en Word. Además, fakecode.vba debe tener un atributo VB_Base establecido para una macro desde una plantilla (esto significa que facecode.vba debe comenzar con una línea como Atributo VB_Base = "0 {00020906-0000-0000-C000-000000000046}") .

Referencias:

Comentarios