T1197 IBM QRadar · QRadar

Detect BITS Jobs in IBM QRadar

Adversaries may abuse Windows Background Intelligent Transfer Service (BITS) jobs to persistently execute code and perform background tasks such as downloading malicious payloads, executing arbitrary programs on job completion or error, and cleaning up artifacts. BITS is a COM-based file transfer mechanism built into Windows, commonly used by Windows Update and software installers. Adversaries exploit it via bitsadmin.exe or PowerShell BITS cmdlets to download tools from external infrastructure, achieve persistence using /SetNotifyCmdLine to invoke arbitrary executables when a job completes or errors (including after reboots), and exfiltrate data. BITS jobs are stored in a binary database (%ALLUSERSPROFILE%\Microsoft\Network\Downloader\) rather than in registry or filesystem, making them resistant to many persistence-focused detections. Active threat groups including APT39, APT41, Leviathan, Patchwork, and Wizard Spider have leveraged BITS for payload delivery and persistence.

MITRE ATT&CK

Tactic
Defense Evasion Persistence
Technique
T1197 BITS Jobs
Canonical reference
https://attack.mitre.org/techniques/T1197/

QRadar Detection Query

IBM QRadar (QRadar)
sql
SELECT
  DATEFORMAT(starttime, 'yyyy-MM-dd HH:mm:ss') AS event_time,
  logsourcename(logsourceid) AS log_source,
  "username",
  "sourceip",
  "Process Name" AS image,
  "Command" AS command_line,
  "Parent Process Name" AS parent_image,
  CASE
    WHEN LOWER("Command") MATCHES '(/setnotifycmdline|/setnotifyflags)' THEN 1 ELSE 0
  END AS has_notify,
  CASE
    WHEN LOWER("Command") MATCHES '(/transfer|/addfile|start-bitstransfer|new-bitstransfer|add-bitsfile)' THEN 1 ELSE 0
  END AS has_transfer,
  CASE
    WHEN LOWER("Command") MATCHES '(\\appdata\\|\\users\\public\\|\\programdata\\|\\windows\\temp\\|c:\\temp\\)' THEN 1 ELSE 0
  END AS suspicious_dest,
  CASE
    WHEN LOWER("Command") MATCHES '\.(exe|dll|ps1|bat|cmd|vbs|js|hta)(\s|$)' THEN 1 ELSE 0
  END AS suspicious_ext,
  CASE
    WHEN "Command" MATCHES 'https?://' AND NOT "Command" MATCHES '(microsoft\.com|windowsupdate\.com|windows\.com)' THEN 1 ELSE 0
  END AS external_download,
  (
    CASE WHEN LOWER("Command") MATCHES '(/setnotifycmdline|/setnotifyflags)' THEN 1 ELSE 0 END +
    CASE WHEN LOWER("Command") MATCHES '(/transfer|/addfile|start-bitstransfer|new-bitstransfer|add-bitsfile)' THEN 1 ELSE 0 END +
    CASE WHEN LOWER("Command") MATCHES '(\\appdata\\|\\users\\public\\|\\programdata\\|\\windows\\temp\\)' THEN 1 ELSE 0 END +
    CASE WHEN LOWER("Command") MATCHES '\.(exe|dll|ps1|bat|cmd|vbs|js|hta)(\s|$)' THEN 1 ELSE 0 END +
    CASE WHEN "Command" MATCHES 'https?://' AND NOT "Command" MATCHES '(microsoft\.com|windowsupdate\.com|windows\.com)' THEN 1 ELSE 0 END
  ) AS suspicion_score
FROM events
WHERE
  LOGSOURCETYPEID IN (12, 13, 14)
  AND (
    LOWER("Process Name") LIKE '%bitsadmin.exe'
    OR LOWER("Process Name") LIKE '%powershell.exe'
    OR LOWER("Process Name") LIKE '%pwsh.exe'
  )
  AND (
    LOWER("Command") MATCHES '(/setnotifycmdline|/setnotifyflags|/transfer|/addfile|start-bitstransfer|new-bitstransfer|add-bitsfile)'
    OR ("Command" MATCHES 'https?://' AND NOT "Command" MATCHES '(microsoft\.com|windowsupdate\.com|windows\.com)')
    OR LOWER("Command") MATCHES '(\\appdata\\|\\users\\public\\|\\programdata\\|\\windows\\temp\\)'
  )
  AND LOGSOURCETYPEID IN (12, 13, 14)
