GoAround: Automatización de bypasses a AMSI y ofuscación de código PowerShell
Realizando el Máster de Seguridad de las TIC en la Universidad Europea, se proponían varios temas como posibles Trabajos de Fin de Máster, entre los que se incluía el desarrollo de una herramienta que automatizase la realización de bypasses a la protección AMSI. Entonces yo no tenía ni idea de qué era eso de AMSI (Antimalware Scan Interface), pero buscando un poco por Internet descubrí que era una protección antimalware de Windows y que el objetivo del trabajo era lograr “saltársela”, por lo que me pareció un tema muy interesante.
De modo que comencé mi TFM, dirigido por Pablo González (a quien le agradezco toda la ayuda), con el objetivo de desarrollar dicha herramienta.Y así es como surgió GoAround: una herramienta con dos funcionalidades principales. En primer lugar, permite la generación automática de scripts para realizar un bypass a AMSI y, en segundo lugar, permite la ofuscación de cualquier script de código PowerShell.
¿Qué es AMSI?
AMSI es una protección antimalware de Windows que se integra con el antivirus que esté instalado en la máquina (aunque este no sea Windows Defender). Además, tiene integración con JavaScript, VBScript y PowerShell de tal modo que, antes de ejecutar códigos escritos en estos lenguajes, los analiza para ver si son o no malware. En este caso nos vamos a centrar únicamente en su integración con PowerShell.
¿Qué es AMSI?
AMSI es una protección antimalware de Windows que se integra con el antivirus que esté instalado en la máquina (aunque este no sea Windows Defender). Además, tiene integración con JavaScript, VBScript y PowerShell de tal modo que, antes de ejecutar códigos escritos en estos lenguajes, los analiza para ver si son o no malware. En este caso nos vamos a centrar únicamente en su integración con PowerShell.
Figura 2: Pentesting con PowerShell 2ª Edición de Pablo González en 0xWord |
Para realizar las comprobaciones, AMSI se basa bien en el hash del archivo o bien en palabras o funciones que se utilicen en el código y que tenga clasificadas como maliciosas. Por ejemplo, AMSI va a bloquear directamente cualquier script de PowerShell que contenga la palabra “amsiutils”.
Ofuscación de código PowerShell con GoAround
Para evitar la detección de ciertos scripts, se pueden utilizar técnicas de ofuscación como las siguientes:
- Uso aleatorio de mayúsculas: se basa en alterar las funciones de PowerShell, utilizando letras mayúsculas y minúsculas aleatoriamente. Esto logrará cambiar el hash del archivo original. Funciona debido a que PowerShell no es sensible a mayúsculas y minúsculas, es decir, “Get-Process” lo entiende igual que “GEt-pROcesS”. Sin embargo, AMSI tampoco es sensible a mayúsculas y minúsculas, por lo que no nos servirá si lo que está utilizando para detectar el script es una palabra clave como “amsiutils”. Únicamente sirve si lo que tiene AMSI registrado es el hash del archivo malicioso.
- Concatenación de cadenas de texto: como AMSI en ocasiones lo que hace es detectar palabras, bastará con separar una palabra en dos o más cadenas de texto para que esta ya no sea detectada. Por ejemplo, si transformamos “amsiutils” a “amsiu” + “tils”, AMSI ya no detectará nuestro script como malicioso.
- Inserción de variables: se basa en lo mismo que la concatenación de cadenas de texto. En este caso, para separar la palabra deberemos crear una variable ($var = “tils”, por ejemplo) para después formar “amsiutils” de la forma: “amsiu$var”. De este modo, AMSI ya no detectará el script como malicioso. GoAround permite la ofuscación de scripts de PowerShell de forma automática usando alguna de estas tres técnicas, tal y como se puede ver en las siguientes imágenes.
Figura 5: Ofuscación de archivo mediante inserción de variables
Bypass a AMSI con GoAround
La herramienta GoAround permite la generación automática de dos tipos de bypasses: el bypass de reflexión desarrollado por Matt Graeber (ligeramente modificado) y el bypass de parcheo de la función AmsiScanBuffer desarrollado por Paul Laîné.
Figura 6: Bypass de reflexión de Matt Graeber
Si bien es cierto que los bypasses a AMSI suelen tener una vida corta, debido a que acaban siendo detectados por la propia protección, el hecho de utilizar técnicas de ofuscación que tienen elementos aleatorios (es decir, cada vez se genera un archivo diferente), puede ayudar a aumentar el tiempo de funcionalidad de estos bypasses.
Figura 7: Uso del bypass de reflexión ofuscado mediante concatenación de cadenas de texto
En las imágenes se puede observar cómo, utilizando estos dos bypasses se consigue en ambos casos deshabilitar AMSI y ejecutar elementos maliciosos en PowerShell. Como se puede observar, tras la ejecución de los bypass ya se podría ejecutar cualquier otro script malicioso.
Figura 8: Uso del bypass de Paul Laîné ofuscado mediante inserción de variables
El objetivo principal de esta herramienta es ayudar a los pentesters durante sus tareas de post-explotación, en las que habitualmente podrán encontrarse con que la protección AMSI para los scripts que quieren ejecutar en las máquinas. En un futuro, el objetivo es incluir más bypasses y más técnicas de ofuscación para mantener esta herramienta actualizada. Quizá incluso añadir la funcionalidad necesaria para que funcione también con scripts escritos en VBScript o en JavaScript. Hasta entonces, podéis descargar la herramienta desde GitHub [GoAround].
Autora: Ana Junquera Méndez
No hay comentarios:
Publicar un comentario