Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
Z-Jail — Eine leichtgewichtige, mehrschichtige Linux-Sandbox, die Namensräume, pivot_root, seccomp-bpf, Capability-Dropping und eine evidenzbasierte Bewertungsengine (Truthimatics Public Version) für sichere, nachvollziehbare Codeausführung kombiniert. | Kitploit
Tools/GitHubGitHub/division-36/z-jail
DefensivwerkzeugePrivilege EscalationContainer-SicherheitDynamische Analyse (Sandboxing)IDS/IPS-UmgehungForensikCTFBinäranalyseLernen & BildungLabs & Praxis
GitHubdivision-36/z-jail

Z-Jail

7412vor 26 TagenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Eine leichtgewichtige, mehrschichtige Linux-Sandbox, die Namensräume, pivot_root, seccomp-bpf, Capability-Dropping und eine evidenzbasierte Bewertungsengine (Truthimatics Public Version) für sichere, nachvollziehbare Codeausführung kombiniert.

Repository anzeigen
Z-Jail

Z-Jail

Mehrschichtige Sandbox für die Ausführung von nativem Code unter Linux.
Sieben unabhängige Verteidigungsschichten – keine externen Abhängigkeiten, ~73 KiB PIE-Binärdatei.


root@kitploit:~
┌──────────────────────────────────────────────────────┐
│                    Z-Jail                            │
├──────────────────────────────────────────────────────┤
│  Truthimatics PV  (evidenzbasierte Bewertungsengine) │
│  Namespaces       (mount, pid, net, ipc, uts)        │
│  pivot_root       (chroot unter Steroiden)           │
│  Capabilities     (alle entfernen, securebits sperren)│
│  NO_NEW_PRIVS     (keine Privilegienerhöhung)        │
│  seccomp-BPF      (Whitelist: nur 15 Syscalls)       │
│  Audit            (JSON-Logging + BLAKE2b-Hashing)   │
└──────────────────────────────────────────────────────┘

Inhaltsverzeichnis

  • Schnellstart
  • Warum Z-Jail
  • Architektur
  • Schichten
  • Verwendung
  • Build & Installation
  • Tests
  • Leistung
  • Bedrohungsmodell
  • Dokumentation
  • Roadmap
  • Lizenz

Schnellstart

root@kitploit:~
git clone https://github.com/Division-36/Z-Jail.git
cd Z-Jail
make
sudo ./z_jail --root=/pfad/zu/rootfs --seccomp-enforce -- /bin/ls

Das Verzeichnis --root sollte ein minimales Dateisystem mit der Zielbinärdatei und ihren Abhängigkeiten enthalten (für statische Binärdateien reicht die Binärdatei selbst).


Warum Z-Jail

Bestehende Sandbox-Lösungen machen Kompromisse:

Z-Jail füllt die Nische zwischen bwrap (minimal, kein seccomp standardmäßig) und nsjail (funktionsreich, schwere Abhängigkeiten). Es ist für CI-Pipelines, CTF-Jail-Challenges und leichtgewichtige Code-Auswertung konzipiert, bei denen eine abgestufte Verteidigung ohne Container-Laufzeitumgebung benötigt wird.


Architektur

Datenfluss

root@kitploit:~
flowchart LR
    CLI[CLI-Argumente] --> P[parse_args]
    P --> C{clone namespaces}
    C -->|Kind| CR[child_run]
    C -->|Eltern| W[waitpid]
    CR --> RL[setrlimit]
    RL --> FD[schließe fds >= 3]
    FD --> DUMP[PR_SET_DUMPABLE=0]
    DUMP --> PV[pivot_root]
    PV --> NNP[PR_SET_NO_NEW_PRIVS]
    NNP --> CAP[Capabilities entfernen]
    CAP --> SC[seccomp-BPF]
    SC --> SIG[Eltern signalisieren]
    SIG --> EX[execve-Ziel]
    W --> A[Audit-JSON]
    A --> EXIT[exit]

Schichten-Reihenfolge

