
PowerShell-Skript zum Aufzählen angreifbarer DCOM-Anwendungen
DCOMrade ist ein Powershell-Skript, das in der Lage ist, die möglicherweise anfälligen DCOM-Anwendungen aufzulisten, die laterale Bewegungen, Codeausführung, Datenexfiltration usw. ermöglichen könnten. Das Skript ist für Powershell 2.0 entwickelt, funktioniert aber auch mit allen höheren Versionen. Das Skript unterstützt derzeit die folgenden Windows-Betriebssysteme (sowohl x86 als auch x64):
Ich absolviere derzeit ein Praktikum bei HackDefense und erforsche bestehende DCOM-Lateral-Movement-Techniken. Ich versuche, einen Weg zu finden, die Aufzählung dieser (und möglicherweise neuer Techniken) zu automatisieren. Die Forschung führte zur Erstellung dieses Skripts und des dazugehörigen Forschungspapiers, das unten verlinkt ist.
Das Skript basiert auf der Forschung von Matt Nelson (@enigma0x3), insbesondere auf dem round 2 Blogbeitrag, der sich mit dem Auffinden von DCOM-Anwendungen befasst, die für Pentester und Red Teams nützlich sein könnten.
Zunächst wird eine Remote-Verbindung zum Zielsystem hergestellt, die im gesamten Skript für eine Vielzahl von Operationen verwendet wird. Auf dem Zielsystem wird ein Powershell-Befehl ausgeführt, der alle DCOM-Anwendungen und ihre AppID's abruft. Die AppID's werden verwendet, um die Windows-Registry zu durchlaufen und nach AppID's zu suchen, die in ihrem Eintrag keinen LaunchPermission-Unterschlüssel gesetzt haben. Diese AppID's werden gespeichert und verwendet, um die zugehörigen CLSID's abzurufen.
Das Skript verwendet eine spezifische Blacklist für jedes Betriebssystem, weshalb es verschiedene Optionen für das Zielbetriebssystem gibt. Die Blacklist überspringt CLSID-Einträge, die das Skript aufgrund von DCOM-Anwendungen, die nicht aktiviert werden können, zum Absturz bringen könnten. Dies reduziert die Belastung des Zielsystems und die Zeit, die das Skript zur Fertigstellung benötigt.
Mit der CLSID kann die zugehörige DCOM-Anwendung aktiviert werden. Die 'Shortcut'-CLSID wird verwendet, um die Anzahl der zugehörigen MemberTypes zu zählen. Dies dient zur Überprüfung der Standardanzahl von MemberTypes. Diese Zahl wird verwendet, um nach CLSID's zu suchen, die eine andere Anzahl enthalten. Das Skript macht dies mit der CLSID der 'Shortcut'-Verknüpfung (HKEY_CLASSES_ROOT\CLSID\{00021401-0000-0000-C000-000000000046}), da dies eine gemeinsam genutzte CLSID über alle Microsoft Windows-Betriebssysteme hinweg ist. Die CLSID's mit einer abweichenden Anzahl von MemberTypes könnten eine Method oder Property enthalten, die (miss)braucht werden kann, und werden zu einem Array hinzugefügt.
Die CLSID's im Array werden auf Zeichenfolgen in den MemberTypes überprüft, die auf eine Möglichkeit zur (Miss)brauch hinweisen könnten. Diese Liste von Zeichenfolgen befindet sich in der Datei VulnerableSubset. Bitte beachten Sie, dass diese Liste keineswegs eine vollständige Liste ist, um jede einzelne anfällige DCOM-Anwendung zu finden. Da die Liste jedoch ein dynamischer Teil des Prozesses ist, sollte sie dem Benutzer des Skripts eine Möglichkeit bieten, nach bestimmten Zeichenfolgen zu suchen, die auf eine Funktionalität einer DCOM-Anwendung hinweisen, die für seinen Zweck nützlich sein könnte.
Die Ergebnisse des Skripts werden in einem HTML-Bericht ausgegeben und sollten zur Überwachung eines Systems als vorbeugende Maßnahme verwendbar sein. Für die offensive Seite habe ich ein Empire-Modul erstellt, das zum Zeitpunkt der Erstellung dieses Textes auf die Genehmigung wartet, in den Master-Zweig aufgenommen zu werden. Wenn Sie dies selbst zu Empire hinzufügen möchten, können Sie das Modul hier hinzufügen.
Eine vollständige technische Erklärung der Idee, des Skripts und möglicher Erkennungsmethoden finden Sie in dem zugehörigen Forschungspapier.
Das Skript hat, wenn es nicht als Empire-Modul verwendet wird, einige Einschränkungen, da die Arbeitsweise des Skripts und die Verbindung zum Zielgerät unterschiedlich sind.
Public gesetzt ist, muss der folgende Befehl ausgeführt werden, um die Verwendung der Windows-Remoteverwaltungsdienste auf dem Zielsystem zu erlauben: Enable-PSRemoting -SkipNetworkProfilecheck -ForceIn einer Microsoft Windows-Domäne:
.\DCOMrade.ps1 -ComputerName [Computername / IP] -User [Local Administrator] -OS [Operating System] -Domain [Domain name]
Außerhalb einer Microsoft Windows-Domäne:
.\DCOMrade.ps1 -ComputerName [Computername / IP] -User [Local Administrator] -OS [Operating System]

Dieses Skript wurde von einem DCOM-Lateral-Movement-Workshop inspiriert, der von Eva Tanaskoska gegeben wurde. Ohne diesen Workshop wäre die gesamte Idee, dies auf automatisierte Weise zu enumerieren, nie entstanden.
Dank der Forschung von Matt Nelson (auch bekannt als @enigma0x3) konnte ich genügend Informationen finden, um eine Form der Automatisierung zu entwickeln.
Philip Tsukermans Artikel, der die meisten verfügbaren DCOM-Techniken für laterale Bewegungen zusammenfasst und darauf eingeht, wie diese funktionieren.