15 KiB
Enodia Sentinel Event Rule Reference
Generated from the active exec/syscall/host-event rule defaults plus any configured exec_rules_file entries.
Use enodia-sentinel rules list/show/test to inspect rules and validate event fixtures locally.
Built-in event-rule fixtures live in tests/fixtures/sids/ and can be replayed
with enodia-sentinel rules test tests/fixtures/sids/<sid>-<slug>.json.
Non-event built-in SIDs are covered by safe offline drills in tests/sid_drills.py;
python3 -m unittest tests.test_sid_coverage -v verifies the full registry.
SID 100001: Program executed from a world-writable directory
- Event:
exec - Signature:
exec_rule.fileless-execution - Classtype:
fileless-execution - Severity:
CRITICAL - Origin:
builtin
Match fields:
path_prefixes:/tmp/,/dev/shm/,/var/tmp/
Expected false positives:
- Temporary build or installer helpers intentionally executed from
/tmp,/var/tmp, or/dev/shm. - One-shot administrative diagnostics copied into a writable directory.
Drill or fixture: sentinel-redteam ebpf_exec fires a short-lived writable-path execution event when the eBPF exec monitor is enabled.
SID 100002: Reverse-shell command pattern in execve arguments
- Event:
exec - Signature:
exec_rule.c2-reverse-shell - Classtype:
c2-reverse-shell - Severity:
CRITICAL - Origin:
builtin
Match fields:
argv_regex:/dev/(tcp|udp)/|\b(ba|da|z)?sh\b[^|]*\s-i\b|\bn(c|cat|etcat)\b.*\s-e\b|\bsocat\b.*\bexec|python[0-9.]*\b.*(pty\.spawn|socket\.socket)|perl\b.*\bSocket\b
Expected false positives:
- Security training labs or safe self-tests that intentionally include reverse-shell command text.
- Benign scripts containing literal
/dev/tcporpty.spawnexamples in their argv.
Drill or fixture: sentinel-redteam ebpf_exec emits a /dev/tcp argv fixture; rules test can validate a captured exec JSON event offline.
SID 100003: Web/DB service spawned a shell or interpreter (possible RCE/webshell)
- Event:
exec - Signature:
exec_rule.web-rce - Classtype:
web-rce - Severity:
CRITICAL - Origin:
builtin
Match fields:
exec_comm:ash,bash,dash,ksh,lua,nc,ncat,netcat,perl,php,python,python2,python3,ruby,sh,socat,zshparent_comm:apache,apache2,caddy,catalina,httpd,lighttpd,mariadbd,mysqld,nginx,node,nodejs,php,php-fpm,php7,php8,postgres,redis-server,tomcat
Expected false positives:
- Legitimate web applications invoking maintenance scripts through shell wrappers.
- Database or web service containers whose entrypoint intentionally spawns an interpreter.
Drill or fixture: Use rules test with an exec event whose parent_comm is a web/database service and whose filename is an interpreter.
SID 100004: Download piped directly to a shell (ingress tool transfer)
- Event:
exec - Signature:
exec_rule.ingress-tool-transfer - Classtype:
ingress-tool-transfer - Severity:
HIGH - Origin:
builtin
Match fields:
argv_regex:\b(curl|wget|fetch)\b.*\|\s*(ba|da|z)?sh\b
Expected false positives:
- Bootstrap scripts that intentionally pipe downloaded install content into a shell.
- Developer setup tooling run interactively during provisioning.
Drill or fixture: Use rules test with argv like curl http://example.invalid/x | sh.
SID 100060: mprotect made memory writable and executable
- Event:
syscall - Signature:
syscall_rule.memory-obfuscation - Classtype:
memory-obfuscation - Severity:
CRITICAL - Origin:
builtin
Match fields:
syscalls:mprotectpredicate:built-in predicate
Expected false positives:
- JIT runtimes or emulators that make pages writable and executable.
- Security tooling that deliberately tests W^X policy.
Drill or fixture: Use rules test with syscall mprotect and args[2] containing write+exec permissions, for example 0x6.
SID 100061: mmap requested writable and executable memory
- Event:
syscall - Signature:
syscall_rule.memory-obfuscation - Classtype:
memory-obfuscation - Severity:
CRITICAL - Origin:
builtin
Match fields:
syscalls:mmappredicate:built-in predicate
Expected false positives:
- JIT runtimes, emulators, or language VMs that allocate RWX memory.
- Compatibility layers that request executable writable mappings.
Drill or fixture: Use rules test with syscall mmap and args[2] containing write+exec permissions.
SID 100062: memfd_create used for anonymous in-memory file staging
- Event:
syscall - Signature:
syscall_rule.fileless-execution - Classtype:
fileless-execution - Severity:
MEDIUM - Origin:
builtin
Match fields:
syscalls:memfd_createpredicate:built-in predicate
Expected false positives:
- Browsers, sandbox helpers, and runtimes that legitimately use anonymous memfd files.
- Container or IPC frameworks using memfd as a transport primitive.
Drill or fixture: Use rules test with syscall memfd_create; include text to document the captured name.
SID 100063: ptrace anti-debug or attach operation observed
- Event:
syscall - Signature:
syscall_rule.anti-analysis - Classtype:
anti-analysis - Severity:
HIGH - Origin:
builtin
Match fields:
syscalls:ptracepredicate:built-in predicate
Expected false positives:
- Debuggers, profilers, crash handlers, and endpoint tooling that attach to processes.
- Developer sessions running
strace,gdb, or similar tracing tools.
Drill or fixture: Use rules test with syscall ptrace and request 16 (PTRACE_ATTACH) or 0x4206 (PTRACE_SEIZE).
SID 100064: seccomp sandboxing call observed (possible anti-analysis hardening)
- Event:
syscall - Signature:
syscall_rule.anti-analysis - Classtype:
anti-analysis - Severity:
MEDIUM - Origin:
builtin
Match fields:
syscalls:prctl,seccomppredicate:built-in predicate
Expected false positives:
- Browsers, container runtimes, and sandboxed services enabling seccomp as normal hardening.
- Security test harnesses validating seccomp policy.
Drill or fixture: Use rules test with syscall seccomp, or syscall prctl with arg0 set to 22 (PR_SET_SECCOMP).
SID 100065: cross-process memory read/write syscall observed
- Event:
syscall - Signature:
syscall_rule.credential-access - Classtype:
credential-access - Severity:
HIGH - Origin:
builtin
Match fields:
syscalls:process_vm_readv,process_vm_writevpredicate:built-in predicate
Expected false positives:
- Debuggers, profilers, memory scanners, and EDR tools inspecting another process.
- Backup or checkpoint tooling that reads process memory intentionally.
Drill or fixture: Use rules test with syscall process_vm_readv or process_vm_writev.
SID 100066: memory locking syscall observed (possible protected in-memory payload)
- Event:
syscall - Signature:
syscall_rule.memory-obfuscation - Classtype:
memory-obfuscation - Severity:
MEDIUM - Origin:
builtin
Match fields:
syscalls:mlock,mlock2,mlockallpredicate:built-in predicate
Expected false positives:
- Databases, crypto agents, and credential stores locking sensitive memory.
- Realtime or performance-sensitive services using
mlockintentionally.
Drill or fixture: Use rules test with syscall mlock, mlock2, or mlockall.
SID 100067: Interpreter connected to an unusual public port
- Event:
tcp_connect - Signature:
host_rule.suspicious-egress - Classtype:
suspicious-egress - Severity:
HIGH - Origin:
builtin
Match fields:
events:tcp_connectcomm:ash,bash,curl,dash,fetch,ksh,lua,nc,ncat,netcat,node,nodejs,perl,php,python,python2,python3,ruby,sh,socat,wget,zshpeer_public:Truepeer_port_exclude:22,53,80,123,443,853
Expected false positives:
- Interactive admin scripts that intentionally connect to a non-standard public service.
- Developer tooling using interpreters for custom APIs on high ports.
Drill or fixture: Use rules test with a tcp_connect event whose comm is an interpreter and whose public peer_port is not a common service port.
SID 100068: Interpreter opened a listener on an unusual local port
- Event:
listen - Signature:
host_rule.suspicious-listener - Classtype:
suspicious-listener - Severity:
HIGH - Origin:
builtin
Match fields:
events:listencomm:ash,bash,curl,dash,fetch,ksh,lua,nc,ncat,netcat,node,nodejs,perl,php,python,python2,python3,ruby,sh,socat,wget,zshlocal_port_exclude:22,53,80,123,443,853
Expected false positives:
- Developer HTTP servers, netcat listeners, or local test harnesses intentionally opened from an interpreter.
- Administrative troubleshooting that temporarily listens on a high port.
Drill or fixture: Use rules test with a listen event whose comm is an interpreter and whose local_port is not a common service port.
SID 100069: Interpreter wrote to a persistence path
- Event:
file_write - Signature:
host_rule.persistence-write - Classtype:
persistence-write - Severity:
HIGH - Origin:
builtin
Match fields:
events:file_writecomm:ash,bash,curl,dash,fetch,ksh,lua,nc,ncat,netcat,node,nodejs,perl,php,python,python2,python3,ruby,sh,socat,wget,zshpath_prefixes:/etc/cron.d/,/etc/crontab,/etc/systemd/system/,/etc/ld.so.preload,/root/.ssh/authorized_keys,/etc/sudoers,/etc/sudoers.d/
Expected false positives:
- Installer, configuration-management, or recovery scripts that legitimately write persistence paths from an interpreter.
- Administrative SSH-key or service-unit maintenance performed by a reviewed script.
Drill or fixture: Use rules test with tests/fixtures/sids/100069-interpreter-persistence-write.json.
SID 100070: Permissions or ownership changed on a persistence path
- Event:
chmod,chown - Signature:
host_rule.persistence-permission-change - Classtype:
persistence-permission-change - Severity:
HIGH - Origin:
builtin
Match fields:
events:chmod,chownpath_prefixes:/etc/cron.d/,/etc/crontab,/etc/systemd/system/,/etc/ld.so.preload,/root/.ssh/authorized_keys,/etc/sudoers,/etc/sudoers.d/
Expected false positives:
- Package post-install scripts or configuration-management agents adjusting mode/owner on system service, sudoers, cron, or SSH key files.
- Manual recovery work that repairs permissions after a known-good change.
Drill or fixture: Use rules test with tests/fixtures/sids/100070-persistence-permission-change.json.
SID 100071: Interpreter requested a root UID transition
- Event:
setuid - Signature:
host_rule.privilege-transition - Classtype:
privilege-transition - Severity:
HIGH - Origin:
builtin
Match fields:
events:setuidcomm:ash,bash,curl,dash,fetch,ksh,lua,nc,ncat,netcat,node,nodejs,perl,php,python,python2,python3,ruby,sh,socat,wget,zshtarget_uids:0
Expected false positives:
- Reviewed administrative wrappers that intentionally run interpreters across a root UID transition.
- Privileged installer or service-management scripts during maintenance windows.
Drill or fixture: Use rules test with tests/fixtures/sids/100071-interpreter-setuid-root.json.
SID 100072: Interpreter requested a root GID transition
- Event:
setgid - Signature:
host_rule.privilege-transition - Classtype:
privilege-transition - Severity:
HIGH - Origin:
builtin
Match fields:
events:setgidcomm:ash,bash,curl,dash,fetch,ksh,lua,nc,ncat,netcat,node,nodejs,perl,php,python,python2,python3,ruby,sh,socat,wget,zshtarget_gids:0
Expected false positives:
- Reviewed administrative wrappers that intentionally run interpreters across a root GID transition.
- Privileged installer or service-management scripts during maintenance windows.
Drill or fixture: Use rules test with tests/fixtures/sids/100072-interpreter-setgid-root.json.
SID 100073: Interpreter bound an unusual local port
- Event:
bind - Signature:
host_rule.suspicious-bind - Classtype:
suspicious-bind - Severity:
HIGH - Origin:
builtin
Match fields:
events:bindcomm:ash,bash,curl,dash,fetch,ksh,lua,nc,ncat,netcat,node,nodejs,perl,php,python,python2,python3,ruby,sh,socat,wget,zshlocal_port_exclude:22,53,80,123,443,853
Expected false positives:
- Developer or diagnostic scripts binding high local ports intentionally.
- Short-lived local service wrappers that bind before handing sockets to a supervised process.
Drill or fixture: Use rules test with tests/fixtures/sids/100073-interpreter-unusual-bind.json.
SID 100076: Interpreter accepted inbound traffic on an unusual local port
- Event:
accept - Signature:
host_rule.suspicious-accept - Classtype:
suspicious-accept - Severity:
HIGH - Origin:
builtin
Match fields:
events:acceptcomm:ash,bash,curl,dash,fetch,ksh,lua,nc,ncat,netcat,node,nodejs,perl,php,python,python2,python3,ruby,sh,socat,wget,zshpeer_public:Truelocal_port_exclude:22,53,80,123,443,853
Expected false positives:
- Developer servers or test harnesses accepting inbound public traffic from an interpreter.
- Administrative troubleshooting with temporary netcat/socat listeners.
Drill or fixture: Use rules test with tests/fixtures/sids/100076-interpreter-unusual-accept.json.
SID 100077: Interpreter requested sensitive Linux capabilities
- Event:
capset - Signature:
host_rule.capability-escalation - Classtype:
capability-escalation - Severity:
HIGH - Origin:
builtin
Match fields:
events:capsetcomm:ash,bash,curl,dash,fetch,ksh,lua,nc,ncat,netcat,node,nodejs,perl,php,python,python2,python3,ruby,sh,socat,wget,zshcapabilities_any:CAP_DAC_READ_SEARCH,CAP_NET_ADMIN,CAP_NET_RAW,CAP_SYS_ADMIN,CAP_SYS_MODULE,CAP_SYS_PTRACE
Expected false positives:
- Privileged maintenance scripts that intentionally adjust capabilities during controlled administration.
- Container or network lab setup scripts using interpreters to configure namespaces or packet capture.
Drill or fixture: Use rules test with tests/fixtures/sids/100077-interpreter-capset-sensitive.json.
SID 100078: Kernel module load requested from a writable runtime path
- Event:
module_load - Signature:
host_rule.suspicious-module-load - Classtype:
suspicious-module-load - Severity:
CRITICAL - Origin:
builtin
Match fields:
events:module_loadpath_prefixes:/tmp/,/var/tmp/,/dev/shm/,/run/user/
Expected false positives:
- Kernel development labs loading locally built modules from temporary build directories.
- Driver troubleshooting sessions that intentionally test an unsigned module from a writable path.
Drill or fixture: Use rules test with tests/fixtures/sids/100078-module-load-writable-path.json.