Análisis de Malware con Wazuh: Guía para Analistas
Guía práctica para detectar y analizar malware con Wazuh: arquitectura, capacidades FIM/rootcheck/YARA/VirusTotal, reglas XML personalizadas, integración MITRE ATT&CK y mejores prácticas para analistas SOC.
Por qué Wazuh para detección de malware
Wazuh es una plataforma de seguridad open-source que combina SIEM, XDR y compliance. Para equipos con presupuesto limitado o que buscan soberanía sobre sus datos, Wazuh es una alternativa viable a soluciones comerciales: coste cero en licencias (Apache 2.0), agente para Windows/Linux/macOS, integración MITRE ATT&CK nativa, reglas XML personalizables, integraciones con VirusTotal y YARA, y active response para contención.
Arquitectura
WAZUH DASHBOARD (OpenSearch Dashboards)
│
WAZUH INDEXER (OpenSearch)
│
WAZUH MANAGER
├── Analysis Engine ├── Rules Engine
├── CDB Lists (IOCs) ├── Vuln Detector
├── Active Response └── Integrations (VT, YARA, MISP)
│ (puerto 1514/1515, cifrado AES)
┌─────┼─────┐
Agent Agent Agent
Win Lin macOS
Flujo de datos: el agente recopila eventos (ficheros, procesos, logs), los envía cifrados al manager, el motor de análisis evalúa contra las reglas, genera alertas si hay match, las indexa en el dashboard, y ejecuta active response si está configurado.
7 capacidades para detección de malware
1. FIM (File Integrity Monitoring)
Syscheck monitoriza cambios en ficheros. Primera línea de detección para malware.
<syscheck>
<frequency>300</frequency>
<!-- Directorios de alto riesgo en tiempo real -->
<directories realtime="yes" check_sha256sum="yes"
report_changes="yes">/tmp</directories>
<directories realtime="yes" check_sha256sum="yes">
C:\Users\*\AppData\Local\Temp</directories>
<directories realtime="yes" check_sha256sum="yes">
C:\Windows\Temp</directories>
<!-- Puntos de persistencia -->
<directories realtime="yes" check_sha256sum="yes">
C:\Windows\System32\Tasks</directories>
<ignore type="sregex">.swp$</ignore>
</syscheck>
Cuando detecta un fichero nuevo, genera una alerta con el hash SHA256 que se consulta contra VirusTotal o CDB lists.
2. Rootcheck
Busca rootkits conocidos, ficheros ocultos, puertos ocultos (comparando netstat vs /proc/net), interfaces en modo promiscuo y anomalías en binarios del sistema.
3. Active Response
Ejecuta acciones automatizadas ante condiciones específicas.
| Acción | Trigger | Comando |
|---|---|---|
| Bloqueo de IP | Conexión a C2 conocido | firewall-drop |
| Aislamiento de agente | Malware confirmado (level 12+) | agent-disconnect |
| Kill de proceso | Proceso malicioso | custom script |
| Cuarentena de fichero | Hash en blacklist | custom script |
<active-response>
<command>agent-isolation</command>
<location>local</location>
<rules_id>100200,100201</rules_id>
<timeout>3600</timeout>
</active-response>
4. Integración VirusTotal
Consulta hashes de ficheros nuevos contra la API de VirusTotal:
<integration>
<name>virustotal</name>
<api_key>TU_API_KEY</api_key>
<rule_id>554,550</rule_id>
<alert_format>json</alert_format>
</integration>
Regla para alertar cuando VirusTotal detecta el fichero:
<rule id="100092" level="12">
<if_sid>87105</if_sid>
<field name="virustotal.positives" type="pcre2">[1-9]\d*</field>
<description>VirusTotal: fichero malicioso
($(virustotal.positives) motores)</description>
<mitre><id>T1204</id></mitre>
<group>virustotal,malware,</group>
</rule>
5. Integración YARA
YARA detecta patrones dentro de ficheros, más allá de hashes simples.
Flujo: FIM detecta fichero nuevo, active response ejecuta YARA scan, si hay match se genera alerta level 12.
<rule id="100100" level="12">
<decoded_as>json</decoded_as>
<field name="log_type">yara_scan</field>
<match>MATCH</match>
<description>YARA rule match en $(syscheck.path)</description>
<mitre><id>T1059</id><id>T1204</id></mitre>
<group>yara,malware,</group>
</rule>
6. Vulnerability Detector
Identifica software con CVEs conocidos. Combinado con CISA KEV, permite priorizar endpoints vulnerables a exploits activos.
7. SCA (Security Configuration Assessment)
Verifica configuración contra benchmarks CIS: PowerShell Constrained Language Mode, macros Office deshabilitadas, ASR rules, LSASS protection, SMBv1 deshabilitado.
Reglas personalizadas para malware
Ransomware
<!-- Múltiples cambios de fichero en ventana corta -->
<rule id="100110" level="10" frequency="20" timeframe="60">
<if_matched_group>syscheck_file</if_matched_group>
<description>Posible ransomware: 20+ ficheros modificados
en 60 segundos</description>
<mitre><id>T1486</id></mitre>
<group>ransomware,malware,</group>
</rule>
<!-- Extensión típica de ransomware -->
<rule id="100111" level="12">
<if_sid>554</if_sid>
<field name="syscheck.path" type="pcre2">
\.(encrypted|locked|crypt|lockbit|blackcat)$</field>
<description>Extensión de ransomware: $(syscheck.path)</description>
<mitre><id>T1486</id></mitre>
<group>ransomware,malware,</group>
</rule>
Herramientas de ataque
<rule id="100120" level="14">
<if_sid>61603</if_sid>
<field name="win.eventdata.originalFileName" type="pcre2">
(?i)(mimikatz|lazagne|procdump|sharpdump)</field>
<description>Credential dumping tool:
$(win.eventdata.originalFileName)</description>
<mitre><id>T1003</id></mitre>
<group>credential_access,malware,</group>
</rule>
LOLBins sospechosos
<!-- certutil descargando ficheros -->
<rule id="100130" level="10">
<if_sid>61603</if_sid>
<field name="win.eventdata.commandLine" type="pcre2">
certutil.*(-urlcache|-split).*http</field>
<description>certutil descargando desde URL externa</description>
<mitre><id>T1105</id></mitre>
<group>defense_evasion,lolbins,</group>
</rule>
<!-- PowerShell encoded -->
<rule id="100132" level="10">
<if_sid>61603</if_sid>
<field name="win.eventdata.commandLine" type="pcre2">
(?i)powershell.*(-enc|-encodedcommand)</field>
<description>PowerShell con comando codificado base64</description>
<mitre><id>T1059.001</id><id>T1027</id></mitre>
<group>execution,obfuscation,</group>
</rule>
Persistencia
<rule id="100141" level="10">
<if_sid>61603</if_sid>
<field name="win.eventdata.commandLine" type="pcre2">
sc.*create.*binPath.*(temp|appdata|public)</field>
<description>Servicio creado con binario en ruta sospechosa</description>
<mitre><id>T1543.003</id></mitre>
<group>persistence,malware,</group>
</rule>
CDB Lists para IOCs
Las CDB lists (Constant Database) permiten cargar IOCs para matching en milisegundos.
Fichero /var/ossec/etc/lists/malware_hashes:
44d88612fea8a8f36de82e1278abb02f:eicar_test
a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6:emotet_loader
Regla que consulta la lista:
<rule id="100150" level="14">
<if_sid>554</if_sid>
<list field="syscheck.sha256" lookup="match_key">
etc/lists/malware_hashes</list>
<description>Hash coincide con malware conocido</description>
<mitre><id>T1204</id></mitre>
<group>malware,ioc_match,</group>
</rule>
Las listas se actualizan automáticamente desde feeds (ThreatFox, Feodo Tracker) mediante cron.
Integración con Sigma rules
Las reglas Sigma se convierten a formato Wazuh XML. Ejemplo: proceso sospechoso hijo de Office.
Sigma original:
title: Suspicious Process Spawned by Office
detection:
selection_parent:
ParentImage|endswith: ['\WINWORD.EXE', '\EXCEL.EXE']
selection_child:
Image|endswith: ['\cmd.exe', '\powershell.exe', '\mshta.exe']
condition: selection_parent and selection_child
Equivalente Wazuh:
<rule id="100160" level="12">
<if_sid>61603</if_sid>
<field name="win.eventdata.parentImage" type="pcre2">
(?i)(WINWORD|EXCEL)\.EXE$</field>
<field name="win.eventdata.image" type="pcre2">
(?i)(cmd|powershell|mshta)\.exe$</field>
<description>Proceso sospechoso lanzado por Office</description>
<mitre><id>T1566.001</id><id>T1059</id></mitre>
<group>execution,malware,</group>
</rule>
Dashboard MITRE ATT&CK
Wazuh 4.x incluye un dashboard ATT&CK que muestra cobertura de técnicas (heatmap), alertas mapeadas, tendencias temporales y top técnicas. Para maximizar su utilidad: asigna etiquetas MITRE a todas las reglas custom, revisa la cobertura semanalmente, prioriza reglas para técnicas no cubiertas.
Mejores prácticas
Configuración inicial. Agentes en todos los endpoints. FIM en tiempo real para directorios de riesgo. Integración VirusTotal activa. CDB lists con IOCs de feeds públicos. YARA en agentes con active response.
Operación diaria. Alertas nivel 10+ al inicio de turno. CDB lists actualizadas diariamente. Monitorizar agentes offline. Queries de hunting en OpenSearch. Correlacionar alertas entre agentes para detectar lateral movement.
Tuning. Nunca desactives una regla padre por FP. Crea reglas hijas con <if_sid> que excluyan el caso legítimo. Documenta cada exclusión.
<!-- Exclusión documentada -->
<rule id="100199" level="0">
<if_sid>100130</if_sid>
<field name="win.eventdata.parentImage" type="pcre2">
sccm_client\.exe$</field>
<description>certutil legítimo: SCCM gestionando certificados</description>
</rule>
Escalado (500+ agentes). Múltiples managers en cluster, worker nodes, filebeat al indexer, agentes segmentados por grupos (servidores, workstations, DMZ).
Fuentes y referencias
- Wazuh. "Official Documentation." https://documentation.wazuh.com/
- SigmaHQ. "Sigma Rules Repository." https://github.com/SigmaHQ/sigma
- VirusTotal. "API Documentation." https://developers.virustotal.com/
- YARA. "Writing YARA Rules." https://yara.readthedocs.io/
- MITRE. "ATT&CK Enterprise Matrix." https://attack.mitre.org/
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.