Guía de análisis de amenazas de Sysmon, Parte 2. Uso de datos de eventos de Sysmon para detectar amenazas





Este artículo es el primero de una serie sobre análisis de amenazas de Sysmon. Todas las otras partes de la serie:

Parte 1. Introducción a Sysmon Log Analysis

Parte 2. Uso de datos de eventos de Sysmon para detectar amenazas (estamos aquí)

Parte 3. Análisis en profundidad de las amenazas de Sysmon usando gráficos



En esta sección, profundizaremos y comenzaremos a usar información detallada proporcionado por Sysmon. Aquí hay tres puntos principales en los que trabajaremos:



  1. Usar PowerShell para acceder directamente a información granular sobre procesos;
  2. Construir y visualizar una jerarquía de procesos es el primer paso importante para encontrar amenazas;
  3. Usar los metadatos de Sysmon para proporcionar métricas importantes útiles en investigaciones de amenazas avanzadas, como calcular la frecuencia con la que se inician procesos específicos.


Usando Get-Sysmonlogs



Echemos un vistazo más de cerca a mi maravilloso comando que convierte los eventos de Sysmon en objetos de PowerShell. Estoy algo orgulloso de no haber tenido que escribir manualmente líneas de código separadas para cada uno de los campos. Y aquí está, de hecho, la gran divulgación del código:



$events = Get-WinEvent  -LogName "Microsoft-Windows-Sysmon/Operational" | where { $_.id -eq 1 }
 
foreach ($event in $events)  {
    $ev = $event.Message -split "`r`n"
    $jsons="{ "
    foreach ($line in $ev) {
        $line=$line -replace "\\","\\" `
               -replace "\{"," " `
               -replace "\}"," " `
               -replace '"','\"' `
               -replace "`n"," " 
        $line=$line -replace '(\s*[\w\s]+):\s*(.*)', '"$1":"$2",'
        $jsons = $jsons + $line } 

        $jsons =$jsons + '"blah" : "blah" }' 
        ConvertFrom-Json -InputObject $jsons 
    }
}


Todo el código ahora está disponible en GitHub y puede descargarlo e importarlo como un módulo Sysmon para su propio proyecto. La única inestabilidad está relacionada con la eliminación de algunos caracteres desagradables (corchetes, barras invertidas, caracteres de fin de línea, comillas) para acercar la salida a JSON.

Por lo tanto, la señal clásica de un intruso que pulula alrededor del sistema es el uso del comando "whoami", y a menudo sigue después de "hostname". Un pirata informático (o tal vez una persona con información privilegiada) que se apodera de la cuenta de alguien quiere asegurarse de que la impersonalización funcione, por lo que a menudo escribe los comandos anteriores tan pronto como está en el servidor de la víctima. Por lo demás, "whoami" y "hostname" no son las palabras que escribirían en la consola de su propio sistema, incluso si alguna vez usan la línea de comando.



Con mi comando ordenado que da acceso a todas las entradas de registro de Sysmon, podemos inventar fácilmente una cadena de filtrado de nombres de proceso (como lo hicimos en la primera parte ). Al mismo tiempo, con Sysmon, podemos abordar el problema aún más detalladamente al observarLa línea de comando del proceso padre .



Por lo general, cuando un hacker penetra en la red y obtiene acceso a la línea de comando, es un cmd desactualizado; por cierto, esto es exactamente lo que sucede en el caso de un hack con psexec o smbexec . Usando la salida de get-symonlogs, es posible capturar procesos whoami que fueron generados por estos shells antiguos, y esto sería una buena prueba de una amenaza.



Atención: Whoami se lanzó a través del anticuado shell de cmd



Atención: Whoami se lanzó a través del anticuado shell de cmd.





Desde un punto de vista práctico, la búsqueda a través de los registros "en bruto" del registro de eventos de Windows y los procesos de coincidencia es simplemente imposible. Como acabamos de ver, las grabaciones de Sysmon abren muchas posibilidades para el análisis de amenazas. Entonces, continuemos nuestra exploración mapeando los datos de Sysmom en estructuras más complejas.



Los fundamentos de las estructuras de datos: listas y gráficos



¡Los registros de Sysmon no solo nos proporcionan la línea de comando del proceso principal, sino también la ID del proceso!



Creo que ya has adivinado lo que esto significa. Pero aún así: ahora podemos conectar procesos juntos en una jerarquía y, no tengo miedo de decir, redes. Al recordar los conceptos básicos de la informática, puede encontrar estructuras de datos naturales para obtener dicha información; las listas y gráficos vinculados son los primeros en recordar.



