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 descriptionShow less
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: mediumSplunk · 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.
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.