lunes, marzo 30, 2020

PowerShell Revolution: El poder del pentesting en tu mano

El pasado 27 de marzo hicimos la FluCON. Un evento muy especial por las circunstancias en las que estamos. Circunstancias en las que toda la sociedad se encuentra. Siempre hemos dado vueltas a eso de hacer un evento que sume al mundo de la ciberseguridad y, creo, que era el momento. Unir a varios amigos del sector para debatir, dar charlas, entrevistar, en resumen, pasar una gran tarde y dar conocimiento a la gente que veía el evento.

Figura 1: Powershell Revolution: El poder del pentesting en tu mano

La charla que tenía programada llamada "Powershell Revolution: El poder del pentesting en tu mano" se tuvo que mover, pero al final se liberó. Hoy quería mostrar un poco de que se habla en esta charla y los conceptos importantes del Pentesting con Powershell que han ido haciendo de esta línea de comandos que la seguridad sea un paso importante.

Figura 2: Pentesting con PowerShell

Ya hemos hablado en el blog sobre esto, el juego del gato del ratón, el juego en el que las protecciones se miden a los bypasses, y cuando éstos suceden, las protecciones mejoran. Esto es la seguridad. Mejorar. Probar. Mejora continua de la que hablan los ciclos del análisis de riesgo.

¿De qué se habla?

En la charla se habla de las protecciones de Powershell, haciendo un breve repaso a algunas de las más importantes y de cómo fueron surgiendo. En qué versiones fueron saliendo o en qué versión del sistema operativo se puede utilizar. Qué hay de todo. Otra parte importante, una vez vista las protecciones son los bypasses, haciendo un repaso por diferentes técnicas y formas que existen de lograrlos. Aquí de nuevo el juego que comenté anteriormente. Por último, quería mostrar una especie de glosario de herramientas o de cosas a estudiar para mejorar en el ámbito de Powershell.

Figura 3: Empire: Hacking avanzado en el Red Team

Históricamente el timeline de Powershell es el que se puede ver en la siguiente imagen. La aparición de la primera versión de Powershell es la 1.0 en el año 2006, junto a la aparición de sistema operativo Windows Vista. Desde entonces, Powershell se ha ido convirtiendo en una pieza fundamental dentro de la administración de sistemas y redes Microsoft. Así como una pieza fundamental en la post-explotación para los pentesters. Ya sea utilizando de forma manual o a través de herramientas como Empire, Covenant o iBombshell.

Figura 4: Conceptos iniciales

También, históricamente el uso de Powershell en un pentest o en un Ethical Hacking ha sido interesante debido a las posibilidades de “poco ruido” y evasión que se lograba. En los años 2012, 2013 o 2014 esto era una de las mecánicas más demandadas, ya que todo funcionaba y funciona bien. Quizá el desconocimiento sobre el potencial de Powershell en la época ayudó a esto.

Figura 5: Ethical Hacking

En la charla se hizo una enumeración de cuatro protecciones que, digamos, fueron apareciendo con el paso del tiempo y de las nuevas versiones. A continuación, se enumeran y se enmarcan temporalmente:
• Políticas de ejecución de scripts: Aparecen en la primera versión de Powershell. Marcaban las reglas para poder ejecutar scripts de Powershell en el sistema. Fueron aumentando el número de políticas con el paso de las versiones.
• Modo de lenguaje: El modo restringido es el que aumenta en parte la protección, a través de la prohibición de ejecución de ciertas instrucciones. Este modo aparece en la versión 3. Este dato es importante para su bypass.
• AMSI. AntiMalware Scan Interface: Utilizable por Powershell en sistemas operativos Windows 10, Windows Server 2016 y Windows Server 2019. Permite a los antivirus como Windows Defender poder detectar instrucciones o código malicioso en un proceso de Powershell. Así como permite que antivirus de terceros también puedan enterarse de estas situaciones, gracias a la interfaz que provee AMSI.
• Políticas GPO: Registro de acciones: importaciones de módulos, transcription o registro de ejecuciones de bloques de script. Existen diferentes políticas. Todas aportan su granito de arena a la detección y análisis de la ejecución de ciertos códigos de Powershell.
Políticas de ejecución

