¿Qué es el Event Tracing for Windows?

Según Microsoft, Event Tracing For Windows (ETW) o en español Seguimiento de eventos para Windows (ETW) proporciona un mecanismo para realizar un seguimiento y registrar eventos generados por aplicaciones en modo de usuario y controladores en modo kernel.

ETW, que funciona como un mecanismo de rastreo de eventos más en profundidad está ya integrado en el sistema operativo Windows , con esto , realmennte tenemos una a una oportunidad para reforzar toda la información que podamos recolectar en un incidente de seguridad por ejemplo , o en ciertas capacidades de defensa.

Su arquitectura facilita la generación dinámica, la recopilación y el análisis de varios eventos que ocurren dentro del sistema, lo que resulta en la creación de registros intrincados en tiempo real que abarcan un amplio espectro de actividades, por ejemplo esto combinado con otros sistemas como syslog , processmonitor etc.. es , como decimos , un gran aliado a la hora de responder ante incidentes de seguridad en el entorno de Microsoft.

Con este mecanismo , podemos acceder a una amplia gama de fuentes de telemetría que superan las limitaciones impuestas por los datos de registro tradicionales. ETW captura distintos tipos de eventos, que abarcan desde las llamadas al sistema hasta la creación y finalización de procesos, la actividad de red, las modificaciones de archivos y registros, y muchas otras que más adelante explicaremos en este post.

Estos eventos nos permiten realmente conocer un poco más en profundidad toda la actividad del sistema, proporcionandos un contexto bastante amplio para conocer posibles comportamientos anómalos, el descubrimiento de posibles incidentes de seguridad y la facilitación de investigaciones forenses.

Aquí un poco más resumido y entendible de como funciona

Ejemplo de uso rápido con SilkETW

Siempre aprendemos más viendo un caso «real» de uso , para ello vamos a verlo con por ejemplo relaciones entre procesos padres e hijos ya que , sabiendo que relación deben tener entre los procesos pueden ser indicativas de actividades maliciosas.

En Windows, ciertos procesos nunca llaman o generan otros. Por ejemplo, es muy poco probable que veamos un «calc.exe» generando «cmd.exe» en un entorno normal. Comprender estas relaciones típicas entre padres e hijos puede ayudar a detectar anomalías. La siguiente imagen es de Samir Bousseaden en la que se puede ver un mapa donde podremos observar relaciones que deben ser normales entre procesos.

En nuestro caso , para realizar un análisis de estas relaciones vamos a usar Process Hacker, donde podremos explorar las relaciones padre-hijo dentro de Windows.

Para generar una relación extraña entre padre-hijo, donde «cmd.exe» parece ser creado por «spoolsv.exe» with no accompanying arguments, utilizaremos una técnica de ataque llamada Parent PID Spoofing. Parent PID Spoofing se puede ejecutar a través de psgetsystem de la siguiente manera.

powershell -ep bypass

Import-Module .\psgetsys.ps1 

[MyProcess]::CreateProcessFromParent(2288,"C:\Windows\System32\cmd.exe","")

En este caso hemos seleccionado como vemos el spoolsv.exe , en este caso el id 2288

Aquí vemos que hemos creado una cmd.exe conhost.exe como hijo de spoolsv.exe sin embargo, en realidad lo fue 
powershell.exe quien creó el cmd.exe , este es el kit de la cuestión, ¿Cómo podríamos analizarlo realmente para saber que fue powershell quién lo hizo? aquí es donde entra el tema principal del que estamos hablando , los ETW.

Vamos a empezar a recopilar datos del proveedor de ETW Microsoft-Windows-Kernel-Process que utiliza SilkETW (el proveedor puede ser identificado usando logman(hablaremos de el en otro post)

¿Que es SilkETW?

SilkETW es una herramienta de código abierto diseñada para facilitar la captura y análisis de eventos de ETW (Event Tracing for Windows), Fue desarrollada por @tophertimzen y @crazysnailboy y es ampliamente utilizada en tareas de análisis, monitoreo y detección de actividades sospechosas.

SilkETW utiliza los proveedores ETW de Windows para escuchar eventos del sistema o de aplicaciones, procesarlos y exportarlos en formatos legibles para el usuario o integrables en herramientas de análisis.

Habiéndonos bajado SilkETW ejecutamos lo siguiente:

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

-t user:

  • Especifica el «tipo de proveedor» que se utilizará. En este caso, user indica que se van a capturar eventos de un proveedor ETW de nivel usuario.

-pn Microsoft-Windows-Kernel-Process:

  • Define el nombre del proveedor (provider name). En este caso, se está eligiendo el proveedor Microsoft-Windows-Kernel-Process, que registra eventos relacionados con procesos del kernel, como creación, terminación y cambios de estado de procesos.

-ot file:

  • Indica el tipo de salida de los datos capturados. Aquí, file significa que los datos serán escritos a un archivo.

-p C:\windows\temp\etw.json:

Especifica la ruta del archivo donde se guardarán los datos en formato JSON. En este ejemplo, el archivo de salida estará en C:\windows\temp\etw.json.

NOTA: Suele tardar unos minutos en recolectar todos los eventos

Bien , una vez lo ejecutamos el comando , vemos el archivo etw.json (que como hemos comentado anteriormente incluye datos del proveedor Microsoft-Windows-Kernel-Process) y si buscamos el PID del proceso padre (en este caso spoolsv.exe vemos que aquí si que parece contener información sobre powershell.exe que creó realmente el  cmd.exe.

Aquí lo podemos observar .

Muchas gracias por vuestra atención , próximamente indagaremos mucho más acerca de este tipo de herramientas para análisis.

Entradas relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *