Iscriviti al webinar gratuito del 12 Maggio per diventare Forensic Analyst! Scopri di più
Corso Ethical Hacker: accedi alla promozione fino al 30 Aprile! Scopri di più
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.
Scarica la guida gratuita e segui il percorso corretto fin dal primo passo