Microsoft explica que es una estrategia de seguridad, aunque también indica que no es un mecanismo de protección en sí mismo. Es algo complejo de explicar. Aparecen la primera versión de Powershell y lo que sí está claro es que permiten proteger de una ejecución “accidental” de los scripts. Es decir, si un usuario recibe un script y alguien le dice ejecútalo, la política de ejecución bloqueará dicha ejecución.

Figura 6: Protecciones en PowerShell

Por el contrario, si alguien quiere bypassear la política existen muchas formas. Existen artículos indicando: “7 formas de bypassear políticas de ejecución de Powershell”, “15 vías para…”, y así cada vez más. Lo más sencillo, a partir de la versión 3.0 de Powershell es ejecutar lo siguiente:
powershell.exe –ExecutionPolicy Bypass.
Tú decides como propietario del proceso de Powershell que política quieres utilizar.

Modo restringido del lenguaje

En la versión 3.0 de Powershell se incorporó el modo restringido. Se puede consultar si está activo de la siguiente manera
$ExecutionContext.SessionState.LanguageMode
Para configurarlo de forma permanente se debe crear una variable de entorno, a nivel de sistema llamada __PSLockDownPolicy. Si le aplicamos el valor 4, es el máximo para el Constrained Language.

Figura 7: Uso de ExecutionContext.SessionState.LanguageMode

El bypass de esta restricción es cargar una Powershell versión 2.0, tal como puede verse en la siguiente imagen. Lo curioso aquí es que no se puede cargar el modo restringido en dicha versión. Esto es válido para sistemas Windows que tengan .NET Framework 2.0. En Windows 10 no es válido, hay que buscar otro tipo de soluciones.

Figura 8: Powershdll.dll

En Windows 10 el bypass va ligado a otro tipo de acciones, como por ejemplo cargar una Powershell o ejecutar código Powershell a través del uso de ciertas DLLs, sin necesidad de cargar una Powershell.exe. Un ejemplo sería el de Powershell sin powershell.exe. O el proyecto Powershdll.dll.

AMSI

De AMSI ya hemos hablado en el blog bastante, pero en la charla se muestra qué es y cómo funciona. Con alguno ejemplo práctico bastante interesante, en el que se demuestra que una URL o una palabra crítica puede hacer saltar la detección como código malicioso.

Figura 9: Ejemplo de amsiutils

En la prueba del bypass el objetivo es que cuando uno ejecute el comando amsiutils, ya no nos devuelva el mensaje de que ha sido bloqueado por el antivirus. El comando amsiutils es comando que prueba que AMSI está habilitado en el proceso de Powershell.

Figura 10: Arquitectura de procesos

Aquí tenéis la estructura de funcionamiento de AMSI y su interacción con los antivirus. Un ejemplo práctico y muy visual. Además, AMSI no es exclusivo de Powershell, ya que, como se puede ver, es utilizado en diversos lenguajes de scripting. Debido a que AMSI se carga en el proceso del usuario, éste puede “tocar” dicho proceso y parchearlo de tal forma que AMSI quede anulado. Esto se puede ver más en detalle en el video de la charla.


Figura 11: PowerShell Revolution: El poder del pentesting en tus manos

Para finalizar os dejamos el vídeo de la charla "Powershell Revolution: El poder del pentesting en tus manos". Espero que podáis sacar el máximo jugo a vuestra consola azul y prosigáis con vuestro entrenamiento con esta gran línea de comandos.

#YoMeQuedoEnCasa

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",  “Pentesting con Powershell” y de "Empire: Hacking Avanzado en el Red Team", Microsoft MVP en Seguridad y Security Researcher en el equipo de "Ideas Locas" de la unidad CDCO de Telefónica.  Para consultas puedes usar el Buzón Público para contactar con Pablo González

Figura 12: Contactar con Pablo González

No hay comentarios:

Publicar un comentario