Jede Schicht ist so angeordnet, dass eine spätere Schicht nicht von einer früheren rückgängig gemacht werden kann:

  1. setrlimit – CPU, Adressraum, Dateianzahl, Prozesse begrenzen, bevor etwas anderes passiert
  2. fd-Bereinigung – alle geerbten Dateideskriptoren schließen bis auf die Bericht-Pipe
  3. PR_SET_DUMPABLE=0 – Core-Dumps deaktiviert, /proc/self/mem gesperrt
  4. pivot_root – vom Host-Dateisystem trennen; altes Root wird lazy ausgehängt
  5. PR_SET_NO_NEW_PRIVS – keine setuid, keine capset-Eskalation nach diesem Punkt
  6. drop_caps – alle Capabilities auf null setzen, securebits sperren
  7. seccomp-BPF – Syscalls auf Whitelist beschränken
  8. Eltern signalisieren – dem Elternprozess mitteilen, dass die Sandbox bereit ist
  9. execve – Prozess durch die Zielbinärdatei ersetzen
root@kitploit:~
sequenceDiagram
    participant P as Eltern
    participant C as Kind
    P->>C: clone (NEWNS|NEWPID|NEWNET|NEWIPC|NEWUTS)
    Note over C: setrlimit(CPU, AS, NOFILE, NPROC)
    Note over C: close(alle fds > 2)
    Note over C: PR_SET_DUMPABLE=0
    Note over C: pivot_root → chdir("/") → umount -l
    Note over C: PR_SET_NO_NEW_PRIVS
    Note over C: capset(alle null) + securebits
    Note over C: seccomp(SECCOMP_MODE_FILTER, Whitelist)
    C->>P: write(pipe, ready=1)
    Note over C: execve(Ziel)
    P->>P: waitpid
    P->>P: Audit-JSON schreiben

Schichten

1. Truthimatics Public Version

Evidenzbasierte Bewertungsengine. Sammelt gewichtete Beobachtungen über die ausgeführte Binärdatei und ermittelt ein endgültiges Urteil (DETERMINISTIC, REJECT oder UNCERTAIN). Jede Beobachtung hat ein Gewicht; jede einzelne Beobachtung mit einem Gewicht >50 % der Gesamtsumme entscheidet über das Urteil.

2. Namespaces

Fünf Namespaces werden via clone() erstellt:

Erfordert CAP_SYS_ADMIN im ursprünglichen Namespace.

3. pivot_root

Ersetzt das Wurzelverzeichnis des Mount-Namespace durch das --root-Verzeichnis:

  1. Binde das Wurzelverzeichnis auf sich selbst ein (MS_BIND|MS_REC)
  2. pivot_root(new_root, put_old) – tausche den Mount-Baum
  3. chdir("/") – in das neue Wurzelverzeichnis wechseln
  4. umount2("/.pivot_old", MNT_DETACH) – altes Root lösen
  5. rmdir("/.pivot_old") – aufräumen

Dies ist strikt stärker als chroot(2) – es gibt für den sandboxierten Prozess keine Möglichkeit, zum Host-Root zurückzukehren, selbst mit CLONE_NEWNS von innerhalb der Sandbox (was bereits durch seccomp blockiert ist).

4. Capabilities

Alle Capabilities werden entfernt via:

root@kitploit:~
capset(hdr, data)  // data = {0, 0, 0}
prctl(SECBIT_KEEP_CAPS_LOCKED | SECBIT_NO_SETUID_FIXUP | ...)

Der Prozess entfernt setuid/setgid vor capset, sodass die UID-Änderung wirksam wird, während CAP_SETUID noch gehalten wird. Nach capset sind alle Caps weg und die securebits sind gesperrt – eine erneute Aktivierung ist nicht möglich.

5. NO_NEW_PRIVS

root@kitploit:~
prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0);

Verhindert, dass der Prozess oder seine Kinder neue Privilegien über setuid-Binärdateien, Datei-Capabilities oder LSM-Übergänge erlangen. Irreversibel.

6. seccomp-BPF (Whitelist-v1)

Erlaubnisliste von 15 Syscalls – alles, was nicht auf der Liste steht, bekommt SECCOMP_RET_KILL:

Der BPF-Filter wird dynamisch generiert: Für jeden Whitelist-Eintrag wird eine Sprungkette ausgegeben, die entweder erlaubt (wenn der Syscall übereinstimmt) oder zu KILL durchfällt. Die Architektur wird zuerst geprüft (AUDIT_ARCH_X86_64).

Der Filter wird unabhängig von einem eigenständigen Test (tests/seccomp_filter_test.c, 8/8 bestanden) verifiziert, der via fork+execve Testfälle gegen ein echtes prctl(PR_SET_SECCOMP) ohne Root-Rechte ausführt.

7. Audit

Jede Ausführung erzeugt einen JSON-Auditdatensatz:

