square-terminalPowerShell

Defensas de PowerShell

System-wide transcription

Graba toda la salida de las sesiones PowerShell (comandos y resultados). Cada comando y su salida quedan registrados. Si ejecutas Mimikatz en PS, va todo al log.

Se configura vía GPO:

  • Computer Configuration > Administrative Templates > Windows Components > Windows PowerShell > Turn on PowerShell Transcription

Guarda logs en:

C:\Users\%USERNAME%\Documents\PowerShell_transcripts\

Script Block Logging

Registra bloques de código completos antes de ejecutarse (no solo comandos escritos a mano, sino scripts cargados). Guarda hasta el contenido de scripts ofuscados → PowerShell decompila la ofuscación simple. Tu cradle y payload quedan registrados aunque nunca toquen disco.

Ejemplo: Si cargas un script con iex (iwr ...), el bloque completo puede aparecer en el log.

Log en Event Viewer → Windows PowerShell/Operational (Event ID 4104).

AMSI (Antimalware Scan Interface)

circle-info

¿Qué es AMSI?

AMSI es una interfaz de seguridad en Windows diseñada para detectar scripts maliciosos en tiempo de ejecución, escaneándolos antes de ser ejecutados.

https://learn.microsoft.com/es-es/windows/win32/amsi/antimalware-scan-interface-portalarrow-up-right

Interfaz entre PowerShell y el AV/EDR.

Antes de ejecutar un script, PowerShell manda el contenido a AMSI.dll, por lo que, el AV lo analiza en tiempo real.

  • Ejemplo: Si ejecutas Invoke-Mimikatz.ps1, AMSI lo detecta por firmas.

Logs: Windows Defender lo reporta en Operational log o en el SIEM.

AMSI bloquea muchos payloads conocidos. Es necesario evadirlo: Windows

Constrained Language Mode (CLM)

Modo restringido de PowerShell, limita el lenguaje a “seguro”.

Integrado con AppLocker / Windows Defender Application Control (WDAC).

Restricciones típicas:

  • No puedes invocar APIs .NET avanzadas.

  • Bloquea Add-Type, COM objects, acceso directo a memoria.

  • Scripts firmados por Microsoft siguen funcionando.

Cómo se activa: Automáticamente en sistemas con Device Guard, o vía políticas.

Técnicas clásicas como New-Object Net.WebClient, Add-Type, DllImport se encuentran bloqueadas.

Resumen

En cuanto a qué hace cada defensa:

  • Transcription (guarda todo lo que haces en texto)

  • Script Block Logging (logea el código cargado → EventID 4104)

  • AMSI (envía a AV/EDR antes de ejecutar)

  • CLM (limita qué puedes usar en PowerShell)

En PSv2 y anterior → no existe AMSI, CLM ni Script Block Logging → entorno mucho más “ciego”.

En PSv5+ → Blue Team tiene visibilidad total si no usas evasión.

Técnicas de bypass:

  • Invisi-Shell (hookea Automation.dll para saltar logging).

  • AMSI bypasses (modificar AmsiUtils en memoria).

  • Obfuscación (Invoke-Obfuscation).

  • Migrar a otro proceso (cargar DLLs directamente con C#).


Política de ejecución (Execution Policy)

Habilitar ejecución de scripts

El siguiente comando permite modificar la política de PowerShell de forma que se permita la ejecución de todos los scripts sin firmar y sin aplicar restricciones ni advertencias (-exec bypass). Además, no se carga el perfil del usuario, lo que permite evadir posibles restricciones (-nop).

Otras vías de bypass:

Evasión de seguridad

Invisi-Shell

Invisi-Shell es una herramienta diseñada para bypassear las defensas de PowerShell. Lo que hace es enganchar (hookear) las librerías de .NET que usa PowerShell:

  • System.Management.Automation.dll

  • System.Core.dll

Utiliza la API de CLR Profiler (un DLL especial que el Common Language Runtime carga en tiempo de ejecución) para interceptar llamadas y modificar el comportamiento.

Descarga de la herramienta:

Ejecución:

triangle-exclamation
  • Sin privilegios de administrador:

  • Con privilegios de administrador:

AMSI PowerShell Bypass

https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershellarrow-up-right

AMSI .NET Bypass

https://s3cur3th1ssh1t.github.io/Powershell-and-the-.NET-AMSI-Interface/arrow-up-right

En la siguiente tabla se enumeran algunos scripts que permiten la evasión. También se indica la última fecha en la que he podido ejecutar el script sin restricción:

Windows 10

Por ejemplo:

https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell?tab=readme-ov-file#patching-amsi-amsiscanbuffer-by-rasta-mousearrow-up-right

Loaders

Artefacto de carga (loader) cuya función principal es facilitar la ejecución de shellcode de forma sigilosa. Implementa técnicas de evasión para minimizar la detección y suele ser el único componente persistente en disco durante la operación.

SilentLoader

https://github.com/xtormin/SilentLoaderarrow-up-right

Bypass de firmas conocidas en el código

Algunas formas de evadir las protecciones son:

  • Carga en memoria (fileless).

  • Identificación de las partes del script que son detectadas.

  • Ofuscación completa del script.

Carga en memoria

Identificación de partes detectadas

  • AMSITrigger: Te dice qué línea/parte del script dispara AMSI.

  • DefenderCheck: Escanea un script y te indica qué strings son detectados por Windows Defender.

Esto te devuelve la posición en bytes donde hay una detección. Para convertir el byte offset en número de línea: ByteToLineNumber.ps1.

Ofuscación completa

  • Invoke-Obfuscationarrow-up-right:

    • Renombrar funciones y variables.

    • Codificar partes sensibles (ejemplo: "Invoke-Mimikatz" se convierte en algo ilegible).

    • Generar payloads en múltiples formatos (base64, rot13, string split, etc.).

Descarga de ficheros

One-liners de descarga

Consideraciones sobre versiones de PowerShell

PowerShell v1 (2006, Windows XP/2003)

circle-exclamation

Ejemplo:

PowerShell v2 (2009, Windows 7 / 2008R2)

circle-exclamation

Ejemplo:

PowerShell v3 (2012, Windows 8 / 2012 Server)

circle-check
circle-exclamation

Ejemplos:

PowerShell v4 (2013, Windows 8.1 / 2012R2)

circle-exclamation

PowerShell v5 / v5.1 (2016+, Windows 10 / Server 2016/2019)

circle-exclamation

Ejemplos:

PowerShell Core (6, 7 → multiplataforma, 2018+)

circle-exclamation

Ejemplos:

Última actualización