
Script Powershell pour énumérer les applications DCOM vulnérables
DCOMrade est un script PowerShell qui permet d'énumérer les applications DCOM potentiellement vulnérables qui pourraient permettre le mouvement latéral, l'exécution de code, l'exfiltration de données, etc. Le script est conçu pour fonctionner avec PowerShell 2.0 mais fonctionnera également avec toutes les versions supérieures. Le script prend actuellement en charge les systèmes d'exploitation Windows suivants (x86 et x64) :
Je suis actuellement en stage chez HackDefense, en recherche sur les techniques existantes de mouvement latéral via DCOM et en essayant de trouver un moyen d'automatiser l'énumération de celles-ci (et éventuellement de nouvelles techniques). Ces recherches ont abouti à la création de ce script et du document de recherche associé, dont le lien se trouve ci-dessous.
Le script a été créé à partir des recherches menées par Matt Nelson (@enigma0x3), en particulier le billet de blog round 2 qui explique comment trouver des applications DCOM potentiellement utiles pour les pentesteurs et les équipes rouges.
Tout d'abord, une connexion à distance avec le système cible est établie ; cette connexion est utilisée tout au long du script pour une multitude d'opérations. Une commande PowerShell est exécutée sur le système cible pour récupérer toutes les applications DCOM et leurs AppID's. Les AppID's sont utilisés pour parcourir le registre Windows et vérifier les AppID's qui n'ont pas de sous-clé LaunchPermission définie dans leur entrée ; ces AppID's sont stockés et utilisés pour récupérer leurs CLSID associés.
Le script utilise une liste noire spécifique pour chaque système d'exploitation, c'est pourquoi il existe différentes options pour le système d'exploitation cible. La liste noire ignore les entrées CLSID qui pourraient bloquer le script en raison d'applications DCOM qui ne peuvent pas être activées, ce qui réduit la charge sur le système cible et réduit le temps d'exécution du script.
Avec le CLSID, l'application DCOM associée peut être activée. Le CLSID 'Shortcut' est utilisé pour compter le nombre de MemberTypes qui lui sont associés, ceci afin de vérifier le nombre par défaut de MemberTypes. Ce nombre est utilisé pour repérer les CLSID qui contiennent un nombre différent. Le script fait cela avec le CLSID de 'Shortcut' (HKEY_CLASSES_ROOT\CLSID\{00021401-0000-0000-C000-000000000046}) car il s'agit d'un CLSID partagé sur tous les systèmes d'exploitation Microsoft Windows. Les CLSID avec un nombre différent de MemberTypes pourraient contenir une Method ou une Property pouvant être (ab)usée, et seront ajoutés à un tableau.
Les CLSID du tableau sont vérifiés pour des chaînes de caractères dans les MemberTypes qui pourraient indiquer un moyen de (ab)user de l'application. Cette liste de chaînes se trouve dans le fichier VulnerableSubset. Veuillez noter que cette liste n'est en aucun cas exhaustive pour trouver toutes les applications DCOM vulnérables, mais cette liste étant une partie dynamique du processus, elle devrait permettre à l'utilisateur du script de rechercher des chaînes spécifiques qui pourraient indiquer une fonctionnalité d'une application DCOM utile à ses fins.
Les résultats du script sont produits dans un rapport HTML et devraient être utilisables pour auditer un système à titre préventif. Pour le côté offensif, j'ai créé un module Empire qui, au moment de la rédaction, attend l'approbation pour être ajouté à la branche master. Si vous souhaitez ajouter ce module vous-même à Empire, vous pouvez le faire en ajoutant le module situé ici.
Pour une explication technique complète de l'idée, du script et des méthodes de détection possibles, vous pouvez lire le document de recherche associé.
Le script, lorsqu'il n'est pas utilisé comme module Empire, présente certaines limitations car le fonctionnement du script et la manière dont il se connecte à la machine cible diffèrent.
Public, la commande suivante doit être exécutée pour autoriser l'utilisation des services Windows Remote Management sur le système cible : Enable-PSRemoting -SkipNetworkProfilecheck -ForceEn domaine Microsoft Windows :
.\DCOMrade.ps1 -ComputerName [Computername / IP] -User [Local Administrator] -OS [Operating System] -Domain [Domain name]
Hors domaine Microsoft Windows :
.\DCOMrade.ps1 -ComputerName [Computername / IP] -User [Local Administrator] -OS [Operating System]

Ce script a été inspiré par un atelier sur le mouvement latéral via DCOM animé par Eva Tanaskoska. Sans cet atelier, l'idée même de tenter d'énumérer cela de manière automatisée n'aurait jamais vu le jour.
Merci aux recherches de Matt Nelson (alias @enigma0x3) et à l'article de Philip Tsukerman, qui résume la plupart des techniques DCOM disponibles pour le mouvement latéral et explique leur fonctionnement.