Tuesday, 5 March 2019

Hacking Windows 10: Lateral Movements using DCOM Objects

Hace un par de semanas hablamos sobre la importancia de las técnicas DCOM para lograr un movimiento lateral que pasa, en muchos casos, desapercibido. Además, hablamos de alguna herramienta como DCOMrade que permite ver posibles vías para lograr el éxito en el movimiento lateral. Este tipo de técnicas, quizá un poco más avanzadas o quizá más desconocidas, en lo que a movimiento lateral se refiere, son técnicas que aportan un gran potencial en un Ethical Hacking.

Figura 1: Hacking Windows 10: Lateral Movements using DCOM Objects

Además, algo que está resultando interesante es el uso que se le puede dar en un Hacking de sistemas Windows 10 y redes Microsoft, con las protecciones que éste tiene y el juego del gato y el ratón que se presenta de forma constante. Sin duda, el movimiento lateral es una técnica imprescindible en el pentesting.

Figura 2: Libro de Hacking Windows

Nosotros no hemos dejado pasar la oportunidad de implementar alguna de estas técnicas en nuestra navaja suiza de Pentesting con Powershell: Nuestra querida ibombshell. En la rama Dev, la cual pronto se convertirá en rama estable y liberaremos nueva versión, podemos encontrar dos movimientos laterales basados en DCOM. Estamos deseando liberar la nueva versión, que, aunque sigue siendo beta y mejoramos en los ratos libres que se tiene, traerá nuevas funcionalidades que serán del gusto de los usuarios y mejoras de estabilidad y uso de la línea de comandos.

Figura 3: Encontrar lateral movements

Hoy quería mostrar algunas técnicas más utilizadas para hacer movimiento lateral a través de DCOM. En este genial artículo se muestra un recopilatorio de algunas de ellas, basadas en investigaciones de Matt Nelson y Cybereason. Las técnicas que se explicarán hoy son:
  • DDE con Microsoft Excel.
  • MMC20.Application.
  • ShellBrowserWindow.
  • Outlook y la ejecución con el método CreateObject.
Antes de empezar con las cuatro técnicas que se quieren mostrar hoy, quería añadir que la técnica MMC20 ya está disponible en la rama Dev de iBombShell en su Github.

MMC20.Application

Fue publicada por primera vez por el investigador Matt Nelson en su blog. La técnica es muy similar a la que vimos hace unas semanas sobre ShellWindows. Para poder utilizar esta técnica, lo primero es crear una instancia MMC20.Application. Después de ello, se puede utilizar el método ExecuteShellCommand, el cual se encuentra en la propiedad Document.ActiveView.

De esta forma se puede ejecutar el comando que se quiera sobre la máquina. El comando ejecutado correrá como un proceso hijo del proceso mmc.exe. Hay que indicar que la ejecución de mmc.exe vía COM es extraño, por lo que puede generar ruido y alertas a través de los mecanismos de protección de Windows.

Figura 4: Comprobación de métodos disponibles

Lo primero que se puede comprobar son los métodos que tiene el objeto. Para ello ejecutamos:
$mmc = [Activator]::CreateInstance([type])::GetTypeFromProgID(“MMC20.Application”, “[dirección IP]”).
Cuando uno ya tiene la posibilidad de ser admin y hacer ese movimiento, como si de PtH se tratase, puede hacer uso de esto para ejecutar comandos en remoto. En este caso se muestra como hacer la ejecución en remoto sobre un Windows 10, desde el objeto $mmc que ya tenemos creado.

Figura 5: Ejecución de calc.exe desde el objeto $mmc

En el siguiente vídeo se puede ver el proceso completo desde un Windows 7 a un Windows 10 y la ejecución de código remoto. Lógicamente, se debe disponer ya de un admin en el sistema Windows 7.

Figura 6: PoC de Lateral Movement usando MMC20.Application

ShellBrowserWindow

Esta técnica es similar a la de ShellWindows que se comentó hace unas semanas. Para poder utilizar esta técnica se debe crear una instancia del objeto ShellBrowserWindow y revisando, como hicimos en el caso anterior, los métodos disponibles encontraremos ShellExecute, dentro de la propiedad Document.Application.

Figura 7: Comprobación del método ShellExecute

En el siguiente vídeo se puede ver los detalles para lograr la ejecución del movimiento lateral. Hay que indicar que en Windows 7 puede haber ciertas limitaciones, aunque, como se puede ver en el vídeo, se puede ejecutar el código de esta forma.

Figura 8: PoC de Lateral Movement usando ShellBrowserWindow

Outlook y la ejecución con el método CreateObject

Esta técnica es un derivado de las de Matt Nelson. El objeto Outlook permite la instalación e interacción con objetos COM. Esto es realizado a través del método CreateObject. Este hecho permitiría a un atacante interactuar con los objetos COM en remoto, mediante DCOM.

La creación del objeto Outlook sería a través de la siguiente instrucción de PowerShell
$outlook = [Activator]::CreateInstance([type])::GetTypeFromProgID(“Outlook.Application”, “[dirección IP]”)
Desde este objeto se puede hacer uso del método CreateObject para crear una Shell.Application, de la siguiente manera:
$shell = $outlook.CreateObject(“Shell.Application”)
En ese punto solo tendríamos que ejecutar:
$shell.ShellExecute(“[comando a ejecutar en remoto]”)
El comando se ejecuta sobre el Windows 10 como un hijo del proceso Outlook.

Figura 9: Ejecución de calc con el objeto $Shell creado

Esta técnica permite sustituir Shell.Application por Wscript.Shell, ya que hay casos que pueden resultar de interés.

DDE con Microsoft Excel

Esta técnica fue publicada por Cybereason y proporciona un método con el que conseguir movimiento lateral a través del uso del Excel. La técnica utiliza el Direct Data Exchange Inter-Process Communications de Excel. Y todo esto lo podemos automatizar con un poco de Pentesting con Powershell.

Figura 10: Libro de Pentesting con PowerShell

Con esto se puede ejecutar un comando arbitrario. Lo primero, es crear una instancia del objeto Excel.Application, el cual es un objeto COM asociado con el Excel. Esto se logra con la instrucción:
$excel = [Activator]::CreateInstance([type])::GetTypeFromProgID(“Excel.Application”, “[dirección IP]”)
Una vez que se tiene el objeto, se puede hacer uso del Direct Data Exchange o DDE. A través de la instrucción:  $excel.DDEInitiate(“cmd”,”/c calc.exe”)


Figura 11: Ejecución de cmd.exe vía $excel

Sin duda, son métodos interesantes de conocer y que desde la parte de mitigación deben trabajar bien a lo largo del dominio. La identificación de la ejecución remota por DCOM puede ser un indicio para un IoC. Este tipo de técnicas no son vulnerabilidades, pero si hacen un abuso de una funcionalidad legítima.

Figura 12: Libro de Máxima Seguridad en Windows [4ª Edición]

El acceso a los objetos “peligrososDCOM debería ser prohibido por política y aplicar una lista blanca a los que se puedan utilizar si quieres tener un sistema en el que aplicas la Máxima Seguridad en Windows posible. Seguiremos avanzando en mostrar este tipo de técnicas e ir añadiéndolas a nuestra iBombShell para ir mejorando esta herramienta Open Source de Ethical Hacking.

Autor: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Hacking con Metasploit: Advanced 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 comments:

Post a Comment