¿Que és?
AMSI, antimalware Scan Interface, es un mecanismo que permite integrarse con el AV, con el fin final, de investigar procesos que están ocurriendo.
AMSI ayuda a los antivirus a detectar scripts, como por ejemplo, powershell, Jscript, VBScript, VBA (office macros) o .NET y los envía al AV para analizarlos.
Hay que entender, que los AV realmenten funcionan cuando un fichero toca disco, en cambio si conseguimos evitar esto, tenemos mayores posibilidades de “huir” de los detectores.
En la siguiente imagen, vemos la implementación de AMSI dentro del entorno Windows y como interactúa con los diferentes apartados.

Las AMSI.DLL se van a cargar en la memoria de PowerShell, y proporcionará unas funciones diferentes. Es interesante conocer que AMSI, no distingue entre un usuario con pocos privilegios y con usuarios Admin, por ejemplo.
Toda la información capturada por esas APIs será eviada a Windows Defender a través de procesos internos llamado Remote Procedure Call (RPC).
Luego WindowsDefender analizará esos datos, y los enviará de vuelta a AMSI.DLL dentro del proceso PowerShell. AMSI, tiene diferentes funciones, que están bien detalladas por parte de Microsoft: https://docs.microsoft.com/en-us/windows/win32/api/_amsi/
Son AmsiInitialize, AmsiOpenSession, AmsiScanString, AmsiScanBuffer, and AmsiCloseSession
Como suele ocurrir habitualmente, una vez creado, por cierto, se implementó por primera vez en Windows 10, versiones 2016 y 2019 en entornos de servidor, la gente investigará saltárselo.
Identificación
AMSI Podemos identificarlo de diferentes maneras, tenemos el registro de Windows:
HKEY_CLASSES_ROOT\CLSID\{fdb00e52-a214-4aa1-8fba-4357bb0072ec}

Amsi lo que analiza o pasa al AV son strings, son cadenas de texto. Como vemos en los siguientes ejemplos


Puede parecer una tontería pero AMSI se fija en estas cosas, pueden ser urls, comentarios o nombre de las funciones.
Una opción, teniendo en cuenta que esto es una introducción a AMSI, y no entrar en temas de hooking with Frida, podemos utilizar amsifail.
Aquí tenemos al creador de la herramienta, donde nos habla de AMSI y su herramienta. Incluso en directo cuenta con la visita de Rasta, un investigador de seguridad. Merece la pena verlo.
https://www.youtube.com/watch?v=KMEmxuy-wt4
AMSI.Fail
AMSI.fail generates obfuscated PowerShell snippets that break or disable AMSI for the current process. The snippets are randomly selected from a small pool of techniques/variations before being obfuscated. Every snippet is obfuscated at runtime/request so that no generated output share the same signatures.
El ejemplo, que vamos a ver a continuación, intentaremos cargar mimikatz
Primero, verificamos el funcionamiento de AMSI

Cargamos el script y como es evidente nos salta.

Nos vamos a la web https://amsi.fail/ y generamos un código.

Esté código generado, lo pegamos en nuestra PowerShell

En el marco amarillo, cargamos mimi directamente en memoria. Listamos las funciones.

Vemos como mimi se cargó correctamente.

Otras formas de bypassear AMSI
Puede ser un poco engorroso el proceso llevado a cabo, asique os traigo otras formas de saltarnos está protección.
PowerShell 2.0, no soporta AMSI

En la imágen anterior, vemos como tenemos compatibilidad con powershell 2.0, ejecutamos con powershell.exe -version 2


Desactivando el realtimemonitoring (necesitamos permisos)
Set-MpPreference -DisableRealtimeMonitoring $True


Espero que haya sido interesante 😊