Handbuch zur Sysmon-Bedrohungsanalyse, Teil 2. Verwenden von Sysmon-Ereignisdaten zum Identifizieren von Bedrohungen





Dieser Artikel ist der erste in einer Reihe zur Sysmon-Bedrohungsanalyse. Alle anderen Teile der Serie:

Teil 1. Einführung in die Sysmon-Protokollanalyse

Teil 2. Verwenden von Sysmon-Ereignisdaten zum Erkennen von Bedrohungen (wir sind hier)

Teil 3. Eingehende Analyse von Sysmon-Bedrohungen mithilfe von Diagrammen



In diesem Abschnitt werden wir uns eingehender mit detaillierten Informationen befassen bereitgestellt von Sysmon. Hier sind drei Hauptpunkte, an denen wir arbeiten werden:



  1. Verwenden von PowerShell, um direkt auf detaillierte Informationen zu Prozessen zuzugreifen;
  2. Der Aufbau und die Visualisierung einer Hierarchie von Prozessen ist der erste wichtige Schritt bei der Suche nach Bedrohungen.
  3. Verwenden Sie Sysmon-Metadaten, um wichtige Metriken zu generieren, die für erweiterte Bedrohungsuntersuchungen nützlich sind, z. B. die Berechnung der Häufigkeit, mit der bestimmte Prozesse gestartet werden.


Verwenden von Get-Sysmonlogs



Schauen wir uns jetzt meinen wunderbaren Befehl genauer an, mit dem Sysmon-Ereignisse in PowerShell-Objekte konvertiert werden. Ich bin etwas stolz darauf, dass ich nicht für jedes Feld manuell separate Codezeilen schreiben musste. Und hier ist in der Tat die großartige Offenlegung des Codes:



$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 
    }
}


Der gesamte Code ist jetzt auf GitHub verfügbar und Sie können ihn als Sysmon-Modul für Ihr eigenes Projekt herunterladen und importieren. Die einzige Instabilität hängt mit dem Entfernen einiger böser Zeichen zusammen - Klammern, Backslashes, Zeilenendezeichen, Anführungszeichen -, um die Ausgabe näher an JSON zu bringen.

Das klassische Signal eines Eindringlings, der im System herumschwärmt, ist die Verwendung des Befehls "whoami" und folgt häufig nach "hostname". Ein Hacker (oder vielleicht ein Insider), der über ein Konto verfügt, möchte sicherstellen, dass die Unpersönlichkeit funktioniert. Daher gibt er die oben genannten Befehle häufig ein, sobald er sich auf dem Server des Opfers befindet. Im Übrigen sind "whoami" und "hostname" nicht die Wörter, die sie in die Konsole ihres eigenen Systems eingeben, selbst wenn sie jemals die Befehlszeile verwenden.



Mit meinem ordentlichen Befehl, der den Zugriff auf alle Sysmon-Protokolleinträge ermöglicht, können wir problemlos eine Filterkette für Prozessnamen erstellen (wie in Teil 1 ). Gleichzeitig können wir mit Sysmon das Problem noch genauer angehen, indem wir uns das ansehendie Befehlszeile des übergeordneten Prozesses .



Wenn ein Hacker in das Netzwerk eindringt und Zugriff auf die Befehlszeile erhält, handelt es sich normalerweise um eine veraltete Cmd . Dies ist übrigens genau das, was bei einem Hack mit psexec oder smbexec passiert . Mithilfe der Ausgabe von get-symonlogs können Whoami-Prozesse abgefangen werden, die durch diese Legacy-Shells ausgelöst wurden. Dies wäre ein guter Beweis für eine Bedrohung.



Achtung: Whoami wurde über die veraltete cmd-Shell gestartet



Achtung: Whoami wurde über die veraltete cmd-Shell gestartet.





Aus praktischer Sicht ist das Durchsuchen der "rohen" Protokolle des Windows-Ereignisprotokolls und der entsprechenden Prozesse einfach unmöglich. Wie wir gerade gesehen haben, eröffnen Sysmon-Aufzeichnungen viele Möglichkeiten für die Bedrohungsanalyse. Setzen wir also unsere Erkundung fort, indem wir Sysmom-Daten in komplexere Strukturen abbilden.



Die Grundlagen von Datenstrukturen: Listen und Grafiken



Sysmon-Protokolle liefern uns nicht nur die Befehlszeile des übergeordneten Prozesses, sondern auch die Prozess-ID!



Ich denke, Sie haben bereits erraten, was dies bedeutet. Aber dennoch: Jetzt können wir Prozesse in einer Hierarchie und, ich habe keine Angst zu sagen, Netzwerke miteinander verbinden. Wenn Sie sich an die Grundkonzepte der Informatik erinnern, finden Sie natürliche Datenstrukturen, um solche Informationen zu erhalten. Verknüpfte Listen und Grafiken sind die ersten, die Ihnen in den Sinn kommen.



Zuerst dachte ich, ich müsste meine Kopie von The Data Structures for Poets and Sous-Chefs abstauben, aber dann half mir das Internet. Ich bin auf Doug Finkes großartige Sammlung grundlegender Algorithmen für Gihub gestoßen, die in PowerShell geschrieben wurden. Vielen Dank, Doug!

