Emotet fue detectado por primera vez en Internet en 2014. En aquel entonces su principal función era robar credenciales bancarias de los usuarios. Desde entonces sobrevivió a numerosas transformaciones, comezó a distribuir otros programas maliciosos y llegó a convertirse en una poderosa botnet. En enero de 2021, un esfuerzo conjunto entre autoridades de varios países logró desvertebrar a Emotet. A sus autores les llevó casi 10 meses reconstruir su infraestructura y relanzarlo en noviembre. En ese momento, se usaba Trickbot para propagar Emotet. Ahora, Emotet se propaga por sí mismo a través de campañas de spam malicioso.
Según un reciente estudio del protocolo de Emotet y de las respuestas del C2, podemos afirmar que puede descargar 16 módulos adicionales. Logramos obtener 10 de ellos (incluyendo dos ejemplares diferentes del módulo Spam) que Emotet usaba para robar credenciales, contraseñas, cuentas y enviar correos electrónicos spam. Este artículo es un breve análisis de dichos módulos y contiene estadísticas de recientes ataques de Emotet.
Análisis técnico de Emotet
Cadena de infección
La típica infección de Emotet comienza con mensajes de correo spam con documentos de Microsoft Office (Word, Excel) adjuntos. Se usan macros maliciosas para iniciar PowerShell y así descargar y ejecutar una DLL de Emotet. Según el nivel de acceso disponible, Emotet crea un subdirectorio con un nombre aleatorio en el directorio %Windows%\SysWOW64\ o %User%\AppData\Local\ y se copia allí con un nombre y una extensión generados al azar. La función Control_RunDLL exportada se utiliza para ejecutar la actividad principal de la DLL de Emotet.
Cadena de ejecución de infección de Emotet
Después de iniciarse, el malware Emotet crea un servicio llamando a la función CreateServiceW(). Un nombre y una extensión generados aleatoriamente, usados para crear una copia, actúan como nombres del servicio.
Función CreateServiceW() con argumentos
Si falla el intento de crear un nuevo servicio, Emotet crea una nueva clave de registro en HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run con los mismos nombres usados al crear el servicio.
Clave de inicio automático en el registro
Una vez iniciada la DLL de Emotet, se registra con una de las 20 IP del C2 que están cifradas en el cuerpo del malware. Los módulos descargados también pueden incluir direcciones IP del C2 adicionales. Los siguientes datos sirven para el registro del bot:
Datos de registro
Junto con los datos de registro, también se envía al C2 la clave pública de la víctima, que se genera en cada ejecución. A diferencia de las versiones anteriores que usaban RSA para cifrar la clave AES generada, esta muestra más reciente de Emotet emplea el algoritmo ECDH (Curva elíptica Diffie-Hellman), usando el par de claves generadas por la víctima junto con la clave pública de Emotet cifrada en el código para derivar la clave AES a fin de cifrar la comunicación. Para esto se utiliza la API de Windows BCryptSecretAgreement.
Durante nuestro monitoreo, observamos que después del registro, el C2 responde con la carga útil del módulo Process List. El módulo viene en forma de una DLL que se analiza y carga directamente en el proceso Rundll32. La llamada de su punto de entrada se hace pasando una estructura específica a su función DllMain. Conviene señalar que Emotet utiliza ECDSA (algoritmo de firma digital de curva elíptica) para verificar la integridad de la carga útil antes de cargarla.
Pseudocódigo para cargar la DLL de segunda etapa de Emotet directamente en la memoria
Además de cargar la DLL en la memoria, existen otras formas de ejecutar la carga útil. Por ejemplo:
- escribir la carga útil de la DLL en el disco y ejecutarla a través de regsvr32.exe -s “%s” o rundll32.exe “%s”,Control_RunDLL
- escribir la carga útil en el disco y llamar a CreateProcess o duplicar el token de usuario para llamar a CreateProcessAsUser
Durante la comunicación, el C2 devuelve los cuerpos y la configuración del módulo. Dependiendo de la configuración, el malware selecciona la forma de ejecutar el módulo de carga útil. Durante nuestra investigación, todos los módulos que logramos obtener se ejecutaron en el proceso principal, pero se iniciaba un subproceso separado para cada módulo nuevo. Cada módulo tiene su propio id. numérico y contiene su propia lista de C2. Sin embargo, a excepción del módulo Spam, todos los módulos que obtuvimos contenían la misma lista de C2. Los módulos de Emotet se envían a petición y siempre hay algunos bytes basura que varían en diferentes muestras del mismo módulo. Es probable que esto impida el escaneo en la nube o la detección de hash de archivos.
Bytes aleatorios cambiados entre binarios del módulo “Process List”
Módulo Process List
Este módulo envía la lista de procesos en ejecución al C2. Por lo general, el C2 no envía ningún otro módulo antes de recibir una respuesta de este.
Solicitud del módulo Process List
Módulo Mail PassView
El módulo contiene un ejecutable incrustado llamado Mail PassView de Nir Sofer, una herramienta de recuperación de contraseñas que revela contraseñas y detalles de cuentas de varios clientes de correo electrónico. Para ejecutar la herramienta de recuperación de contraseñas, el módulo Emotet copia certutil.exe en un directorio %Temp%, le asigna un nombre aleatorio con la extensión .exe, inicia el ejecutable copiado y utiliza la técnica de vaciado de procesos para inyectar el ejecutable de la herramienta de recuperación de contraseñas en el proceso recién creado. El proceso de CertUtil se inicia con argumentos de línea de comandos que obligan a la herramienta de recuperación a guardar los resultados en un archivo.
CertUtil con línea de comando para la herramienta de recuperación de contraseñas
Según el sitio web oficial, esta utilidad es capaz de revelar contraseñas y otros detalles de cuentas en varios clientes de correo electrónico, incluyendo Outlook y Thunderbird.
Módulo WebBrowser PassView
Este módulo es casi idéntico al anterior, pero utiliza la herramienta de recuperación de contraseñas WebBrowser PassView de Nir Sofer para revelar contraseñas y detalles de cuentas en los navegadores.
Según el sitio web oficial, esta utilidad es capaz de revelar contraseñas y otros detalles de la cuenta en varios navegadores web, incluidos Internet Explorer, Mozilla Firefox, Google Chrome, Safari y Opera.
Pseudocódigo de función del módulo WebBrowser PassView
Emotet ha utilizado la ofuscación de código durante años y este módulo no es una excepción. En la figura de arriba, podemos ver que la técnica de ofuscación del flujo de control se usa con la variable ‘estado’ (de color amarillo). Además, todas las llamadas a la API se resuelven durante el tiempo de ejecución. Es por ello que esta capa de resolución de API puede usar argumentos basura (enmarcados en rojo). Los listados de códigos pueden ser más grandes y confusos, por lo que no tiene sentido mostrarlos para todos los módulos.
Módulo Outlook Address Grabber
Es un módulo de extracción de datos para Outlook. El módulo utiliza la interfaz de la API de mensajería de Outlook, busca en los perfiles de Outlook y extrae todos los nombres y direcciones de correo que aparecen en cada correo encontrado. Luego envía las direcciones de correo electrónico recopiladas al C2.
Módulo Outlook E-mails Grabber
Es un módulo de extracción de datos para Outlook. El módulo utiliza la interfaz de la API de mensajería de Outlook, busca en todas las carpetas personales (Bandeja de entrada, Elementos enviados, Elementos eliminados, etc.), extrae todos los nombres y direcciones de correo electrónico del remitente y el destinatario, y extrae el asunto y el cuerpo del correo electrónico. Luego envía al C2 los correos electrónicos recopilados.
Módulo Thunderbird Address Grabber
Es un módulo de extracción de datos para Thunderbird. El módulo busca en los perfiles de Thunderbird ubicados en %AppData%\Roaming\Thunderbird\Profiles\, analiza los archivos de datos de Thunderbird y extrae los nombres y direcciones de correo que aparecen. Luego envía las direcciones de correo electrónico recopiladas al C2.
Módulo Thunderbird E-mails Grabber
Es un módulo de extracción de datos para Thunderbird. El módulo busca en los perfiles de Thunderbird ubicados en %AppData%\Roaming\Thunderbird\Profiles\, analiza los archivos de datos de Thunderbird, extrae los nombres y las direcciones de correo electrónico del remitente y el destinatario, y extrae el asunto y el cuerpo del correo electrónico. Luego envía al C2 los correos electrónicos recopilados.
Modulo Spam
Este módulo sirve para enviar spam. Consulta al C2 hasta que recibe una respuesta con una tarea de spam que suele constar de tres partes:
- Una lista de servidores de correo electrónico y cuentas comprometidas que se utilizarán para enviar spam; decenas de cuentas comprometidas se almacenan en una sola tarea.
- Una lista de direcciones para atacar, con el nombre y la dirección del destinatario y del remitente.
- Una plantilla de spam con asunto, cuerpo y archivos adjuntos.
Lista redactada de servidores de correo electrónico, cuentas comprometidas utilizadas para enviar spam
Dos de los 10 módulos que logramos obtener eran módulos de spam. Su funcionalidad es la misma, pero los id. de cada módulo difieren.
Módulo UPnP
Es un módulo auxiliar para verificar la posibilidad de conectarse al sistema infectado desde el exterior. En las configuraciones de este módulo enviadas por el C2, junto con el propio módulo se transmite la dirección IP externa del sistema infectado. Lo primero que hace este módulo es enumerar las interfaces de red y comparar sus direcciones con la dirección IP obtenida de los ajustes de configuración del módulo. Si se encuentra una interfaz de red adecuada, el módulo abre puertos para escuchar y espera una conexión entrante. El módulo puede abrir los siguientes puertos: 80, 443, 8080, 8090, 7080, 8443, 20, 21, 22, 53, 143, 465, 990, 993, 995. Si no encuentra una interfaz de red adecuada, utiliza el protocolo SSDP para encontrar dispositivos (módem, enrutador, etc.) con acceso a Internet. Si se encuentran dispositivos adecuados, el módulo intenta reconfigurarlos utilizando AddPortMapping para permitir el reenvío de puertos.
Ejemplo de AddPortMapping para el reenvío de puertos 443
Estadísticas
Desde el retorno de Emotet en noviembre de 2021, observamos que su actividad no cesa de aumentar. Sin embargo, en marzo de 2022, según nuestra telemetría, la cantidad de usuarios atacados se disparó de 2847 en febrero a 9086: un crecimiento más que triplicado.
Dinámica de la cantidad de usuarios atacados en ataques recientes de Emotet, noviembre de 2021 a marzo de 2022 (descargar)
Un aumento similar que observamos en marzo en el número de detecciones de Emotet.
Dinámica del número de detecciones de Emotet, noviembre de 2021 a marzo de 2022 (descargar)
Análisis de las víctimas
Emotet infecta computadoras de empresas y usuarios individuales en todo el mundo. En el primer trimestre de 2022, según nuestra telemetría, Emotet apuntó con mayor frecuencia a los usuarios de los siguientes países: Italia (10,04 %), Rusia (9,87 %), Japón (8,55 %), México (8,36 %), Brasil (6,88 %), Indonesia (4,92 %), India (3,21 %), Vietnam (2,70 %), China (2,62 %), Alemania (2,19 %) y Malasia (2,13 %).
Distribución geográfica de los objetivos de Emotet, primer trimestre de 2022 (descargar)
Conclusiones
Este conjunto de módulos es capaz de realizar una gran cantidad de acciones maliciosas: robar correos electrónicos, contraseñas y datos de inicio de sesión de varias fuentes; enviando correo no deseado. Todos estos módulos, excepto los de Thunderbird, de una forma u otra, ya fueron utilizados por Emotet en ocasiones anteriores. Sin embargo, todavía hay módulos que no hemos podido obtener. Asimismo, nuestra telemetría muestra un crecimiento notable en el número de usuarios atacados en marzo. Continuamos monitoreando activamente a la familia Emotet.
Indicadores de compromiso
Nota: Debido a que Emotet es un malware polimórfico, no hay hashes IOC.
Direcciones IP del C2
70[.]36.102.35:443
197[.]242.150.244:8080
188[.]44.20.25:443
45[.]118.135.203:7080
92[.]240.254.110:8080
103[.]43.46.182:443
1[.]234.2.232:8080
50[.]116.54.215:443
51[.]91.76.89:8080
206[.]188.212.92:8080
153[.]126.146.25:7080
178[.]79.147.66:8080
217[.]182.25.250:8080
196[.]218.30.83:443
51[.]91.7.5:8080
72[.]15.201.15:8080
119[.]193.124.41:7080
5[.]9.116.246:8080
151[.]106.112.196:8080
101[.]50.0.91:8080
45[.]142.114.231:8080
185[.]157.82.211:8080
46[.]55.222.11:443
103[.]75.201.2:443
176[.]56.128.118:443
176[.]104.106.96:8080
107[.]182.225.142:8080
31[.]24.158.56:8080
51[.]254.140.238:7080
159[.]65.88.10:8080
82[.]165.152.127:8080
146[.]59.226.45:443
173[.]212.193.249:8080
212[.]24.98.99:8080
212[.]237.17.99:8080
110[.]232.117.186:8080
131[.]100.24.231:80
209[.]250.246.206:443
195[.]201.151.129:8080
138[.]185.72.26:8080
Emotet: módulos y ataques recientes