root@kitploit:~
{
  "schema": "z-jail.audit/v1",
  "build_id": "Z-Jail/v1+dev",
  "timestamp": 1749000000,
  "duration_ns": 8500000,
  "executable": "/bin/ls",
  "verdict": "DETERMINISTIC",
  "exit_code": 0,
  "sandbox": {
    "seccomp_filter": "whitelist-v1",
    "seccomp_whitelist_size": 15,
    "seccomp_arg_rules_size": 2,
    "namespaces": ["mount","pid","net","ipc","uts"],
    "pivot_root": "/var/run/z-jail/roots/default",
    "no_new_privs": true,
    "capabilities_dropped": true
  },
  "content_fingerprint": "0e5751c026e543b2e8ab2eb06099daa1..."
}

Geschrieben nach build/audits/<binary-name>.audit.json. Der content_fingerprint ist ein BLAKE2b-256-Hash der Zielbinärdatei, der vom Elternprozess berechnet wird, nachdem das Kind beendet ist.


Verwendung

root@kitploit:~
z_jail --root=<verz> [--seccomp-enforce] [--self-hash=<hex>]
       [--quiet] [--verbose] -- <programm> [argumente...]

Beispiele

root@kitploit:~
# Statische Binärdatei mit allen Schutzmaßnahmen ausführen
sudo z_jail --root=./roots --seccomp-enforce -- bin/hello_static

# Mit Integritätsprüfung der Binärdatei ausführen
sudo z_jail --root=./roots --seccomp-enforce \
  --self-hash=$(sha256sum z_jail | cut -c1-64) -- bin/programm

# Stiller Modus (kein Audit-JSON)
sudo z_jail --root=./roots --quiet -- bin/programm

Exit-Codes


Build & Installation

Voraussetzungen

  • Linux-Kernel ≥ 5.4 (Namespaces, seccomp-BPF, pivot_root)
  • GCC ≥ 11 (getestet mit 11.4, 13.2, 15.2)
  • Keine externen Bibliotheken – nur die Standard-C-Toolchain

Befehle

root@kitploit:~
make              # z_jail bauen (~130 KiB PIE-Binärdatei)
make install      # nach /usr/local/bin + Manpage installieren
make clean        # Build-Artefakte entfernen
make dist         # Release-Tarball erstellen
make check        # Rauchtest (--version + --help)

Die Binärdatei wird als Positionsunabhängiges Executable mit -fstack-protector-strong, -D_FORTIFY_SOURCE=2, vollständigem RELRO und -z now gebaut.

Compile-Zeit-Optionen

root@kitploit:~
make CC=clang CFLAGS="-O3 -march=native"   # benutzerdefinierter Compiler/Flags

Tests

Schnelltest (kein Root)

root@kitploit:~
# seccomp-Filter-Logik (8 Tests)
tests/build/seccomp_filter_test

# BLAKE2b Known-Answer-Test
tests/build/blake2b_known

Diese benötigen kein Root und laufen in unter 100 ms.

Vollständige Testsuite

root@kitploit:~
make -C tests setup          # Payloads + Test-Roots bauen
sudo bash tests/run_tests.sh # 17 Szenarien

Erfordert Root für die Namespace-Erstellung. Die Testsuite deckt ab:


Leistung

Gemessen auf WSL2 (Kernel 6.18.x-microsoft-standard-WSL2, Kali Linux), 50 Proben pro Werkzeug, einheitliche Arbeitslast (eine freistehende statische Binärdatei, deren Körper exit_group(0) ist), zeitlich erfasst mit einem getrusage-Testrahmen. Siehe docs/BENCHMARKS.md für die Methodik.

MetrikWert
Binärgröße~73 KiB ungestrippt (~28 KiB gestrippt)
Mittlere Sandbox-Latenz5,85 ± 1,45 ms (95 % KI [5,45, 6,25])
Spitzen-RSS1,62 MiB
Codezeilen (Kern)

Direkter Vergleich (gleicher Host, gleiche Methodik)

Unter den getesteten Bedingungen hat Z-Jail die kleinste residente Menge der drei prozessorientierten Sandboxen und eine Latenz zwischen bwrap und nsjail. Bubblewrap ist am schnellsten, führt aber standardmäßig keine seccomp-Filterung durch, macht also weniger Einrichtungsarbeit; Z-Jail installiert bei jedem Lauf eine seccomp-Whitelist, entfernt Capabilities und führt pivot_root aus. gVisor (runsc) stürzt auf diesem WSL2-Kernel ab und konnte nicht gemessen werden; Firecracker isoliert über eine MicroVM (VM-Kaltstart, eine andere Metrik) und ist von der Fork-zu-Exec-Tabelle ausgeschlossen. Dies sind Einzel-Host-Zahlen – behandeln Sie sie als relativ.