Nachdem ich eine Lernkurve durchlaufen hatte, konnte ich seine Algorithmen verwenden, um meine Sysmon-Ereignisse zu strukturieren. Ich habe die Datenstrukturen als Liste und Diagramm erstellt und dann mithilfe der API eine PowerShell-Funktion geschrieben, um nach einem Befehl zu suchen und die Prozesshierarchie anzuzeigen. Cool.



Ich habe es Show-Threat-Path genannt . Es durchsucht zuerst die Tiefe der Prozesshierarchie und zeigt die Anwendungsnamen und zugehörigen Befehle für die als Eingabeparameter angegebene Stammanwendung an. Für meinen ersten Test habe ich nach "whoami.exe" gesucht. Und das habe ich gesehen:



Prozesshierarchie: Prozess 2452 sieht verdächtig aus!



Prozesshierarchie: Prozess 2452 sieht verdächtig aus!





Ein zusätzlicher Bonus für diejenigen, die in der obigen Ausgabe festgestellt haben, dass Whoami im Zusammenhang mit Prozess 2452 steht, wurde über die veraltete Cmd-Shell aufgerufen, die wiederum von einer Exe-Datei mit einem seltsamen Namen im Windows-Ordner gestartet wurde.



Hmmm. Wenn Sie mit der hier beschriebenen Mechanik von psexec-Fernaufrufen vertraut sind , sollten Sie in Ihrem Kopf bereits die Glocken läuten. Aber ich werde Ihnen ein kleines Geheimnis verraten: Als Hacker habe ich diesen Whoami zuvor von einem Remote-Linux-Server mit den Impacket-Python-Skripten gestartet.



Ziel ist es zu demonstrieren, dass Sie mit Hilfe von mit Sysmon angereicherten Protokollen und einem kleinen Teil von PowerShell ein vollständig praktisches Dienstprogramm zum Erkennen von Schwachstellen erstellen können, wie ich es gerade getan habeShow-Bedrohungspfad .



Jagen Sie Bedrohungen mit gerichteten Grafiken



Es ist Zeit, fremde Dinge zu tun. Mit all diesen Prozessinformationen von Sysmon können Sie Beziehungen allgemeiner betrachten. Mit anderen Worten, ich möchte laufende Anwendungen anzeigen - PowerShell.exe, Explorer.exe usw. - als Eckpunkte des Diagramms und ordnen Sie sie der Anwendung zu, die sie wiederum gestartet hat. Das Ergebnis ist ein Diagramm, das zeigt, wie Anwendungen miteinander interagieren (anstatt für jede Prozessinstanz einen eigenen Scheitelpunkt zu erstellen ).



Aus technischer Sicht handelt es sich um einen gerichteten Graphen, bei dem ein Pfad sozusagen ein Einwegpfad von der Anwendung zum übergeordneten Prozess ist.



An dieser Stelle wäre es schön, einen Blick auf die Visualisierung dessen zu werfen, wovon ich spreche. Glücklicherweise gibt es ein großartiges PowerShell-Dienstprogramm zur Grafikvisualisierung namens GraphViz , das über PSQuickGraph äußerst einfache Wrapper zur Verfügung stellt . Dann mit einem kleinen Stück Code ...



#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


... Sie können komplexe Interaktionen zwischen Anwendungen über die GraphViz-Oberfläche visualisieren:



GraphViz: PowerShell-Bibliothek zur Visualisierung von Prozesshierarchien



GraphViz: Eine PowerShell-Bibliothek zur Visualisierung von Prozesshierarchien





Was macht es? Im Wesentlichen ist es eine grafische Methode, um Bedrohungen zu identifizieren. Anstatt wie zuvor mit dem Befehl show-bedrohungspfad nach einer bestimmten Signatur des Textes zu suchen, können wir jetzt versuchen, Anomalien im Diagramm zu finden .



Die Idee ist, zu verstehen, was ein normales Bild der Nachbarschaft von Graphen und Untergraphen ist - sie sehen normalerweise wie verbundene Strukturen in der Visualisierung aus - und dann zu versuchen, Scheitelpunkte zu finden, die distanzierter aussehen. Tatsächlich sind unsere Augen für diese Aufgabe gut geeignet. Glücklicherweise stehen auch einige einfache Algorithmen zur Erkennung von Nachbarschaften und Bedrohungen zur Verfügung. Und es war einmal, als Ihr bescheidener Diener sogar einen Beitrag über die Verwendung der Technik zur Erkennung von Nachbarschaften in einem sozialen Netzwerk schrieb, das mit ... dem berühmten Helden der Revolution in den Vereinigten Staaten in Verbindung steht .



Der Vorteil dieses Ansatzes bei der Suche nach Angreifern besteht darin, dass Hacker ihre Techniken ändern und ihre Angriffe verschleiern können, es für sie jedoch schwierig ist, ihre Diagrammmuster zu verbergen.



Im dritten Teil unserer Überprüfung werden wir uns eingehender mit der Analyse und Anwendung von Algorithmen und Methoden zum Auffinden von Schwachstellen befassen. Bleib bei uns!



All Articles