Skip to content

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

Siemphony’s repertoire

BITS job creation or notify command set from the command line

Siemphony@siemphonymediumT1197verified in lab
Matches the first step of AN0274's chain — a BITS job being created or reconfigured — at process creation, either through bitsadmin.exe carrying one of the switches MITRE lists under its `SuspiciousCliSwitches` knob (/transfer, /addfile, /SetNotifyCmdLine, /resume, /setcustomheaders, /setminretrydelay, used here exactly as MITRE gives them) or through the BITS PowerShell cmdlets, whose names are authored here. Both legs are written with `|windash` where the switch is dash-like, so the slash and dash spellings and the Unicode dashes all match. The analytic's other log sources are deliberately not used, and the reason matters more than the rule: BITS transfers are performed by the BITS service inside `svchost.exe -k netsvcs`, not by the process that queued the job, so a Sysmon EventID 3 or EventID 22 rule keyed on bitsadmin.exe would translate cleanly into every backend and never match a single event. AN0274 says this itself when it describes the notify command being launched from svchost. Two further gaps are structural. A job created through the COM interface directly, which is how tooling more capable than bitsadmin does it, produces no command line at all and is invisible here; and the correlation MITRE actually asks for — job creation, then a transfer, then the notify command firing hours later — needs a timeframe, so the `TimeWindow`, `JobLifetimeThreshold` and `ExpectedUpdateHosts` knobs all have to be applied downstream rather than in this rule. The rule is written in the Sysmon EventID 1 process_creation vocabulary (`Image`, `CommandLine`); the log source AN0274 names is Security 4688, where the same values arrive as `NewProcessName` and need mapping onto `Image` first, and where the command line is only present if both the *Audit Process Creation* policy and the separate *Include command line in process creation events* policy are enabled — neither is on in a default install or in the MS and CIS baselines, and without them this rule returns zero rows, which reads as quiet when it means blind. UNVERIFIED — derived from MITRE ATT&CK DET0098 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

Sentinel · KQL

Run this as a search.

DeviceProcessEvents| where ((FolderPath endswith "\\bitsadmin.exe" and (ProcessCommandLine contains "-transfer" or ProcessCommandLine contains "/transfer" or ProcessCommandLine contains "–transfer" or ProcessCommandLine contains "—transfer" or ProcessCommandLine contains "―transfer" or ProcessCommandLine contains "-addfile" or ProcessCommandLine contains "/addfile" or ProcessCommandLine contains "–addfile" or ProcessCommandLine contains "—addfile" or ProcessCommandLine contains "―addfile" or ProcessCommandLine contains "-setnotifycmdline" or ProcessCommandLine contains "/setnotifycmdline" or ProcessCommandLine contains "–setnotifycmdline" or ProcessCommandLine contains "—setnotifycmdline" or ProcessCommandLine contains "―setnotifycmdline" or ProcessCommandLine contains "-resume" or ProcessCommandLine contains "/resume" or ProcessCommandLine contains "–resume" or ProcessCommandLine contains "—resume" or ProcessCommandLine contains "―resume" or ProcessCommandLine contains "-setcustomheaders" or ProcessCommandLine contains "/setcustomheaders" or ProcessCommandLine contains "–setcustomheaders" or ProcessCommandLine contains "—setcustomheaders" or ProcessCommandLine contains "―setcustomheaders" or ProcessCommandLine contains "-setminretrydelay" or ProcessCommandLine contains "/setminretrydelay" or ProcessCommandLine contains "–setminretrydelay" or ProcessCommandLine contains "—setminretrydelay" or ProcessCommandLine contains "―setminretrydelay")) or ((FolderPath endswith "\\powershell.exe" or FolderPath endswith "\\pwsh.exe") and (ProcessCommandLine contains "Start-BitsTransfer" or ProcessCommandLine contains "Add-BitsFile" or ProcessCommandLine contains "Set-BitsTransfer" or ProcessCommandLine contains "Complete-BitsTransfer")))

Splunk · SPL

Run this as a search.

index=* ((Image="*\\bitsadmin.exe" AND (CommandLine="*-transfer*" OR CommandLine="*/transfer*" OR CommandLine="*–transfer*" OR CommandLine="*—transfer*" OR CommandLine="*―transfer*" OR CommandLine="*-addfile*" OR CommandLine="*/addfile*" OR CommandLine="*–addfile*" OR CommandLine="*—addfile*" OR CommandLine="*―addfile*" OR CommandLine="*-setnotifycmdline*" OR CommandLine="*/setnotifycmdline*" OR CommandLine="*–setnotifycmdline*" OR CommandLine="*—setnotifycmdline*" OR CommandLine="*―setnotifycmdline*" OR CommandLine="*-resume*" OR CommandLine="*/resume*" OR CommandLine="*–resume*" OR CommandLine="*—resume*" OR CommandLine="*―resume*" OR CommandLine="*-setcustomheaders*" OR CommandLine="*/setcustomheaders*" OR CommandLine="*–setcustomheaders*" OR CommandLine="*—setcustomheaders*" OR CommandLine="*―setcustomheaders*" OR CommandLine="*-setminretrydelay*" OR CommandLine="*/setminretrydelay*" OR CommandLine="*–setminretrydelay*" OR CommandLine="*—setminretrydelay*" OR CommandLine="*―setminretrydelay*")) OR ((Image="*\\powershell.exe" OR Image="*\\pwsh.exe") AND (CommandLine="*Start-BitsTransfer*" OR CommandLine="*Add-BitsFile*" OR CommandLine="*Set-BitsTransfer*" OR CommandLine="*Complete-BitsTransfer*")))

