Skip to content

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

Siemphony’s repertoire

Browser extension registered or force-installed via registry

Matches registry value writes that enrol a browser extension outside the browser's own UI: the enterprise policy force-list and ExtensionSettings keys, the legacy per-extension `Extensions\<id>` registration used to side-load an unpacked or hosted extension, and the NativeMessagingHosts registration that gives an extension a local executable to talk to. MITRE's AN0251 wants the install correlated with follow-on C2 traffic from the host application inside a tunable TimeWindow; Sigma cannot join two events, so this is the install-side precursor only and the network half is deliberately absent. TargetObject is the one field in Sysmon EventID 13 that carries the enrolment intent, so the whole rule sits on it and MITRE's RegistryPath knob is the tuning surface. UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0092, 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: Browser extension registered or force-installed via registryid: 3b7c1e4a-9d62-4f18-a0c5-27e6b8d413f9status: experimentaldescription: |  Matches registry value writes that enrol a browser extension outside the  browser's own UI: the enterprise policy force-list and ExtensionSettings keys,  the legacy per-extension `Extensions\<id>` registration used to side-load an  unpacked or hosted extension, and the NativeMessagingHosts registration that  gives an extension a local executable to talk to. MITRE's AN0251 wants the  install correlated with follow-on C2 traffic from the host application inside a  tunable TimeWindow; Sigma cannot join two events, so this is the install-side  precursor only and the network half is deliberately absent. TargetObject is the  one field in Sysmon EventID 13 that carries the enrolment intent, so the whole  rule sits on it and MITRE's RegistryPath knob is the tuning surface.  UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0092, 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/T1176  - https://attack.mitre.org/detectionstrategies/DET0092author: Siemphony pipeline (machine-derived from MITRE ATT&CK v19.2)date: 2026-08-16tags:  - attack.persistence  - attack.t1176logsource:  category: registry_set  product: windowsdetection:  selection:    TargetObject|contains:      - '\Policies\Google\Chrome\ExtensionInstallForcelist\'      - '\Policies\Google\Chrome\ExtensionSettings\'      - '\Policies\Microsoft\Edge\ExtensionInstallForcelist\'      - '\Policies\Microsoft\Edge\ExtensionSettings\'      - '\Policies\BraveSoftware\Brave\ExtensionInstallForcelist\'      - '\Google\Chrome\Extensions\'      - '\Microsoft\Edge\Extensions\'      - '\Chromium\Extensions\'      - '\Mozilla\Firefox\Extensions\'      - '\NativeMessagingHosts\'  condition: selectionfalsepositives:  - "Group Policy or an MDM agent pushing an approved extension force-list, which rewrites the whole numbered list on every policy refresh and so re-fires on a schedule. The write comes from the policy client or the management agent, and MITRE names Image and RegistryPath as the knobs — baseline the approved extension IDs rather than the key prefix."  - "Browser installers and updaters registering bundled or recommended extensions under `\\Google\\Chrome\\Extensions\\` and `\\Microsoft\\Edge\\Extensions\\` at each version bump. MITRE's ParentImage knob covers this — the writing process is the vendor updater rather than a script."  - "Password managers, endpoint agents and conferencing clients that register their own browser extension and a NativeMessagingHosts entry during installation. These are indistinguishable from the malicious case on TargetObject alone, which is why the extension ID in the key path has to be allow-listed."level: medium

Sentinel · KQL

Run this as a search.

DeviceRegistryEvents| where (RegistryKey contains "\\Policies\\Google\\Chrome\\ExtensionInstallForcelist\\" or RegistryKey contains "\\Policies\\Google\\Chrome\\ExtensionSettings\\" or RegistryKey contains "\\Policies\\Microsoft\\Edge\\ExtensionInstallForcelist\\" or RegistryKey contains "\\Policies\\Microsoft\\Edge\\ExtensionSettings\\" or RegistryKey contains "\\Policies\\BraveSoftware\\Brave\\ExtensionInstallForcelist\\" or RegistryKey contains "\\Google\\Chrome\\Extensions\\" or RegistryKey contains "\\Microsoft\\Edge\\Extensions\\" or RegistryKey contains "\\Chromium\\Extensions\\" or RegistryKey contains "\\Mozilla\\Firefox\\Extensions\\" or RegistryKey contains "\\NativeMessagingHosts\\")

Splunk · SPL

Run this as a search.

index=* (TargetObject="*\\Policies\\Google\\Chrome\\ExtensionInstallForcelist\\*" OR TargetObject="*\\Policies\\Google\\Chrome\\ExtensionSettings\\*" OR TargetObject="*\\Policies\\Microsoft\\Edge\\ExtensionInstallForcelist\\*" OR TargetObject="*\\Policies\\Microsoft\\Edge\\ExtensionSettings\\*" OR TargetObject="*\\Policies\\BraveSoftware\\Brave\\ExtensionInstallForcelist\\*" OR TargetObject="*\\Google\\Chrome\\Extensions\\*" OR TargetObject="*\\Microsoft\\Edge\\Extensions\\*" OR TargetObject="*\\Chromium\\Extensions\\*" OR TargetObject="*\\Mozilla\\Firefox\\Extensions\\*" OR TargetObject="*\\NativeMessagingHosts\\*")

Elastic · ES|QL

Run this as a search.

FROM logs-*| WHERE (TO_LOWER(registry.path) LIKE "*\\\\policies\\\\google\\\\chrome\\\\extensioninstallforcelist\\\\*" OR TO_LOWER(registry.path) LIKE "*\\\\policies\\\\google\\\\chrome\\\\extensionsettings\\\\*" OR TO_LOWER(registry.path) LIKE "*\\\\policies\\\\microsoft\\\\edge\\\\extensioninstallforcelist\\\\*" OR TO_LOWER(registry.path) LIKE "*\\\\policies\\\\microsoft\\\\edge\\\\extensionsettings\\\\*" OR TO_LOWER(registry.path) LIKE "*\\\\policies\\\\bravesoftware\\\\brave\\\\extensioninstallforcelist\\\\*" OR TO_LOWER(registry.path) LIKE "*\\\\google\\\\chrome\\\\extensions\\\\*" OR TO_LOWER(registry.path) LIKE "*\\\\microsoft\\\\edge\\\\extensions\\\\*" OR TO_LOWER(registry.path) LIKE "*\\\\chromium\\\\extensions\\\\*" OR TO_LOWER(registry.path) LIKE "*\\\\mozilla\\\\firefox\\\\extensions\\\\*" OR TO_LOWER(registry.path) LIKE "*\\\\nativemessaginghosts\\\\*")

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="7">    <!-- Set <if_sid> to the decoder/base rule for windows so this only evaluates relevant events. -->    <field name="TargetObject" type="pcre2">(?i)(\\Policies\\Google\\Chrome\\ExtensionInstallForcelist\\|\\Policies\\Google\\Chrome\\ExtensionSettings\\|\\Policies\\Microsoft\\Edge\\ExtensionInstallForcelist\\|\\Policies\\Microsoft\\Edge\\ExtensionSettings\\|\\Policies\\BraveSoftware\\Brave\\ExtensionInstallForcelist\\|\\Google\\Chrome\\Extensions\\|\\Microsoft\\Edge\\Extensions\\|\\Chromium\\Extensions\\|\\Mozilla\\Firefox\\Extensions\\|\\NativeMessagingHosts\\)</field>    <description>Browser extension registered or force-installed via registry</description>    <mitre>      <id>T1176</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.