BITS job creation or notify command set from the command line
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 descriptionShow less
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.
Nobody has run this in a real environment and said what happened.
Verdicts from engineers who deployed it
0 castNo 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.