Inicio / Blog / Emotet: características y funcionamiento

Emotet: características y funcionamiento

Publicado el 15/10/2020, por INCIBE
Emotet: Características y funcionamiento

Emotet, el malware polimórfico del que ya hemos registrado noticias de sus actuaciones en INCIBE-CERT (Estados Unidos y España), no ha dejado de evolucionar desde sus inicios, cuando era catalogado como un troyano bancario, hasta la actualidad, donde su principal función es la de actuar como un “downloader”, es decir, permitiendo la descarga y ejecución de otros malware como Trickbot, cifradores de archivos, etc.

Como modus operandi, los atacantes, habitualmente, utilizan correos electrónicos fraudulentos con adjuntos o enlaces a archivos ofimáticos maliciosos que mediante macros, buscan la descarga y ejecución de Emotet, intentando así eludir a los antivirus.

En esta entrada se analizará uno de esos documentos ofimáticos, un archivo .doc con macros, mediante el análisis estático y dinámico de la muestra en un entorno controlado, con el objetivo de identificar las acciones que realiza este código dañino.

Análisis

La muestra de estudio se ha obtenido de VirusTotal, al ser identificada durante la búsqueda de la familia Emotet.

Detalles de la muestra de malware

- Tabla 1. Detalles de la muestra de malware. -

La información que se obtiene mediante el comando file desde un sistema operativo Linux es la siguiente:

Composite Document File V2 Document, Little Endian, Os: Windows, Version 10.0, Code page: 1252,
Template: Normal.dotm, Revision Number: 1, Name of Creating Application: Microsoft Office Word,
Create Time/Date: Tue Jul 21 23:37:00 2020, Last Saved Time/Date: Tue Jul 21 23:37:00 2020,
Number of Pages: 2, Number of Words: 5, Number of Characters: 30, Security: 0

Lo primero que se observa durante el análisis es que las macros contenidas en el documento utilizan una técnica de bypass para ocultar su contenido del visor específico de Microsoft Office. Sin embargo, aunque estas no puedan ser visualizadas, la advertencia para la ejecución de macros sigue apareciendo, tal y como se muestra en la siguiente imagen:

Aviso de macros en documento malicioso

- Figura 1. Aviso de macros en documento malicioso. -

En caso de que el usuario permita la ejecución y su máquina se encuentre conectada a Internet, las macros descargarán el código malicioso.

Por medio de la herramienta OleVBA es posible ver el contenido de la macro a ejecutar, además de mostrar el contenido También cuenta con opciones de decodificación que permiten una visualización más amigable.

Macros vistas desde OleVba

- Figura 2. Macros vistas desde OleVba. -

A continuación, se establecen las versiones de TLS que se utilizarán en futuras comunicaciones con un posible C&C por medio de una sentencia codificada en base64 a través de la consola PowerShell.

Tras la ejecución de las macros de forma automática desde la función “Document_Open”, el documento descarga en disco un archivo mediante un objeto WMI.

La descarga del binario malicioso de Emotet, deja en la ruta actual un ejecutable con el nombre de “262.exe”. Dicho ejecutable es movido a la siguiente ubicación cambiando su nombre para llevar a cabo su ejecución:

C:\Users\incibe\AppData\Local\dot3hc\PresentationSettings.exe

Tras un análisis estático, es posible apreciar cierta información, como la fecha de creación del archivo, algunas API que manejan la memoria del proceso e incluso la ruta y el nombre de compilación del proyecto.

Al ejecutar esta muestra en un debugger, también se identifica un intento de realizar la carga de “taskmgr.exe” como si se tratase de una librería. Posteriormente una rutina se encarga de mover un array de bytes de gran dimensión a una zona específica del código ejecutable generada tras la iteración con la API VirtualAllocExNuma. Dicho código se encuentra ofuscado en su totalidad, por lo que es necesaria otra rutina de descifrado basada en XOR para generar la carga útil en dicha sección de memoria.

Una vez realizada la copia del fragmento de memoria con el ejecutable, se aprecia un binario de 35KB. El análisis estático del archivo no aporta mucha información, ya que muestra patrones de compresión en su cabecera, es decir, es posible que una aplicación externa a su compilación modifique las dimensiones del ejecutable original. La única cadena visible en el interior del ejecutable se encuentra en unos offsets pertenecientes al EOF del archivo con el texto “dave”. Esto vuelve a indicar que el binario fue modificado tras su compilación, ya que ningún compilador conocido escribe información en esa ubicación.

Cadena "dave"

- Figura 3. Cadena "dave". -

Desde el debugger, es posible ver una carga dinámica de librerías tras el uso de LoadLibraryW. Esta acción se complementa en parte por la siguiente rutina, encargada de descifrar el nombre de las librerías a cargar.

