T1036.009 IBM QRadar · QRadar

Detect Break Process Trees in IBM QRadar

An adversary may attempt to evade process tree-based analysis by modifying executed malware's parent process ID (PPID). If endpoint protection software leverages the parent-child relationship for detection, breaking this relationship could result in the adversary's behavior not being associated with previous process tree activity. On Linux systems, adversaries may execute a series of Native API calls to alter malware's process tree. For example, adversaries can execute their payload without any arguments, call the fork() API call twice, then have the parent process exit. This creates a grandchild process with no parent process that is immediately adopted by the init system process (PID 1), which successfully disconnects the execution of the adversary's payload from its previous process tree. Another example is using the daemon syscall to detach from the current parent process and run in the background.

MITRE ATT&CK

Tactic
Defense Evasion
Technique
T1036 Masquerading
Sub-technique
T1036.009 Break Process Trees
Canonical reference
https://attack.mitre.org/techniques/T1036/009/

QRadar Detection Query

IBM QRadar (QRadar)
sql
SELECT
  DATEFORMAT(starttime, 'yyyy-MM-dd HH:mm:ss') AS EventTime,
  sourceip AS HostIP,
  "username" AS AuditUID,
  "pid" AS ProcessID,
  "ppid" AS ParentPID,
  "exe" AS Executable,
  "syscall" AS SyscallNumber,
  COUNT(*) AS ForkCount,
  MIN(starttime) AS FirstSeen,
  MAX(starttime) AS LastSeen,
  (MAX(starttime) - MIN(starttime)) / 1000 AS TimeDeltaSeconds
FROM events
WHERE LOGSOURCETYPEID IN (
  SELECT id FROM logsourcetypes WHERE name LIKE '%Linux%' OR name LIKE '%Auditd%'
)
  AND ("syscall" = '57' OR "syscall" = '58' OR "syscall" = '56')
  AND starttime > (NOW() - 86400000)
GROUP BY
  sourceip, "username", "pid", "exe", "syscall",
  TRUNCATE(starttime / 60000)
HAVING COUNT(*) >= 2
  AND (MAX(starttime) - MIN(starttime)) / 1000 <= 5
ORDER BY ForkCount DESC
high severity medium confidence

Detects rapid consecutive invocations of fork (syscall 57), vfork (syscall 58), or clone (syscall 56) by the same process within a 5-second window using Linux auditd data. A ForkCount of 2 or more within this window is the canonical signature of the double-fork daemonization idiom used by adversaries to detach malware from its original parent and be reparented by PID 1, breaking process tree analysis.

Data Sources

QRadar Linux OS log sourceSyslog/auditd forwarded via QRadar WinCollect or syslog sourceAuditbeat forwarded to QRadar via Syslog

Required Tables

events

False Positives & Tuning

  • Web servers using pre-fork concurrency models (Apache httpd with MPM prefork, Gunicorn, Unicorn) generate multiple rapid fork() calls during worker process initialization, which will exceed the ForkCount threshold during startup or reload.
  • Database systems such as PostgreSQL and MySQL fork new backend processes for each incoming connection, producing high-frequency fork syscall events that will match this detection during peak load.
  • Build systems and parallel compilation pipelines (GNU make -j, Ninja, Bazel) fork dozens of worker processes in rapid succession during software builds and will trigger this query across CI/CD hosts.
Download portable Sigma rule (.yml)

Other platforms for T1036.009


Testing Methodology

Validate this detection against 3 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 1Double Fork Process Tree Break

    Expected signal: Auditd SYSCALL records for fork/clone syscalls (57/56) from bash. The resulting 'sleep 120' process will show PPID=1 in process listings. Syslog may record the orphaned process adoption.

  2. Test 2Daemon Syscall via Python

    Expected signal: Auditd SYSCALL records for fork (57) and setsid (112) syscalls from python3. The grandchild python3 process will show PPID=1 and a new session ID (SID) in process status. /proc/<pid>/status will show PPid=1.

  3. Test 3Nohup Background Process Detachment

    Expected signal: Auditd SYSCALL records for fork/clone from bash, followed by the nohup process. The sleep process may show PPID=1 after the parent shell exits. Process creation event from Sysmon for Linux (if deployed) shows nohup spawning sleep.

Unlock Pro Content

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

Response PlaybookInvestigation GuideHunting QueriesAtomic Red Team TestsTuning Guidance

Related Detections