
Rogue Assembly Hunter ist ein Dienstprogramm zum Auffinden 'interessanter' .NET CLR-Module in laufenden Prozessen.
__________ _____ . .
_____ \ ____ ____ __ __ ____ / _ \ ______ ______ ____ _ | | | ..
| // _ \ / __| | _/ __ \ / /\ \ / // __// __ \ / | __ | |< | |
| | ( <> ) // > | /\ / / | \ \ _ \ /| Y Y \ _\ \ |_ |
|| /_/_ /|/ _ > _| /____ >____ >___ >|| / /____/ |
/ // / / / / / / / /
___ ___ __
/ | \ __ __ / | ___________
/ ~ \ | / \ __/ __ _ __
\ Y / | / | \ | \ /| | /
_| /|/|| /| _ >|
/ / /
Rogue Assembly Hunter ist ein Dienstprogramm zum Auffinden von „interessanten“ .NET CLR-Modulen in laufenden Prozessen.
.NET ist eine sehr leistungsfähige und vielseitige Entwicklungsplattform und Laufzeitumgebung zum Erstellen und Ausführen von verwalteten .NET-Anwendungen. In den letzten Jahren wurde .NET von Red Teams (und ähnlichen Gruppen) übernommen, um Handwerkszeug für offensive Operationen zu instrumentieren. Insbesondere der Wechsel von offensivem PowerShell zu .NET war (für viele) ein logischer Schritt, da PowerShell v5+ eine erhöhte Transparenz und opportunistische Sichtbarkeit bietet. Infolgedessen wurde offensive .NET-Tooling und -Handwerkszeug erfolgreich eingesetzt, um hostbasierte Sicherheitsfunktionen zu umgehen, Anwendungssteuerungen zu umgehen und bösartigen Code (ähnlich wie PowerShell) zu erstellen, zu inszenieren, zu liefern und auszuführen.
Aus präventiver Sicht unternimmt Microsoft mehr, um .NET-instrumentierte Bedrohungen zu bekämpfen und die gesamte .NET-Angriffsfläche zu minimieren. Beispielsweise hat Microsoft AMSI-Inspektionsfunktionen in .NET Framework 4.8 hinzugefügt, und WDAC-/WLDP-Mechanismen sind sehr effektiv. Aus Erkennungs-/Reaktionsperspektive ist eine weitere Sichtbarkeit und Einsicht in das .NET-Ökosystem stets vorteilhaft, um neue Wege zur Bekämpfung von .NET-spezifischen Bedrohungen zu entdecken.
Im Jahr 2017 veröffentlichte Joe Desimone (@dez_) einen fantastischen Artikel mit dem Titel Hunting For In-Memory .NET Attacks. Der Artikel, der auch heute noch relevant ist, beschreibt moderne .NET-Angriffsvektoren sowie On-Demand- und ereignisbasierte Erkennungstechniken. Begleitend zum Artikel veröffentlichte Joe ein Tool (Get-ClrReflection), um proaktiv In-Memory-.NET-CLR-Module zu erkennen (und abzurufen), denen ein ordnungsgemäßer Datenträgerverweis fehlt. Inspiriert von Joes Arbeit und unter Ausnutzung der Introspectionsfähigkeiten der CLRMD-Laufzeitdiagnosebibliothek (+ der anschließenden Datenzugriffsfähigkeiten von mscordacwks.dll) wurde Rogue Assembly Hunter erstellt, um:
--checks und --sleep zu verwenden, um dies zu verbessern (insbesondere im „watch“-Modus). In einigen Fällen kann es schwierig sein, eine bestimmte Assembly-Ladung aufgrund der Ausführungsgeschwindigkeit zu „erwischen“ (z. B. execute-assembly und Opferprozesse).[*] Parameters:
--mode=<.> : Required | Select analysis mode. Options include sweep, process, and watch.
--hunt=<.> : Optional | Select the hunt scan type to find interesting CLR modules. Specify all (default), memory-only, unusual-dir,
sig-status, imposter-file, or list.
--export=<.> : Optional, Experimental | Specify a file path to export loaded CLR modules for in-memory hunt scans and imposter-file hunt scans
(e.g. --hunt=memory-only/imposter-file/all).
--pid=<.> : Optional | Specify a targeted process by PID. Must be used with --mode=process parameter/value.
--checks=<.> : Optional | Specify a value for scan cycles. This may help reduce race condition misses during scans but could also repeat result output.
Default value is 1.
--sleep=<.> : Optional | Specify a value for sleep seconds. This may help reduce race condition misses during scans by delaying the check cycle.
Default value is 0 seconds.
--debug : Optional | Display exception information (e.g. process connect errors).
--nobanner : Optional | Suppress the display banner. Useful for executing with the PowerShell script or for use cases that leverage automation.
--suppress : Optional | Do not scan the RogueAssemblyHunter process during --mode=sweep or --mode=watch.