miércoles, diciembre 10, 2014

Atacar un servidor Windows usando llamadas WMI

Los sistemas operativos Windows están creados con un conjunto de clases e instancias de estas en objetos que permiten controlar las funciones de toda la plataforma. Este tipo de componentes tienen una interfaz de operación implementada siguiendo los estándares de Web-Based Enterprise Management y Common Information Model y se los conoce como WMI - Windows Management Instrumentation -. Todo esto lo que abre es la puerta para que los objetos que dan vida a los sistemas operativos de Microsoft Windows puedan ser utilizados mediante este inferfaz WMI desde aplicaciones hechas a mano o herramientas del sistema que lo utilicen.

Figura 1: Atacar un servidor Windows usando llamadas WMI


Esto no es nada nuevo, pero en un entorno Citrix o Terminal Services, en el que se quieren ejecutar comandos fuera de la aplicación publicada en un Windows Server - es decir, hacer un jailbreak a la publicación -, el poder hacer uso de los componentes WMI puede resolver el problema ya que se tendría acceso a todo lo que ese usuario pudiera hacer en ese sistema operativo en concreto.

Figura 2: Herramienta WBEMTEST

Para conseguir este objetivo, hay una aplicación de test que permite hacer uso del interfaz WMI de los objetos del sistema operativo manualmente y que está en todos los sistemas operativos Windows. Se llama WBEMTEST (Web-Based Enterprise Management Test) y se encuentra en la ruta %WINDIR%/System32/wbem/wbemtest.exe. Desde esta herramienta se pueden cargar todos los interfaces de todos los objetos creados en este contexto en el que se está trabajando, configurar los parámetros y hacer las llamadas de los métodos.

Figura 3: Conexión a un contexto de trabajo.
root/cimv2 es en el que se encuentran la mayoría de los objetos del sistema
(El contexto de los objetos está en la documentación)

Si se consigue acceder a esta herramienta, se puede convertir en una de esas consolas extras que un administrador de un entorno Citrix o Terminal Services debería prohibir, pues como vamos a ver ahora, si un atacante consigue llegar a ella, podrá ejecutar cualquier comando en el sistema operativo. Para ello, el atacante debe conectase a un contexto de trabajo con el usuario que esté conectado actualmente.

Figura 4: Por cada clase del sistema se documenta el contexto

Una vez conectado al contexto podrá conseguir hacer uso de las funciones de los componentes del sistema operativo llamando a los métodos que tienen todos los objetos. La lista completo de clases y métodos está documenta en MSDN, y como se puede ver, por cada clase tendremos información del contexto en el que se encuentra, las versiones de los sistemas operativos en que se encuentra implementada y la lista de métodos que se pueden invocar.

Figura 5: Métodos de la clase Win32_OperatingSystem

Con cada clase podremos hacer uso del interfaz WMI para obtener una lista concreta de funciones, que están descritas en la documentación. Por ejemplo, si se desea reiniciar o apagar un servidor se puede hacer mediante la clase Win32_OperatingSystem que oferta estos métodos.

Figura 6: Configurando una llamada a un método de Win32_Process

En nuestro caso concreto vamos a hacer uso de la clase Win32_Process que entre otros métodos permite crear o matar procesos para conseguir la creación de uno nuevo a partir la ejecución de un comando en el sistema. Es decir, el objetivo será abrir una cmd.exe a usando el método create del objeto Win32_Process haciendo uso del inferfaz de llamadas WMI

Figura 7: Configuración de la llamada al método create del objeto Win32_Process

Cuando se selecciona el método create, ya tenemos acceso a la lista de parámetros a configurar, en este ejemplo vamos a usar el parámetro de llamada CommandLine.

Figura 8: Configuración de una llamada al método create

Se configura el valor cmd.exe en él, para que se cree un proceso con la ejecución de ese comando y le damos al botón de ejecutar.

Figura 9: Configuración del parámetro CommandLine con el nombre del programa a ejecutar

Como se puede ver, al final se consigue la ejecución de la consola en el sistema operativo.

Figura 10: Se ejecuta la llamada VMI al método create del objeto
Win32_Process para conseguir la ejecución de cmd.exe

Es un ejemplo sencillo, pero haciendo uso de este interfaz WMI se podría sacar información acerca de todo el sistema operativo, el dominio en el que se encuentra, listas de permisos, carpetas compartidas, etcétera, y será especialmente útil cuando estemos haciendo auditorías de seguridad en un entorno Citrix o Terminal Services con un sistema operativo Windows Fortificado en el que las consolas habituales como cmd, PowerShell, wmic, etcétera estén capadas, ya que se seguirá teniendo acceso a todo el sistema operativo.

Saludos Malignos!

1 comentario:

Anónimo dijo...

Se puede tomar control del wmi de una maquina remotamente en segundo plano?
Ultimamente me han salido ventanas de error de wmi muy extrañas tanto en medio de la serion como tambien al apagar la maquina.

Entrada destacada

Joinnovation & KeepCoding Connect: 2 Eventos para DOERS en #Madrid

Ayer fue el día de ver los proyectos de EQUINOX , el hackathon de ElevenPaths donde durante 24 horas se lanzan proyectos que normalmente ...

Entradas populares