VirusTotal Hunting: Descubrir Variantes de una Campaña
Guía completa de VirusTotal Intelligence para threat hunting: Livehunt con reglas YARA, Retrohunt, Graph explorer, pivoting por imphash, ssdeep e infraestructura C2. Construir un cluster de campaña a partir de una sola muestra, con IOCs accionables.
De una muestra a toda la campaña
Un analista de threat intelligence recibe una muestra de malware de un incidente reciente. El análisis en sandbox confirma que es un loader que descarga un payload de segunda etapa. El hash SHA256 es conocido por 35 de 72 motores antivirus en VirusTotal. Pero la pregunta real no es si este fichero es malicioso (eso ya lo sabemos), sino: ¿cuántas variantes más existen? ¿Desde cuándo opera esta campaña? ¿Qué infraestructura comparten las variantes? ¿Hay indicadores que permitan detectar muestras futuras?
VirusTotal Intelligence proporciona las herramientas para responder estas preguntas: búsquedas avanzadas, Livehunt, Retrohunt y Graph explorer. En este caso de uso, partimos de una sola muestra y construimos un cluster de campaña completo.
La muestra inicial
Nuestro punto de partida es un ejecutable PE:
Nombre: update_client.exe
SHA256: a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2
Tipo: PE32 executable (GUI) Intel 80386
Tamaño: 247.5 KB
Detección: 35/72 (nombres variados: Trojan.GenericKD, Mal/Generic-S, Trojan.Win32.Agent)
Primera subida: 2026-05-28
Los nombres genéricos de detección ("Generic", "Agent") indican que los motores antivirus no tienen una firma específica para esta familia, lo que sugiere que podría ser una herramienta custom o poco documentada.
Paso 1: Análisis de metadatos en VT
Información del PE
VirusTotal extrae automáticamente metadatos del ejecutable:
Imphash: f34d5e6f7a8b9c0d1e2f3a4b5c6d7e8f
SSDeep: 6144:aB3cD4eF5gH6iJ7kL8mN9oP0qR1sT2:aB3cD4eF5gH
Compilation: 2026-05-25 14:33:21 UTC
Entry Point: 0x00401000
Sections: .text .rdata .data .rsrc
Signer: Not signed
Resources: RT_ICON, RT_VERSION, RT_MANIFEST
Version Info:
CompanyName: Microsoft Corporation
ProductName: Windows Update Client
FileVersion: 10.0.19041.1
InternalName: wuauclt
Observaciones clave:
- Imphash (
f34d5e6f...): este hash será nuestro primer pivot para encontrar variantes - No firmado: un ejecutable que se hace pasar por "Windows Update Client" pero no tiene firma digital de Microsoft
- Version Info falsa: imita un componente legítimo de Windows (wuauclt)
- Compilación reciente: compilado 3 días antes de la primera subida
Comportamiento reportado
La pestaña "Behavior" de VT muestra resultados de sandboxes automáticos:
Network:
DNS: update-service.evil-infra.xyz → 185.XX.XX.XX
HTTP: GET http://185.XX.XX.XX/api/check
HTTP: GET http://185.XX.XX.XX/api/payload?id=WK-001
HTTPS: POST https://c2.evil-infra.xyz/beacon
Files Created:
C:\Users\admin\AppData\Local\Temp\payload.dll
C:\Users\admin\AppData\Roaming\Microsoft\Windows\svchost.exe
Registry:
HKCU\Software\Microsoft\Windows\CurrentVersion\Run → "SecurityUpdate"
Paso 2: Pivoting por imphash
El imphash es nuestro primer vector de búsqueda. Ficheros con el mismo imphash importan las mismas funciones DLL en el mismo orden, lo que indica que fueron compilados con el mismo proyecto o builder.
Búsqueda en VT Intelligence
# Query de búsqueda avanzada en VT Intelligence
imphash:f34d5e6f7a8b9c0d1e2f3a4b5c6d7e8f
Resultados: 23 ficheros con el mismo imphash, subidos entre el 2026-04-15 y el 2026-06-01.
| Nombre | SHA256 | Primera subida | Detección |
|---|---|---|---|
| update_client.exe | a1b2c3... | 2026-05-28 | 35/72 |
| windows_update.exe | d4e5f6... | 2026-05-20 | 28/72 |
| wupdater.exe | g7h8i9... | 2026-05-15 | 22/72 |
| svc_update.exe | j0k1l2... | 2026-05-10 | 18/72 |
| win_service.exe | m3n4o5... | 2026-05-01 | 12/72 |
| updater.exe | p6q7r8... | 2026-04-25 | 8/72 |
| setup_update.exe | s9t0u1... | 2026-04-15 | 5/72 |
| (16 más) | ... | ... | ... |
Patrón identificado: la detección aumenta con el tiempo (de 5/72 en abril a 35/72 en mayo), lo que indica que los motores AV van añadiendo firmas progresivamente. Los ficheros más antiguos tienen menos detecciones porque los motores no los reconocían cuando fueron subidos.
Paso 3: Pivoting por ssdeep (similitud fuzzy)
SSDeep calcula un hash de similitud contextual que permite encontrar ficheros con contenido similar (no idéntico):
# Búsqueda por similitud ssdeep en VT
similar-to:a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2
Esta búsqueda devuelve 31 ficheros con similitud superior al 60%, incluyendo los 23 del imphash más 8 adicionales que tienen un imphash diferente (probablemente una versión actualizada del builder que importa funciones adicionales).
Paso 4: Pivoting por infraestructura
Dominios contactados
# Buscar ficheros que contactan el mismo dominio C2
behaviour_network:evil-infra.xyz
Resultados: 45 ficheros contactan dominios bajo evil-infra.xyz, incluyendo los 31 del paso anterior más 14 adicionales que son payloads de segunda etapa (DLLs) con estructura completamente diferente.
IPs del servidor C2
# Buscar ficheros que contactan la misma IP
behaviour_network:185.XX.XX.XX
Resultados: 52 ficheros. La IP del C2 se comparte con samples que contactan otros dominios, revelando que el atacante usa múltiples dominios apuntando a la misma infraestructura.
Dominios adicionales descubiertos
Al examinar los 52 ficheros, encontramos dominios C2 adicionales que no conocíamos:
| Dominio | IP | Primera aparición | Samples |
|---|---|---|---|
| update-service.evil-infra.xyz | 185.XX.XX.XX | 2026-04-15 | 23 |
| c2.evil-infra.xyz | 185.XX.XX.XX | 2026-04-15 | 45 |
| cdn-update.evil-infra.xyz | 185.XX.XX.XX | 2026-05-01 | 12 |
| service-api.another-domain.xyz | 91.XX.XX.XX | 2026-05-15 | 8 |
| api-gateway.third-domain.xyz | 91.XX.XX.XX | 2026-05-20 | 5 |
El atacante migró parte de la infraestructura a una nueva IP (91.XX.XX.XX) a mediados de mayo, probablemente porque la primera fue reportada.
Paso 5: Livehunt (detección proactiva)
Livehunt permite crear reglas YARA que se ejecutan contra cada nuevo fichero subido a VirusTotal, generando alertas en tiempo real:
Regla YARA para Livehunt
rule Campaign_EvilInfra_Loader {
meta:
description = "Detects loader variants from evil-infra campaign"
author = "MalwareIntel Research"
date = "2026-06-06"
campaign = "evil-infra"
strings:
// Strings comunes en todas las variantes
$s1 = "/api/check" ascii wide
$s2 = "/api/payload" ascii wide
$s3 = "/beacon" ascii wide
// Dominios C2 conocidos
$c2_1 = "evil-infra.xyz" ascii wide
$c2_2 = "another-domain.xyz" ascii wide
$c2_3 = "third-domain.xyz" ascii wide
// Version info falsa de Windows Update
$vi1 = "Windows Update Client" ascii wide
$vi2 = "wuauclt" ascii wide
// Patrón de código del builder
$code1 = { 8B 45 ?? 83 C0 ?? 50 FF 15 ?? ?? ?? ?? 85 C0 74 ?? }
$code2 = { 68 ?? ?? ?? ?? FF 15 ?? ?? ?? ?? 89 45 ?? 83 7D ?? 00 }
condition:
uint16(0) == 0x5A4D and
filesize > 100KB and filesize < 500KB and
(
any of ($c2_*) or
(2 of ($s*) and any of ($vi*)) or
(all of ($code*) and any of ($s*))
)
}
Configuración de la notificación
Livehunt Rule: Campaign_EvilInfra_Loader
Notification: Email + Webhook
Webhook URL: https://our-siem.internal/api/vt-alerts
Email: [email protected]
A partir del momento en que esta regla está activa, cualquier nueva variante subida a VirusTotal generará una alerta, permitiendo detección proactiva antes de que afecte a la organización.
Paso 6: Retrohunt (búsqueda histórica)
Retrohunt aplica la misma regla YARA al corpus histórico completo de VirusTotal (cientos de millones de ficheros almacenados a lo largo de los años):
Retrohunt Results:
Rule: Campaign_EvilInfra_Loader
Duration: 4 hours
Scanned: ~800M files
Matches: 67 files
Earliest match: 2026-03-01 (3 meses antes de nuestro incidente)
Latest match: 2026-06-04 (ayer)
New findings (not in previous pivots): 15 files
Retrohunt reveló 15 muestras adicionales que no encontramos con los pivots anteriores, incluyendo variantes tempranas de marzo que usaban un dominio C2 diferente (proto-evil-infra.xyz) que ya no está activo. Esto extiende la timeline de la campaña de 2 meses a 3 meses.
Paso 7: Graph explorer (visualización)
VT Graph permite visualizar las relaciones entre todos los artefactos descubiertos:
Estructura del grafo
[185.XX.XX.XX]
/ | \
[evil-infra.xyz] [cdn-update...] [update-service...]
| | |
[45 samples] [12 samples] [23 samples]
|
[payload_1.dll] ──── [payload_2.dll] ──── [payload_3.dll]
|
[91.XX.XX.XX]
/ \
[another-domain.xyz] [third-domain.xyz]
| |
[8 samples] [5 samples]
Información del grafo
El grafo revela la estructura de la campaña:
- 2 IPs de C2: 185.XX.XX.XX (primaria, desde marzo) y 91.XX.XX.XX (backup, desde mayo)
- 5 dominios: todos registrados en el mismo registrar con datos WHOIS similares
- 67 loaders: compilados con el mismo builder, variando solo en los nombres
- 3 payloads DLL: las etapas finales, actualizadas periódicamente
- 1 operador probable: la infraestructura, timing y tooling sugieren un solo actor o grupo pequeño
Resumen del cluster de campaña
Partiendo de una sola muestra, hemos construido un cluster completo:
| Métrica | Valor |
|---|---|
| Muestra inicial | 1 |
| Variantes encontradas (loaders) | 67 |
| Payloads de segunda etapa | 3 |
| IPs de C2 | 2 |
| Dominios C2 | 5 |
| Primer sample conocido | 2026-03-01 |
| Último sample conocido | 2026-06-04 |
| Duración de la campaña | 3+ meses |
| Detección media (primer día) | 8/72 |
| Detección media (actual) | 32/72 |
IOCs completos de la campaña
Infraestructura
| Tipo | Valor | Primera aparición |
|---|---|---|
| IPv4 | 185.XX.XX.XX | 2026-03-01 |
| IPv4 | 91.XX.XX.XX | 2026-05-15 |
| Dominio | evil-infra.xyz | 2026-03-01 |
| Dominio | update-service.evil-infra.xyz | 2026-04-15 |
| Dominio | c2.evil-infra.xyz | 2026-04-15 |
| Dominio | cdn-update.evil-infra.xyz | 2026-05-01 |
| Dominio | service-api.another-domain.xyz | 2026-05-15 |
| Dominio | api-gateway.third-domain.xyz | 2026-05-20 |
| Dominio | proto-evil-infra.xyz | 2026-03-01 (inactivo) |
Hashes representativos (loaders)
| SHA256 | Nombre | Compilación |
|---|---|---|
a1b2c3d4... | update_client.exe | 2026-05-25 |
d4e5f6a7... | windows_update.exe | 2026-05-18 |
s9t0u1v2... | setup_update.exe | 2026-04-12 |
Indicadores de builder
| Indicador | Valor |
|---|---|
| Imphash (v1) | f34d5e6f7a8b9c0d1e2f3a4b5c6d7e8f |
| Imphash (v2) | a9b8c7d6e5f4a3b2c1d0e9f8a7b6c5d4 |
| Version Info | "Windows Update Client" / "wuauclt" |
| No firmado | Siempre sin firma digital |
| Tamaño | 200-300 KB (rango consistente) |
Mapeo MITRE ATT&CK
| Táctica | Técnica | ID | Detalle |
|---|---|---|---|
| Resource Development | Acquire Infrastructure: Domains | T1583.001 | 5 dominios C2 registrados |
| Resource Development | Acquire Infrastructure: Server | T1583.004 | 2 VPS para C2 |
| Initial Access | Phishing: Spearphishing Attachment | T1566.001 | Distribución via email |
| Execution | User Execution: Malicious File | T1204.002 | Ejecución del loader |
| Persistence | Boot or Logon Autostart: Registry Run Keys | T1547.001 | Run key "SecurityUpdate" |
| Defense Evasion | Masquerading: Match Legitimate Name or Location | T1036.005 | Imitación de Windows Update |
| Command and Control | Application Layer Protocol: Web Protocols | T1071.001 | HTTPS beacon |
| Command and Control | Ingress Tool Transfer | T1105 | Descarga de payload DLL |
Lecciones aprendidas
1. Un solo sample puede revelar toda una campaña. El pivoting sistemático (imphash, ssdeep, infraestructura, comportamiento) convierte un indicador puntual en inteligencia de campaña accionable.
2. El imphash es el pivot más efectivo para builders comunes. Cuando un atacante usa un builder o toolkit que genera variantes, el imphash se mantiene constante mientras que los hashes del fichero cambian con cada compilación.
3. Livehunt convierte la inteligencia en detección proactiva. Una regla YARA bien construida detecta variantes futuras automáticamente, antes de que lleguen a la organización.
4. Retrohunt revela la historia que no conocías. Las campañas suelen ser más antiguas y extensas de lo que el primer incidente sugiere. Retrohunt puede revelar meses de actividad previa.
5. La infraestructura se reutiliza más que el malware. Los atacantes cambian los hashes de sus samples constantemente, pero reutilizan IPs, dominios y certificados TLS. El pivoting por infraestructura a menudo revela más variantes que el pivoting por fichero.
6. El grafo es la representación final. VT Graph permite visualizar relaciones que no son obvias en listas de IOCs: dominios que comparten IP, samples que comparten infraestructura, y cadenas de distribución entre loaders y payloads.
Los datos de esta guía son ficticios con fines educativos. Las técnicas de búsqueda y pivoting son aplicables a investigaciones reales en VirusTotal Intelligence. Todos los indicadores se proporcionan con contexto defensivo.
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.