Persistenza via WMI: Windows Management Instrumentation Event Subscription (T1546.003)

Windows Management Instrumentation è il sottosistema di gestione nativo di Windows, progettato per monitorare e amministrare risorse di sistema. La tecnica T1546.003 ne abusa trasformando il meccanismo di sottoscrizione eventi in un trigger di persistenza: un avversario crea un EventFilter (la condizione), un EventConsumer (l'azione malevola) e un FilterToConsumerBinding (il collegamento tra i due). Quando la condizione si verifica — un orario specifico, il login di un utente, l'avvio di un processo — il consumer esegue codice arbitrario.

Questa tecnica copre due tattiche distinte. In TA0003 (Persistence) garantisce sopravvivenza ai riavvii: le sottoscrizioni WMI sono archiviate nel repository binario di WMI e sopravvivono a reboot, aggiornamenti e persino a cambi di credenziali. In TA0004 (Privilege Escalation) offre un'elevazione gratuita: l'esecuzione è delegata al processo WmiPrvSE.exe, che opera nel contesto SYSTEM.

I numeri confermano la popolarità della tecnica: 10 gruppi APT documentati, 13 software che la implementano, 2 campagne di alto profilo e 3 mitigazioni formali. L'assenza di file su disco in molte varianti la rende particolarmente insidiosa per i difensori.


La sottoscrizione WMI è un classico della persistenza fileless e va padroneggiata in laboratorio perché molti EDR la monitorano in modo specifico. L'obiettivo è capire quali varianti generano più rumore e quali scivolano sotto i radar.

Il metodo più diretto è PowerShell nativo. Si creano i tre oggetti in sequenza: filtro, consumer e binding. Il filtro definisce quando scatta la trappola, il consumer definisce cosa esegue, il binding li collega.

$filter = Set-WmiInstance -Namespace "root\subscription" -Class __EventFilter -Arguments @{Name="EvilFilter"; EventNamespace="root\cimv2"; QueryLanguage="WQL"; Query="SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System'"}

$consumer = Set-WmiInstance -Namespace "root\subscription" -Class CommandLineEventConsumer -Arguments @{Name="EvilConsumer"; CommandLineTemplate="C:\Windows\System32\cmd.exe /c calc.exe"}

Set-WmiInstance -Namespace "root\subscription" -Class __FilterToConsumerBinding -Arguments @{Filter=$filter; Consumer=$consumer}

Questo approccio attiva Sysmon EventID 21 (WmiEvent - Consumer Created) e genera log nel canale Microsoft-Windows-WMI-Activity/Operational, quindi è perfetto per validare le detection del Blue Team.

La variante con mofcomp.exe è storicamente rilevante perché diversi gruppi la preferiscono. Si prepara un file .mof che definisce filtro, consumer e binding in sintassi MOF nativa, poi si compila con:

mofcomp.exe C:\temp\persistence.mof

Questa variante è interessante perché il processo che esegue la compilazione è un binario Microsoft legittimo (living-off-the-land), e il file .mof può essere cancellato subito dopo — la sottoscrizione resta nel repository WMI.

Per un approccio C#, lo strumento SharpWMI (open source, repository GhostPack) permette di creare sottoscrizioni WMI da un assembly .NET, utile quando PowerShell è vincolato da Constrained Language Mode. In alternativa, PoshC2 (open source) e SILENTTRINITY (open source) includono moduli dedicati alla persistenza WMI con opzioni di configurazione flessibili su timer, trigger di processo o evento di login.

Per la pulizia post-esercizio, è fondamentale rimuovere tutti e tre gli oggetti:

Get-WmiObject -Namespace "root\subscription" -Class __EventFilter | Where-Object {$_.Name -eq "EvilFilter"} | Remove-WmiObject

Ripetere per CommandLineEventConsumer e __FilterToConsumerBinding. Verificare con Get-WmiObject -Namespace "root\subscription" -Class __EventFilter che il namespace sia pulito prima di chiudere l'engagement.


Vuoi diventare un Ethical Hacker ma non sai da dove iniziare?

Scarica la guida gratuita e segui il percorso corretto fin dal primo passo

We use cookies

Utilizziamo i cookie sul nostro sito Web. Alcuni di essi sono essenziali per il funzionamento del sito, mentre altri ci aiutano a migliorare questo sito e l'esperienza dell'utente (cookie di tracciamento). Puoi decidere tu stesso se consentire o meno i cookie. Ti preghiamo di notare che se li rifiuti, potresti non essere in grado di utilizzare tutte le funzionalità del sito.