jueves, febrero 04, 2016

Powershell Empire: Post-Explotación++ en redes Windows

Desde hace unos meses estoy jugando con Powershell Empire, un framework de post-explotación basado en el despliegue de agentes que se ejecutan en las máquinas comprometidas y son gestionados desde una consola bajo el control del pentester. La idea de por sí me atrajo desde el primer momento, porque yo había estado trabajando en una PoC mucho más rudimentaria con un bot en PowerShell al que llamé PSBot. El framework de Powershell Empire está mucho más evolucionado, y hasta como se puede leer en su web, se han preocupado de que las comunicaciones estén cifradas para dificultar ser descubiertos por los sistemas de detección de intrusiones que pudiera haber en la red.

Figura 1: Powershell Empire. Post-Explotación++ en redes Windows

Jugando con este framework uno se da cuenta que la fuerza de Powershell Empire radica en la integración de todos los demás frameworks conocidos de Pentesting con Powershell de los que hablo en el libro que escribí sobre este tema. La lista de la forman frameworks como Powersploit, Nishang, Posh-SecMod o PowerUp, entre otros, que se integran y están disponibles para ser utilizados a través de la arquitectura que proporciona PowerShell Empire.

Una de las cosas más potentes que ofrece este framework es la posibilidad de ejecutar agentes de Powershell sin necesidad del binario powershell.exe. Esto hace que los agentes puedan ser inyectados en diferentes procesos, y pasar más desapercibidos aún a los sistemas de End-Point-Protection que pudiera haber desplegados.

Figura 2: Powershell Empire en Kali Linux

¿Qué componentes tiene Powershell Empire? Pues fundamentalmente tres tipos: Los Listeners, los Agents y los Stagers. A continuación se enumeran las distintas funciones y de qué se encargan dentro de la arquitectura de funcionamiento propuesta por Powershell Empire:
Listeners: Se encargan de esperar las conexiones de los agentes desplegados en las máquinas comprometidas. Podemos decir que el listener será el punto final, dónde el pentester colocará sus órdenes a ejecutar 
Agents: Los agentes son el código ejecutado en las máquinas comprometidas. Powershell Empire ofrece una gran cantidad de agentes en diferentes formatos, como por ejemplo BAT, VBS, DLL e incluso, un código preparado para Rubber Ducky.

Stagers: Los stagers son precisamente el código a generar, que una vez ejecutado se convierte en agent.
El flujo de uso es sencillo, el pentester conseguirá acceso a través de la explotación de una vulnerabilidad, por ejemplo con Metasploit, y podrá utilizar un Stager de tipo DLL, por ejemplo, para conseguir ejecutar un Agent en la máquina remota. Otro caso de uso sencillo sería aprovechar la potencia de Rubber Ducky en un ataque físico, o la ingeniería social con SET para que el usuario ejecute un archivo. La fase de ejecución de los agentes queda en mano de cada uno de vosotros.

PoC: Conexión entre el agente y el listener

Para la prueba de concepto se va a utilizar un Stager de tipo BAT. En primer lugar hay que instanciar un Listener sobre la máquina para recibir las conexiones de los agentes. La instrucción a ejecutar en este caso es listeners. Una vez el prompt cambia se puede consultar las opciones que existen. Para este caso, nos vale con ejecutar la instrucción execute.

Figura 3: Listeners activos en nuestra red de Powershell Empire

La generación del fichero BAT es sencilla, simplemente hay que ejecutar la instrucción usestager. Con el comando options se puede verificar que podemos cambiar y personalizar. Como se puede visualizar el entorno es muy similar al de la consola de Metasploit, está claro que los creadores han querido darle ese toque parecido.

Figura 4: Generación de un Stager tipo BAT con usestager

Si analizamos el fichero que acabamos de crear podemos encontrar que el Stager se reduce a un código encodeado en Base64 y que es invocado a través de una powershell.exe. Powershell ofrece la posibilidad de ejecutar código a través de Base64 (-Enc), en un proceso oculto (-W Hidden) y no interactivo (-NonI). En otras palabras, un modo perfecto para pasar desapercibido. En la imagen se puede ver el contenido del fichero .BAT.

Figura 5: Contenido en Base64 del Stager .BAT generado por Empire
Cuando el fichero .BAT se ejecute en la máquina comprometida se lanzará una Powershell sin ningún perfil, en modo no interactivo, con ventana oculta y ejecutará el código que biene en Base64. Ese código es el que creará la conexión en busca del listener que tenemos configurado. El listener recibirá la conexión y tendremos un nuevo agente. A partir de ese instante el pentester puede ejecutar instrucciones y módulos en la máquina remota.

El funcionamiento no es inmediato, el listener prepara las órdenes y el agente realiza conexiones no continuas para obtener la lista de tareas a ejecutar. Esto hace que si en la máquina comprometida se visualizan las conexiones de red, no viésemos la conexión entre el agent y el listener de forma continuada, sino que son accesos discretos los que se producen.

Figura 6: Agente conectado con el Listener

Con la conexión entre el Agent y el Listener realizada, más de 115 módulos disponibles para que el pentester saque el jugo a la máquina comprometida. Técnicas como Pass the Hash, pivoting, exfiltración de datos, escaneo de red interno y externo, etcétera, pueden ser llevados a cabo desde el agente desplegado. Para esta prueba elegimos un módulo que cuelga de un módulo “curioso” llamado trollsploit. Este módulo proporciona 5 funcionalidades que son las siguientes:
• Message.
• Process_Killer.
• Thunderstruck.
• Voicetroll.
• Wallpaper.
No hace falta explicar mucho lo que hace cada funcionalidad, sobre todo si eres de los que has disfrutado con juguetes antiguos como el NetBus - que yo integré directamente para que lo controles desde Metasploit -. Elegimos para este caso el módulo message. Al ejecutarlo, en la máquina comprometida se mostrará un message box con la información configurada en el módulo. Cómo en el Netbus.

Figura 7: Módulo message de trollsploit en Powershell Empire

¿Cuál es el resultado? En esta prueba de concepto se puede ver cómo el listener configuró las órdenes para el agente denominado Win7, el cual fue renombrado previamente. El agente consulta las órdenes cada N segundos contra el listener y ejecuta las instrucciones.

Figura 8: Mensaje mostrado en la pantalla de la víctima

Al final, Empire tiene la ventaja fundamental de permitir controlar bots que sacan toda la potencia de PowerShell en el mundo del pentesting. Todos los frameworks de post-explotación con los que trabajamos habitualmente y que expliqué en el texto de Pentesting con Powershell pueden ser ejecutados desde Empire, lo que ayuda a concentrar en un punto único todas las tareas.

Actualización: En este artículo puedes ver cómo utilizar PowerShell Empire para saltarse UAC en Widnows.

Autor: Pablo González Pérez (@pablogonzalezpe)
Escritor de los libros "Metasploit para Pentesters", "Ethical Hacking" y “Pentesting con Powershell

4 comentarios:

  1. Framework de explotacion en powershell... Que solo corre en windows? Oiga? Como? Pues si que teneis experiencia en esto en el lado del mal jajaja

    ResponderEliminar
    Respuestas
    1. Donde pone eso Anónimo?porque me lo e leido tres veces y no lo veo...

      Saludos!

      Eliminar
  2. Muchas gracias por compartirlo Pablo congratulation!

    Saludos!

    ResponderEliminar
  3. es powershell debe de correr solo en windows es como un ms-dos mas potente !

    ResponderEliminar