Skip to content

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

Siemphony’s repertoire

Registry write to a known UAC bypass hijack key

Matches registry writes to the per-user keys an auto-elevating binary reads when it is hijacked: the shell-open command classes used by the fodhelper, eventvwr, sdclt and computerdefaults family (ms-settings, mscfile, exefile runas, Folder and the AppX class the store handler uses), plus the Environment windir value that the SilentCleanup scheduled task expands. AN0975's other half — "unusual parent-child process relationships" — has no concrete value list at parent-technique level and would be arbitrary, so the rule is built on the registry evidence, which is bounded and specific. Two things a reader has to be told. First, every key here is T1548.002 Bypass User Account Control; the rule is filed under the parent because that is the brief it was authored from, but nothing it matches touches .001 setuid, .003 sudo, .004 elevated prompts, .005 cloud access or .006 TCC, and the tags name .002 for that reason. Second, the class list is illustrative rather than closed — new auto-elevating binaries and their handler classes are found regularly, and a COM elevation-moniker bypass such as ICMLuaUtil writes no registry value at all. The three UAC policy values (EnableLUA, ConsentPromptBehaviorAdmin, LocalAccountTokenFilterPolicy) are deliberately not in the selection. They are applied as Security Settings, which the policy client re-applies on its own refresh interval — 16 hours by default — on every managed host whether or not anything changed, so a UAC baseline GPO produces them per host per cycle forever. ORing that volume into these near-zero-noise keys would make the whole rule unshippable at this level; they belong in a separate low-severity hunt. The correlation MITRE describes, a write followed by an elevated spawn inside a time window, is not expressible in Sigma either way. UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0345, 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

title: Registry write to a known UAC bypass hijack keyid: 35087c6f-73b0-4d35-ba7d-45eb9563e746status: experimentaldescription: |  Matches registry writes to the per-user keys an auto-elevating binary reads  when it is hijacked: the shell-open command classes used by the fodhelper,  eventvwr, sdclt and computerdefaults family (ms-settings, mscfile, exefile  runas, Folder and the AppX class the store handler uses), plus the Environment  windir value that the SilentCleanup scheduled task expands. AN0975's other  half — "unusual parent-child process relationships" — has no concrete value  list at parent-technique level and would be arbitrary, so the rule is built on  the registry evidence, which is bounded and specific.  Two things a reader has to be told. First, every key here is T1548.002 Bypass  User Account Control; the rule is filed under the parent because that is the  brief it was authored from, but nothing it matches touches .001 setuid, .003  sudo, .004 elevated prompts, .005 cloud access or .006 TCC, and the tags name  .002 for that reason. Second, the class list is illustrative rather than  closed — new auto-elevating binaries and their handler classes are found  regularly, and a COM elevation-moniker bypass such as ICMLuaUtil writes no  registry value at all.  The three UAC policy values (EnableLUA, ConsentPromptBehaviorAdmin,  LocalAccountTokenFilterPolicy) are deliberately not in the selection. They are  applied as Security Settings, which the policy client re-applies on its own  refresh interval — 16 hours by default — on every managed host whether or not  anything changed, so a UAC baseline GPO produces them per host per cycle  forever. ORing that volume into these near-zero-noise keys would make the  whole rule unshippable at this level; they belong in a separate low-severity  hunt. The correlation MITRE describes, a write followed by an elevated spawn  inside a time window, is not expressible in Sigma either way.  UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0345, not hand-written and not tested by its author. Any lab result is on this rule's own page.references:  - https://attack.mitre.org/techniques/T1548  - https://attack.mitre.org/detectionstrategies/DET0345author: Siemphony pipeline (machine-derived from MITRE ATT&CK v19.2)date: 2026-08-16tags:  - attack.privilege-escalation  - attack.t1548  - attack.t1548.002logsource:  category: registry_set  product: windowsdetection:  selection:    TargetObject|contains:      - '\Software\Classes\ms-settings\shell\open\command'      - '\Software\Classes\mscfile\shell\open\command'      - '\Software\Classes\Folder\shell\open\command'      - '\Software\Classes\exefile\shell\runas\command\isolatedCommand'      - '\Software\Classes\AppX82a6gwre4fdg3bt635tn5ctqjf8msdd2\Shell\open\command'      - '\Environment\windir'  condition: selectionfalsepositives:  - "Machine-side class registration during operating-system setup, servicing and feature updates. The rule matches on the class path only and does not pin the hive, so the HKLM\\SOFTWARE\\Classes copies of ms-settings, mscfile and Folder shell-open commands match exactly as the HKCU ones do."  - "Setup and sysprep writing the machine environment block at HKLM\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment, which contains a windir value and so matches the last entry on every image build and on some servicing reboots."  - "Shell tweaks and file-association repair tools — alternative file managers, 'open command window here' utilities and portable applications — which rewrite Folder\\shell\\open\\command or the exefile runas verb for the current user."  - "Control validation and purple-team tooling (Atomic Red Team and similar harnesses) that creates and deletes these exact keys on a schedule to test endpoint coverage."level: high

