Event Tracing for Windows (ETW) - Telemetría Avanzada y Detección de Amenazas

Info

ETW es una poderosa tecnología de Windows que permite rastrear eventos del sistema en tiempo real.
Gracias a ella, podemos detectar comportamientos anómalos en procesos, DLLs y ensamblados .NET ⚡


🕵️‍♂️ Detección 1️⃣: Relaciones Padre-Hijo Sospechosas 👨‍👦💣

Tip

En Windows, las relaciones entre procesos siguen patrones predecibles.
Cualquier desviación de esos patrones puede ser una señal de ataque 🚨

🧩 Concepto

En un entorno normal de Windows, ciertos procesos nunca deberían crear otros.
Por ejemplo:

🧭 Conocer las relaciones padre-hijo legítimas ayuda a detectar anomalías y comportamientos maliciosos.


🧰 Herramientas Clave


🔍 Flujo de Análisis Paso a Paso

  1. Abre Process Hacker y ordena los procesos para ver su jerarquía 🧱
  2. Simula un ataque con Parent PID Spoofing usando psgetsystem 🎭
PS C:\Tools\psgetsystem> powershell -ep bypass
PS C:\Tools\psgetsystem> Import-Module .\psgetsys.ps1 
PS C:\Tools\psgetsystem> [MyProcess]::CreateProcessFromParent([PID de spoolsv.exe], "C:\Windows\System32\cmd.exe", "")

Pasted image 20251016194736.png
3. 🔎 Observar Sysmon Event 1: verás spoolsv.exe como aparente padre de cmd.exe (engañoso).

- Sysmon puede mostrar el ParentProcessId manipulado → falso positivo potencial. 👻

<!-- Para Event ID 1 (Process Creation) -->
<ProcessCreate onmatch="exclude">

<!-- Para Event ID 10 (ProcessAccess) -->  
<ProcessAccess onmatch="exclude">

<!-- Para Event ID 7 (ImageLoad) -->
<ImageLoad onmatch="exclude">
sysmon.exe -c sysmonconfig-export.xml

🧾 Verás que Sysmon Event 1 muestra incorrectamente spoolsv.exe como padre de cmd.exe 👻 pero no que origino powershell
Pasted image 20251016195106.png
4. 🧾 Para revelar la verdad, captura datos del proveedor Kernel-Process con SilkETW:

.\SilkETW.exe -t user -pn Microsoft-Windows-Kernel-Process -ot file -p C:\windows\temp\etw.json

🔍 Buscar en etw.json por el PID de spool que el atacante usa como señuelo:

Get-Content "C:\windows\temp\etw.json" | Select-String "2,276" | Select-String "ProcessStart"

Pasted image 20251016203852.png

Example

En el JSON aparecerán entradas tipo:

  • ParentProcessID: "2,276" → PID que el atacante quiere que veas (spoolsv.exe)

  • ProcessID: 4,452 → PID real del proceso que generó el evento (powershell.exe)

  • Process 7,884 → proceso hijo creado (cmd.exe)

  1. ✅ Correlaciona: si ETW muestra powershell.exe como creador real y Sysmon muestra spoolsv.exe, entonces hay Parent PID Spoofing.
Warning

Sysmon puede ser engañado por técnicas como Parent PID Spoofing.
ETW (Microsoft-Windows-Kernel-Process) ofrece una visión más precisa y resistente a estas falsificaciones. 🧩

🕵️‍♀️ Detección 2️⃣: Carga Maliciosa de Ensamblados .NET (BYOL) 🧩

Info

Resumen: los atacantes pasan de “Living off the Land” (LotL) a “Bring Your Own Land” (BYOL): cargan ensamblados .NET directamente en memoria para ejecutar código sin dejar artefactos en disco. ETW + Sysmon → visibilidad ampliada (JIT, Loader, métodos) ⚡🧠


🔁 LotL vs BYOL — breve comparación ⚖️

Tip

Entender la diferencia ayuda a priorizar detecciones y mitigaciones.

Tabla rápida

Característica LotL BYOL
Origen Herramientas del sistema Ensamblados propios (.NET)
Artefactos en disco A veces Normalmente no (exec in-memory)
Detección eficaz Monitorizar comandos/uso de herramientas Detectar CLR loads, ETW JIT/Loader, ImageLoad
Complejidad atacante Baja–media Media–alta

🧠 ¿Qué es .NET? (rápido y útil) 🧰

Info

.NET es la plataforma y runtime de Microsoft para ejecutar aplicaciones escritas en C#, F#, VB.NET, etc. Incluye el CLR (Common Language Runtime) — el motor que ejecuta código administrado.

Componentes clave

DLLs asociadas


🔎 Señales/IOCs a vigilar (.NET en memoria)

Warning

BYOL suele dejar pocos trazos en disco — prioriza detección basada en comportamiento (CLR/JIT, ETW) y telemetría en memoria.


🛠️ Demo / Comandos prácticos (reproducir / capturar)

1) Ejecutar Seatbelt (ejemplo .NET)

PS C:\Tools\GhostPack Compiled Binaries> .\Seatbelt.exe TokenPrivileges

2) Sysmon — habilitar ImageLoad

Asegúrate que Sysmon tenga EventID 7 activo:

<!-- fragmento ejemplo -->
<ImageLoad onmatch="include" />

3) Captura ETW (SilkETW) — DotNETRuntime

# Captura JIT + Loader + Interop + NGen (0x2038 = ejemplo)
.\SilkETW.exe -t user -pn Microsoft-Windows-DotNETRuntime -uk 0x2038 -ot file -p C:\windows\temp\etw_dotnet.json

4) Inspeccionar el JSON resultante

Get-Content C:\windows\temp\etw_dotnet.json | Select-String -Pattern "JITCompilation|AssemblyLoad|Method"

🧰 Playbook rápido — Respuesta a BYOL (.NET) 🚨

  1. 🟠 Triage: identificar proceso, PID, usuario, host y timestamp.

  2. 🔎 Correlación: juntar Sysmon Event 7 + ETW DotNETRuntime (JIT/Loader) + EDR telemetry.

  3. 🧊 Contención: aislar host si evidencia fuerte.

  4. 📁 Evidencia: exportar etw_dotnet.json, sysmon.evtx, memoria y volcado del proceso (si procede).

  5. 🔐 Remediación: bloquear C2, rotar credenciales, eliminar persistencias.

  6. 📣 Documentar: ticket, IOCs (hashes, cmdline, names).

  7. 🔁 Ajustar reglas SIEM y añadir whitelists controladas.

Warning

No reinicies ni limpies antes de capturar evidencia para análisis forense.


✅ Buenas prácticas y recomendaciones