ETW para Detección de Malware: Event Tracing for Windows en Profundidad
Guía técnica de Event Tracing for Windows (ETW) aplicado a detección de malware. Providers clave, cómo los EDR usan ETW, técnicas de evasión de ETW por malware avanzado, y configuración práctica para threat hunting.
ETW: la columna vertebral de la detección moderna
Todo EDR moderno depende de ETW. Cuando CrowdStrike detecta un Cobalt Strike beacon, cuando SentinelOne bloquea una inyección de código, cuando Microsoft Defender for Endpoint identifica un LSASS dump, la telemetría subyacente viene de ETW.
ETW no es una herramienta de seguridad per se. Es un framework de tracing de propósito general integrado en el kernel de Windows. Pero su capacidad para generar eventos detallados sobre actividad del sistema lo convierte en la fuente de datos más valiosa para la detección de malware.
Este artículo explica cómo funciona ETW, qué providers son relevantes para seguridad, cómo los EDR lo usan, y cómo el malware intenta evadirlo.
Arquitectura de ETW
Componentes
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Provider │────→│ ETW Session │────→│ Consumer │
│ (genera │ │ (buffer + │ │ (lee y │
│ eventos) │ │ routing) │ │ procesa) │
└──────────────┘ └──────────────┘ └──────────────┘
Kernel/User Kernel User/Kernel
Ej: Process Ej: NT Kernel Ej: EDR,
creation events Logger Session Sysmon, SIEM
Provider: componente que genera eventos. Cada provider tiene un GUID único y genera eventos sobre un dominio específico (procesos, red, registro, etc.).
Session: infraestructura que recibe eventos de providers, los bufferiza en memoria y los enruta a consumers. Puede escribir a archivo (.etl), entregar en tiempo real, o ambos.
Consumer: aplicación que lee y procesa los eventos. Los EDR son consumers ETW.
Providers clave para seguridad
| Provider | GUID | Eventos relevantes |
|---|---|---|
| Microsoft-Windows-Kernel-Process | {22FB2CD6-0E7B-422B-A0C7-2FAD1FD0E716} | Creación/terminación de procesos, threads |
| Microsoft-Windows-Kernel-File | {EDD08927-9CC4-4E65-B970-C2560FB5C289} | Operaciones de archivo (crear, escribir, eliminar) |
| Microsoft-Windows-Kernel-Registry | {70EB4F03-C1DE-4F73-A051-33D13D5413BD} | Operaciones de registro |
| Microsoft-Windows-Kernel-Network | {7DD42A49-5329-4832-8DFD-43D979153A88} | Conexiones TCP/UDP |
| Microsoft-Windows-DotNETRuntime | {E13C0D23-CCBC-4E12-931B-D9CC2EEE27E4} | Carga de assemblies, JIT, excepciones |
| Microsoft-Windows-PowerShell | {A0C1853B-5C40-4B15-8766-3CF1C58F985A} | Ejecución de scripts PowerShell |
| Microsoft-Windows-AMSI | {2A576B87-09A7-520E-C21A-4942F0271D67} | Escaneos AMSI y resultados |
| Microsoft-Windows-WMI-Activity | {1418EF04-B0B4-4623-BF7E-D74AB47BBDAA} | Actividad WMI (queries, subscriptions) |
| Microsoft-Windows-DNS-Client | {1C95126E-7EEA-49A9-A3FE-A378B03DDB4D} | Queries DNS |
| Microsoft-Windows-Threat-Intelligence | {F4E1897C-BB5D-5668-F1D8-040F4D8DD344} | ETW-TI: eventos de seguridad del kernel (requiere PPL) |
ETW-TI: el provider privilegiado
Microsoft-Windows-Threat-Intelligence (ETW-TI) es un provider especial que genera eventos de alta fidelidad sobre actividad sospechosa:
- Asignaciones de memoria con permisos RWX (PAGE_EXECUTE_READWRITE)
- Escritura en memoria de otro proceso (cross-process memory write)
- Mapeo de secciones de imagen (image section mapping)
- Allocaciones de memoria en otros procesos
ETW-TI solo es accesible para procesos protegidos (PPL, Protected Process Light). Los EDR que se registran como procesos protegidos pueden consumir estos eventos. Un proceso normal no puede acceder a ETW-TI.
Cómo los EDR usan ETW
Arquitectura típica de un EDR
┌─────────────────────────────────────────────────┐
│ EDR Agent │
│ │
│ ┌──────────────┐ ┌───────────────────────┐ │
│ │ User-mode │ │ Kernel-mode driver │ │
│ │ hooks (ntdll)│ │ (minifilter, callback)│ │
│ │ │ │ │ │
│ │ Hook: │ │ ETW Consumer: │ │
│ │ NtCreateFile │ │ - Kernel-Process │ │
│ │ NtAllocVM │ │ - Kernel-File │ │
│ │ NtWriteVM │ │ - Threat-Intelligence │ │
│ │ etc. │ │ - DotNETRuntime │ │
│ └──────────────┘ └───────────────────────┘ │
│ │ │ │
│ └────────┬───────────┘ │
│ │ │
│ ┌───────▼────────┐ │
│ │ Detection │ │
│ │ Engine │──→ Alert/Block │
│ │ (rules, ML, │ │
│ │ behavioral) │ │
│ └────────────────┘ │
└─────────────────────────────────────────────────┘
Los EDR combinan:
- User-mode hooks en ntdll (interceptan API calls)
- Kernel callbacks (PsSetCreateProcessNotifyRoutine, ObRegisterCallbacks)
- ETW consumers (eventos del kernel)
- Minifilter driver (I/O de archivos)
ETW proporciona una capa que no depende de hooks en user-mode, lo que lo hace más resistente a evasión.
Eventos ETW que detectan ataques comunes
| Ataque | Provider ETW | Evento |
|---|---|---|
| Process injection | Threat-Intelligence | Allocate/write en memoria de otro proceso |
| DLL injection | Kernel-Process | Thread creation in remote process |
| Credential dumping | Threat-Intelligence | Read access to LSASS memory |
| PowerShell malicioso | PowerShell | Script execution with suspicious content |
| .NET in-memory loading | DotNETRuntime | Assembly.Load from byte array |
| AMSI bypass | AMSI | Absence of scan events or all-clean results |
| WMI persistence | WMI-Activity | Event subscription created |
| DNS tunneling | DNS-Client | High-entropy DNS queries |
Evasión de ETW por malware
Técnica 1: Patching EtwEventWrite (user-mode)
Similar al AMSI bypass, el malware puede patchear EtwEventWrite en ntdll para que retorne sin hacer nada:
// Obtener direccion de EtwEventWrite en ntdll
HMODULE ntdll = GetModuleHandle("ntdll.dll");
FARPROC etwEventWrite = GetProcAddress(ntdll, "EtwEventWrite");
// Patchear con ret (0xC3)
DWORD oldProtect;
VirtualProtect(etwEventWrite, 1, PAGE_EXECUTE_READWRITE, &oldProtect);
*(BYTE*)etwEventWrite = 0xC3; // ret instruction
VirtualProtect(etwEventWrite, 1, oldProtect, &oldProtect);
Limitación: esto solo afecta a los eventos ETW generados desde user-mode en ese proceso. Los eventos generados por el kernel (ETW-TI, kernel providers) no se ven afectados.
Técnica 2: Desregistrar providers ETW
# Listar sessions ETW activas
logman query -ets
# Intentar detener una session (requiere admin)
logman stop "EventLog-Security" -ets
Técnica 3: Syscalls directas (bypass hooks + ETW user-mode)
Si el malware ejecuta syscalls directamente (sin pasar por ntdll), no genera eventos ETW de user-mode asociados a las funciones hookeadas. Sin embargo, los eventos de kernel (kernel-mode ETW) siguen generándose.
Técnica 4: Kernel exploit para deshabilitar ETW
El nivel más avanzado de evasión: explotar una vulnerabilidad del kernel (o usar BYOVD) para deshabilitar ETW a nivel de kernel. Esto puede incluir:
- Desregistrar callback routines
- Modificar la tabla de dispatch de ETW
- Deshabilitar ETW-TI provider
Esta técnica requiere kernel-mode access y es detectable por EDRs que monitorizan la integridad del kernel.
Detección de evasión de ETW
| Evasión | Detección |
|---|---|
| Patching EtwEventWrite | EDR: integridad check periódico de ntdll. ETW-TI: VirtualProtect en ntdll |
| Desregistrar providers | Monitorizar logman/wevtutil: Sysmon Event ID 1 |
| Ausencia de eventos | Correlación: si un proceso existe pero no genera eventos ETW esperados |
| Kernel-level disable | HVCI (Hypervisor Code Integrity), kernel integrity monitoring |
Configuración práctica de ETW para threat hunting
Crear una sesión ETW para hunting
# Crear sesion que captura actividad de procesos y .NET
logman create trace "ThreatHunt" -ets -p Microsoft-Windows-Kernel-Process 0x10 -p Microsoft-Windows-DotNETRuntime 0x2038 -o C:\Logs\threathunt.etl
# Iniciar la sesion
logman start "ThreatHunt" -ets
# Detener y analizar
logman stop "ThreatHunt" -ets
Herramientas para consumir ETW
| Herramienta | Tipo | Uso |
|---|---|---|
| SilkETW (FireEye/Mandiant) | Open source | Consumer ETW con output JSON para SIEM |
| ETWExplorer | GUI | Explorar providers y sus eventos |
| PerfView | Microsoft | Análisis de traces ETW |
| TraceEvent (.NET) | Library | Consumir ETW programáticamente en C# |
| xperf (WPT) | CLI | Captura y análisis de traces |
| logman | Built-in | Gestión de sessions ETW |
| wevtutil | Built-in | Consulta de Event Log (que internamente es ETW) |
SilkETW para detección
SilkETW de Mandiant permite consumir eventos ETW y exportarlos en formato JSON para ingestión en un SIEM:
SilkETW.exe -t kernel -kk Process -ot file -p C:\Logs\kernel_process.json
SilkETW.exe -t user -pn Microsoft-Windows-DotNETRuntime -uk 0x2038 -ot file -p C:\Logs\dotnet.json
Mapeo: ETW providers por fase de ataque
| Fase | Provider ETW | Qué detecta |
|---|---|---|
| Initial Access | Kernel-Network | Conexiones entrantes anómalas |
| Execution | Kernel-Process, PowerShell | Creación de procesos, scripts |
| Persistence | WMI-Activity, Kernel-Registry | WMI subscriptions, Run keys |
| Priv Escalation | Threat-Intelligence | Cross-process memory access (LSASS) |
| Defense Evasion | AMSI, Threat-Intelligence | AMSI bypass, ETW tampering |
| Discovery | DNS-Client, Kernel-Network | DNS queries, network scanning |
| Lateral Movement | Kernel-Process, Kernel-Network | Remote process creation, SMB |
| Collection | Kernel-File | Mass file access |
| Exfiltration | Kernel-Network | Large data transfers |
| Impact | Kernel-File, Kernel-Process | Mass file modification (ransomware) |
Fuentes y referencias
- Microsoft. "Event Tracing for Windows (ETW)." Microsoft Docs.
- Microsoft. "Threat Intelligence ETW Provider." Microsoft Docs.
- Mandiant. "SilkETW: ETW Research Framework." https://github.com/mandiant/SilkETW
- Russinovich, M. et al. "Windows Internals Part 1." Microsoft Press, 2017.
- Palantir. "ETW for Security Research." Palantir Blog, 2021.
- MDSec. "Hiding Your .NET ETW." 2020.
- modexp. "Disabling ETW." 2021.
- MITRE ATT&CK. "Indicator Removal: Clear Windows Event Logs (T1070.001)." https://attack.mitre.org/techniques/T1070/001/
Preguntas frecuentes
Libros recomendados
Artículos relacionados
Sysmon: Configuración Avanzada para Threat Hunting y Detección de Malware
EDR Internals: Cómo Funcionan y Cómo se Evaden
AMSI Bypass: Técnicas de Evasión y Contramedidas Defensivas
De Alerta EDR a Informe Ejecutivo: Caso End-to-End Completo
Detectar Cobalt Strike Beacon en Red: Guía de Threat Hunting
Threat Hunting: Movimiento Lateral con Sysmon y SIEM
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.