Skip to content

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

Siemphony’s repertoire

Installer or updater process spawning a shell, script host or downloader

MITRE's Windows analytic for a compromised software supply chain is a four-stage chain: installer runs, binaries are written into program paths, the first run spawns unexpected children or loads unsigned modules, and the host beacons to something that is not an approved update endpoint. Stage three is the only part that is one event, so this rule matches process creation where the parent is an installer, updater or setup binary and the child is a shell, script host or download utility. Read it as a hunt, not as supply-chain detection. The dominant real-world form of this technique never creates a process at all: a payload compiled into a signed vendor assembly, or a malicious DLL side-loaded by the signed application, runs in-process and produces zero events here. The leg that carries that is the brief's driver_load (Sysmon 6) and image_load (Sysmon 7) sources, where Signed, Signature and SignatureStatus let an unsigned or unexpectedly-signed module loading into a vendor process be scored — none of which this rule sees. The child list is a starting set taken from the analytic's wording ("spawns scripts/shells"), not an exhaustive interpreter inventory, and a tampered installer that runs its payload as its own child EXE never touches it. The write-to-first-run-to-egress correlation MITRE specifies needs a 90-minute join across file, module and network telemetry, which Sigma cannot express, and the ApprovedSigners and ApprovedUpdateHosts knobs are list lookups rather than field tests, so neither is modelled here. UNVERIFIED — derived from MITRE ATT&CK DET0309 and never executed against logs.Full description

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: Installer or updater process spawning a shell, script host or downloaderid: ffc1e08b-50bf-400e-87b1-dca3bfb6800bstatus: experimentaldescription: |  MITRE's Windows analytic for a compromised software supply chain is a  four-stage chain: installer runs, binaries are written into program paths, the  first run spawns unexpected children or loads unsigned modules, and the host  beacons to something that is not an approved update endpoint. Stage three is  the only part that is one event, so this rule matches process creation where  the parent is an installer, updater or setup binary and the child is a shell,  script host or download utility.  Read it as a hunt, not as supply-chain detection. The dominant real-world form  of this technique never creates a process at all: a payload compiled into a  signed vendor assembly, or a malicious DLL side-loaded by the signed  application, runs in-process and produces zero events here. The leg that  carries that is the brief's driver_load (Sysmon 6) and image_load (Sysmon 7)  sources, where Signed, Signature and SignatureStatus let an unsigned or  unexpectedly-signed module loading into a vendor process be scored — none of  which this rule sees. The child list is a starting set taken from the  analytic's wording ("spawns scripts/shells"), not an exhaustive interpreter  inventory, and a tampered installer that runs its payload as its own child EXE  never touches it. The write-to-first-run-to-egress correlation MITRE specifies  needs a 90-minute join across file, module and network telemetry, which Sigma  cannot express, and the ApprovedSigners and ApprovedUpdateHosts knobs are list  lookups rather than field tests, so neither is modelled here.  UNVERIFIED — derived from MITRE ATT&CK DET0309 and never executed against logs.references:  - https://attack.mitre.org/techniques/T1195/002  - https://attack.mitre.org/detectionstrategies/DET0309author: Siemphony pipeline (machine-derived from MITRE ATT&CK v19.2)date: 2026-08-16tags:  - attack.initial-access  - attack.t1195.002logsource:  category: process_creation  product: windowsdetection:  selection_installer_parent:    ParentImage|endswith:      - '\msiexec.exe'      - '\setup.exe'      - '\install.exe'      - '\installer.exe'      - '\update.exe'      - '\updater.exe'      - '\upgrade.exe'  selection_unexpected_child:    Image|endswith:      - '\cmd.exe'      - '\powershell.exe'      - '\pwsh.exe'      - '\wscript.exe'      - '\cscript.exe'      - '\mshta.exe'      - '\bitsadmin.exe'      - '\certutil.exe'      - '\curl.exe'      - '\regsvr32.exe'  condition: selection_installer_parent and selection_unexpected_childfalsepositives:  - "MSI custom actions, which routinely shell out to cmd.exe or PowerShell to register services, patch configuration files or run post-install checks. This is the dominant match by a wide margin and it is legitimate for most vendors — the separation is which publisher signed the parent, which is MITRE's ApprovedSigners knob and not a field this log source carries. It is why the level here is low."  - "Third-party installer frameworks — Inno Setup, NSIS, InstallShield — whose setup.exe runs cmd /c for post-install cleanup, service registration or PATH edits. On developer and end-user workstations this is the single commonest instance of this exact parent-child pair."  - "Enterprise software deployment (SCCM, Intune, Chocolatey, WinGet) whose packages wrap the vendor installer in a PowerShell or batch wrapper, so the parent-child pair appears on every managed host during a rollout wave."  - "Application self-updaters — Squirrel-packaged apps run theirs as Update.exe — invoking cmd.exe to move files or clean up old versions on each release."  - "Driver and runtime redistributables that call certutil to verify a hash or install a certificate as part of a supported install sequence."level: low

