Skip to content

Checklist d'investigation d'une persistance WMI

Checklist pas à pas face à une persistance WMI : requêtes en direct, dépôt, événements 5860 et 5861, Sysmon 19-21, traces d'exécution et nettoyage sûr.

Publié le 4 min de lecture

En bref. Collectez d'abord le dépôt, examinez ensuite l'hôte en direct, puis corrélez. Les objets indiquent ce qui s'exécute et quand ; Microsoft-Windows-WMI-Activity/Operational (événement 5861) et Sysmon (19–21) indiquent quand ils ont été enregistrés ; Prefetch, Amcache et la télémétrie des processus indiquent s'ils se sont exécutés. Ne nettoyez qu'une fois les preuves préservées.

1. Préserver le dépôt

Copiez C:\Windows\System32\wbem\Repository depuis un cliché instantané (shadow copy) avant de toucher à WMI : comment collecter le dépôt WMI. Supprimer un abonnement, installer un logiciel ou reconstruire le dépôt peut écraser des enregistrements supprimés que vous n'avez pas encore lus.

2. Examiner l'hôte en direct

Listez ce que WMI exécute actuellement, dans les espaces de noms habituels :

'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 dispose d'un onglet WMI offrant la même vue en direct. Les deux ne montrent que les objets actifs et s'appuient sur un service WMI qu'un attaquant peut contrôler.

3. Analyser les fichiers collectés

Déposez le dossier Repository dans WMI Parser. Vérifiez, dans l'ordre :

  1. Les liaisons qui ne sont pas des objets Windows par défaut. Les abonnements SCM Event Log et BVT sont attendus, à condition que leur contenu corresponde (détails).
  2. L'action du consommateur : ligne de commande, texte ou fichier de script, et chemins. Le PowerShell encodé, les binaires sous C:\ProgramData, C:\Users\… ou %TEMP%, et les consommateurs de script méritent une lecture attentive.
  3. Le déclencheur du filtre : durée de fonctionnement (se déclenche après chaque démarrage), ouverture de session, minuteries, démarrage de processus ou événements de périphériques.
  4. Le CreatorSID de chaque objet : quel compte l'a enregistré.
  5. Les objets récupérés : liaisons supprimées, versions antérieures, consommateurs orphelins. Ils montrent ce qui a existé et ce qui a été nettoyé (fonctionnement de la récupération).
  6. Les espaces de noms autres que root\subscription.

4. Corréler avec les journaux d'événements

JournalÉvénementCe qu'il apporte
Microsoft-Windows-WMI-Activity/Operational5861Un consommateur permanent lié à un filtre : espace de noms, filtre, consommateur et leur contenu
Microsoft-Windows-WMI-Activity/Operational5860Un abonnement temporaire (n'existe que pendant l'exécution de son processus)
Microsoft-Windows-WMI-Activity/Operational5857Un fournisseur WMI chargé, avec le chemin de sa DLL
Sysmon19, 20, 21Filtre, consommateur et liaison créés ou supprimés, avec l'utilisateur
Security4688Création de processus (si activée) : processus enfants de WmiPrvSE.exe et scrcons.exe

Le dépôt lui-même ne contient aucun horodatage de création documenté pour ses objets ; ce sont ces événements qui permettent de les dater. Les deux FILETIME que WMI Parser affiche pour chaque en-tête d'instance sont des pistes à confronter à ces événements.

5. Rechercher des traces d'exécution

Un abonnement prouve une configuration, pas une exécution. Pour la charge utile du consommateur, vérifiez Prefetch, Amcache, ShimCache, SRUM et la télémétrie EDR ; pour les scripts, l'arborescence des processus sous scrcons.exe ; pour les lignes de commande, les processus dont le parent est WmiPrvSE.exe. Alignez leurs horodatages sur les redémarrages (pour les déclencheurs liés à la durée de fonctionnement) ou sur les ouvertures de session (pour les déclencheurs d'ouverture de session).

6. Vérifier les éléments voisins

  • Fichiers MOF et AutoRecover : un .mof compilé avec #pragma autorecover est rejoué lors de la reconstruction du dépôt. Examinez C:\Windows\System32\wbem\AutoRecover et la valeur Autorecover MOFs sous HKLM\SOFTWARE\Microsoft\Wbem\CIMOM.
  • Classes personnalisées : données ou code dissimulés dans les propriétés d'une classe définie par l'attaquant, en dehors de la triade de l'abonnement.
  • Autres hôtes : les mêmes noms de filtre et de consommateur sur plusieurs machines indiquent un déploiement à distance.

7. Nettoyer en toute sécurité

Une fois les preuves préservées et le périmètre connu, supprimez les trois objets dans l'espace de noms où ils résident, en commençant par la liaison :

$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

Remplacez les noms par les vôtres (ceux-ci proviennent de l'exemple fictif). Supprimez ensuite la charge utile vers laquelle pointait le consommateur, puis relancez la requête en direct pour confirmer.

FAQ

Quel ID d'événement signale une nouvelle persistance WMI ?

L'événement 5861 du journal Microsoft-Windows-WMI-Activity/Operational est enregistré lorsqu'un consommateur d'événements permanent est lié à un filtre. Sysmon, s'il est configuré, ajoute les événements 19, 20 et 21 pour les filtres, les consommateurs et les liaisons.

Comment supprimer une persistance WMI ?

Après la collecte des preuves, supprimez la liaison, puis le consommateur et le filtre avec Get-CimInstance … | Remove-CimInstance dans l'espace de noms où ils résident, puis supprimez la charge utile vers laquelle pointait le consommateur.

La requête en direct suffit-elle ?

Non. Elle ne montre que les objets actifs de l'espace de noms interrogé, jamais les objets supprimés, et elle s'appuie sur le service WMI d'un hôte potentiellement compromis. Analysez également le dépôt collecté.

Articles liés

Articles liés

Les deux abonnements WMI livrés avec Windows, SCM Event Log et BVTFilter/BVTConsumer : contenu attendu, innocuité et détournement de leurs noms.
Pourquoi filtres, consommateurs et liaisons WMI supprimés subsistent dans OBJECTS.DATA : parcours d'index, carving, python-cim et PyWMIPersistenceFinder.
Persistance WMI : fonctionnement de __EventFilter, des consommateurs et de __FilterToConsumerBinding, où ils sont stockés et comment les détecter.