martes, septiembre 08, 2020

Windows AMSI (AntiMalware Scan Interface): Ofuscación, Manual Bypass & AMSI.Fail

Del sistema de seguridad AMSI (AntiMalware Scan Interface) en Windows ya hemos hablado varias veces en este blog. Sabemos que es una protección que se introduce en sistemas Windows, en las versiones de Windows 10 y Windows Server 2016/2019. Sabemos que es un mecanismo que permite al AV, ya sea Defender o de terceros que se integren con AMSI, saber qué está ocurriendo en un proceso concreto, que es lo que se va a ejecutar. Esto es algo interesante, es tener al “chivato” en ese proceso.

Figura 1: Windows AMSI (AntiMalware Scan Interface):
Ofuscación, Manual Bypass & AMSI.Fail

Hay que indicar que AMSI es una solución, tal y como indica Microsoft en su documentación, para ciertas tecnologías. Por ejemplo, las tecnologías o componentes de Windows que utilizan o se integran con AMSI son:

- UAC, ante elevación de EXE, COM, MSI o ActiveX. 
 
- Powershell evaluando los scripts, el uso interactivo y la evaluación de código dinámico.
- Windows Script Host. 

Figura 2: AMSIExt de ElevenPaths 

- JavaScript y VBScript: En ElevenPaths publicamos una herramienta para este campo llamada AMSIext. 
 
- Macros de Office.

En la parte de Pentesting con Powershell, AMSI ha sido un quebradero de cabeza para muchos, pero realmente conociendo el funcionamiento se puede lograr un bypass. Cuando se han ido publicando bypasses de AMSI ha ocurrido, lo que ocurre siempre, que sus “signatures” han sido cazadas. AMSI ha ido aprendiendo qué identificar de cada bypass que salía, por lo que a las pocas semanas, dicho bypass no funcionaba. Normal y lógico.

Figura 3: Pentesting con PowerShell

Trabajar con la ofuscación es una de las necesidades para hacer que algo que es detectado, deje de serlo. Por ello, es importante, entender el script o función que proporciona el bypass y poder manipular los parámetros adecuados. La idea del artículo de hoy es conocer algunas herramientas que pueden simplificar el proceso manual de trabajar con algo que es detectado, para que vuelva a dejar de serlo. 

AMSI Manual Bypass  

En la charla de la FluCON hablé de las protecciones de Powershell y de posibles vía de bypass, por lo que es una charla interesante en lo que a entorno práctico se refiere. En la charla se habla de AMSI y de bypasses. Sabemos que la técnica más utilizada para bypassear AMSI es la deshabilitar en memoria a AMSI.dll, con el objetivo de que cualquier texto que se introduzca en el proceso de, en este caso, Powershell no se ha procesado. Esta técnica se llama amsi-scanbuffer.
 

Figura 4: Powershell Revolution

Tenéis disponible la función escrita por Rasta Mouse e integrada en nuestro querido iBombshell. Es un ejemplo, de función que de primeras nos va a cazar AMSI. Ahora trabajaremos con ella, pero antes vamos a ir a una función de 2019, la cual también está en iBombshell, y que utiliza también la técnica amsi-scanbuffer. Esta función fue detectada al poco tiempo de ser publicada.

Para hacer un análisis de dónde está siendo detectado se puede ejecutar línea por línea sobre una Powershell. Este es un proceso que, cuando la función es pequeña se puede hacer, pero cuando la función es grande, podemos emplear un poco más de tiempo. En algunas ocasiones, es la “firma” de más de una línea lo que hace que AMSI detecte esto como algo malicioso. En algunos casos, es una string, un nombre de variable, una impresión por pantalla de un texto, etcétera. Es lo que se llama un “trigger”. Algo que dispara que AMSI detecte.

Figura 5: Libro de Ethical Hacking 2ª Edición PDF

Hay una herramienta llamada AMSI Trigger. Esta herramienta permite analizar una función o script e indicarnos dónde AMSI se está quejando. El funcionamiento es sencillo, ejecutamos AmsiTrigger indicándola la dirección URL dónde se encuentra la función o el script y lo analiza. El programa internamente carga Amsi.dll y revisa línea por línea si algo le chirría.

