
Powershell скрипт для перечисления уязвимых DCOM Applications
DCOMrade — это скрипт на Powershell, который позволяет перечислить потенциально уязвимые DCOM-приложения, способные обеспечить боковое перемещение, выполнение кода, эксфильтрацию данных и т.д. Скрипт разработан для работы с Powershell 2.0, но будет работать и со всеми версиями выше. В настоящее время скрипт поддерживает следующие операционные системы Windows (как x86, так и x64):
В настоящее время я прохожу стажировку в HackDefense, исследуя существующие методы бокового перемещения через DCOM и пытаясь найти способ автоматизировать перечисление этих (и, возможно, новых) методов. Исследование привело к созданию этого скрипта и соответствующей исследовательской работы, ссылка на которую приведена ниже.
Скрипт был создан на основе исследований Мэтта Нельсона (@enigma0x3), особенно поста раунд 2, в котором рассматривается поиск DCOM-приложений, которые могут быть полезны для пентестеров и красных команд.
Сначала устанавливается удаленное подключение к целевой системе; это соединение используется в скрипте для множества операций. На целевой системе выполняется команда Powershell, которая извлекает все DCOM-приложения и их AppID. AppID используются для циклического прохода по реестру Windows и проверки наличия AppID, у которых не задан подраздел LaunchPermission. Такие AppID сохраняются и используются для получения связанных с ними CLSID.
Скрипт использует определенный черный список для каждой ОС, поэтому существуют разные опции для целевой операционной системы. Черный список пропускает записи CLSID, которые могут привести к зависанию скрипта из-за DCOM-приложений, которые невозможно активировать; это снижает нагрузку на целевую систему и сокращает время выполнения скрипта.
Используя CLSID, можно активировать соответствующее DCOM-приложение. CLSID 'Shortcut' используется для подсчета количества связанных с ним MemberTypes; это делается для проверки стандартного количества MemberTypes. Это число используется для проверки CLSID, которые содержат любое другое количество. Скрипт делает это с помощью CLSID 'Shortcut' (HKEY_CLASSES_ROOT\CLSID\{00021401-0000-0000-C000-000000000046}), поскольку это общий CLSID для операционных систем Microsoft Windows. CLSID с другим количеством MemberTypes могут содержать Method или Property, которые можно использовать (или злоупотребить), и будут добавлены в массив.
CLSID в массиве проверяются на наличие строк в MemberTypes, которые могут указывать на способ использования (или злоупотребления) ими; список этих строк можно найти в файле VulnerableSubset. Обратите внимание, что этот список ни в коем случае не является полным для поиска каждого уязвимого DCOM-приложения, но, будучи динамической частью процесса, он позволяет пользователю скрипта искать конкретные строки, которые могут указывать на функциональность DCOM-приложения, полезную для его целей.
Результаты работы скрипта выводятся в HTML-отчет и могут использоваться для аудита системы в качестве превентивной меры. Для атакующей стороны я создал модуль Empire, который на момент написания этого текста ожидает одобрения для добавления в ветку master. Если вы хотите добавить его в Empire самостоятельно, вы можете сделать это, добавив модуль, расположенный здесь.
Полное техническое объяснение идеи, скрипта и возможных методов обнаружения можно найти в соответствующей исследовательской работе.
Скрипт, если он не используется как модуль Empire, имеет некоторые ограничения, связанные с тем, как он работает и как подключается к целевой машине.
Общедоступная, необходимо выполнить следующую команду, чтобы разрешить использование служб удаленного управления Windows на целевой системе: Enable-PSRemoting -SkipNetworkProfilecheck -ForceПри нахождении в домене Microsoft Windows:
.\DCOMrade.ps1 -ComputerName [Computername / IP] -User [Local Administrator] -OS [Operating System] -Domain [Domain name]
При нахождении вне домена Microsoft Windows:
.\DCOMrade.ps1 -ComputerName [Computername / IP] -User [Local Administrator] -OS [Operating System]

Этот скрипт был вдохновлен мастер-классом по боковому перемещению через DCOM, проведенным Евой Танаскоской; без этого мастер-класса идея попытаться перечислить это в автоматическом режиме никогда бы не возникла.
Благодаря исследованиям Мэтта Нельсона (он же @enigma0x3) я смог найти достаточно информации для создания формы автоматизации.
Статья Филипа Цукермана article, в которой суммируются большинство доступных методов DCOM для бокового перемещения и объясняется, как они работают.