Ya vimos que se extraía del fichero Excel , aunque la manera en la que lo hace la programación de las macros es lo interesante.

Quise que vieseis que era posible detectar y extraer esas DLL directamente sin necesidad de abrir Microsoft Office.

Podemos utilizar esta sencilla regla yara para detectar ficheros ejecutables (exe o dll, por ejemplo) y extraerlos de la manera que habíamos visto en el post anterior.

rule Executable_Inside_Excel
{
meta:
Author = "by Rafa"
URL = "https://ciberseguridad.blog/documentos-xls-utilizados-por-ta505/"
Description = "Detect executable files inside Excel files"
strings:
$magic = { D0 CF 11 E0 A1 B1 1A E1 00 00 00 }
$MZ = { 4D 5A }
$This = "!This program cannot be run in DOS mode."
condition:
$magic and $MZ and $This
}

Vamos al lío… :D

Una vez abrimos el documento de Excel nos sale el mensaje de “Habilitar contenido”:

Habilitar contenido Macro ciberseguridad

De momento estamos a salvo, pero como se pulse en el botón o tengas configurado la seguridad de las macros como confiables, es decir, se activan directamente sin la intervención del usuario, entonces poco puedes hacer ya, salvo llamar a los bomberos. Es la última opción que se ve en la siguiente captura.

Deshabilitar Macros con notificaciones

Generalmente esta opción no debería estar marcada y Microsoft lo deja claro: “no recomendado”, hay que hacerle caso.

Si abrimos el editor de Macros, vemos la composición del documento:

Editor macros excel seguridad

Tiene una serie de módulos en donde se encuentra el grueso de la programación de las macros y un par de formularios de diálogo.

En el primer formulario que se ve “Dialog4”, se encuentran datos que utilizará las macros a la hora de extraer un objeto OLE, lo veremos después.

Editor VBA

En el segundo (WelcomeDialog), vemos la ventana que nos muestra el documento mientras realiza las acciones que veremos a continuación, para que no se sospeche que algo malo está ocurriendo en el equipo. Te hacen pensar que están configurando un componente de Microsoft Office, la realidad es otra muy distinta.

Falso instalador de Windows

Utilizamos las ventanas de Inmediato y Locales para ver qué está ocurriendo con la programación de las macros, veremos como las variables van cambiando y en caso de querer ver el contenido de una concreta nos ayudarán a ello.

Breakpoints Ciberseguridad XLS

Ponemos “breakpoints” en cada punto sospechoso, al final de las funciones y en las variable e iremos viendo su valor paso a paso.

Breakpoints sospechosos en XLS - Excel

Trataré de centrarme en los puntos relevantes, en los que se vean datos de variables como rutas o nombres de ficheros que aporten una visión de lo que hace la programación de las macros.

Con F8 iremos recorriendo “paso a paso” cada línea.

Módulo sospechoso XLS

Vemos cómo va a cargar la función “WuzzyBud” dentro del módulo 0 y le pasa como argumento el valor 800.

Modulo 0 Buzz

Si entramos en ese módulo veremos cómo las variables cambian y le podemos poner valores:

Cambio de variables y cambio de valores

No voy a ir tan “paso a paso”, simplemente quiero que veais cómo se ve en las ventanas que os he mostrado antes.

Ese valor 800 es el que se le asigna a la variable “dImmer”. Lo vemos en la ventana de Locales. Lo interesante de esta ventana es que aparecen las variables contenidas en la función y sus valores actuales. A medida que pulsemos F8 irán cambiando.

Es posible saber lo que va a contener la variable de forma visual en algunos puntos, podemos utilizar la venta de Inmediato para ello: “Major health problems”.

Major health problems

Después de estas breves explicaciones sobre las ventanas que vamos a utilizar nos metemos de lleno con la programación de las macros.

Nos encontramos con valores dentro de los formularios que van a ser utilizados.

Valores reutilizados varibles

El directorio temporal jugará un papel importante en todo esto.

Directorio temporal Macro

