Hacker La Red OscuraHacker La Red Oscura

PowerShell es una herramienta extremadamente poderosa para la administración de sistemas Windows… y precisamente por ello también es uno de los vectores favoritos de los atacantes. Conocer las técnicas de evasión más utilizadas permite reforzar la seguridad, mejorar la monitorización y diseñar reglas defensivas más efectivas.

A continuación se analizan varias técnicas empleadas para ocultar actividad maliciosa, junto con su impacto y las medidas recomendadas para mitigarlas.

1. Uso de Alternate Data Streams (ADS) para Evasión

$content = 'Invoke-Mimikatz'; $file = 'C:\temp\normal.txt'; $stream = 'C:\temp\normal.txt:hidden'; Set-
Content -Path $file -Value 'This is a normal file'; Add-Content -Path $stream -Value $content; Get-
Content -Path $stream

Los Alternate Data Streams de NTFS permiten almacenar información oculta dentro de un archivo sin modificar su contenido visible. Un atacante puede esconder comandos, cargas maliciosas o scripts dentro de estos flujos alternativos.

Riesgos principales

  • El contenido no aparece en un listado normal del sistema de archivos.
  • Muchos antivirus no inspeccionan ADS por defecto.
  • Permite persistencia discreta.

Cómo defenderse

  • Utilizar herramientas específicas (Sysinternals streams.exe, PowerShell Get-Item -Stream *).
  • Monitorizar rutas sensibles mediante EDR.
  • Bloquear ejecución desde rutas no aprobadas.
  • Analizar cambios inesperados en archivos aparentemente benignos.

2. Bypass de la Execution Policy

$policy = Get-ExecutionPolicy; Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process; # Run your
script here; Set-ExecutionPolicy -ExecutionPolicy $policy -Scope Process

Algunos atacantes modifican temporalmente la Execution Policy del proceso para permitir la ejecución de scripts que normalmente el sistema bloquearía.

Riesgos

  • Permite ejecutar scripts no firmados o potencialmente maliciosos.
  • No deja rastros persistentes si solo se modifica a nivel de proceso.

Contramedidas

  • Aplicar políticas de restricción mediante GPO que no puedan ser sobrescritas fácilmente.
  • Monitorizar procesos de PowerShell con parámetros sospechosos.
  • Habilitar el Constrained Language Mode.
  • Forzar la firma de scripts corporativos.

3. Ejecución de Scripts en Memoria (In-Memory Execution)

$code = [System.IO.File]::ReadAllText('C:\temp\script.ps1'); Invoke-Expression $code

Los atacantes pueden cargar y ejecutar código directamente en memoria sin escribirlo al disco, evadiendo soluciones basadas en escaneo de archivos.

Riesgos

  • Evita firmas tradicionales basadas en archivos.
  • Se combina habitualmente con payloads cifrados o comprimidos.

Medidas defensivas

  • Activar y revisar PowerShell Script Block Logging.
  • Implementar AMSI (Antimalware Scan Interface) y asegurarse de que no esté paralizado o manipulado.
  • Utilizar EDR con capacidades de monitoreo en memoria.

4. Invocación Dinámica mediante Reflection

$assembly = [Reflection.Assembly]::LoadWithPartialName('System.Management'); $type =
$assembly.GetType('System.Management.ManagementObjectSearcher'); $constructor =
$type.GetConstructor(@([string])); $instance = $constructor.Invoke(@('SELECT * FROM Win32_Process'));
$method = $type.GetMethod('Get'); $result = $method.Invoke($instance, @())

La reflexión permite manipular clases del .NET Framework sin cargar módulos visibles o comunes, dificultando la trazabilidad.

Riesgos

  • Permite ejecutar funciones del sistema sin depender de cmdlets auditables.
  • Puede cargar ensamblados directamente desde memoria.

Defensa

  • Revisar logs de event tracing for Windows (ETW) centrados en .NET.
  • Monitorizar uso atípico de métodos de reflexión.
  • Bloquear PowerShell clásico en favor de PowerShell 7 cuando sea posible, debido a mejoras de seguridad.

5. Ejecución de Comandos Codificados (Base64)

$encodedCmd = [Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes('Get-Process'));
powershell.exe -EncodedCommand $encodedCmd

El uso de comandos codificados oculta la intención real del comando, dificultando la detección en registros básicos.

Riesgos

  • Oculta cadena real del comando.
  • Se usa habitualmente con -EncodedCommand.

Cómo protegerse

  • Configurar el logging avanzado de PowerShell.
  • Crear reglas de detección que alerten ante comandos codificados.
  • Implementar inspección de parámetros en soluciones SIEM/EDR.

6. Runspaces para Evasión

$runspace = [runspacefactory]::CreateRunspace(); $runspace.Open(); $pipeline =
$runspace.CreatePipeline(); $pipeline.Commands.AddScript('Get-Process'); $results = $pipeline.Invoke();
$runspace.Close(); $results

Los runspaces permiten ejecutar código en entornos paralelos que no heredan las mismas restricciones del PowerShell principal.

Riesgos

  • Permite cargarse fuera del entorno monitorizado.
  • Reduce visibilidad en herramientas de análisis en tiempo real.

Contramedidas

  • Supervisión continua del comportamiento del proceso powershell.exe y pwsh.
  • Uso de EDR capaz de detectar runspaces y pipelines internos.
  • Deshabilitar versiones antiguas de PowerShell.

Conclusión

Las técnicas descritas de ocultación en ADS, manipulación temporal de políticas, ejecución en memoria, reflexión dinámica, comandos codificados y uso de runspaces forman parte del repertorio estándar de TTPs avanzadas utilizadas por actores maliciosos. Conocerlas es esencial para adoptar medidas de detección y endurecimiento adecuadas.

Fortalecer el entorno implica:

  • registrar todo lo posible,
  • utilizar soluciones EDR modernas,
  • aplicar políticas estrictas,
  • monitorizar el comportamiento más que las firmas.