Sentinel · KQL

Run this as a search.

DeviceProcessEvents| where ((InitiatingProcessFolderPath endswith "\\msiexec.exe" or InitiatingProcessFolderPath endswith "\\setup.exe" or InitiatingProcessFolderPath endswith "\\install.exe" or InitiatingProcessFolderPath endswith "\\installer.exe" or InitiatingProcessFolderPath endswith "\\update.exe" or InitiatingProcessFolderPath endswith "\\updater.exe" or InitiatingProcessFolderPath endswith "\\upgrade.exe") and (FolderPath endswith "\\cmd.exe" or FolderPath endswith "\\powershell.exe" or FolderPath endswith "\\pwsh.exe" or FolderPath endswith "\\wscript.exe" or FolderPath endswith "\\cscript.exe" or FolderPath endswith "\\mshta.exe" or FolderPath endswith "\\bitsadmin.exe" or FolderPath endswith "\\certutil.exe" or FolderPath endswith "\\curl.exe" or FolderPath endswith "\\regsvr32.exe"))

Splunk · SPL

Run this as a search.

index=* ((ParentImage="*\\msiexec.exe" OR ParentImage="*\\setup.exe" OR ParentImage="*\\install.exe" OR ParentImage="*\\installer.exe" OR ParentImage="*\\update.exe" OR ParentImage="*\\updater.exe" OR ParentImage="*\\upgrade.exe") AND (Image="*\\cmd.exe" OR Image="*\\powershell.exe" OR Image="*\\pwsh.exe" OR Image="*\\wscript.exe" OR Image="*\\cscript.exe" OR Image="*\\mshta.exe" OR Image="*\\bitsadmin.exe" OR Image="*\\certutil.exe" OR Image="*\\curl.exe" OR Image="*\\regsvr32.exe"))

Elastic · ES|QL

Run this as a search.

FROM logs-*| WHERE ((TO_LOWER(process.parent.executable) LIKE "*\\\\msiexec.exe" OR TO_LOWER(process.parent.executable) LIKE "*\\\\setup.exe" OR TO_LOWER(process.parent.executable) LIKE "*\\\\install.exe" OR TO_LOWER(process.parent.executable) LIKE "*\\\\installer.exe" OR TO_LOWER(process.parent.executable) LIKE "*\\\\update.exe" OR TO_LOWER(process.parent.executable) LIKE "*\\\\updater.exe" OR TO_LOWER(process.parent.executable) LIKE "*\\\\upgrade.exe") AND (TO_LOWER(process.executable) LIKE "*\\\\cmd.exe" OR TO_LOWER(process.executable) LIKE "*\\\\powershell.exe" OR TO_LOWER(process.executable) LIKE "*\\\\pwsh.exe" OR TO_LOWER(process.executable) LIKE "*\\\\wscript.exe" OR TO_LOWER(process.executable) LIKE "*\\\\cscript.exe" OR TO_LOWER(process.executable) LIKE "*\\\\mshta.exe" OR TO_LOWER(process.executable) LIKE "*\\\\bitsadmin.exe" OR TO_LOWER(process.executable) LIKE "*\\\\certutil.exe" OR TO_LOWER(process.executable) LIKE "*\\\\curl.exe" OR TO_LOWER(process.executable) LIKE "*\\\\regsvr32.exe"))

Wazuh · XML rule

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

<group name="sigma,windows,process_creation,">  <!-- Rule ids must be unique on your manager; 100000+ is the user range. -->  <rule id="100000" level="5">    <!-- Set <if_sid> to the decoder/base rule for windows so this only evaluates relevant events. -->    <field name="ParentImage" type="pcre2">(?i)(\\msiexec\.exe$|\\setup\.exe$|\\install\.exe$|\\installer\.exe$|\\update\.exe$|\\updater\.exe$|\\upgrade\.exe$)</field>    <field name="Image" type="pcre2">(?i)(\\cmd\.exe$|\\powershell\.exe$|\\pwsh\.exe$|\\wscript\.exe$|\\cscript\.exe$|\\mshta\.exe$|\\bitsadmin\.exe$|\\certutil\.exe$|\\curl\.exe$|\\regsvr32\.exe$)</field>    <description>Installer or updater process spawning a shell, script host or downloader</description>    <mitre>      <id>T1195.002</id>    </mitre>  </rule></group>

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.