Skip to content
Detection Engineering

The 23 Correlations: What a Full-Stack Security Agent Can See

15 min read

A single security event rarely tells the full story. A port scan is noise. A failed SSH login is noise. A file hash change is noise. But a port scan followed by a successful SSH login followed by a new crontab entry within 30 minutes from the same IP? That is an intrusion. That is a correlation.

Inner Warden ships with 23 correlation rules that connect events across five layers: firmware, kernel, userspace, network, and honeypot. Each rule defines a sequence of stages, a time window, and an entity pivot (the shared identifier that links the stages together). This post is the complete reference. Every rule, every scenario, every layer involved.

How correlation works

When an event matches the first stage of a correlation rule, a pending chain is created. Subsequent events that match later stages and share the entity pivot advance the chain. When all required stages match within the time window, the chain completes and a correlated incident fires at the rule's severity level.

Anatomy of a correlation rule
ID:          CL-XXX
Name:        Human-readable name
Stages:      Ordered sequence of event matchers
  Stage N:   Layer + kind pattern + entity_must_match
Time window: Max seconds between first and last stage
Entity pivot: IP | PID | User | ContainerID
Severity:    Critical | High
Confidence:  0.6 - 0.9 (higher = fewer false positives)

Pending chains are bounded at 1,000 per rule. When the limit is reached, the oldest chain is evicted. Real attacks complete their chains quickly, so this bound only affects noisy scanners that never progress past stage 1.

Firmware chains

These rules begin with firmware-layer events. They detect attacks that start below the operating system and work their way up into userspace. Only Inner Warden can see these because only Inner Warden has firmware-layer collectors.

CL-001: Firmware to Rootkit Chain

A firmware integrity event fires (MSR write, SPI access, ACPI anomaly), followed by privilege escalation at the kernel level, followed by a kernel module load. This is the classic firmware-resident rootkit installation path. The attacker modifies firmware to survive reboots, escalates to ring 0, and loads a kernel module to hide their presence.

FirmwarethenKernelthenKernelWindow: 60 min | Critical
CL-004: MSR Write to Log Tampering

MSR write to a critical register (LSTAR, SMRR, or FEATURE_CONTROL) followed by process injection or privilege escalation, followed by log file tampering. The attacker redirects the syscall entry point via LSTAR to gain kernel execution, then injects into a running process, then cleans up logs to cover their tracks. Each stage individually could have an innocent explanation. Together within 10 minutes, they do not.

FirmwarethenKernelthenUserspaceWindow: 10 min | Critical
CL-016: TPM Integrity Failure Followed by Attack

An EFI variable integrity failure or ACPI anomaly fires, followed by a major attack (ransomware, rootkit, or reverse shell) within 48 hours. The long window reflects the fact that firmware-level compromise may sit dormant before the attacker activates their payload. The firmware anomaly alone might be dismissed as a BIOS update. When it precedes an actual attack, it retroactively becomes critical evidence of pre-compromise.

FirmwarethenUserspaceWindow: 48 hours | Critical

Network chains

These rules involve network-layer events: connections, scans, C2 beacons, and data exfiltration. They correlate network activity with what is happening at the kernel and userspace levels.

CL-002: Recon to Exfiltration Chain

Port scan from an IP, followed by SSH bruteforce or credential stuffing from the same IP, followed by data exfiltration or outbound anomaly from the same IP. This is the textbook attack lifecycle: recon, access, exfil. Each stage escalates. The entity pivot is the source IP, and the 30-minute window is tight enough to reduce false correlations while covering automated attack chains.

NetworkthenUserspacethenNetworkWindow: 30 min | Critical
CL-007: Reverse Shell (eBPF Sequence)

Outbound connect() to an external IP followed by dup2() redirecting file descriptors 0, 1, or 2 to that socket. Same PID must perform both. This is the definitive reverse shell detection at the syscall level, impossible to evade with command-line obfuscation. The 10-second window is intentionally tight because the connect-to-dup2 sequence completes in milliseconds.

NetworkthenKernelWindow: 10 sec | Critical
CL-008: Data Exfiltration (eBPF Sequence)

A sensitive file read (credentials, keys, configuration files) followed by an outbound connect to an external IP from the same process. The 60-second window accounts for the time between reading the file and establishing the network connection. Entity pivot is PID. This catches "read-then-send" patterns regardless of the exfiltration method (curl, wget, netcat, or custom binaries).

UserspacethenNetworkWindow: 60 sec | High
CL-017: io_uring Evasion Detection