Se crean eventos y mutex de sincronización utilizando nombres diferentes para cada sistema en el que se ejecuta, ya que para la generación de este array se utiliza el identificador del disco duro VolumeSerialNumber, mediante el uso de los patrones "Global\\E%X", "Global\\I%X" y "Global\\M%X", observados también en otras muestras recientes de Emotet. De esta manera, se generan nombres del siguiente tipo:

Global\E78C28DF8

La instalación de Emotet se inicia tras la creación de la carpeta BWUnpairElevated en la siguiente ruta:

/CALL to CreateFileW from SHELL32.75FC02EA
|FileName = "C:\Users\incibe\AppData\Local\BWUnpairElevated"
|Access = 80
|ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE|4
|pSecurity = NULL
|Mode = OPEN_EXISTING
|Attributes = NORMAL|BACKUP_SEMANTICS
\hTemplateFile = NULL

Posteriormente, se mueve el archivo actual a la ubicación creada, utilizando el nombre “shell32.exe” para finalizar su instalación.

/CALL to MoveFileExW from SHELL32.761B267B
|ExistingName = "C:\Users\incibe\Desktop\DUMP.exe"
|NewName = "C:\Users\incibe\AppData\Local\BWUnpairElevated\shell32.exe"
\Flags = REPLACE_EXISTING|COPY_ALLOWED

Seguidamente, el binario elimina el archivo de identificador de zona en caso de existir, mediante la siguiente sintaxis de ejecución.

C:\Users\incibe\AppData\Local\BWUnpairElevated\shell32.exe:Zone.Identifier

En caso de obtener privilegios de ejecución como administrador, la copia del ejecutable se realiza de la misma manera pero en la siguiente ubicación.

C:\Windows\system32\TabSvc\MSJET35.exe

Finalmente, se realiza la ejecución desde la nueva ubicación.

/CALL to CreateProcessW from DUMP.000534B3
|ModuleFileName = "C:\Users\incibe\AppData\Local\BWUnpairElevated\shell32.exe"
|CommandLine = NULL
|pProcessSecurity = NULL
|pThreadSecurity = NULL
|InheritHandles = FALSE
|CreationFlags = 0
|pEnvironment = NULL
|CurrentDir = NULL
|pStartupInfo = 0034F96C
\pProcessInfo = 0034F9B0

Este proceso es el mismo exceptuando la instalación, no obstante ahora se incluye una entrada en el registro para ejecutarse de forma automática tras cada inicio. Esta puede ser visible desde una herramienta como Autoruns o el propio msconfig del sistema.

Persistencia en el sistema

- Figura 4. Persistencia en el sistema. -

Los próximos eventos de ejecución iniciarán la carga de funciones criptográficas a partir de la librería “rsaenh.dll”, la "Microsoft Enhanced RSA and AES Cryptographic Provider".

Mediante el uso de la API GetComputerName, extrae el nombre del sistema infectado. En este caso, "INCIBE-PC". Tras ser formateado mediante el uso de la cadena “%s_%08X”, se genera la palabra “INCIBEXPC_78C28DF8”.

A continuación, recupera información sobre la arquitectura del sistema mediante el uso de la API GetNativeSystemInfo, además de copiar el nombre de los procesos en ejecución mediante la API Process32.

Una vez que Emotet reúne toda la información necesaria, procede a cifrarla mediante la clave RSA pública que alberga en su interior. Una vez cifrada, la información se envía a través de Internet, mediante una petición HTTP que comienza con la carga en memoria de la siguiente cadena:

r\n--%S\r\nContent-Disposition: form-data; name=\"%s\"; filename=\"%s\"\r\nContent-Type: application/octet-stream\r\n\r\n

La cadena “%u.%u.%u.%u”, es formateada formando la dirección IP 94.49.254.194 tras un proceso de descifrado. Además, se identifica el uso de una rutina de generación de caracteres aleatorios por medio de la función RtlRandomEx. Con esta se generan palabras que terminan siendo unidas en una frase mediante el carácter de separación “/”. De esta forma, se genera una dirección URL aleatoria para cada ejecución, con el objetivo de ser difícilmente bloqueada por sistemas firewall/IDS.

http://94.49.254.194/KMvye/HxC9mXOKTFcWCK6WNV/JSzlnTTgjxJOlN/uTVHKLwfX0RfBIB1CcI/1SnOfnHlfNBJG8OjKV/G22cYrn2PcpeaLGx/

Realiza esta comunicación como una petición POST simulando ser IE 7 en un Windows XP.

Aunque no se ha realizado un análisis de los módulos descargados, ha sido posible identificar parte del comportamiento de Emotet durante esta acción. De igual manera que el actual ejecutable, un binario fue descargado por este en la carpeta de instalación BWUnpairElevated.

La ejecución del nuevo módulo se realiza con la función CreateProcess de la siguiente manera:

C:\Users\incibe\AppData\Local\BWUnpairElevated\PNPXAssoc7a3.exe CAIAADIAAABCAFcAVQBuAHAAYQBpAHIARQBsAGUAdgBhAHQAZQBkAFwAcwBoAGUAbABsADMAMgAAAA==

