Posted in

¿Y ahora qué?: Ganar persistencia con WMI Event y POSH C2

Hemos ganado acceso a un equipo, tal vez con privilegios básicos de usuario. La máquina nos puede servir para continuar haciendo nuestras pruebas éticas o desplazarnos lateralmente a otros activos, pero ¿cómo puedo hacer para no perder el acceso?

Mantener el acceso es una de las etapas importantes en un proceso de ethical hacking, ya que nos permite tener persistencia sobre el activo comprometido, y recuperar la conexión en caso de reinicios o fallos de nuestra shell reversa.

Existen múltiples formas de mantener el acceso en un equipo, sin embargo, en este artículo veremos como hacerlo utilizando PoshC2 sobre un equipo con SO Windows 10.

Importante: La fase de mantener acceso se debe dar posterior al compromiso inicial. En este artículo partimos de la premisa que ya contamos con un acceso.


Veamos algunos conceptos clave:

¿Qué es WMI Event Suscription?

WMI es la implementación de Microsoft de WBEM (Gestión empresarial basada en la Web), la cual busca estandarizar el acceso a la información de gestión en un entorno empresarial. Se puede obtener acceso a los datos WMI de diferentes formas, por ejemplo, a través de scripts, aplicaciones de Visual Basic, C++ y Net Framework. WMI permite también suscribir eventos, el cual permitirá a un administrador monitorear los cambios en el SO.

Un atacante puede aprovechar esta capacidad para ganar persistencia, a través de la creación de una suscripción de evento modificada, la cual contiene un payload de conexión remota que se dispara con una frecuencia asignada. Esta técnica permite también en algunos casos, elevar privilegios.

¿Qué es Posh C2?

Posh C2 es un framework de comando y control diseñado para ayudar en los procesos de ethical hacking a mantener acceso, desplazarse lateralmente o escalar privilegios, los cuales se dan durante la fase de post-explotación.

Posh funciona en múltiples SO, y tiene payloads en varios lenguajes, además de tener algunas herramientas para evadir AMSI y ETW. Pueden instalarlo desde el siguiente repositorio: https://github.com/nettitude/PoshC2


Bien, ahora que ya sabemos lo básico, crearemos un WMI Event Subscription con un payload en Powershell para establecer una conexión remota hasta nuestro equipo, utilizando Posh C2. Luego veremos como a través de las herramientas comunes de Windows, es difícil detectarlo, por lo que necesitaremos algunas tools adicionales

Nota: Este escenario es demostrativo. Atacar algún activo sin consentimiento, puede ser considerado ilegal. Utilice este conocimiento bajo su propio riesgo.

1) Teniendo ya un acceso en el equipo comprometido, desde Posh C2, seleccionamos la sesión remota sobre la que crearemos el WMI Event Suscription:

2) Ejecutamos el comando :

Invoke-wmievent -Name [Nombre de tu evento] -Command "powershell -enc [BASE64 Payload]" -Hour [Hora de ejecución] - Minute [Minuto de ejecución]

Descuida, el payload te lo proporciona Posh al momento de ser iniciado:

Tal como podemos ver, le hemos especificado una hora y un minuto específico de ejecución, por lo que el evento permanecerá en la máquina mientras no sea detectado, y se ejecutará siempre en ese momento. Cabe precisar, que al momento de crear el evento también se ejecuta de manera inicial.

3) Recibimos la conexión por parte del equipo víctima, en este caso, el WMI Event Subscription se ha creado con privilegios SYSTEM, ya que el usuario tenía permisos de elevación:

Creación del WMI Event Suscription en el equipo comprometido
En Posh, ejecutamos «back»
Se recibe la conexión con ID 2, la cual tiene privilegios de SYSTEM

4) En el equipo comprometido, revisamos los procesos que están en ejecución, y las tareas programadas, sin poder encontrar evidencia de la conexión:

Vista del Administrador de Tareas
Vista de las tareas programadas en Windows

5) Sin embargo, podemos utilizar herramientas complementarias, como:

Get-WmiObject -Namespace root\Subscription -Class __EventFilter
Detección a través de la pestaña WMI en Autorun
Detección a través de Process Hacker
Detección a través de comandos Powershell

6) Con la conexión remota, podemos continuar nuestras actividades de enumeración y post-explotación

Ahora que ya sabemos como atacar, una pregunta interesante es: Como usuario afectado, ¿cómo puedo remover esto?. La respuesta es sencilla, ejecutando el siguiente comando:

Get-WMIObject -Namespace root/Subscription -Class __EventFilter -Filter "Name='Persistencia'" | Remove-WmiObject -Verbose

Información adicional: Posh C2 no es el único framework que permite realizar este tipo de ataque, existen otros como Metasploit, Empire, etc. Puedes utilizar el que más te convenga: El cielo es el límite!