Justo después cambia a su valor en el equipo, la ruta completa, ya no de la variable temporal:

Cambio de valor en equipo

Y cambia al directorio, si vemos el contenido antes de pulsar F8, vemos otra ruta, por esto está bien utilizar la ventana de Inmediato:

Ventana Inmediato

Hasta el momento tenemos el directorio temporal y este otro, que en breves momentos veremos lo que se guardará ahí.

Seguimos y vamos a la función “principal” de toda la programación: “DerTip

Función Dertip

Entramos dentro y nos detenemos aquí:

Desglose Función Dertip

Las 3 últimas variables son las que van a realizar la magia del fichero Excel, tenemos un fichero “xlsx”, el mismo terminado en “zip” y un fichero “oleObject*.bin”. Arriba el directorio temporal y otro en que que aparece un directorio “Templates\libConfig”, posiblemente la cadena no haya sido completada (luego lo veremos).

Esta función se encarga de guardar el libro actual y guardarlo como un fichero.

Función guardar libro

¿Donde?

Función guarda en Temp

En el directorio temporal como “mannual.xlsx”.

Acto seguido, lo copia como fichero “.zip”.

Guarda como ZIP

Y se prepara para extraer el siguiente fichero.

Extración fichero comprimido

Esto es debido a que como sabéis, los fichero xlsx, son zip con una estructura. De esta forma, es más fácil acceder al interior del fichero Excel y extraer ese “oleObject1.bin” en el directorio temporal.

Extración oleObject1.bin en temp

Una vez que ya tiene el fichero en su sitio, se dispone a extraer los ficheros o dll que habíamos visto en el artículo anterior.

Archivos generados
Creación de dlls

Primero comienza con la DLL “libConfig2.dll” y después “libConfig1.dll”. Como os decía arriba, la cadena aún no estaba completa, ahora ya sí, con una de las dll.

Dll en HurricanMoes

Aquí tenemos la dll guardada en el array “HurricanMoes()” que pisará disco finalmente como “libConfig2.dll”, llamándola una vez que la tiene preparada:

Dll guardada en Array

Vemos como la función devuelve: “Error 2015”:

Después repetirá lo mismo para la segunda dll incluída en el fichero “oleObject1.bin”.

Repetición Oleobject1.bin

Guardará el contenido de la variable en el fichero “libConfig1.dll”.

Guarda libConfig1.dll

Y la llamará como la anterior:

Llamada como la anterior

Como resultado a la llamada tenemos que varRes1 es igual a 0 y saldrá de la función, por lo que esta ha tenido éxito.

VarRes1 Igual

Por lo tanto esta segunda dll es la que ha tenido éxito, que como veíamos en el post anterior correspondía con la versión de 32 bits.

$ file libConfig*.dll
libConfig1.dll: PE32 executable (DLL) (console) Intel 80386, for MS Windows
libConfig2.dll: PE32+ executable (DLL) (console) x86-64, for MS Windows
`

libConfigg.dll y libConfig2.dll

¿Pero porqué se ha utilizado una y no la otra? Las 2 podrían haber funcionado en la máquina de análisis de 64 bits...

La culpa la tiene la versión de “Excel.exe” de Microsoft Office.

Versión Excel

Por lo tanto es la DLL la que comprueba su arquitectura y dependiendo de ella se inyecta o no. En caso de tener éxito, devolverá 0 como vimos en lugar de “Error 2015”.

Si te vas a inyectar en un proceso es mejor que sea de la misma arquitectura, para evitar sorpresas. Si el proceso es de 64 bits podrás inyectar binarios de 64 y 32 bits. Pero si el proceso es de 32 y tratas de inyectar un binario de 64, pues tendrás problemas :D

Y mientras tanto el usuario ve el siguiente mensaje:

Enmascaramiento TA505

¿Qué estará pasando con este fichero Excel que no funciona? Pues eso, que pasas a formar parte de un entramado en el que tu pc está comprometido y puede que como colofón te dejen algún ransomware como regalo. Esperemos que no.

Espero que os haya gustado!
Hasta otra!