Detect Trap in Sumo Logic CSE
Adversaries may establish persistence by executing malicious content triggered by an interrupt signal using the trap command. The trap command is used in Unix/Linux shell scripting to specify commands that will execute when the shell receives a particular signal. Adversaries can abuse the trap command to establish persistence that executes when the shell or system receives specific signals such as EXIT (when the shell exits), ERR (on error), or signal numbers like SIGINT (2), SIGHUP (1), or SIGTERM (15). The trap command can be placed in shell initialization files to execute malicious commands whenever a user session ends or encounters an error.
MITRE ATT&CK
- Tactic
- Privilege Escalation Persistence
- Technique
- T1546 Event Triggered Execution
- Sub-technique
- T1546.005 Trap
- Canonical reference
- https://attack.mitre.org/techniques/T1546/005/
Sumo Detection Query
_sourceCategory=linux* OR _sourceCategory=syslog*
| where (%"message" matches /\btrap\b/ or _raw matches /\btrap\b/)
| where _raw matches /(?i)(EXIT|SIGTERM|SIGHUP|SIGINT|\bERR\b)/
| where _raw matches /(?i)(curl|wget|\bnc\s|ncat|\/dev\/tcp|bash\s+-i|python[23]?\s+-c|perl\s+-e|base64|\beval\b)/
| parse regex field=_raw "CMD\s*=\s*(?P<command_line>.+)" nodrop
| parse regex field=command_line "trap\s+(?P<trap_payload>.+?)\s+(?:EXIT|SIGTERM|SIGHUP|SIGINT|ERR|\d+)" nodrop
| fields _messageTime, _sourceHost, _sourceCategory, command_line, trap_payload
| sort by _messageTime desc Sumo Logic CSE query targeting Linux syslog and auditd sources for shell commands that combine a trap signal handler with suspicious execution payloads. Extracts the command line and trap payload for analyst review. Detects T1546.005 abuse where adversaries embed reverse shells, downloaders, or code evaluators inside trap handlers triggered by session exit or error conditions.
Data Sources
Required Tables
False Positives & Tuning
- CI/CD pipeline runners that use trap handlers to clean up resources and report status to external APIs on script exit
- Database backup scripts that use trap EXIT with curl-based alerting to PagerDuty or Slack webhooks
- Security scanning tools that use trap-based cleanup routines involving base64-encoded configuration teardown
Other platforms for T1546.005
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.
- Test 1Establish EXIT Trap in Interactive Shell
Expected signal: Process creation event for bash with command line containing 'trap' and 'EXIT'. The curl invocation in the trap payload. When the shell exits, a child process for curl is spawned by the shell process.
- Test 2Add SIGTERM Trap to Shell Config
Expected signal: File modification event for ~/.bashrc. Process creation for bash writing the trap via echo. The trap payload in the file contains wget and chmod+execute pattern — high severity indicator.
- Test 3Trap ERR Signal for Stealthy Execution
Expected signal: Process creation for bash -c with trap ERR in command. The ls command fails with non-zero exit (directory doesn't exist), triggering the ERR trap. Child process (echo) spawned from the bash session. File creation event for /tmp/trap_test.txt.
Unlock Pro Content
Get the full detection package for T1546.005 including response playbook, investigation guide, and atomic red team tests.