Al principio pensé que tendría que desempolvar mi copia de The Data Structures for Poets and Sous-Chefs, pero luego Internet me ayudó. Me topé con la magnífica colección de algoritmos básicos de Doug Finke sobre Gihub escrita en PowerShell. Gracias Doug!

Después de pasar por una curva de aprendizaje, pude usar sus algoritmos para estructurar mis eventos de Sysmon. Construí las estructuras de datos como una lista y un gráfico, y luego, usando la API, escribí una función de PowerShell para buscar un comando y mostrar la jerarquía del proceso. Frio.



Lo llamé show-amenaza-ruta . Busca primero en profundidad a través de la jerarquía del proceso y muestra los nombres de las aplicaciones y los comandos asociados para la aplicación raíz especificada como parámetro de entrada. Para mi primera prueba, busqué "whoami.exe". Y esto es lo que vi:



Jerarquía de procesos: ¡el proceso 2452 parece sospechoso!



Jerarquía de procesos: ¡el proceso 2452 parece sospechoso!





Una ventaja adicional para aquellos que notaron en el resultado anterior que se llamó a whoami asociado con el proceso 2452 a través del shell de cmd obsoleto, que a su vez fue lanzado por un archivo exe con un nombre extraño en la carpeta de Windows.



Hmmm Si está familiarizado con la mecánica de las llamadas remotas psexec descritas aquí , entonces en su mente ya debería estar tocando las campanas. Pero te contaré un pequeño secreto: desempeñando el papel de un hacker, anteriormente lancé este whoami desde un servidor remoto de Linux usando los scripts Impacket python.



El objetivo es demostrar que con la ayuda de registros enriquecidos con Sysmon y una pequeña porción de PowerShell, puede preparar una utilidad completamente práctica para identificar vulnerabilidades, como acabo de hacer conmostrar-amenaza-ruta .



Cazar amenazas con gráficos dirigidos



Es hora de hacer cosas más extrañas. Con toda esta información de proceso obtenida de Sysmon, puede ver las relaciones de manera más general. En otras palabras, quiero ver las aplicaciones en ejecución: PowerShell.exe, Explorer.exe, etc. - como los vértices del gráfico y asociarlos con la aplicación que a su vez los lanzó. El resultado es un diagrama que muestra cómo las aplicaciones interactúan entre sí (en lugar de crear un vértice separado para cada instancia de proceso).



Desde un punto de vista técnico, estamos hablando de un gráfico dirigido , en el que el camino, por así decirlo, es un camino unidireccional desde la aplicación hasta su proceso principal.



En este punto, sería bueno echar un vistazo a la visualización de lo que estoy hablando. Afortunadamente, hay una gran utilidad de visualización de gráficos de PowerShell llamada GraphViz , que tiene envoltorios extremadamente simples disponibles a través de PSQuickGraph . Luego con un pequeño trozo de código ...



#Let's graph it!!!
$gv = New-Graph -Type BiDirectionalGraph # PSQuickGraph
foreach ($e in $g.getAllEdges() )  { $g from Doug Fink's functions
    $vs= $e.startvertex
   $ve= $e.endvertex
    PSQuickGraph\Add-Edge -From $vs.value.Key -To $ve.value.Key -Graph $gv |Out-Null
}
Show-GraphLayout -Graph $gv


... puede visualizar interacciones complejas entre aplicaciones a través de la interfaz GraphViz:



GraphViz: biblioteca de PowerShell para visualizar jerarquías de procesos



GraphViz: una biblioteca de PowerShell para visualizar jerarquías de procesos





¿Qué hace? En esencia, es una forma gráfica de identificar amenazas. En lugar de buscar una firma específica del texto, como hicimos anteriormente con el comando show-hazard-path, ahora podemos intentar encontrar anomalías en el gráfico.



La idea es comprender qué es una imagen normal de la vecindad de gráficos y subgráficos, generalmente se ven como estructuras conectadas en la visualización, y luego tratar de encontrar vértices que se vean más separados. Y, de hecho, nuestros ojos están bien adaptados para esta tarea. Afortunadamente, también hay algunos algoritmos simples de detección de vecindad y detección de amenazas disponibles. Y una vez, su humilde servidor incluso escribió una publicación sobre el uso de la técnica de detección de barrios en la red de conexiones sociales, asociada con ... el famoso héroe de la revolución en los Estados Unidos .



La ventaja de este enfoque para encontrar atacantes es que los piratas informáticos pueden cambiar sus técnicas y ofuscar sus ataques, pero les resulta difícil ocultar sus patrones gráficos.



En la tercera parte de nuestra revisión, profundizaremos en el análisis y la aplicación de algoritmos y métodos para encontrar vulnerabilidades. ¡Quédate con nosotros!



All Articles