io_uring submission ring activity followed by an outbound network connection from the same process. io_uring bypasses traditional syscall monitoring because I/O operations happen through shared memory rings instead of syscalls. Attackers use io_uring to read files and write to sockets without triggering tracepoints. Inner Warden monitors io_uring_submit and io_uring_create specifically to catch this evasion technique.

KernelthenNetworkWindow: 60 sec | High

Execution chains

These rules focus on attack chains that involve code execution, process manipulation, and privilege escalation. They connect kernel-level observations (eBPF tracepoints) with userspace outcomes.

CL-005: Container Escape to Host

Container drift or escape detected (overlayfs upper-layer write, namespace breakout), followed by command execution, followed by privilege escalation via commit_creds. The attacker breaks out of a container, runs commands on the host, and escalates to root. Entity pivot transitions from container ID to PID lineage as the attacker crosses the boundary.

KernelthenUserspacethenKernelWindow: 10 min | Critical
CL-006: Fileless Malware Chain

memfd_create (creates an anonymous file in memory) followed by mprotect (changes memory protection to executable) followed by outbound connect. The attacker creates an in-memory file, makes it executable, and connects to a C2 server. Nothing touches disk. No file to scan. No hash to match. Only the syscall sequence reveals the attack.

KernelthenKernelthenNetworkWindow: 5 min | Critical
CL-011: Credential Theft to Lateral Movement

Credential harvesting (reading /etc/shadow, SSH keys, AWS credentials) followed by lateral movement or SSH key injection to another host. The attacker steals credentials from one machine and uses them to move to the next. Same PID or user entity pivot. This catches the pivoting phase of an attack before the attacker establishes persistence on the new host.

UserspacethenUserspaceWindow: 30 min | Critical
CL-012: Multi-Persistence Installation

Crontab or systemd unit creation followed by SSH key injection or new user creation. Attackers who install multiple persistence mechanisms are establishing deep access. A single crontab might be legitimate administration. But a crontab and a new SSH key and a new user account within an hour? That is an attacker making sure they can get back in.

UserspacethenUserspaceWindow: 60 min | Critical
CL-013: Web Shell Deployment

Web scan activity (directory enumeration, vulnerability probing) followed by a file write to a web-accessible directory, followed by web shell detection. The attacker probes the web application for weaknesses, exploits one to upload a PHP or JSP shell, and then uses that shell for command execution. Entity pivot is the source IP across all three stages.

NetworkthenUserspacethenUserspaceWindow: 30 min | Critical
CL-014: Cryptominer Deployment Chain

Command execution or outbound download followed by crypto mining activity (high CPU in cgroup, known miner process names, stratum protocol connections). Cryptojacking is the most common outcome of automated server compromise. The attacker downloads the miner, runs it, and consumes your CPU. The two-stage chain catches this faster than waiting for CPU alerts alone.

UserspacethenUserspaceWindow: 10 min | High

Post-compromise chains

These rules detect what attackers do after gaining access. They cover honeypot-to-production pivoting, silence after compromise, multi-signal elevation, and log tampering.

CL-003: Honeypot to Real Attack

An attacker interacts with the SSH or HTTP honeypot, then the same IP appears in real authentication logs or network events. The credentials or reconnaissance gathered from the honeypot were used against production systems. This is one of the most actionable correlations: the honeypot revealed attacker intent, and now that intent is being executed on real infrastructure.

HoneypotthenUserspaceWindow: 60 min | High
CL-009: Silence After Compromise

A High or Critical incident fires, and within 5 minutes the event rate drops by 80% or more. The attacker is killing logging. This is a special rule handled by the baseline engine rather than the stage-matching engine. It detects the absence of events, which is something no pattern-matching system can do. The silence itself becomes evidence.

AnythenSilenceWindow: 5 min | High
CL-010: Multi-Low Severity Elevation

Three or more different Low-severity detectors fire for the same IP within 10 minutes. Each individual event is minor: a failed login, a port probe, a suspicious user-agent. But multiple different detectors triggering for the same entity suggests a multi-vector probe that warrants attention. This rule elevates the combined signal to High severity.

MultiplecombinedMultipleWindow: 10 min | High
CL-015: Post-Compromise Log Tampering

Privilege escalation, reverse shell, or SSH bruteforce followed by log file tampering (truncation, deletion, or modification of auth.log, syslog, or audit logs). Attackers clean up after themselves. This rule catches the cleanup phase and links it back to the initial compromise, providing the full picture even when the attacker deletes the evidence of the first stage.

UserspacethenUserspaceWindow: 10 min | Critical

