
Script do Powershell para enumerar aplicações DCOM vulneráveis
DCOMrade é um script Powershell que permite enumerar possíveis aplicações DCOM vulneráveis que podem permitir movimento lateral, execução de código, exfiltração de dados, etc. O script foi desenvolvido para funcionar com o Powershell 2.0, mas também funcionará com todas as versões superiores. Atualmente, o script suporta os seguintes sistemas operacionais Windows (tanto x86 quanto x64):
Atualmente, estou realizando um estágio na HackDefense, pesquisando técnicas existentes de movimento lateral via DCOM e tentando encontrar uma maneira de automatizar a enumeração destas (e possivelmente novas técnicas). A pesquisa resultou na criação deste script e do artigo de pesquisa que o acompanha, cujo link está abaixo.
O script foi baseado na pesquisa realizada por Matt Nelson (@enigma0x3), especialmente no post do blog sobre a segunda rodada que aborda a descoberta de aplicações DCOM que podem ser úteis para pentesters e equipes vermelhas.
Primeiramente, é feita uma conexão remota com o sistema alvo; essa conexão é utilizada ao longo do script para várias operações. Um comando Powershell é executado no sistema alvo para recuperar todas as aplicações DCOM e seus AppIDs. Os AppIDs são usados para percorrer o Registro do Windows e verificar se há algum AppID que não tenha a subchave LaunchPermission definida em sua entrada; esses AppIDs são armazenados e usados para recuperar seus CLSIDs associados.
O script utiliza uma blacklist específica para cada SO, por isso existem diferentes opções para o sistema operacional alvo. A blacklist ignora entradas CLSID que podem travar o script devido a aplicações DCOM que não podem ser ativadas, o que reduz a carga no sistema alvo e o tempo de execução do script.
Com o CLSID, a aplicação DCOM associada a ele pode ser ativada. O CLSID 'Shortcut' é usado para contar a quantidade de MemberTypes associados a ele, com o objetivo de verificar a quantidade padrão de MemberTypes. Esse número é usado para verificar os CLSIDs que possuem algo diferente dessa quantidade. O script faz isso com o CLSID do 'Shortcut' (HKEY_CLASSES_ROOT\CLSID\{00021401-0000-0000-C000-000000000046}) porque este é um CLSID compartilhado entre os sistemas operacionais Microsoft Windows. Os CLSIDs com uma quantidade diferente de MemberTypes podem conter um Method ou Property que pode ser (ab)usado, e serão adicionados a um array.
Os CLSIDs no array são verificados quanto a strings nos MemberTypes que possam indicar uma maneira de (ab)usá-lo; essa lista de strings pode ser encontrada no arquivo VulnerableSubset. Observe que esta lista não é, de forma alguma, uma lista completa para encontrar todas as aplicações DCOM vulneráveis, mas, sendo uma parte dinâmica do processo, deve fornecer ao usuário do script uma maneira de procurar strings específicas que possam indicar uma funcionalidade de uma aplicação DCOM que seja útil para seu propósito.
Os resultados do script são exibidos em um relatório HTML e devem ser utilizáveis para auditoria de um sistema como medida preventiva. Para o lado ofensivo, criei um módulo Empire que, no momento da redação deste texto, aguarda aprovação para ser adicionado ao branch master. Se você quiser adicioná-lo ao Empire manualmente, pode fazê-lo adicionando o módulo localizado aqui.
Para uma explicação técnica completa da ideia, do script e de possíveis métodos de detecção, você pode ler o artigo de pesquisa associado.
O script, quando não usado como módulo Empire, possui algumas limitações devido à diferença no seu funcionamento e na forma como se conecta à máquina alvo.
Público, o seguinte comando precisa ser executado para permitir que os serviços de Gerenciamento Remoto do Windows sejam utilizados no sistema alvo: Enable-PSRemoting -SkipNetworkProfileCheck -ForceQuando em um domínio Microsoft Windows:
.\DCOMrade.ps1 -ComputerName [Computername / IP] -User [Local Administrator] -OS [Operating System] -Domain [Domain name]
Quando não estiver em um domínio Microsoft Windows:
.\DCOMrade.ps1 -ComputerName [Computername / IP] -User [Local Administrator] -OS [Operating System]

Este script foi inspirado por um workshop de movimento lateral via DCOM ministrado por Eva Tanaskoska; sem esse workshop, a ideia de tentar enumerar isso de forma automatizada jamais teria surgido.
Graças à pesquisa de Matt Nelson (também conhecido como @enigma0x3), consegui informações suficientes para criar uma forma de automatização.
O artigo de Philip Tsukerman, que resume a maioria das técnicas DCOM disponíveis para movimento lateral e explica como elas funcionam.