Hinweis: Die älteren dokumentierten Werte (~8 ms, ~4 MiB, ~130 KiB) stimmen nicht mit einem aktuellen make-Build (~73 KiB, ~5,9 ms) überein und scheinen ungenau gewesen zu sein; die obigen Zahlen wurden an dieser Codebasis neu gemessen. Truthimatics ist immer noch Teil des Codes und wurde nicht entfernt (die alten axiom_jail-Berichte verwendeten einfach einen anderen Binärnamen und Testrahmen). Ein während des Benchmarkings gefundener Mount-Propagation-Fehler wurde in src/sandbox.c behoben (MS_REC|MS_PRIVATE vor dem Bind-Mount); das rekursive Remount trägt zur gemessenen Latenz bei.


Bedrohungsmodell

Im Scope

  • Beliebige native Codeausführung durch eine nicht vertrauenswürdige Nutzlast
  • Ausbruch via chroot, mount, ptrace, socket, process_vm_writev
  • Fork-Bomben, CPU-Auslastung (RLIMIT_CPU), Speicherüberlastung (RLIMIT_AS)
  • Dateideskriptor-Leaks über execve
  • setuid / dynamischer Linker / LD_PRELOAD-Eskalation
  • Entfernung des seccomp-Filters oder erneute Aktivierung von Capabilities

Nicht im Scope

  • Kernel-Zero-Days außerhalb der erlaubten Syscall-Oberfläche
  • Hardware-Seitenkanäle (Spectre, Meltdown)
  • Ausbruch aus ko-lokalisierter VM via gemeinsame /proc, /sys-Mounts
  • Netzwerkausgang über das hinaus, was CLONE_NEWNET + blockiertes socket bietet
  • Ressourcenaushungerung von Geschwister-Sandboxen (benötigt cgroup-Unterstützung)

Annahmen

  • Host-Kernel ist unveränderter Linux ≥ 5.4
  • clone(CLONE_NEWNS|CLONE_NEWPID|...) ist erfolgreich (erfordert CAP_SYS_ADMIN)
  • Zielbinärdatei ist statisch gelinkt (oder dynamische Bibliotheken sind in --root verfügbar)
  • --self-hash=<hex> ist in Produktionsumgebungen konfiguriert

Dokumentation


Roadmap

v1 (aktuell)

  • 7-schichtige abgestufte Verteidigungssandbox
  • BLAKE2b-256-Inhalts-Fingerprinting
  • Audit-JSON-Ausgabe
  • 17 Testszenarien
  • Manpage, Vervollständigungen (bash, zsh, fish)

v2 (geplant)

  • Externe seccomp-Richtliniendatei (JSON oder BPF-Quelle)
  • Anpassbare Namespace-Flags pro Sandbox-Instanz
  • Konfigurierbare Syscall-Whitelist über CLI
  • Performance-Profiling-Hooks für CI-Integration
  • Release-Signierung (minisign/signify)

Status

build coverage


Lizenz

MIT – siehe LICENSE für den vollständigen Text.


Z-Jail wurde auf WSL2 (Kali Linux, GCC 15.2.0) erstellt, Ziel ist Linux 5.4+. Gepflegt von Division-36. Fehler bitte im Issue-Tracker melden.

