Iscriviti al webinar gratuito del 20 Ottobre per diventare Ethical Hacker! Scopri di più
Persistenza WMI: Windows Management Instrumentation Event Subscription (T1546.003)
La sottoscrizione a eventi Windows Management Instrumentation rappresenta uno dei meccanismi di persistenza più eleganti e insidiosi disponibili sui sistemi Microsoft. Sfruttando l'architettura nativa di WMI, un attaccante registra tre oggetti correlati — un EventFilter che definisce la condizione scatenante, un EventConsumer che specifica il payload da eseguire, e un FilterToConsumerBinding che lega i due — ottenendo esecuzione automatica di codice al verificarsi di eventi come login utente, avvio di un processo specifico o superamento di soglie temporali.
La tecnica copre due tattiche MITRE ATT&CK: TA0003 (Persistence), perché la sottoscrizione sopravvive a riavvii e cambi credenziali fino a rimozione esplicita del binding, e TA0004 (Privilege Escalation), perché l'esecuzione è mediata dal processo WmiPrvSE.exe che gira come SYSTEM, elevando implicitamente qualsiasi comando lanciato tramite un consumer di tipo CommandLineEventConsumer o ActiveScriptEventConsumer.
Gli oggetti WMI risiedono nel repository CIM (percorso %SystemRoot%\System32\wbem\Repository), non lasciano tracce su disco tipiche di altri meccanismi di persistenza come chiavi Run o servizi, e vengono spesso ignorati dalle scansioni antivirus tradizionali. La compilazione di file MOF tramite mofcomp.exe permette inoltre di popolare il repository con sottoscrizioni pre-costruite in modo scriptabile. Almeno 10 gruppi APT documentati — da Turla a APT29 — e 13 famiglie malware hanno adottato questa tecnica, confermandola come pilastro delle operazioni di lungo termine.
L'approfondimento pratico parte dalla creazione di una sottoscrizione persistente completa. In laboratorio, lo strumento più diretto è PowerShell con i cmdlet nativi. La sequenza classica prevede tre passi: definire il filtro WQL, definire il consumer, e legarli tramite binding.
Un esempio funzionante che triggera un payload ogni volta che parte il processo notepad.exe:
$Filter = Set-WmiInstance -Namespace root\subscription -Class __EventFilter -Arguments @{Name='DemoFilter'; EventNamespace='root\cimv2'; QueryLanguage='WQL'; Query="SELECT * FROM __InstanceCreationEvent WITHIN 5 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name='notepad.exe'"}
$Consumer = Set-WmiInstance -Namespace root\subscription -Class CommandLineEventConsumer -Arguments @{Name='DemoConsumer'; CommandLineTemplate='C:\Windows\System32\calc.exe'}
Set-WmiInstance -Namespace root\subscription -Class __FilterToConsumerBinding -Arguments @{Filter=$Filter; Consumer=$Consumer}
Per un approccio scriptabile via MOF, si prepara un file .mof con le definizioni delle tre classi e lo si compila con mofcomp.exe payload.mof. Il comando popola direttamente il repository CIM e la sottoscrizione entra in vigore immediatamente.
Dal lato framework offensivi, PoshC2 (open source) e SILENTTRINITY (open source) implementano moduli di persistenza WMI pronti all'uso. In SILENTTRINITY il modulo si invoca dalla console operator con modules use persistence/wmi seguito da run, permettendo di specificare filtro temporale e comando arbitrario. Empire (open source, community fork) storicamente ha esposto il modulo powershell/persistence/elevated/wmi con logica analoga.
Per red team più stealth, Impacket (open source) fornisce wmiexec.py per esecuzione remota via WMI ma non per persistence subscription; l'analogo per creare sottoscrizioni remote è scriptabile tramite Invoke-WmiMethod con parametro -ComputerName verso host su cui si posseggano credenziali admin.
Durante l'esercizio è utile combinare la persistenza WMI con living-off-the-land binaries: il gruppo Metador ha usato cdb.exe (Windows Debugger) come consumer per eseguire shellcode, aggirando controlli basati su blocklist di interpreti. Anche rundll32.exe, regsvr32.exe e mshta.exe sono candidati efficaci per il CommandLineTemplate.
Per verificare l'installazione: Get-WmiObject -Namespace root\subscription -Class __EventFilter elenca tutti i filtri; analogamente per __EventConsumer e __FilterToConsumerBinding. La rimozione avviene con Remove-WmiObject sugli stessi oggetti — fondamentale per lasciare l'ambiente pulito a fine engagement.
Vuoi diventare un Ethical Hacker ma non sai da dove iniziare?
Accedi alle lezioni gratuite e segui il percorso corretto fin dal primo passo
2 minuti · 7 domande
Che professionista cyber sei?
Scopri il profilo più vicino al tuo modo di pensare e inizia dal percorso giusto.