Proof of Concept que replica la técnica de evasión avanzada utilizada por APT35 (Charming Kitten) en su backdoor "PowerLess" (2021-2022).

Este proyecto demuestra la ejecución de comandos PowerShell sin iniciar el proceso powershell.exe, utilizando directamente la API de .NET System.Management.Automation.dll mediante código C++/CLI.
Namespace principal:
System.Management.AutomationComponentes clave:
PowerShell.Create()- Inicializa el runspace de PowerShellAddScript()- Agrega comandos al pipelineInvoke()- Ejecuta el pipelineCommands.Clear()- Limpia el pipeline después de cada ejecuciónStreams.Error- Manejo de errores de PowerShellStreams.Information/Warning/Verbose/Debug- Streams de salida
Assembly: System.Management.Automation.dll
Location: C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\
Version: Compatible con .NET Framework 4.x+
El código carga dinámicamente esta DLL desde el GAC (Global Assembly Cache) sin requerir referencias estáticas en tiempo de compilación.
| Binario Host | Beneficios Técnicos y Evasión (Ventaja APT) |
|---|---|
| explorer.exe | Es el objetivo principal. Al ser el proceso de la interfaz de usuario, siempre tiene actividad de red y carga muchas DLLs, lo que ayuda a ocultar la carga de System.Management.Automation.dll. |
| svchost.exe | Los APTs lo utilizan para camuflar scripts que actúan como servicios persistentes o que realizan tareas de reconocimiento de red bajo la apariencia de servicios del sistema. |
| dllhost.exe / msiexec.exe | Procesos que normalmente tienen una vida corta y realizan tareas de sistema; ideales para inyecciones rápidas que ejecutan un comando de PowerShell y desaparecen sin dejar rastro persistente. |
| RuntimeBroker.exe | Utilizado frecuentemente para evadir sandboxing, ya que es un proceso con permisos específicos de aplicaciones que los EDR suelen monitorear con menos rigor que a los navegadores. |
| WmiPrvSE.exe | Al inyectar aquí, el atacante puede hacer que la actividad de PowerShell parezca una tarea legítima de administración remota o gestión del sistema vía WMI. |
Atribución: Islamic Revolutionary Guard Corps (IRGC), Irán
Técnica documentada:
- Loader:
PowerLessCLR.exe(aplicación .NET C++) - Decryptor: AES con clave hardcodeada
- Payload: PowerShell code ejecutado en contexto .NET
- Particularidad: NO spawns proceso powershell.exe
Descubierto por: Cybereason Nocturnus Team (Febrero 2022)
MITRE ATT&CK Mapping:
T1059.001 - Command and Scripting Interpreter: PowerShell
T1620 - Reflective Code Loading
T1027 - Obfuscated Files or Information
1. Aplicación C++/CLI inicia
└─> Carga System.Management.Automation.dll desde GAC
└─> Crea instancia de PowerShell via Reflection
└─> Configura STA thread (requerido para clipboard/UI)
└─> Loop interactivo
├─> AddScript(comando_usuario)
├─> Invoke()
├─> Procesa streams (output, error, warning, etc.)
└─> Commands.Clear() (CRÍTICO para evitar estado corrupto)
# Ejecutar el binario compilado
API-powershell-aptComand.exe
# Ejemplo de sesión
[NTPowerShell]
[OK] In-Memory
PS C:\Users\user> Get-Process | Where-Object {$_.CPU -gt 100}
PS C:\Users\user> whoami /priv
PS C:\Users\user> Get-ChildItem -Recurse -Filter *.txt
PS C:\Users\user> exittitle: PowerShell Core DLL Loaded By Non PowerShell Process
id: 092bc4b9-3d1d-43b4-a6b4-8c8acd83522f
status: test
description: Detecta carga de System.Management.Automation.dll por procesos que no son powershell.exe
logsource:
category: image_load
product: windows
detection:
selection:
ImageLoaded|endswith: '\System.Management.Automation.dll'
filter:
Image|endswith:
- '\powershell.exe'
- '\powershell_ise.exe'
condition: selection and not filter
falsepositives:
- Aplicaciones legítimas que usan PowerShell API
- Scripts de automatización empresarial
level: medium
tags:
- attack.t1059.001
- attack.executionMonitorear eventos de carga de DLL que incluyan:
7
System.Management.Automation.dll
C:\Path\To\Suspicious.exePowerShell Logging:
# Habilitar Script Block Logging
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging" `
-Name "EnableScriptBlockLogging" -Value 1
# Habilitar Module Logging
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ModuleLogging" `
-Name "EnableModuleLogging" -Value 1
# Habilitar Transcription
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\Transcription" `
-Name "EnableTranscripting" -Value 1Application Whitelisting:
- Implementar políticas estrictas de ejecución de binarios
- Monitorear carga de DLLs sensibles (no solo ejecución de procesos)
- Utilizar EDR con capacidades de behavioral detection
Constrained Language Mode:
$ExecutionContext.SessionState.LanguageMode = "ConstrainedLanguage"Nota: Este modo puede ser bypasseado en ciertos escenarios mediante técnicas de reflective loading.
SOLO PARA FINES EDUCATIVOS Y ETHICAL HACKING
Este proyecto es un Proof of Concept desarrollado exclusivamente para:
- Investigación en ciberseguridad
- Ejercicios de Red Team / Purple Team autorizados
- Entrenamiento de equipos defensivos
- Análisis de técnicas APT documentadas
Prohibiciones:
- Uso en sistemas sin autorización explícita
- Distribución con fines maliciosos
- Implementación en entornos de producción sin consentimiento
El autor no se hace responsable del uso indebido de esta herramienta. El mal uso puede constituir delito bajo las leyes de ciberseguridad aplicables en su jurisdicción.
-
Cybereason (2022): "PowerLess Trojan: Iranian APT Phosphorus Adds New PowerShell Backdoor for Espionage" https://www.cybereason.com/blog/powerless-trojan-iranian-apt-phosphorus-adds-new-powershell-backdoor-for-espionage
-
MITRE ATT&CK: T1059.001 - Command and Scripting Interpreter: PowerShell https://attack.mitre.org/techniques/T1059/001/
-
Microsoft Docs: System.Management.Automation Namespace https://docs.microsoft.com/en-us/dotnet/api/system.management.automation
-
SIGMA Rules Repository https://github.com/SigmaHQ/sigma
MIT License - Ver archivo LICENSE para detalles completos.
Desarrollado con fines educativos | APT Technique Research | Enero 2026