Figura 6: AMSITrigger

Como vemos en esta imagen, sale el stringBypass.AMSI”, el cual se encuentra en varios sitios de dicha función. Si probamos sobre la Powershell al escribir Bypass.AMSI vemos que, efectivamente, es una string que no le gusta. Esto es un ejemplo que demuestra que con ofuscación y un poco de tiempo, el proceso de saltarse AMSI es bastante viable, por ello hacemos hincapié en que para un pentester es vital conocer el funcionamiento de las protecciones y el cómo poder saltarlas, técnicas, vías, etcétera.

Si ejecutamos AmsiTrigger sobre la función de Rasta Mouse amsi-scanbuffer, vemos que hay dos partes detectadas, pero no es la parte de un string al uso. ¿Puede que me detecte diferentes líneas?

Figura 7: AmsiTrigger con amsi-scanbuffer

Si copiamos la función tal cual y la cargamos en la Powershell, efectivamente, AMSI nos delata ante el antivirus y se evita la ejecución del código. Esto es el ejemplo de un “copy and paste” de la función amsi-scanbuffer vemos el siguiente resultado, y ocurriría de igual forma ante una carga dinámica utilizando un webclient o un invoke-webrequest.

Figura 8: AMSI nos detecta

Una de las formas indicadas anteriormente es que si vamos línea a línea o ejecutando pequeños “trozos” podemos lograr, de manera sencilla dos cosas: identificar dónde nos cazan y conseguir saltarlo. Hay veces que nos pueden bloquear la función por ejecutarlo todo junto y de esta forma se puede evadir. Todo es ir probando. Además, tenemos AmsiTrigger para ir detectando zonas de riesgo para la evasión. Y luego, ya podremos utilizar la herramienta que sea en nuestro Hacking Windows sin miedo a ser detectados por AMSI.

Figura 9: Hacking Windows: "Ataques a sistemas y redes Microsoft"

En la siguiente imagen, se puede ir viendo como se ha ido introduciendo de pocas líneas en pocas líneas y al final se consigue el bypass. Se ha eliminado la cabecera y cierre de la función, pero las instrucciones del bypass se han conseguido ejecutar, digamos por “lotes”.

Figura 10: Ejecución línea por línea

Otra de las técnicas en la búsqueda del bypass manual es la de convertir en strings detectados en substrings. Es decir, si se detecta Bypass.AMSI, se puede empezar a probar el “Bypass.A”+”MSI” y sus diferentes variantes. Esto es algo a lo que se llama “Classic” pero son métodos que funcionan.

AMSI.fail

Recientemente conocí este sitio el cual genera de forma aleatoria diferentes técnicas y nos proporciona el código en Powershell para deshabilitar AMSI o hacer un “break”. Muchas de las técnicas son muy conocidas, por ejemplo, la de la imagen, de Matt Graeber.

Figura 11: AMSI.Fail

El sitio web, el cual tiene por dominio amsi.fail, es una solución para cuando no se consigue manipular la función que queremos para lograr bypassear AMSI. Deshabilitar AMSI en un proceso siempre es una buena solución en un Ethical Hacking, porque a partir de dicho momento podrás ejecutar todo sin problema en ese proceso, recalco, en ese proceso y con los privilegios que tengas, que ese es otro tema.

Figura 12: Ejemplo de bypass de AMSI con amsi.fail

En la imagen, se puede ver el ejemplo de bypass de AMSI y cómo se ha deshabilitado éste a través de uno de los códigos generados con amsi.fail

Figura 13: Máxima Seguridad en Windows Gold Edition

Sin duda, es un mecanismo apasionante AMSI y parte fundamental de la fortificación de cualquier sistema Windows, pero desde el punto de vista del pentesting seguirá dando juego, ya que se mejorarán las defensas y se seguirán buscando los huecos para, de nuevo, mejorar las defensas. El juego continúa. 

Saludos,
 
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”, "Pentesting con Kali Silver Edition" 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 - Conseguir 100 Tempos Gratis en MyPublicInbox

Figura 14: Contactar con Pablo González

No hay comentarios:

Publicar un comentario