Skip to content

Siemphony is in beta and still being built. What ships today, and what does not.

Siemphony’s repertoire

Internet zone marker written onto a high-risk file type

Siemphony@siemphonymediumT1204.002unverified
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

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.