Skip to content

Siemphony is in beta and still being built. How a rule earns its badge.

Siemphony’s repertoire

Keyboard class filter driver registered under the class key

Siemphony@siemphonyhighT1056.001unverified
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 description

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.

Log in to react
Not yet reported on

Nobody has run this in a real environment and said what happened.

Verdicts from engineers who deployed it

0 cast

No 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.