
Ein Framework zur Erstellung COM-basierter Umgehungen unter Ausnutzung von Schwachstellen in den WDAPT-Sensoren von Microsoft.
Um die neueste Version von Dent anzusehen oder ein Problem zu melden, siehe https://github.com/Tylous/Dent.
Dent
Wenn Sie mehr über die in diesem Framework verwendeten Techniken erfahren möchten, werfen Sie einen Blick auf diesen Artikel.
Dieses Framework generiert Code, um Schwachstellen in den Attack Surface Reduction (ASR)-Regeln von Microsoft Defender Advanced Threat Protection auszunutzen, um Shellcode auszuführen, ohne erkannt oder verhindert zu werden. ASR wurde als erste Verteidigungslinie entwickelt, die Ereignisse auf der Grundlage von Aktionen erkennt, die gegen eine Reihe von Regeln verstoßen. Diese Regeln konzentrieren sich auf spezifische Verhaltensindikatoren auf dem Endpunkt, die oft mit den Taktiken, Techniken oder Verfahren (TTPs) eines Angreifers verbunden sind. Ein Schwerpunkt liegt auf der Microsoft Office-Suite, da dies ein häufiger Angriffsvektor für die Etablierung eines entfernten Fußes auf einem Endpunkt ist. Viele der regelbasierten Kontrollen konzentrieren sich auf netzwerk- oder prozessbasierte Verhaltensindikatoren, die sich vom normalen Geschäftsbetrieb abheben. Diese Regeln zielen entweder auf die erste Kompromittierung eines Systems oder auf eine Technik ab, die eine Organisation schwerwiegend beeinträchtigen kann (z. B. Preisgabe von Anmeldedaten oder Ransomware). Sie decken einen großen Teil der gemeinsamen Angriffsfläche ab und konzentrieren sich darauf, bekannte Techniken zur Kompromittierung von Vermögenswerten zu behindern.
Dent nutzt mehrere Schwachstellen aus, um diese restriktiven Kontrollen zu umgehen und Payloads auf einem Endpunkt auszuführen, ohne von den Sensoren von Microsoft Defender Advanced Threat Protection blockiert oder wirksam erkannt zu werden. Der obige Artikel beschreibt diese Schwachstellen, die auch nach der Offenlegung noch in Microsoft Defender Advanced Threat Protection vorhanden sind.
Der erste Schritt ist wie immer das Klonen des Repositoriums, dann das Erstellen.
go build Dent.go
./Dent -h
________ __
\______ \ ____ _____/ |_
| | \_/ __ \ / \ __\
| | \ ___/| | \ |
/_______ /\___ >___| /__|
\/ \/ \/
(@Tyl0us)
"Call someone a hero long enough, and they'll believe it. They'll become it.
They have no choice. Let them call you a monster, and you become a monster."
Usage of ./Dent:
-C string
Name of the COM object.
-N string
Name of the XLL playload when it's writen to disk.
-O string
Name of the output file. (default "output.txt")
-P string
Path of the DLL for your COM object. (Either use \\ or '' around the path)
-U string
URL where the base64 encoded XLL payload is hosted.
-show
Display the script in the terminal.
Dieses Framework ist dazu gedacht, Schwachstellen und Defizite in Microsoft Defender Advanced Threat Protection auszunutzen, daher generiert es keine Payloads/Implantate. Um diese zu generieren, kann man eine Vielzahl öffentlich verfügbarer Tools verwenden, jedoch wurden alle Forschung, Entwicklung und Tests mit ScareCrow durchgeführt. Microsoft Defender Advanced Threat Protection verlässt sich für die Telemetrie nicht auf Userland-Hooking, sondern nutzt verschiedene andere Mechanismen wie Kernel-Callbacks. Tests zufolge funktioniert dieses Framework hervorragend, um Microsoft Defender Advanced Threat Protection zu umgehen und Shellcode auszuführen.
Zum Zeitpunkt der Veröffentlichung gibt es derzeit zwei Techniken. Ich werde regelmäßig verschiedene hinzufügen, die diese Schwachstellen auf unterschiedliche Weise ausnutzen. Bleiben Sie also gespannt auf weitere.
COM-Objekte werden oft erstellt, wenn eine Anwendung auf einem System installiert wird. Einmal erstellt, kann jede Anwendung oder jedes Skript sie aufrufen, aber das ist nicht der einzige Weg, sie zu erstellen. Durch Ändern/Erstellen von Registrierungsschlüsseln im Abschnitt HKEY_CLASSES_ROOT der Windows-Registrierung können wir ein COM-Objekt erstellen, das auf unseren Shellcode auf dem System verweist. Das bedeutet, dass jede Anwendung oder jedes Skript, das COM nutzen kann, es aufrufen und den Shellcode ausführen kann.
Dies funktioniert aufgrund der Funktionsweise der CoCreateInstance-API. CoCreateInstance wird verwendet, um COM-Objekte basierend auf der CLSID (einer global eindeutigen Kennung zur Identifizierung einer bestimmten COM-Klasse) zu erstellen und zu initialisieren. Diese Funktion ruft die Informationen zum Ausführen des Aufrufs aus den in Registrierungsschlüsseln gespeicherten Werten ab. Diese CLSID-Werte finden sich im Pfad HKEY_CLASSES_ROOT\CLSID\ der Registrierung. Bevor ein Prozess jedoch die CLSID aufrufen kann, muss er deren Wert kennen. Dazu wird zunächst eine Registrierungsabfrage durchgeführt, um das COM-Objekt in HKEY_CLASSES_ROOT\<COM-Objektname> zu suchen. Wenn es existiert, wird eine zweite Registrierungsabfrage durchgeführt, um den im Unterordner gespeicherten CLSID-Wert zu erhalten.
Eine weitere Untersuchung der Unterordner der Registrierung zeigt, dass die Berechtigungen für die CLSID-Werte nicht konsistent sind. Eine große Mehrheit der hier gespeicherten COM-Objekte gewährt nur dem Trusted Installer die Berechtigung „Vollzugriff“. Der Trusted Installer ist ein Dienstkonto, das Ressourcen besitzt, um sie zu schützen, sogar vor Administratoren. Dies soll sicherstellen, dass selbst wenn ein Angreifer administrative Privilegien erlangt, die Ressourcen nicht böswillig manipuliert werden können. Leider erlauben viele COM-Objekte jedem in der Gruppe „Administratoren“ die Berechtigung „Vollzugriff“. Darüber hinaus gewährt der Stammschlüssel CLSID der Gruppe „Administratoren“ die Berechtigung „Vollzugriff“ anstelle von NT-AUTORITÄT\System oder Trusted Installer. Aus diesem Grund können wir in einem erhöhten Kontext bestimmte COM-Objektwerte erstellen oder sogar ändern.
Wichtig Das Erstellen dieser Registrierungsschlüssel funktioniert nur, wenn Sie es in einem erhöhten Kontext ausführen. Ein Doppelklick darauf über eine GUI führt die .VBS-Datei nicht in einem erhöhten Kontext aus, selbst wenn Sie Administrator sind. Es wird empfohlen, sie von einer administrativen Shell oder Eingabeaufforderung aus auszuführen. Sobald die Schlüssel jedoch erstellt sind, kann jede Anwendung dieses COM-Objekt in jedem Kontext aufrufen.
Um einen ScareCrow-Payload mit dieser Art von Umgehung zu nutzen, können Sie den folgenden Befehl ausführen:
./ScareCrow -I <path to your raw stageless shellcode> -domain <domain name> -Loader dll
Sobald Sie Ihren Payload haben, verwenden Sie das Flag -N für den Namen des Payloads, wenn er auf die Festplatte geschrieben wird, das Flag -C für den Namen des COM-Objekts, das Flag -I für den Speicherort, an den er geschrieben werden soll, und schließlich das Flag -O für die Ausgabedatei, um den Inhalt zu speichern.