
Jailer ist ein auf eBPF basierendes Prozess-Jailing-System, das eine verbindliche Zugriffskontrolle (MAC) für Linux bereitstellt. Es verfolgt Prozesse mithilfe von BPF-task_storage-Maps und setzt rollenbasierte Richtlinien für Dateizugriff, Netzwerkoperationen und Prozessausführung durch.
Warnung: Dieses Projekt befindet sich in intensiver Entwicklung und ist NICHT bereit für den Produktionseinsatz. APIs, Richtlinienformate und Verhalten können sich ohne Vorankündigung ändern. Nur zu Test- und Experimentierzwecken verwenden.
Hinweis: Dies ist eine unabhängige Implementierung und nicht dasselbe Projekt wie die Lösung von Meta. Obwohl BpfJailer funktional ähnlich und vom ursprünglichen Konzept und Design von Liam Wisehart, Justin Nga, Carl El Khoury, Mansee Chadha bei Meta inspiriert ist, handelt es sich um eine separate, unabhängig entwickelte Codebasis. Wir danken für die Vision und die grundlegenden Konzepte, die diese Arbeit inspiriert haben.
Jailer ist ein eBPF-basiertes Prozess-Isolierungssystem, das eine obligatorische Zugriffskontrolle (MAC) für Linux bereitstellt. Es verfolgt Prozesse mithilfe von BPF-task_storage-Maps und setzt rollenbasierte Richtlinien für Dateizugriff, Netzwerkoperationen und Prozessausführung durch.
| Merkmal | Status | Beschreibung |
|---|---|---|
| Prozessverfolgung | ✅ Funktionsfähig | Verfolgt Prozesse mithilfe der task_storage-BPF-Map |
| Socket-Anmeldung | ✅ Funktionsfähig | Prozesse melden sich über die Unix-Socket-API an |
| Rollenbasierte Richtlinien | ✅ Funktionsfähig | Eingeschränkte und freizügige Rollen |
| Dateizugriffskontrolle | ✅ Funktionsfähig | Datei-Öffnen-Operationen blockieren/erlauben |
| Jail-Vererbung | ✅ Funktionsfähig | Kindprozesse erben das Jail des Elternprozesses |
| Netzwerkkontrolle | ✅ Funktionsfähig | Socket-Bind/Connect blockieren/erlauben |
| Port/Protokoll-Filterung | ✅ Funktionsfähig | Pro-Port-TCP/UDP-Erlauben/Verbieten-Regeln |
| Ausführungskontrolle | ✅ Funktionsfähig | Prozessausführung blockieren/erlauben |
| Pfadabgleich | ✅ Funktionsfähig | Dentry-Walking mit Cache-Invalidierung |
| Signierte Binärdateien | 🚧 Ansatz | Binärsignatur-Validierung (nicht implementiert) |
| Alternative Anmeldung | ✅ Funktionsfähig | Automatische Anmeldung per ausführbare Datei, Cgroup oder Xattr |
| Daemonloser Modus | ✅ Funktionsfähig | Bootstrap-Binärdatei verankert Programme beim frühen Booten |
| Audit-Ereignisse | ✅ Funktionsfähig | Perf-Puffer für systemd-journald-Integration |

