Skip to content

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

Siemphony’s repertoire

Internet zone marker written onto a high-risk file type

AN0819 begins with a delivered file landing in a user-controlled path, and the one event that records that delivery rather than inferring it is Sysmon EventID 15, written when a handler stamps the Zone.Identifier alternate data stream onto a file it pulled from outside; this rule matches that stream on the file types that need a user to open them, which is MITRE's SuspiciousExtensions knob populated here with the script, shortcut, control-panel, disk-image and macro-document extensions the technique lists. The later leg of the analytic — the handler application spawning a system utility — is deliberately not written, because the corpus already carries exactly that logic under the parent technique T1204 and a second copy of the document-parent-spawns-LOLBin rule would add no coverage. Plain .exe and .msi are excluded for a different reason: a downloaded installer is the highest-volume zone-stream event on any estate and would bury every other match. EventID 15 is not emitted by a bare Sysmon install and most shipped configurations restrict stream hashing to a short extension list, so confirm these extensions are in the running config first — otherwise the rule is blind rather than quiet. UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0294, not hand-written and not tested by its author. Any lab result is on this rule's own page.Full description

The detection

The 3 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: Internet zone marker written onto a high-risk file typeid: 05cade52-d42e-457f-921b-89f6a813b25fstatus: experimentaldescription: |  AN0819 begins with a delivered file landing in a user-controlled path, and the  one event that records that delivery rather than inferring it is Sysmon  EventID 15, written when a handler stamps the Zone.Identifier alternate data  stream onto a file it pulled from outside; this rule matches that stream on the  file types that need a user to open them, which is MITRE's SuspiciousExtensions  knob populated here with the script, shortcut, control-panel, disk-image and  macro-document extensions the technique lists. The later leg of the analytic —  the handler application spawning a system utility — is deliberately not written,  because the corpus already carries exactly that logic under the parent technique  T1204 and a second copy of the document-parent-spawns-LOLBin rule would add no  coverage. Plain .exe and .msi are excluded for a different reason: a downloaded  installer is the highest-volume zone-stream event on any estate and would bury  every other match. EventID 15 is not emitted by a bare Sysmon install and most  shipped configurations restrict stream hashing to a short extension list, so  confirm these extensions are in the running config first — otherwise the rule  is blind rather than quiet.  UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0294, 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/T1204/002  - https://attack.mitre.org/detectionstrategies/DET0294author: Siemphony pipeline (machine-derived from MITRE ATT&CK v19.2)date: 2026-08-16tags:  - attack.execution  - attack.t1204.002logsource:  category: create_stream_hash  product: windowsdetection:  selection:    TargetFilename|endswith:      - '.hta:Zone.Identifier'      - '.lnk:Zone.Identifier'      - '.js:Zone.Identifier'      - '.jse:Zone.Identifier'      - '.vbs:Zone.Identifier'      - '.vbe:Zone.Identifier'      - '.wsf:Zone.Identifier'      - '.wsh:Zone.Identifier'      - '.bat:Zone.Identifier'      - '.cmd:Zone.Identifier'      - '.ps1:Zone.Identifier'      - '.scr:Zone.Identifier'      - '.pif:Zone.Identifier'      - '.cpl:Zone.Identifier'      - '.reg:Zone.Identifier'      - '.iso:Zone.Identifier'      - '.img:Zone.Identifier'      - '.vhd:Zone.Identifier'      - '.vhdx:Zone.Identifier'      - '.docm:Zone.Identifier'      - '.xlsm:Zone.Identifier'      - '.xll:Zone.Identifier'  condition: selectionfalsepositives:  - "IT and developer downloads of loose scripts. A .ps1, .bat or .cmd file pulled from an internal portal, a vendor support page or a code repository through a browser gets the same zone stream as a malicious one, and on an estate where staff script routinely this is the loudest entry here."  - "Operating system, driver and appliance media downloaded as .iso, .img or .vhd files during provisioning, which is ordinary IT work and matches on every image fetched."  - "Archive extraction, which propagates the zone marker to each member: one downloaded .zip containing shortcuts and batch files produces a match per file with no further user action, and MITRE's UserPaths knob is where the extraction directories used by your build and packaging tooling belong."  - "Cloud storage and file-sync clients writing the zone stream onto files synchronised from a shared folder, and sanctioned macro-enabled workbooks distributed as line-of-business tooling from an intranet site."level: medium

Splunk · SPL

Run this as a search.