Sentinel · KQL

Run this as a search.

DeviceRegistryEvents| where (RegistryKey contains "\\Software\\Classes\\ms-settings\\shell\\open\\command" or RegistryKey contains "\\Software\\Classes\\mscfile\\shell\\open\\command" or RegistryKey contains "\\Software\\Classes\\Folder\\shell\\open\\command" or RegistryKey contains "\\Software\\Classes\\exefile\\shell\\runas\\command\\isolatedCommand" or RegistryKey contains "\\Software\\Classes\\AppX82a6gwre4fdg3bt635tn5ctqjf8msdd2\\Shell\\open\\command" or RegistryKey contains "\\Environment\\windir")

Splunk · SPL

Run this as a search.

index=* (TargetObject="*\\Software\\Classes\\ms-settings\\shell\\open\\command*" OR TargetObject="*\\Software\\Classes\\mscfile\\shell\\open\\command*" OR TargetObject="*\\Software\\Classes\\Folder\\shell\\open\\command*" OR TargetObject="*\\Software\\Classes\\exefile\\shell\\runas\\command\\isolatedCommand*" OR TargetObject="*\\Software\\Classes\\AppX82a6gwre4fdg3bt635tn5ctqjf8msdd2\\Shell\\open\\command*" OR TargetObject="*\\Environment\\windir*")

Elastic · ES|QL

Run this as a search.

FROM logs-*| WHERE (TO_LOWER(registry.path) LIKE "*\\\\software\\\\classes\\\\ms-settings\\\\shell\\\\open\\\\command*" OR TO_LOWER(registry.path) LIKE "*\\\\software\\\\classes\\\\mscfile\\\\shell\\\\open\\\\command*" OR TO_LOWER(registry.path) LIKE "*\\\\software\\\\classes\\\\folder\\\\shell\\\\open\\\\command*" OR TO_LOWER(registry.path) LIKE "*\\\\software\\\\classes\\\\exefile\\\\shell\\\\runas\\\\command\\\\isolatedcommand*" OR TO_LOWER(registry.path) LIKE "*\\\\software\\\\classes\\\\appx82a6gwre4fdg3bt635tn5ctqjf8msdd2\\\\shell\\\\open\\\\command*" OR TO_LOWER(registry.path) LIKE "*\\\\environment\\\\windir*")

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)(\\Software\\Classes\\ms-settings\\shell\\open\\command|\\Software\\Classes\\mscfile\\shell\\open\\command|\\Software\\Classes\\Folder\\shell\\open\\command|\\Software\\Classes\\exefile\\shell\\runas\\command\\isolatedCommand|\\Software\\Classes\\AppX82a6gwre4fdg3bt635tn5ctqjf8msdd2\\Shell\\open\\command|\\Environment\\windir)</field>    <description>Registry write to a known UAC bypass hijack key</description>    <mitre>      <id>T1548</id>      <id>T1548.002</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.