Skip to content

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

Siemphony’s repertoire

Cross-process write and thread rights on a system process

Siemphony@siemphonymediumT1055.001verified in lab
AN1095 describes an allocate, write, then remote-thread sequence that loads a DLL into another process, and Sysmon EventID 10 is the one log source in the brief that carries the whole sequence on a single event: VirtualAllocEx needs PROCESS_VM_OPERATION, WriteProcessMemory needs PROCESS_VM_WRITE and CreateRemoteThread needs PROCESS_CREATE_THREAD, all three on the same handle, so the GrantedAccess mask on the handle acquisition already states the intent before any of the calls are made. TargetImage is pinned to MITRE's TargetProcessList knob, populated here with the shell, session and service hosts that are the usual injection destinations; the GrantedAccess list is authored, not MITRE's, and covers both PROCESS_ALL_ACCESS forms and the minimal write-plus-create-thread combinations a tool that asks only for what it needs will present. lsass.exe is deliberately absent because the same target and mask pair is already published in this corpus at T1003.001, where it means credential access rather than injection. Limits: the LoadLibrary call or reflective loader that follows is a separate event with no join available in lib/sigma, and reflective injection never touches disk so it produces no image_load record at all. Sysmon is not present in a default install, and most published Sysmon configurations restrict the ProcessAccess section to lsass and winlogon, so this rule returns nothing until the config is widened to the targets below — zero rows here means blind, not quiet. UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0389, 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=* ((TargetImage="*\\explorer.exe" OR TargetImage="*\\winlogon.exe" OR TargetImage="*\\services.exe" OR TargetImage="*\\svchost.exe" OR TargetImage="*\\dwm.exe") AND (GrantedAccess="0x1FFFFF" OR GrantedAccess="0x1F3FFF" OR GrantedAccess="0x1F2FFF" OR GrantedAccess="0x1F1FFF" OR GrantedAccess="0x1F0FFF" OR GrantedAccess="0x147A" OR GrantedAccess="0x143A" OR GrantedAccess="0x47A" OR GrantedAccess="0x43A" OR GrantedAccess="0x42A" OR GrantedAccess="0x2A"))

Elastic · ES|QL

Run this as a search.

FROM logs-*| WHERE ((TO_LOWER(TargetImage) LIKE "*\\\\explorer.exe" OR TO_LOWER(TargetImage) LIKE "*\\\\winlogon.exe" OR TO_LOWER(TargetImage) LIKE "*\\\\services.exe" OR TO_LOWER(TargetImage) LIKE "*\\\\svchost.exe" OR TO_LOWER(TargetImage) LIKE "*\\\\dwm.exe") AND (TO_LOWER(GrantedAccess) == "0x1fffff" OR TO_LOWER(GrantedAccess) == "0x1f3fff" OR TO_LOWER(GrantedAccess) == "0x1f2fff" OR TO_LOWER(GrantedAccess) == "0x1f1fff" OR TO_LOWER(GrantedAccess) == "0x1f0fff" OR TO_LOWER(GrantedAccess) == "0x147a" OR TO_LOWER(GrantedAccess) == "0x143a" OR TO_LOWER(GrantedAccess) == "0x47a" OR TO_LOWER(GrantedAccess) == "0x43a" OR TO_LOWER(GrantedAccess) == "0x42a" OR TO_LOWER(GrantedAccess) == "0x2a"))

Wazuh · XML rule

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

<group name="sigma,windows,process_access,">  <!-- 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="TargetImage" type="pcre2">(?i)(\\explorer\.exe$|\\winlogon\.exe$|\\services\.exe$|\\svchost\.exe$|\\dwm\.exe$)</field>    <field name="GrantedAccess" type="pcre2">(?i)(^0x1FFFFF$|^0x1F3FFF$|^0x1F2FFF$|^0x1F1FFF$|^0x1F0FFF$|^0x147A$|^0x143A$|^0x47A$|^0x43A$|^0x42A$|^0x2A$)</field>    <description>Cross-process write and thread rights on a system process</description>    <mitre>      <id>T1055.001</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":"process_access","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.