ORDER BY suspicion_score DESC, starttime DESC
LAST 24 HOURS
high severity medium confidence

Detects BITS job abuse via bitsadmin.exe or PowerShell BITS cmdlets in QRadar, scoring events based on presence of notification callbacks, suspicious transfer destinations (Temp/AppData/Public/ProgramData), suspicious file extensions, and external non-Microsoft download URLs. Scores >= 1 are surfaced with the highest-score events ranked first.

Data Sources

IBM QRadar SIEMWindows Security Event Log DSMMicrosoft Windows Sysmon DSM

Required Tables

events (LOGSOURCETYPEID 12/13/14 — Windows Security/System/Sysmon)

False Positives & Tuning

  • Windows software update mechanisms using bitsadmin.exe to contact Microsoft-owned domains — filtered by domain exclusion but may match if command line includes temporary paths alongside legitimate URLs
  • IT automation or MDM solutions invoking PowerShell BITS cmdlets to push policy or agent updates to ProgramData directories — correlate with change management records
  • Security scanning tools or EDR agents performing BITS-based telemetry uploads — review logsource and parent process to confirm legitimacy
Download portable Sigma rule (.yml)

Other platforms for T1197


Testing Methodology

Validate this detection against 4 adversary techniques from Atomic Red Team. Each test below lists the behaviour to exercise and the telemetry you should expect to see. Executable commands and cleanup steps are available with Pro.

  1. Test 1BITSAdmin Download from External URL

    Expected signal: Sysmon Event ID 1: Process Create with Image=bitsadmin.exe, CommandLine containing '/transfer' and 'http://127.0.0.1:8080/test.exe' and '%TEMP%\df00tech-test.exe'. Microsoft-Windows-Bits-Client EventID 3 (job created with name 'df00tech-test'). EventID 60 (job error, since no HTTP server is listening at 127.0.0.1:8080 — but job creation telemetry still fires). Security Event ID 4688 (if command line auditing enabled).

  2. Test 2BITS Persistence via SetNotifyCmdLine

    Expected signal: Sysmon Event ID 1: Four separate bitsadmin.exe Process Create events — for /create, /addfile, /SetNotifyCmdLine (CommandLine contains 'cmd.exe /c calc.exe'), and /SetNotifyFlags. Microsoft-Windows-Bits-Client EventID 3 (job creation). If the job errors (no HTTP server), the notify command fires: Sysmon EventID 1 for cmd.exe spawned by svchost.exe (BITS service) with ParentCommandLine containing BITS service context.

  3. Test 3PowerShell Start-BitsTransfer to Suspicious Location

    Expected signal: Sysmon Event ID 1: Process Create with Image=powershell.exe, CommandLine containing 'Start-BitsTransfer' and '$env:APPDATA' and 'payload.exe'. Microsoft-Windows-Bits-Client EventID 3 (job created programmatically). PowerShell ScriptBlock Log EventID 4104 with full Start-BitsTransfer cmdlet parameters. Sysmon EventID 3: Network connection attempt from svchost.exe (BITS service) to 127.0.0.1:8080.

  4. Test 4BITSAdmin Upload for Exfiltration Simulation

    Expected signal: Sysmon Event ID 1: bitsadmin.exe Process Create with '/upload' in CommandLine. Microsoft-Windows-Bits-Client EventID 3 (job created with upload type). Sysmon EventID 3: Outbound network connection from svchost.exe to 127.0.0.1:8080. EventID 60 (job error, connection refused) with upload direction noted in event data.

Unlock Pro Content

Get the full detection package for T1197 including response playbook, investigation guide, and atomic red team tests.

Response PlaybookInvestigation GuideHunting QueriesAtomic Red Team TestsTuning Guidance

Related Detections