miércoles, enero 16, 2019

Pentesting con Powershell: Saltarse AMSI y desactivar Windows Defender con iBombshell

Sabemos del potencial de ibombshell y nos gusta seguir añadiéndole funcionalidades. Pasada la resaca de BlackHat Euorpe 2018 seguimos pensando en mejorar la herramienta con nuevas funcionalidades y técnicas de Pentesting con Powershell, algo que además de mejorar la herramienta, pueda mejorar todas las técnicas que explico en el libro que escribí sobre este tema.

Figura 1: Pentesting con Powershell: Saltarse AMSI y desactivar
Windows Defender con iBombshell

Para mejorar en la fluidez y veáis en todo momento en que se está trabajando hemos habilitado una rama ‘Dev’ en el Github de ibombshell. En esta rama verás en qué cosas se están trabajando y cuáles serán las futuras funcionalidades y funciones de la herramienta.

Figura 2: Libro de Pentesting con Powershell en 0xWord

Dejamos la rama ‘master’ del repositorio de Github de ibombshell como el repositorio de producción y versión estable, pero si quieres probar las nuevas cosas que se trabajan puedes verla a través del repositorio ‘Dev’.

Figura 3: GitHub de ibombshell


El proyecto poco a poco avanza y vamos incorporando, cuando el tiempo lo permite, nuevas características y funciones. Sea como sea, seguiremos adelante con ello y mejoraremos la herramienta todo lo posible para que pueda ayudar a los pentesters en sus proyectos de Ehtical Hacking.

Figura 4: Libro de Ethical Hacking: Teoría y práctica para la
realización de un pentesting
de Pablo González en 0xWord

En el artículo sobre Cómo desactivar y saltarse AMSI con Powershell hablamos sobre una nueva técnica de bypass de AMSI y de varias estrategias sobre cómo poder saltarse a éste. Las estrategias parecen obsoletas, pero no lo son, como veremos en este artículo. Una vez bien entendido en qué consistía el bypass de AMSI nuevo, decidimos introducirlo en ibombshell como función de Powershell para la parte ‘Everywhere’ y cómo módulo de Python para la parte ‘Silently’ de ibombshell.

La función Bypass-AMSI

En este artículo se puede encontrar una función llamada Bypass-AMSI. El problema que nos encontramos es que la función era detectada por el propio AMSI como maliciosa, por lo que no se ejecutaba en Windows 10. Esto es lógico, ya que esto es el juego del gato y del ratón. Unos tapan y otros intentan abrir caminos y mejorar, al fin y al cabo, la seguridad.

Figura 5: Función Bypass-AMSI

Lo primero fue probar la vía de generación de la DLL con el código proporcionado en el artículo, escrito en C#. Luego utilizar la DLL dentro del proceso de Powershell para desactivar AMSI. Esto ya lo vimos en el artículo anterior.

Nosotros quisimos implementar el método de la DLL. Para ello, creamos una función llamada amsi-dlldisk. Esta función hará lo siguiente:
1. Descargar la DLL que tenemos subida al repositorio de Github de ibombshell. 
2. Ejecutar la carga de la DLL en el proceso de Powershell. 
3. Ejecutar el método ‘Disable’ de la DLL para desactivar AMSI.
Como se puede ver, fácil. Mientras se trabajaba en esto se podía ver una nueva forma de hacerlo y sin pasar por disco, lo cual siempre es interesante. Para ello, utilizábamos la función Bypass-AMSI original, pero utilizábamos una de las estrategias de evasión de AMSI, que no era otra más que la concatenación de strings.

Figura 6: Función amsi-dlldisk

Si analizamos la cadena en base64 vemos que AMSI lo está detectando como algo malicioso. Cortando el string en varios trozos se puede intentar evadir la protección. Algo sencillo, pero funcional.

Figura 7: Función amsi-memory

En este caso, se dividió justo en el fragmento que AMSI detectaba esto como malicioso, por lo que la función que se puede visualizar a continuación no provoca que AMSI detecte la función como mala.

Windows Defender y lo que viene después

Es cierto que el bypass de AMSI nos proporciona un camino interesante para conseguir cargar scripts y funciones, por ejemplo, en memoria. Hay que indicar que, además, de esto, tendremos que hacer algo para evadir al AV. En Windows 10, una vez que se hace bypass de AMSI, si utilizamos scripts públicos como el de Mimikatz, tendremos problemas con Windows Defender.

Figura 8: Función para tratar con Windows Defender

Por esta razón, se ha incorporado a ibombshell una función que permite desactivar la monitorización en tiempo real de Windows Defender, aunque para ello hay que tener privilegio en el sistema.

Figura 9: PoC de AMSI Bypass con ibombshell

La función comprueba si tenemos privilegios administrativos y deshabilita la monitorización en tiempo real, si ésta está activa. De esta forma, la utilización de la DLL en disco, scripts, otro tipo de archivos será mucho más tranquila.

Referencias sobre ibombshell:

- MacOS & Windows: Pentesting it with ibombshell
- ibombsehll: Whitepaper disponible
- ibombshell: Shell de pentesting en MacOS con Powershell
- ibombshell 0.0.1b liberada en el repositorio GitHub de ElevenPaths
- ibombshell: Crear una función de pentesting para MacOS
- ibombshell: Crear un módulo de extracción de claves privadas SSH en Windows 10
- ibombshell 0.0.1b en GitHub & Environment Injection UAC Bypass en Windows 10
- ibombshell: Mocking Trusted Directories UAC Bypass en Windows 10
- ibombshell en Black Hack Europe 2018: Nuevas Funciones
- Pentesting con Powershell: Saltarse AMSI y desactivar Windows Defender con iBombshell

Autor: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Hacking con Metasploit: Advance Pentesting" "Hacking Windows", "Ethical Hacking", "Got Root" y “Pentesting con Powershell”, Microsoft MVP en Seguridad y Security Researcher en el equipo de "Ideas Locas" de la unidad CDO de Telefónica.

No hay comentarios:

Publicar un comentario