Elastic · ES|QL

Run this as a search.

FROM logs-*| WHERE ((TO_LOWER(process.executable) LIKE "*\\\\bitsadmin.exe" AND (TO_LOWER(process.command_line) LIKE "*-transfer*" OR TO_LOWER(process.command_line) LIKE "*/transfer*" OR TO_LOWER(process.command_line) LIKE "*–transfer*" OR TO_LOWER(process.command_line) LIKE "*—transfer*" OR TO_LOWER(process.command_line) LIKE "*―transfer*" OR TO_LOWER(process.command_line) LIKE "*-addfile*" OR TO_LOWER(process.command_line) LIKE "*/addfile*" OR TO_LOWER(process.command_line) LIKE "*–addfile*" OR TO_LOWER(process.command_line) LIKE "*—addfile*" OR TO_LOWER(process.command_line) LIKE "*―addfile*" OR TO_LOWER(process.command_line) LIKE "*-setnotifycmdline*" OR TO_LOWER(process.command_line) LIKE "*/setnotifycmdline*" OR TO_LOWER(process.command_line) LIKE "*–setnotifycmdline*" OR TO_LOWER(process.command_line) LIKE "*—setnotifycmdline*" OR TO_LOWER(process.command_line) LIKE "*―setnotifycmdline*" OR TO_LOWER(process.command_line) LIKE "*-resume*" OR TO_LOWER(process.command_line) LIKE "*/resume*" OR TO_LOWER(process.command_line) LIKE "*–resume*" OR TO_LOWER(process.command_line) LIKE "*—resume*" OR TO_LOWER(process.command_line) LIKE "*―resume*" OR TO_LOWER(process.command_line) LIKE "*-setcustomheaders*" OR TO_LOWER(process.command_line) LIKE "*/setcustomheaders*" OR TO_LOWER(process.command_line) LIKE "*–setcustomheaders*" OR TO_LOWER(process.command_line) LIKE "*—setcustomheaders*" OR TO_LOWER(process.command_line) LIKE "*―setcustomheaders*" OR TO_LOWER(process.command_line) LIKE "*-setminretrydelay*" OR TO_LOWER(process.command_line) LIKE "*/setminretrydelay*" OR TO_LOWER(process.command_line) LIKE "*–setminretrydelay*" OR TO_LOWER(process.command_line) LIKE "*—setminretrydelay*" OR TO_LOWER(process.command_line) LIKE "*―setminretrydelay*")) OR ((TO_LOWER(process.executable) LIKE "*\\\\powershell.exe" OR TO_LOWER(process.executable) LIKE "*\\\\pwsh.exe") AND (TO_LOWER(process.command_line) LIKE "*start-bitstransfer*" OR TO_LOWER(process.command_line) LIKE "*add-bitsfile*" OR TO_LOWER(process.command_line) LIKE "*set-bitstransfer*" OR TO_LOWER(process.command_line) LIKE "*complete-bitstransfer*")))

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. -->  <!-- 2 rules: the Sigma condition ORs across different fields,       which one rule cannot express. Any one matching is a hit. -->  <rule id="100000" level="7">    <!-- Set <if_sid> to the decoder/base rule for windows so this only evaluates relevant events. -->    <field name="Image" type="pcre2">(?i)\\bitsadmin\.exe$</field>    <field name="CommandLine" type="pcre2">(?i)(-transfer|/transfer|–transfer|—transfer|―transfer|-addfile|/addfile|–addfile|—addfile|―addfile|-setnotifycmdline|/setnotifycmdline|–setnotifycmdline|—setnotifycmdline|―setnotifycmdline|-resume|/resume|–resume|—resume|―resume|-setcustomheaders|/setcustomheaders|–setcustomheaders|—setcustomheaders|―setcustomheaders|-setminretrydelay|/setminretrydelay|–setminretrydelay|—setminretrydelay|―setminretrydelay)</field>    <description>BITS job creation or notify command set from the command line (1/2)</description>    <mitre>      <id>T1197</id>    </mitre>  </rule>   <rule id="100001" level="7">    <!-- Set <if_sid> to the decoder/base rule for windows so this only evaluates relevant events. -->    <field name="Image" type="pcre2">(?i)(\\powershell\.exe$|\\pwsh\.exe$)</field>    <field name="CommandLine" type="pcre2">(?i)(Start-BitsTransfer|Add-BitsFile|Set-BitsTransfer|Complete-BitsTransfer)</field>    <description>BITS job creation or notify command set from the command line (2/2)</description>    <mitre>      <id>T1197</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.