Skip to content

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

Siemphony’s repertoire

PowerShell launched pinned to the version 2 engine

Siemphony@siemphonyhighT1689unverified
AN0995 names PowerShell version downgrade as its own example, and the version-2 engine is the cleanest single-event observable the strategy offers: it exists specifically to run without Script Block Logging, transcription or AMSI, so a process-creation command line that requests it is unambiguous rather than merely suspicious. PowerShell resolves partial parameter names, so the selection covers every abbreviation of `-Version 2` down to `-ve 2`, alongside `powershell_ise.exe` since the ISE takes the same switch. The single-letter form `-v 2` is deliberately excluded: `-v` is a near-universal short flag for other tools' verbose output, and `-v 2>&1` — verbose plus the extremely common stderr-to-stdout redirect — contains the same substring, so keeping it would have turned this into a rule that fires on redirected verbose output inside almost any `-Command` invocation rather than on a version pin. The registry leg of the same analytic (Defender/HVCI keys via Security 4657) is not authored here: 4657 splits a key and its value across `ObjectName`/`ObjectValueName` rather than the single `TargetObject` the `registry_set` category expects, so it needs a field-mapping decision this rule does not make. The Linux (AN0996) and macOS (AN0997) legs of DET0350 cover a different technique's shape entirely — legacy interpreters and TLS fallback — and are out of scope for a single Windows-only rule. Requires Sysmon to be installed, since process creation is not logged at all without it. UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0350, not hand-written and not tested by its author. Any lab result is on this rule's own page.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

Sentinel · KQL

Run this as a search.

DeviceProcessEvents| where ((FolderPath endswith "\\powershell.exe" or FolderPath endswith "\\powershell_ise.exe") and (ProcessCommandLine contains "-version 2" or ProcessCommandLine contains "-versio 2" or ProcessCommandLine contains "-versi 2" or ProcessCommandLine contains "-vers 2" or ProcessCommandLine contains "-ver 2" or ProcessCommandLine contains "-ve 2"))

Splunk · SPL

Run this as a search.

index=* ((Image="*\\powershell.exe" OR Image="*\\powershell_ise.exe") AND (CommandLine="*-version 2*" OR CommandLine="*-versio 2*" OR CommandLine="*-versi 2*" OR CommandLine="*-vers 2*" OR CommandLine="*-ver 2*" OR CommandLine="*-ve 2*"))

Elastic · ES|QL

Run this as a search.

FROM logs-*| WHERE ((TO_LOWER(process.executable) LIKE "*\\\\powershell.exe" OR TO_LOWER(process.executable) LIKE "*\\\\powershell_ise.exe") AND (TO_LOWER(process.command_line) LIKE "*-version 2*" OR TO_LOWER(process.command_line) LIKE "*-versio 2*" OR TO_LOWER(process.command_line) LIKE "*-versi 2*" OR TO_LOWER(process.command_line) LIKE "*-vers 2*" OR TO_LOWER(process.command_line) LIKE "*-ver 2*" OR TO_LOWER(process.command_line) LIKE "*-ve 2*"))

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="12">    <!-- Set <if_sid> to the decoder/base rule for windows so this only evaluates relevant events. -->    <field name="Image" type="pcre2">(?i)(\\powershell\.exe$|\\powershell_ise\.exe$)</field>    <field name="CommandLine" type="pcre2">(?i)(-version 2|-versio 2|-versi 2|-vers 2|-ver 2|-ve 2)</field>    <description>PowerShell launched pinned to the version 2 engine</description>    <mitre>      <id>T1689</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.

1 thread

  • @priya-raman

    Excluding the single-letter `-v 2` form is the right call, and it is the kind of thing you only learn by running the rule. We carried the naive version on Splunk for about a year and the top match by volume was `-v 2>&1` inside a monitoring script — verbose plus a stderr redirect, nothing to do with a downgrade. Good that the reasoning is written down rather than left as an unexplained gap in the list.

    • @hana-kobayashi

      One thing worth checking before you treat a hit as high: whether the host still has the v2 engine feature installed at all. On anything built from a modern Server image it usually is not, so the command line is a request that fails and nothing actually runs downgraded. Still a fine intent signal — nobody types it by accident — but the triage note should say so, or an analyst will go looking for a session that never existed.