
Script de PowerShell para enumerar aplicaciones DCOM vulnerables
DCOMrade es un script de Powershell que es capaz de enumerar las posibles aplicaciones DCOM vulnerables que podrían permitir movimiento lateral, ejecución de código, exfiltración de datos, etc. El script está diseñado para funcionar con Powershell 2.0 pero también funcionará con todas las versiones superiores. El script actualmente soporta los siguientes sistemas operativos Windows (tanto x86 como x64):
Actualmente estoy realizando una pasantía en HackDefense, investigando las técnicas existentes de movimiento lateral mediante DCOM y tratando de encontrar una manera de automatizar la enumeración de estas (y posiblemente nuevas técnicas). La investigación resultó en la creación de este script y el documento de investigación adjunto que se enlaza a continuación.
El script se basó en la investigación realizada por Matt Nelson (@enigma0x3), especialmente la segunda parte del blog que profundiza en la búsqueda de aplicaciones DCOM que podrían ser útiles para pentesters y equipos rojos.
Primero se realiza una conexión remota con el sistema objetivo, esta conexión se utiliza a lo largo del script para una multitud de operaciones. Se ejecuta un comando de Powershell en el sistema objetivo que recupera todas las aplicaciones DCOM y sus AppID. Los AppID se utilizan para recorrer el Registro de Windows y verificar si alguna AppID no tiene la subclave LaunchPermission establecida en su entrada, estos AppID se almacenan y se utilizan para recuperar sus CLSID asociados.
El script utiliza una lista negra específica para cada sistema operativo, por eso hay diferentes opciones para el sistema operativo objetivo. La lista negra omite entradas CLSID que podrían colgar el script debido a aplicaciones DCOM que no pueden activarse, esto reduce la carga en el sistema objetivo y reduce el tiempo de ejecución del script.
Con el CLSID, se puede activar la aplicación DCOM asociada. El CLSID 'Shortcut' se utiliza para contar la cantidad de MemberTypes asociados, esto se hace para verificar la cantidad predeterminada de MemberTypes. Este número se utiliza para buscar los CLSID que tengan algo diferente a esta cantidad. El script hace esto con el CLSID de 'Shortcut' (HKEY_CLASSES_ROOT\CLSID\{00021401-0000-0000-C000-000000000046}) porque es un CLSID compartido entre los sistemas operativos Microsoft Windows. Los CLSID con una cantidad diferente de MemberTypes podrían contener un Method o Property que pueda ser (mal) utilizado, y se agregarán a un array.
Los CLSID en el array se verifican en busca de cadenas en los MemberTypes que puedan indicar una forma de (mal) utilizarlo, esta lista de cadenas se puede encontrar en el archivo VulnerableSubset. Tenga en cuenta que esta lista no es de ninguna manera una lista completa para encontrar todas las aplicaciones DCOM vulnerables, pero al ser una parte dinámica del proceso, debería dar al usuario del script una manera de buscar cadenas específicas que puedan indicar una funcionalidad de una aplicación DCOM que podría ser útil para su propósito.
Los resultados del script se muestran en un informe HTML y deberían ser utilizables para auditar un sistema como medida preventiva. Para el lado ofensivo, creé un módulo para Empire que, al momento de escribir esto, está pendiente de aprobación para ser agregado a la rama principal. Si desea agregarlo a Empire usted mismo, puede hacerlo agregando el módulo ubicado aquí.
Para una explicación técnica completa de la idea, el script y los posibles métodos de detección, puede leer el documento de investigación asociado.
El script, cuando no se utiliza como módulo de Empire, tiene algunas limitaciones ya que el funcionamiento del script y la forma en que se conecta con la máquina objetivo difieren.
Public, se debe ejecutar el siguiente comando para permitir que los servicios de Administración remota de Windows se utilicen en el sistema objetivo: Enable-PSRemoting -SkipNetworkProfilecheck -ForceCuando se está en un dominio de Microsoft Windows:
.\DCOMrade.ps1 -ComputerName [Computername / IP] -User [Local Administrator] -OS [Operating System] -Domain [Domain name]
Cuando no se está en un dominio de Microsoft Windows:
.\DCOMrade.ps1 -ComputerName [Computername / IP] -User [Local Administrator] -OS [Operating System]

Este script fue inspirado por un taller de movimiento lateral DCOM impartido por Eva Tanaskoska; sin este taller, nunca se habría concebido la idea de intentar enumerar esto de manera automatizada.
Gracias a la investigación de Matt Nelson (alias @enigma0x3) pude encontrar suficiente información para idear una forma de automatización.
El artículo de Philip Tsukerman, que resume la mayoría de las técnicas DCOM disponibles para movimiento lateral y profundiza en cómo funcionan.