BPF_MAP_TYPE_TASK_STORAGE-Unterstützung)# Aktuelle Kernel-Konfiguration prüfen
zcat /proc/config.gz 2>/dev/null || cat /boot/config-$(uname -r)
Erforderliche Optionen:
CONFIG_BPF=y
CONFIG_BPF_SYSCALL=y
CONFIG_BPF_LSM=y
CONFIG_DEBUG_INFO_BTF=y
BPF LSM muss in den Kernel-Boot-Parametern aktiviert sein:
# Prüfen, ob BPF LSM aktiv ist
cat /sys/kernel/security/lsm
# Sollte "bpf" in der Liste enthalten
# Falls nicht, zu den Kernel-Boot-Parametern hinzufügen:
# /etc/default/grub bearbeiten und zu GRUB_CMDLINE_LINUX hinzufügen:
# lsm=lockdown,capability,landlock,yama,apparmor,bpf
# Dann grub aktualisieren und neu starten:
sudo update-grub
sudo reboot
Für Ubuntu/Debian-Systeme kann auch Folgendes verwendet werden:
# Ein Skript erstellen, um BPF LSM zu aktivieren
cat > /tmp/enable_bpf_lsm.sh << 'EOF'
#!/bin/bash
GRUB_FILE="/etc/default/grub"
if grep -q "lsm=" "$GRUB_FILE"; then
sudo sed -i 's/lsm=[^""]*/lsm=lockdown,capability,landlock,yama,apparmor,bpf/' "$GRUB_FILE"
else
sudo sed -i 's/GRUB_CMDLINE_LINUX="\(.*\)"/GRUB_CMDLINE_LINUX="\1 lsm=lockdown,capability,landlock,yama,apparmor,bpf"/' "$GRUB_FILE"
fi
sudo update-grub
echo "BPF LSM aktiviert. Bitte neustarten."
EOF
chmod +x /tmp/enable_bpf_lsm.sh
sudo /tmp/enable_bpf_lsm.sh
# Rust installieren
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Build-Abhängigkeiten installieren (Ubuntu/Debian)
sudo apt-get install -y clang llvm libelf-dev linux-headers-$(uname -r)
# BPF-Ziel für Rust installieren
rustup target add bpfel-unknown-none
cd bpfjail
# BPF-Programme bauen
cd bpfjailer-bpf && cargo build --release && cd ..
# Daemon und Client bauen
cargo build --release
# Als root ausführen (lädt config/policy.json, falls vorhanden)
sudo RUST_LOG=info ./target/release/bpfjailer-daemon
Erwartete Ausgabe:
[INFO] BpfJailer daemon starting...
[INFO] Loading BpfJailer eBPF programs with libbpf-rs...
[INFO] ✓ pending_enrollments map available for enrollment
[INFO] ✓ network_rules map available for port/protocol filtering
[INFO] ✓ task_storage map created successfully
[INFO] ✓ Program task_alloc attached
[INFO] ✓ Program file_open attached
[INFO] ✓ Program socket_bind attached
[INFO] ✓ Program socket_connect attached
[INFO] ✓ Program bprm_check_security attached
[INFO] Initialized with default roles: restricted (1), permissive (2)
[INFO] Loaded policy from config/policy.json
[INFO] Loaded 5 roles
[INFO] Enrollment server listening on /run/bpfjailer/enrollment.sock
# Sicherheitslücken-Tests OHNE Jail ausführen (zeigt erfolgreiche Angriffe)
sudo python3 tests/vulnerable_apps/run_tests.py
# Sicherheitslücken-Tests MIT eingeschränkter Rolle ausführen (zeigt blockierte Angriffe)
sudo python3 tests/vulnerable_apps/run_tests.py --role 1
# Bestimmten Test ausführen
sudo python3 tests/vulnerable_apps/run_tests.py --role 1 --test path
# Verfügbare Tests und Rollen auflisten
sudo python3 tests/vulnerable_apps/run_tests.py --list
Beispielausgabe mit eingeschränkter Rolle:
============================================================
TEST: Path Traversal / Arbitrary File Read
============================================================
Attempting to read /etc/passwd via path traversal...
BLOCKED - Permission denied (BpfJailer blocked file access)
============================================================
TEST: Command Injection
============================================================
Attempting command injection...
BLOCKED - Permission denied (BpfJailer blocked exec)
============================================================
TEST: Reverse Shell / Data Exfiltration
============================================================
Test 1: Reverse shell connection to 127.0.0.1:4444
BLOCKED - Permission denied (BpfJailer blocked connect)
| Test | Schwachstelle | Abgemildert durch |
|---|---|---|
path_traversal | Beliebiges Dateilesen via ../ | restricted, isolated |
command_injection | Shell-Befehlsausführung | restricted, webserver, isolated |
reverse_shell | Ausgehende Verbindungen zum Angreifer | restricted, isolated |
ssrf | Zugriff auf interne Dienste/Cloud-Metadaten | restricted, isolated |
arbitrary_write | Schreiben in sensible Pfade | restricted |
crypto_miner | Herunterladen + Ausführen + Verbinden zum Pool | restricted, webserver |
privilege_escalation | shadow lesen, sudoers schreiben | restricted |
#!/usr/bin/env python3
import socket
import json
import os