The Extended Berkeley Packet Filter (eBPF) was created to make Linux more observable and secure. It extends kernel functionality without requiring new modules or recompilation, enabling precise monitoring, tracing, and policy enforcement at runtime. For defenders, it promised transparency. For attackers, it opened a new space to hide.
Over the past decade, researchers have confirmed that eBPF’s legitimate capabilities can be turned against the systems they protect. Proofs-of-concept and targeted campaigns have shown that eBPF can intercept traffic, mask activity, and manipulate kernel behavior without surfacing in user-space logs. Operating inside trusted kernel space, eBPF sits below the reach of most audit frameworks and endpoint agents — invaluable for observability, but difficult to monitor once it’s abused.
The Linux kernel community has responded with verifier improvements, privilege restrictions, and ongoing hardening efforts. These changes have made unprivileged attacks far less practical, but they haven’t closed the visibility gap. Defenders still struggle to see what happens inside the kernel once eBPF programs are loaded and running.
Our research explores that gap: how eBPF became an essential Linux feature, how misuse developed, and why detection continues to lag behind. It draws on verified CVEs, public proofs-of-concept, and 2025 campaign analyses to map eBPF’s evolution from a trusted instrumentation layer into a security blind spot at the core of the Linux kernel.
eBPF entered the Linux kernel as a leap forward for observability. It lets administrators run verified code directly in kernel space safely, in theory, to trace events, monitor performance, and enforce policy without adding modules or recompiling. The verifier was built to keep that promise, checking every instruction before it could touch kernel memory.
But over time, the verifier itself became part of the problem. As new features were added, the logic grew harder to reason about. A single arithmetic slip or pointer check could open paths the verifier was meant to close. What started as a safety net turned into a recurring source of privilege bugs.
Each generation of these flaws followed the same pattern: as eBPF grew more capable, the verifier’s attack surface expanded with it. More complexity meant more places to hide a mistake, and attackers learned how to find them.
As eBPF matured, researchers began testing how far its capabilities could stretch. What started as observability experiments evolved into controlled demonstrations of stealth and persistence inside the Linux kernel. These weren’t active attacks; they were technical proofs showing what an attacker could do once root access was already obtained. 
The turning point came with Black Hat’s With Friends Like eBPF, Who Needs Enemies?, which showed how eBPF could run hidden logic directly in kernel space. After that, open-source rootkits appeared: Boopkit, TripleCross, and ebpfkit, each built to test how much control could be achieved without modifying the kernel itself.
For defenders, that’s where the blind spot came into focus. Programs operating at this layer don’t appear in /proc, system logs, or audit trails. Even a secured Linux host can run hostile logic beneath the view of traditional EDR or forensics.
This phase didn’t mark a new attack wave. It marked a visibility failure. Once the security community saw how legitimate kernel logic could be repurposed for stealth, the question changed from “Is eBPF dangerous?” to “Why can’t we see it?”
By the time eBPF-based rootkits moved from research to real deployments, the Linux security community had started to adapt. The first responses weren’t about containment — they were about visibility. If attackers could hide in the kernel, defenders needed a way to see there, too.
Red Canary’s analysis of eBPF-based malware captured this shift clearly. It marked eBPF implants as a distinct Linux malware class, noting that they operated entirely within verifier-approved boundaries. No kernel modules, no syscall hooks, and no traces in /proc. The problem wasn’t access; it was observability.
That insight shaped the next wave of defensive innovation. Aqua Security’s Tracee used eBPF itself to instrument the kernel for runtime detection, surfacing process creation, privilege changes, and network events without invasive hooks. Red Canary expanded that approach with eBPFmon, designed to watch eBPF activity in real time and flag unapproved programs or maps before they could be abused.
The eBPF Foundation’s threat model and verifier audit were built on those lessons, calling for token-based verifier access and stricter limits on unprivileged use. The Linux kernel community, meanwhile, continued to harden verifier logic and tighten boundaries around privileged loading. Together, these changes reflected a coordinated awareness: eBPF wasn’t a threat by design. It was a visibility challenge by omission.
eBPF was no longer an obscure subsystem buried in kernel docs. It became part of the active threat landscape and the toolkit used to defend it. Progress is visible but uneven. Many SOC pipelines still can’t correlate eBPF behavior or state across hosts, leaving partial sight lines into the kernel.
Linux security isn’t about isolating eBPF; it’s about integrating it responsibly. Visibility, not restriction, remains the real defense.
Our latest research confirms that eBPF-based persistence is no longer confined to demonstrations or security conferences. BPFDoor represents the first observed case of an eBPF backdoor operating on production Linux systems — not through kernel exploits, but through legitimate hooks repurposed for control.
The implant constructs its communication channel using packet filters, allowing it to monitor and manipulate network traffic directly within the kernel. Commands and responses blend seamlessly with normal traffic. Because it uses eBPF itself as the delivery mechanism, there’s no module load, no filesystem artifact, and almost no process-level footprint. Traditional detection tools that monitor binaries and syscalls see nothing unusual.
Forensic review of confirmed infections shows a consistent pattern: persistence through pinned eBPF maps, command execution via hidden network triggers, and control traffic masquerading as routine system activity. Each component fits within verifier-approved behavior, meaning even hardened kernels allow it to run as designed.
In response, new community frameworks now focus on surfacing eBPF state in real time. Early prototypes can list loaded programs, trace active maps, and compare signatures against baseline system behavior. They’re not perfect, but they mark a shift toward kernel-layer observability that defenders haven’t had before.
The key insight from this stage of research isn’t just that eBPF can be abused; it’s that the boundary between instrumentation and intrusion is thinner than anyone expected. BPFDoor didn’t exploit a vulnerability; it exploited design trust. That’s the real challenge for Linux security moving forward: building visibility into the parts of the kernel that were never designed to hide, yet now can.
Most Linux defenses still look in the wrong place. Antivirus and EDR tools monitor user-space processes, file activity, and network sockets, but eBPF operates at a lower level. Once a program attaches to the kernel, it can operate quietly through tracepoints, kprobes, traffic control, or XDP hooks without ever triggering a user-space alert.
That invisibility is built into the design. Syslog and auditd don’t log eBPF activity. Even when malicious code runs in kernel space, nothing looks out of place. A defender checking system logs will see silence. Run bpftool prog show, however, and the truth appears: active programs that don’t exist anywhere else in process listings or endpoint dashboards.
The LinuxSecurity.com research team confirmed this gap while reviewing open detection frameworks such as Windshock, which notes plainly: “Linux antivirus solutions cannot monitor in-kernel eBPF activity.” The issue isn’t a lack of sensors; it’s that existing telemetry doesn’t reach deep enough to see where eBPF runs.
This visibility problem is uniquely Linux. On other platforms, comparable hooks are exposed through monitored APIs or signed driver models. eBPF executes inside trusted kernel space, under the same permissions as the system itself. That makes it both powerful and opaque, a place where normal defensive tooling simply can’t see.
Building visibility into eBPF activity doesn’t require intrusive scans or exploit testing — it starts with basic enumeration. Every Linux defender should be able to list what’s loaded into kernel space and confirm that what’s running matches what should be there.
Step 1 — Enumerate Active Programs and Maps
Use bpftool to list loaded programs and pinned maps directly from kernel space:
bpftool -j prog show > /tmp/ebpf-progs.json bpftool -j map show > /tmp/ebpf-maps.json ls /sys/fs/bpfThese commands capture every active eBPF object, even those invisible to user-space process listings or traditional endpoint agents.
Step 2 — Correlate Activity with Runtime Tools
Pair bpftool with runtime detectors such as Tracee or Falco to flag load and attach events in real time. Compare that telemetry with system logs or audit data to confirm what conventional visibility misses.
Step 3 — Establish a Baseline
Export eBPF program and map data as JSON artifacts and track them over time. Regular snapshots help identify unauthorized loads or configuration drift before they turn into persistence.
All of these steps are non-invasive and safe to run on production systems. They don’t modify kernel state or interfere with running workloads. For enterprise Linux environments, this method is the foundation of eBPF visibility — a low-friction way to prove what’s really running at the kernel level and start closing one of Linux security’s most persistent blind spots.
Visibility only matters if it leads to action. Once defenders understand how to identify eBPF activity, the next step is to minimize its potential for abuse without disabling it entirely. These are Linux-native controls that keep eBPF functional for observability while closing the paths attackers use most.
Restrict Capabilities and Privileges
Limit what processes can do before they ever reach the kernel.
echo 1 > /proc/sys/kernel/unprivileged_bpf_disabled This ensures only trusted, privileged processes can load kernel-level programs.
Hardened Kernel Configuration
Enforce mandatory access controls that limit direct BPF system calls. SELinux and AppArmor can both confine eBPF execution through targeted policy modules. These settings block unauthorized probes and ensure only approved daemons can attach to tracepoints or sockets.
Enhance Monitoring and Detection
Extend runtime monitoring with tools like Tracee or Falco. Create or import rules that flag unexpected eBPF program loads, unloads, or unusual attachment events. When correlated with baseline data, those alerts mark the difference between legitimate observability and suspicious kernel activity.
Validate with Forensic Snapshots
When compromise is suspected, virtualization or hypervisor snapshots provide a clean way to examine persistent kernel-resident eBPF programs. Memory forensics has proven effective for uncovering these implants in controlled environments. Periodic forensic validation ensures that visibility doesn’t stop when systems are offline.
Apply Trusted Guidance
The eBPF Foundation’s threat model and verifier audit outlines clear deployment recommendations, including tokenized verifier access and limited unprivileged BPF operations. Following those guidelines keeps implementations aligned with upstream security priorities.
With these controls in place, Linux defenders can maintain the visibility eBPF was built for while denying attackers the invisibility they’ve learned to exploit.
eBPF isn’t going away; it’s becoming essential. Modern observability and security frameworks depend on it to trace kernel events in real time. But as adoption grows, so does attacker opportunity. Malicious eBPF programs can blend with legitimate telemetry agents, making detection harder for defenders focused only on the user space.
Future defenses will hinge on stronger verification and provenance controls — kernel-level signing, token-based verifier access, and continuous inspection of runtime eBPF state. Research is already exploring these directions, including kernel-level hidden rootkit detection using eBPF itself, where the same framework that attackers abuse becomes the engine for defense.
For that to work, Linux needs consistent telemetry standards that reach the kernel layer. SOCs and enterprise defenders must treat kernel-space observability as a first-class requirement, not a niche tool for debugging.
eBPF’s future isn’t about restriction; it’s about clarity. The more transparent its operation becomes, the harder it is to hide within it.
eBPF was built to strengthen Linux visibility and control. It succeeded, but that same capability has created new terrain for attackers. What began as an observability framework has evolved into a critical security surface, one that defenders can no longer afford to ignore.
The evidence forms a clear arc from verifier flaws and public rootkits to modern detection frameworks and confirmed operations like BPFDoor. Each phase reinforces one message: Linux security no longer stops at the kernel boundary.
Defenders now face a dual responsibility: to use eBPF for visibility while ensuring that visibility extends to eBPF itself. The technology isn’t a threat to be removed, but rather a system to understand, instrument, and monitor.
eBPF is the kernel’s own security engine. The challenge, and opportunity, for the Linux community is learning how to secure it with the same precision it was designed to provide.