Activating fileless WMI persistence.
What gives it awayA binding created shortly after a filter and consumer by the same session, with no management software involved.
ATT&CK T1546.003Nothing matches that yet. Tell us what you were looking for and it goes on the list.
Sysmon · Event 21
The trigger and the payload were linked together. This is the moment WMI persistence actually becomes active — a filter and a consumer sitting unbound do nothing at all.
Also written as Sysmon 21Sysmon Event ID 21wmi binding persistence
Treat this as the commit point. Seeing 19 and 20 without 21 means someone built the parts but nothing runs; seeing 21 means it is armed. It is also the event most worth alerting on if you want a single high-confidence WMI rule, because a binding is meaningless outside a working subscription.
Sanitised. Addresses come from the RFC 5737 documentation ranges.
WmiEventConsumerToFilter activity detected:
RuleName: T1546.003
EventType: WmiBindingEvent
UtcTime: 2026-08-28 09:18:05.902
Operation: Created
User: CORP\jbrooks
Consumer: "__EventConsumer.Name=\"WindowsUpdateConsumer\""
Filter: "__EventFilter.Name=\"WindowsUpdateFilter\"" Everything else in the log line is context.
Most of the time it is one of these.
What gives it awayA binding created shortly after a filter and consumer by the same session, with no management software involved.
ATT&CK T1546.003What gives it awayA binding created without new filter and consumer events, meaning the other parts already existed on the machine.
ATT&CK T1546.003Event | where Source == 'Microsoft-Windows-Sysmon' and EventID == 21 | project TimeGenerated, Computer, RenderedDescription | order by TimeGenerated desc Get-WmiObject -Namespace root\subscription -Class __FilterToConsumerBinding | Select-Object Filter, Consumer Because a filter and a consumer sitting unbound do nothing. The binding is what connects the trigger to the payload and makes the persistence live. If you want one high-confidence WMI alert rather than three, this is the event to use.
The filter and consumer already existed on the machine, so only the binding is new. That usually means the persistence was built earlier, or partially cleaned up and re-armed. Enumerate root\subscription directly to see what is actually there.
Last reviewed 28 August 2026