El texto codificado en base64, corresponde con la ubicación de ejecución inicial a modo de comprobación.

BWUnpairElevated\shell32

Una vez instalado y en comunicación con su servidor de Comando y Control, EMOTET estará preparado para realizar en el equipo las acciones que se le indiquen.

Vector de propagación

Durante el análisis de esta muestra, no se han encontrado evidencias del procedimiento de infección, no obstante la manera más evidente para llevar a cabo este tipo de ataques es la del envío masivo de correos SPAM, sin descartar la posibilidad de utilizar cualquier otro medio que permita compartir el documento malicioso.

Protección contra la ingeniería inversa y detección

En la muestra se han encontrado diversas técnicas utilizadas para evitar la detección y la ingeniería inversa sobre el archivo, concretamente:

  • ocultación de macros,
  • uso de empaquetador,
  • diferentes rutinas de cifrado,
  • compresión del código,
  • uso de codificación base64,
  • uso de una clave RSA pública.

Criptografía

Otro tipo de protección que se ha observado es el uso de diferentes claves RSA para cada campaña de Emotet, incluyendo la clave pública incrustada en el interior del código malicioso, utilizada para el cifrado de la información obtenida del sistema antes de enviarla a los C&C encargados de las comunicaciones con las máquinas infectadas. Mediante esta táctica se intenta pasar desapercibidos por los firewalls que contengan reglas para otras versiones conocidas de esta amenaza.

Durante la importación de la clave RSA se ha identificado dicha clave tras la llamada a la función CryptImportKey. Como se muestra en la siguiente imagen, se encuentra en el apartado Hex/ASCII con la cabecera RSA1 que incorpora el uso de la CryptoAPI.

Carga de la clave RSA pública

- Figura 5. Carga de la clave RSA pública. -

Configuración

Parte de la configuración del malware incluye las rutas de instalación y el nombre utilizado para el proceso.

C:\Users\incibe\AppData\Local\BWUnpairElevated\shell32.exe
C:\Windows\system32\TabSvc\MSJET35.exe

Además incluye los nombres utilizados para la clave de registro y el servicio para iniciarse automáticamente tras un reinicio.

Autorun Key Shell32
Service MSJET35

La clave RSA y la dirección IP 94.49.254.194 también son elementos configurables de Emotet.

Persistencia

La siguiente ubicación es utilizada por el código dañino para establecer persistencia en el sistema:

HKCU\Software\Microsoft\Windows\CurrentVersion\Run\Shell32

En caso de obtener privilegios de administrador, se ha identificado la creación de un servicio mediante el uso de la API CreateServiceW.

ServiceName    MSJET35
CommandLine    C:\Windows\system32\TabSvc\MSJET35.exe

Defensa

Prevención

Emotet se transmite, principalmente, por correo electrónico, por ello se debe tener especial precaución a la hora de ejecutar cualquier tipo de adjunto o enlace proveniente del correo, incluso los provenientes de contactos conocidos, ya que Emotet puede suplantar su identidad.

Tanto las URLs, como los adjuntos, se pueden analizar por medio de herramientas, como Virus Total o URLhaus. También es aconsejable deshabilitar las macros de terceros por defecto, y nunca habilitarla a no ser que se esté seguro de su legitimidad.

Emotet también utiliza vulnerabilidades conocidas, como EternalBlue/DoublePulsar y ataques de fuerza bruta, por lo que siempre se debe contar con los sistemas actualizados a la última versión disponible y utilizar contraseñas robustas.

También es posible monitorizar las posibles fuentes de infección utilizando diferentes identificadores de compromiso (IOC).

Detección y eliminación

El CERT de Japón ha publicado en su repositorio de GitHub una herramienta llamada EmoCheck destinada a comprobar si el malware Emotet está presente en el dispositivo.

Si este software detecta evidencias, ofrecerá información para su desinfección, como el nombre del proceso, el identificador del proceso y la ruta absoluta donde se encuentra alojado el malware. En caso de infección, lo recomendable es terminar el proceso identificado y eliminar el archivo malicioso.

También es aconsejable analizar el sistema con otras herramientas antimalware.

Para más información, puede consultar la entrada de blog ‘Prevención y desinfección del malware Emotet’.

Conclusiones

Recientemente se han detectado un repunte en el número de campañas del malware Emotet. A lo largo de esta entrada del blog se exponen los resultados obtenidos durante el análisis del fichero malicioso con la intención de dar a conocer su naturaleza y funcionamiento. Mediante esta información, será mucho más fácil estar preparados, tanto en la prevención, como en la detección y respuesta de este malware, para poder reaccionar y evitar su despliegue en nuestros sistemas.

Al igual que en otros ataques basados en la ingeniería social, es muy importante que el usuario conozca la existencia de la amenaza y su funcionamiento, para poder así reconocerlo a tiempo y evitar caer en el engaño, o para eliminarlo en caso de haberse visto afectado.