Tool herunterladen
Z-JailFirecrackergVisorbwrapnsjail
Externe Abhängigkeitennulllibc, seccompGo-Laufzeitlibclibc, protobuf
Binärgröße~73 KiB20+ MiB40+ MiB~70 KiB~1 MiB
VM-Isolationneinja (MicroVM)nein (Sandbox)neinnein
seccomp-Whitelistjaneinjaoptionalja
Inhalts-Hashingjaneinneinneinnein
Audit-JSONjaneinjaneinteilweise
Build-Komplexitätein makekomplexkomplextrivialmoderat
NamespaceFlagZweck
MountCLONE_NEWNSIsolierter Dateisystembaum
PIDCLONE_NEWPIDProzess-ID-Raum (Kind ist pid 1)
NetCLONE_NEWNETKeine Netzwerkschnittstellen
IPCCLONE_NEWIPCKein Shared Memory / Semaphore
UTSCLONE_NEWUTSSeparater Hostname
SyscallNummerAnmerkungen
read0stdin
write1stdout/stderr + Bericht-Pipe
openat257Dateizugriff (nicht open)
close3—
lseek8—
brk12Heap-Verwaltung
mmap9arg-eingeschränkt: flags & 4 == 0 (kein MAP_SHARED), flags == 0x22 (MAP_PRIVATE|MAP_ANONYMOUS)
munmap11—
execve59einmaliges exec beim Start
exit_group231sauberer Prozessbeendigung
rt_sigaction13Signalhandler
rt_sigprocmask14Signalmaskierung
getrandom318Zufallszahlenquelle
clock_gettime228Zeitmessung
fstat5Dateimetadaten
FlagBeschreibung
--root=<verz>Sandbox-Wurzelverzeichnis (erforderlich)
--seccomp-enforceseccomp-BPF-Syscall-Whitelist aktivieren
--self-hash=<hex>Binärdatei mit erwartetem BLAKE2b-256-Hash verifizieren
--quietAudit-Ausgabe unterdrücken
--verboseDebug-Logging aktivieren
--versionBuild-ID anzeigen (Z-Jail/v1+dev)
--helpVerwendung anzeigen und beenden
CodeBedeutung
0Kind normal beendet (Urteil: DETERMINISTIC)
1Kind durch Signal getötet (Urteil: REJECT)
2Self-Hash: ungültiger Hex-String oder Datei nicht lesbar
3Self-Hash: Nichtübereinstimmung (Binärdatei wurde manipuliert)
101Fehler bei Kind-Einrichtung (rlimit, etc.)
102Installation des seccomp-Filters beim Kind fehlgeschlagen
103Kind-execve fehlgeschlagen (Binärdatei nicht gefunden, keine Ausführungsberechtigung)
104Kind-pivot_root fehlgeschlagen
105Kind-Capability-Entfernung fehlgeschlagen
125Namespace-Erstellung fehlgeschlagen (als root ausführen? Kernel-Unterstützung?)
#SzenarioTypWas wird getestet
0blake2b_regressKnown-AnswerKorrektheit der BLAKE2b-Implementierung
1seccomp_filtereigenständiger BPF8 Untertests der BPF-Filterlogik
2hello_staticokGrundlegende Ausführung statischer Binärdatei
3hello_dynamicokDynamische Binärdatei mit ld-linux + libc
4execve_replacementokexecve in der Sandbox (durch seccomp blockiert)
5fd_inherited_readokstdin/stdout korrekt vererbt
6mmap_bad_flagsgetötetmmap mit MAP_SHARED blockiert
7mmap_good_allowedokmmap mit MAP_PRIVATE|ANONYMOUS erlaubt
8mmap_prot_execgetötetmmap mit PROT_EXEC blockiert
9mmap_self_modifygetötetSelbstmodifizierender Code blockiert
10ptracegetötetptrace blockiert
11socketgetötetSocket-Erstellung blockiert
12chroot_escapegetötetchroot-Syscall blockiert
13double_chrootgetötetDoppelter chroot blockiert
14mount_replaygetötetMount-Syscall blockiert
15cpu_exhaustgetötetRLIMIT_NPROC blockiert Fork-Bombe
16signal_parentgetötetSignal an Eltern blockiert
17self_hashokIntegritätsprüfung der Binärdatei
~900
WerkzeugLatenz Mittelwert ± Standardabw.Spitzen-RSSStandard-seccomp
Z-Jail5,85 ± 1,45 ms1,62 MiBja
bwrap3,56 ± 0,40 ms2,19 MiBnein
nsjail8,98 ± 1,68 ms7,91 MiBja
DateiBeschreibung
README.mdDiese Datei
docs/ARCHITECTURE.mdArchitekturübersicht
docs/SANDBOX.mdSchicht-für-Schicht-Sandbox-Interna
docs/SECCOMP.mdseccomp-BPF-Whitelist-Design
docs/AUDIT_SCHEMA.mdAudit-JSON-Schema-Referenz
docs/THREAT_MODEL.mdSicherheitsannahmen und -umfang
docs/BLAKE2B.mdBLAKE2b-Implementierungsdetails
docs/BENCHMARKS.mdLeistungs-Benchmarks
docs/BUILD.mdBauanleitung
docs/adr/Architekturentscheidungsdokumente (4 Dokumente)
man/z_jail.1Manpage
SECURITY.mdSicherheitsrichtlinie und Meldung
CONTRIBUTING.mdWie man beiträgt
CHANGELOG.mdVersionsgeschichte
ROADMAP.mdZukünftige Pläne
TODO.mdBekannte Lücken und geplante Arbeiten