Keyboard class filter driver registered under the class key
A kernel-mode keylogger reads keystrokes by inserting itself into the keyboard device stack, which means writing its service name into the UpperFilters or LowerFilters value of the keyboard class key {4D36E96B-E325-11CE-BFC1-08002BE10318}. This rule is the registry-and-driver half of MITRE's analytic; the API half it opens with (SetWindowsHookEx, GetKeyState, polling loops) is not observable in any log source the strategy lists, because none of them record API calls and a global hook installation produces no process-access event either. The match is on the class key path alone, so it fires on any write to the filter list and cannot tell which driver was added — Sysmon renders a REG_MULTI_SZ value as "Binary Data" in Details, so the new entry is not in the event. Sysmon registry events are also not collected unless the running configuration includes this path; the widely used community configurations filter most of HKLM out. UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0089, not hand-written and not tested by its author. Any lab result is on this rule's own page.Full descriptionShow less
The detection
The 4 SIEM queries below are previews produced by Siemphony’s own translator, not pySigma, and none has been executed against a real backend — review before you deploy.
detection.yml
Sentinel · KQL
Run this as a search.
DeviceRegistryEvents| where (RegistryKey contains "\\Control\\Class\\{4D36E96B-E325-11CE-BFC1-08002BE10318}\\UpperFilters" or RegistryKey contains "\\Control\\Class\\{4D36E96B-E325-11CE-BFC1-08002BE10318}\\LowerFilters")
Splunk · SPL
Run this as a search.
index=* (TargetObject="*\\Control\\Class\\{4D36E96B-E325-11CE-BFC1-08002BE10318}\\UpperFilters*" OR TargetObject="*\\Control\\Class\\{4D36E96B-E325-11CE-BFC1-08002BE10318}\\LowerFilters*")Elastic · ES|QL
Run this as a search.
FROM logs-*| WHERE (TO_LOWER(registry.path) LIKE "*\\\\control\\\\class\\\\{4d36e96b-e325-11ce-bfc1-08002be10318}\\\\upperfilters*" OR TO_LOWER(registry.path) LIKE "*\\\\control\\\\class\\\\{4d36e96b-e325-11ce-bfc1-08002be10318}\\\\lowerfilters*")
Wazuh · XML rule
Deploy to your manager — this is a rule, not a search.
<group name="sigma,windows,registry_set,"> <!-- Rule ids must be unique on your manager; 100000+ is the user range. --> <rule id="100000" level="12"> <!-- Set <if_sid> to the decoder/base rule for windows so this only evaluates relevant events. --> <field name="TargetObject" type="pcre2">(?i)(\\Control\\Class\\\{4D36E96B-E325-11CE-BFC1-08002BE10318\}\\UpperFilters|\\Control\\Class\\\{4D36E96B-E325-11CE-BFC1-08002BE10318\}\\LowerFilters)</field> <description>Keyboard class filter driver registered under the class key</description> <mitre> <id>T1056.001</id> </mitre> </rule></group>
Verdicts · reactions · comments
Community
Verdicts from engineers who actually deployed it, and the conversation around it.
Nobody has run this in a real environment and said what happened.
Verdicts from engineers who deployed it
0 castNo verdicts reported yet. The first one is worth more than the tenth — say what you ran it against.
Log in to report a verdict.
Log in to join the discussion.
No comments yet. Someone who deploys this will have something to say about it.