Advanced chains

These rules target sophisticated attack techniques: eBPF weaponization, memory injection, container-based lateral movement, ransomware encryption, malware with C2 callbacks, and Sigma-detected anomalies combined with privilege escalation.

CL-018: eBPF Program Weaponization

An unauthorized eBPF program loads (detected by the LSM bpf hook), followed by privilege escalation or process injection. The attacker uses eBPF itself as an attack vector, loading a malicious program that manipulates kernel data structures. This is the VoidLink-style attack where offensive tooling uses the same eBPF capabilities that defensive tools rely on.

KernelthenKernelWindow: 5 min | Critical
CL-019: Memory Injection to C2

RWX memory allocation (writable and executable, a hallmark of shellcode) or anonymous memory mapping followed by an outbound connection. The attacker allocates executable memory, writes shellcode into it, and the shellcode connects to a command-and-control server. PID pivot ensures both events come from the same process. The 2-minute window captures even slow multi-stage loaders.

KernelthenNetworkWindow: 2 min | Critical
CL-020: Container as Lateral Movement Vector

Docker activity (image pull, container creation) followed by command execution inside the container, followed by outbound network connection. Attackers pull a malicious Docker image that contains their tools, run it, and use it to pivot to other hosts or exfiltrate data. The container provides a clean execution environment that bypasses host-level file integrity monitoring.

UserspacethenUserspacethenNetworkWindow: 5 min | High
CL-021: Ransomware Encryption Chain

Encrypted file writes or ransomware burst activity (many files renamed with new extensions in rapid succession) followed by mass file modifications detected by integrity monitoring. The 60-second window is tight because ransomware acts fast. The 0.9 confidence threshold triggers immediate automated response: kill the process, isolate the host, alert the operator.

UserspacethenUserspaceWindow: 60 sec | Critical
CL-022: Malware Execution with C2 Callback

A YARA rule matches on a file or process memory, followed by an outbound connect or C2 callback pattern from the same process. The YARA match identifies the malware. The network connection confirms it is active and communicating. Together they provide definitive evidence of a running malware sample, not just a dormant file on disk.

UserspacethenNetworkWindow: 5 min | Critical
CL-023: Sigma Alert Escalated by Privilege Change

A Sigma detection rule fires (any severity), followed by privilege escalation detected by the commit_creds kprobe. Sigma rules are community-maintained detections for known attack patterns. When a Sigma match is followed by a privilege change in the same process, the combined signal is much stronger than either alone. This bridges the gap between community-sourced intelligence and kernel-level confirmation.

UserspacethenKernelWindow: 10 min | Critical

The big picture

Twenty-three rules. Five layers. Time windows from 10 seconds to 48 hours. Entity pivots by IP, PID, user, and container ID. This is what becomes possible when you have full-stack visibility in a single agent.

A SIEM could theoretically express some of these rules, but it would need log sources from five different tools, schema normalization across all of them, and the correlation would happen minutes or hours after the events. Inner Warden correlates in memory, in real time, on the host where the events originate. The difference is not just speed. It is the ability to act: kill a process, block an IP, and alert the operator before the attack chain completes.

Quick reference

IDNameWindowSeverity
CL-001Firmware to Rootkit Chain60 minCritical
CL-002Recon to Exfiltration Chain30 minCritical
CL-003Honeypot to Real Attack60 minHigh
CL-004MSR Write to Log Tampering10 minCritical
CL-005Container Escape to Host10 minCritical
CL-006Fileless Malware Chain5 minCritical
CL-007Reverse Shell (eBPF Sequence)10 secCritical
CL-008Data Exfiltration (eBPF Sequence)60 secHigh
CL-009Silence After Compromise5 minHigh
CL-010Multi-Low Severity Elevation10 minHigh
CL-011Credential Theft to Lateral Movement30 minCritical
CL-012Multi-Persistence Installation60 minCritical
CL-013Web Shell Deployment30 minCritical
CL-014Cryptominer Deployment Chain10 minHigh
CL-015Post-Compromise Log Tampering10 minCritical
CL-016TPM Integrity Failure + Attack48 hoursCritical
CL-017io_uring Evasion Detection60 secHigh
CL-018eBPF Program Weaponization5 minCritical
CL-019Memory Injection to C22 minCritical
CL-020Container as Lateral Movement5 minHigh
CL-021Ransomware Encryption Chain60 secCritical
CL-022Malware Execution with C25 minCritical
CL-023Sigma Alert + Privilege Escalation10 minCritical

What to do next