Saltearse al contenido

Evasión de defensas (AMSI / AV / EDR)

Conseguir ejecución es solo la mitad: en un Windows moderno hay tres capas vigilando. AMSI inspecciona scripts (PowerShell, VBA, JScript) justo antes de ejecutarse; el AV (Defender) escanea ficheros y comportamiento con firmas y heurística; el EDR engancha llamadas (user-land hooks, ETW, kernel callbacks) para ver qué hace tu proceso en tiempo real. Evadir es hacer que tu código no sea visto, no sea reconocido, o no sea entendido por cada capa.

Cada capa tiene un punto ciego. AMSI corre en tu propio proceso → si lo neutralizas en memoria, deja de ver nada. El AV se basa en firmas → cambia la firma (ofusca) y en bytes no reconoce. El EDR engancha APIs en user-land → si evitas esas APIs o deshaces el hook, pierde visibilidad. La evasión no es magia: es conocer dónde mira cada defensa y pasar por el hueco.

AMSI es la prioridad al usar PowerShell/.NET en memoria. Vectores:

  • Patch en memoria de AmsiScanBuffer: parchear la función en amsi.dll dentro de tu proceso para que siempre devuelva “limpio” (AMSI_RESULT_CLEAN). Es el método dominante.
  • Romper la inicialización (amsiInitFailed) para que el escaneo no arranque.
  • Ofuscar/fragmentar el script para que la firma no case (renombrar variables, concatenar cadenas, codificar).
  • Usar un runspace .NET que no cargue AMSI, o versiones/hosts sin AMSI.
# patrón conceptual (no una firma lista para pegar):
# 1) localizar amsi.dll!AmsiScanBuffer en el proceso
# 2) cambiar protección de memoria (VirtualProtect) a RWX
# 3) escribir un stub que retorne E_INVALIDARG / CLEAN
# 4) restaurar protección
  • Ofuscación de payloads (packers, cifrado, renombrado) para romper firmas estáticas.
  • Shellcode encriptado descifrado solo en runtime; evita tocar disco (ejecución en memoria).
  • Firmar binarios, usar LOLBins (binarios legítimos del SO) para no introducir ejecutables propios.
  • Unhooking: restaurar los bytes originales de ntdll.dll (recargar una copia limpia desde disco) para quitar los hooks user-land del EDR.
  • Direct syscalls / indirect syscalls (Hell’s Gate, Halo’s Gate, SysWhispers): invocar las syscalls saltándote las APIs enganchadas.
  • ETW patching: parchear EtwEventWrite para cegar la telemetría de .NET/PowerShell.
  • Process injection sigilosa (process hollowing, module stomping, APC) y BYOVD para matar el EDR desde kernel.
  • Living off the land: minimizar binarios propios; usar rundll32, regsvr32, mshta, wmic, msbuild (LOLBins) y cargas fileless.

La PowerShell Execution Policy no es un control de seguridad; se salta trivialmente (-ep bypass, -enc, pipe por stdin, leer y IEX). No cuenta como evasión real, pero conviene saberlo.

  • AMSI.fail, amsi-bypass scripts, Invoke-Obfuscation — AMSI y ofuscación.
  • ScareCrow, Donut, Freeze, NimPackt — generación de loaders/shellcode evasivos.
  • SysWhispers2/3, Hell’s Gate/Halo’s Gate — direct/indirect syscalls.
  • SharpUnhooker, ThreatCheck, DefenderCheck — unhooking y encontrar qué byte dispara la firma.

Ejecutar herramientas ofensivas (mimikatz, Rubeus, BloodHound) sin que AV/EDR las detecte, mantener C2 estable y cegar la telemetría que delataría la intrusión. Es habilitador de todo lo demás en post-explotación.

  • Patrones de AMSI bypass (accesos a amsi.dll, VirtualProtect sobre AmsiScanBuffer) y de ETW patching (EtwEventWrite).
  • Unhooking: lecturas de ntdll.dll desde disco y reescritura de su .text en memoria.
  • Syscalls directas (llamadas que no pasan por los hooks esperados), process injection (CreateRemoteThread, APC, hollowing).
  • Uso de LOLBins con líneas de comando anómalas; cargas fileless.
  • Script Block Logging (4104) captura el script tras desofuscar → clave contra PowerShell ofuscado.
  • ETW (Threat Intelligence provider, kernel callbacks) resiste parte del user-land tampering.
  • Sysmon 7 (image load de amsi.dll/clr.dll), 8 (CreateRemoteThread), 10 (process access), 25 (process tampering).
  • Defender ASR rules, Credential Guard, HVCI y WDAC/AppLocker (allowlist corta LOLBins y loaders).
  • PowerShell Constrained Language Mode + Script Block Logging + transcription.
  • Driver Blocklist de Microsoft contra BYOVD; EDR con protección anti-tamper.
  • Mantén las defensas en kernel (ETW-TI, callbacks) donde el user-land tampering no llega; segmenta y limita qué hosts ejecutan scripts.

Si se detecta evasión, asume que el EDR pudo quedar ciego un tiempo: caza fuera de banda (telemetría de red, logs centralizados), reconstruye el host, rota credenciales y revisa persistencia que el EDR no vio.

  • Las técnicas de AMSI/ETW patching y unhooking son TTPs estándar de red teams y de APT (MITRE T1562.001 Impair Defenses, T1055 Process Injection, T1620 Reflective Loading).
  • BYOVD para matar EDR: campañas de BlackByte, LockBit, Scattered Spider usando drivers vulnerables firmados.
  • CVE-2021-21551 (Dell dbutil) y RTCore64 (MSI Afterburner) entre los drivers más abusados para deshabilitar defensas.
  • Defender ha endurecido AMSI repetidamente; los bypasses viven en un ciclo constante de parche-evasión.
  • ¿AMSI activo? ¿bypass en memoria (AmsiScanBuffer) funciona?
  • ¿El payload ofuscado/cifrado evade las firmas estáticas? (ThreatCheck)
  • ¿EDR engancha user-land? ¿unhooking o syscalls directas lo evaden?
  • ¿ETW patching ciega la telemetría de .NET/PowerShell?
  • ¿Se puede operar fileless / con LOLBins sin introducir binarios?
  • ¿Hay driver vulnerable cargable (BYOVD) para tumbar el EDR?
  • Blue: ¿Script Block Logging captura el script desofuscado?
  • ¿ASR/WDAC/Constrained Language Mode activos?