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 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
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: mediumSentinel · 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.
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.