Skip to content

Persistencia WMI: checklist de respuesta a incidentes

Checklist paso a paso para la persistencia WMI: consultas en vivo, el repositorio, eventos 5860 y 5861, Sysmon 19-21, evidencias de ejecución y limpieza segura.

Publicado el 4 min de lectura

En resumen. Primero recopile el repositorio, después examine el host en vivo y luego correlacione. Los objetos le dicen qué se ejecuta y cuándo; Microsoft-Windows-WMI-Activity/Operational (ID de evento 5861) y Sysmon (19–21) le dicen cuándo se registró; Prefetch, Amcache y la telemetría de procesos le dicen si se ejecutó. Limpie solo después de preservar las evidencias.

1. Preservar el repositorio

Copie C:\Windows\System32\wbem\Repository desde una instantánea de volumen antes de tocar WMI: cómo recopilar el repositorio WMI. Eliminar una suscripción, instalar software o reconstruir el repositorio puede sobrescribir registros eliminados que aún no ha leído.

2. Examinar el host en vivo

Enumere lo que WMI ejecuta actualmente, en los espacios de nombres habituales:

'root/subscription','root/cimv2','root/default' | ForEach-Object {
  $ns = $_
  '__EventFilter','__EventConsumer','__FilterToConsumerBinding' | ForEach-Object {
    Get-CimInstance -Namespace $ns -ClassName $_ -ErrorAction SilentlyContinue
  }
} | Format-List *

Sysinternals Autoruns tiene una pestaña WMI con la misma vista en vivo. Ambos muestran solo los objetos activos y dependen de un servicio WMI que un atacante puede controlar.

3. Analizar los archivos recopilados

Suelte la carpeta Repository en WMI Parser. Compruebe, por orden:

  1. Los enlaces que no son predeterminados de Windows. Las suscripciones SCM Event Log y BVT son esperables, cuando su contenido coincide (detalles).
  2. La acción del consumidor: línea de comandos, texto o archivo del script, y rutas. El PowerShell codificado, los binarios en C:\ProgramData, C:\Users\… o %TEMP% y los consumidores de script merecen una lectura atenta.
  3. El disparador del filtro: tiempo de actividad (se dispara tras cada arranque), inicio de sesión, temporizadores, inicio de procesos o eventos de dispositivos.
  4. CreatorSID en cada objeto: qué cuenta lo registró.
  5. Objetos recuperados: enlaces eliminados, versiones anteriores, consumidores sin enlazar. Muestran lo que existió y lo que se limpió (cómo funciona la recuperación).
  6. Espacios de nombres distintos de root\subscription.

4. Correlacionar con los registros de eventos

RegistroEventoQué aporta
Microsoft-Windows-WMI-Activity/Operational5861Un consumidor permanente enlazado a un filtro: espacio de nombres, filtro, consumidor y su contenido
Microsoft-Windows-WMI-Activity/Operational5860Una suscripción temporal (solo existe mientras su proceso se ejecuta)
Microsoft-Windows-WMI-Activity/Operational5857Un proveedor WMI cargado, con la ruta de su DLL
Sysmon19, 20, 21Filtro, consumidor y enlace creados o eliminados, con el usuario
Security4688Creación de procesos (si está habilitada): hijos de WmiPrvSE.exe y scrcons.exe

El repositorio en sí no tiene una hora de creación documentada para sus objetos; estos eventos son la forma de fecharlos. Los dos FILETIME que WMI Parser muestra para cada cabecera de instancia son pistas que contrastar con ellos.

5. Buscar evidencias de ejecución

Una suscripción demuestra configuración, no ejecución. Para la carga útil del consumidor, revise Prefetch, Amcache, ShimCache, SRUM y la telemetría del EDR; para los scripts, el árbol de procesos bajo scrcons.exe; para las líneas de comandos, los procesos cuyo padre es WmiPrvSE.exe. Alinee sus horas con los reinicios (para disparadores de tiempo de actividad) o con los inicios de sesión (para disparadores de inicio de sesión).

6. Revisar el entorno

  • Archivos MOF y AutoRecover: un .mof compilado con #pragma autorecover se vuelve a aplicar cuando se reconstruye el repositorio. Revise C:\Windows\System32\wbem\AutoRecover y el valor Autorecover MOFs en HKLM\SOFTWARE\Microsoft\Wbem\CIMOM.
  • Clases personalizadas: datos o código escondidos en las propiedades de una clase definida por el atacante, fuera de la tríada de la suscripción.
  • Otros hosts: los mismos nombres de filtro y consumidor en varias máquinas apuntan a un despliegue remoto.

7. Limpiar de forma segura

Cuando las evidencias estén preservadas y se conozca el alcance, elimine los tres objetos en el espacio de nombres donde residen, empezando por el enlace:

$ns = 'root/subscription'
Get-CimInstance -Namespace $ns -ClassName __FilterToConsumerBinding | Where-Object { $_.Filter.Name -eq 'IntelPerfMonitor' } | Remove-CimInstance
Get-CimInstance -Namespace $ns -ClassName CommandLineEventConsumer -Filter "Name='IntelPerfMonitor'" | Remove-CimInstance
Get-CimInstance -Namespace $ns -ClassName __EventFilter -Filter "Name='IntelPerfMonitor'" | Remove-CimInstance

Sustituya los nombres por los suyos (estos proceden del ejemplo ficticio). Después borre la carga útil a la que apuntaba el consumidor y vuelva a ejecutar la consulta en vivo para confirmarlo.

FAQ

¿Qué ID de evento muestra una nueva persistencia WMI?

El ID de evento 5861 en Microsoft-Windows-WMI-Activity/Operational se registra cuando un consumidor de eventos permanente se enlaza a un filtro. Sysmon, si está configurado, añade los eventos 19, 20 y 21 para filtros, consumidores y enlaces.

¿Cómo elimino una persistencia WMI?

Después de recopilar las evidencias, elimine el enlace y luego el consumidor y el filtro con Get-CimInstance … | Remove-CimInstance en el espacio de nombres donde residen, y borre la carga útil a la que apuntaba el consumidor.

¿Basta con la consulta en vivo?

No. Solo muestra los objetos activos del espacio de nombres consultado, nunca los eliminados, y depende del servicio WMI de un host posiblemente comprometido. Analice también el repositorio recopilado.

Artículos relacionados

Artículos relacionados

Las dos suscripciones WMI que incluye Windows, SCM Event Log y BVTFilter/BVTConsumer: qué contienen, por qué son inofensivas y cómo se abusa de sus nombres.
Por qué los filtros, consumidores y enlaces WMI eliminados sobreviven en OBJECTS.DATA, índice frente a carving, y python-cim frente a PyWMIPersistenceFinder.
Cómo funciona la persistencia WMI: __EventFilter, consumidores de eventos y __FilterToConsumerBinding, dónde se almacenan y cómo encontrarlos.