index=* (TargetFilename="*.hta:Zone.Identifier" OR TargetFilename="*.lnk:Zone.Identifier" OR TargetFilename="*.js:Zone.Identifier" OR TargetFilename="*.jse:Zone.Identifier" OR TargetFilename="*.vbs:Zone.Identifier" OR TargetFilename="*.vbe:Zone.Identifier" OR TargetFilename="*.wsf:Zone.Identifier" OR TargetFilename="*.wsh:Zone.Identifier" OR TargetFilename="*.bat:Zone.Identifier" OR TargetFilename="*.cmd:Zone.Identifier" OR TargetFilename="*.ps1:Zone.Identifier" OR TargetFilename="*.scr:Zone.Identifier" OR TargetFilename="*.pif:Zone.Identifier" OR TargetFilename="*.cpl:Zone.Identifier" OR TargetFilename="*.reg:Zone.Identifier" OR TargetFilename="*.iso:Zone.Identifier" OR TargetFilename="*.img:Zone.Identifier" OR TargetFilename="*.vhd:Zone.Identifier" OR TargetFilename="*.vhdx:Zone.Identifier" OR TargetFilename="*.docm:Zone.Identifier" OR TargetFilename="*.xlsm:Zone.Identifier" OR TargetFilename="*.xll:Zone.Identifier")

Elastic · ES|QL

Run this as a search.

FROM logs-*| WHERE (TO_LOWER(file.path) LIKE "*.hta:zone.identifier" OR TO_LOWER(file.path) LIKE "*.lnk:zone.identifier" OR TO_LOWER(file.path) LIKE "*.js:zone.identifier" OR TO_LOWER(file.path) LIKE "*.jse:zone.identifier" OR TO_LOWER(file.path) LIKE "*.vbs:zone.identifier" OR TO_LOWER(file.path) LIKE "*.vbe:zone.identifier" OR TO_LOWER(file.path) LIKE "*.wsf:zone.identifier" OR TO_LOWER(file.path) LIKE "*.wsh:zone.identifier" OR TO_LOWER(file.path) LIKE "*.bat:zone.identifier" OR TO_LOWER(file.path) LIKE "*.cmd:zone.identifier" OR TO_LOWER(file.path) LIKE "*.ps1:zone.identifier" OR TO_LOWER(file.path) LIKE "*.scr:zone.identifier" OR TO_LOWER(file.path) LIKE "*.pif:zone.identifier" OR TO_LOWER(file.path) LIKE "*.cpl:zone.identifier" OR TO_LOWER(file.path) LIKE "*.reg:zone.identifier" OR TO_LOWER(file.path) LIKE "*.iso:zone.identifier" OR TO_LOWER(file.path) LIKE "*.img:zone.identifier" OR TO_LOWER(file.path) LIKE "*.vhd:zone.identifier" OR TO_LOWER(file.path) LIKE "*.vhdx:zone.identifier" OR TO_LOWER(file.path) LIKE "*.docm:zone.identifier" OR TO_LOWER(file.path) LIKE "*.xlsm:zone.identifier" OR TO_LOWER(file.path) LIKE "*.xll:zone.identifier")

Wazuh · XML rule

Deploy to your manager — this is a rule, not a search.

<group name="sigma,windows,create_stream_hash,">  <!-- 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="TargetFilename" type="pcre2">(?i)(\.hta:Zone\.Identifier$|\.lnk:Zone\.Identifier$|\.js:Zone\.Identifier$|\.jse:Zone\.Identifier$|\.vbs:Zone\.Identifier$|\.vbe:Zone\.Identifier$|\.wsf:Zone\.Identifier$|\.wsh:Zone\.Identifier$|\.bat:Zone\.Identifier$|\.cmd:Zone\.Identifier$|\.ps1:Zone\.Identifier$|\.scr:Zone\.Identifier$|\.pif:Zone\.Identifier$|\.cpl:Zone\.Identifier$|\.reg:Zone\.Identifier$|\.iso:Zone\.Identifier$|\.img:Zone\.Identifier$|\.vhd:Zone\.Identifier$|\.vhdx:Zone\.Identifier$|\.docm:Zone\.Identifier$|\.xlsm:Zone\.Identifier$|\.xll:Zone\.Identifier$)</field>    <description>Internet zone marker written onto a high-risk file type</description>    <mitre>      <id>T1204.002</id>    </mitre>  </rule></group>

Sentinel · KQL

Run this as a search.

Sentinel cannot express this construct. No Sentinel table is modelled for this logsource ({"category":"create_stream_hash","product":"windows"}), so there is nothing honest to query. Pick a logsource this translator maps, or write the KQL by hand. The Sigma source is on the first tab, unchanged.

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.