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”
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
ResponderEliminarDonde pone eso Anónimo?porque me lo e leido tres veces y no lo veo...
EliminarSaludos!
Muchas gracias por compartirlo Pablo congratulation!
ResponderEliminarSaludos!
es powershell debe de correr solo en windows es como un ms-dos mas potente !
ResponderEliminar