
Führe jeden Befehl innerhalb einer eingeschränkten Dateisystemansicht unter Linux aus.
⚠️ PROJEKT EINGESTELLT
Die Entwicklung an diesem Projekt wurde eingestellt, da jemand anderes an der gleichen Idee arbeitete und eine bessere Lösung gebaut hat.
Wir empfehlen dringend: Fence von Use-Tusk.Hinweis: Dieses Repository wurde ursprünglich für den FOSS HACK 2026 erstellt, leider konnten wir es nicht rechtzeitig fertigstellen.
Wir haben jedoch ein ähnliches Projekt für den Hackathena '26 gebaut, das den 3. Preis gewonnen hat!
Wenn Sie interessiert sind, finden Sie das Repository hier: A56-A5/lion.
Cordon führt jeden Befehl in einer eingeschränkten Dateisystemansicht unter Linux aus. Es nutzt Linux-Namespaces (über bubblewrap), um alles zu verstecken, was Ihr Prozess nicht benötigt – Ihr Home-Verzeichnis, SSH-Schlüssel, AWS-Anmeldedaten, alles – während der Befehl trotzdem seine Aufgabe erfüllen kann.
cordon run --net=allow -- npm install
cordon run -- bash setup.sh
cordon run --profile python -- pip install -r requirements.txt
Kein Root. Keine Container. Keine Daemons im Hintergrund.
Wenn Sie npm install oder pip install ausführen, wird dieser Code mit Ihren vollen Benutzerberechtigungen ausgeführt. Er kann ~/.ssh/id_rsa lesen, an einen Server exfiltrieren, Dateien ändern, die Ihnen gehören – alles, während es so aussieht, als würde nur ein Paket installiert.
Das ist keine Paranoia. Es ist bereits passiert:
| Angriff | Was er tat |
|---|---|
| LiteLLM (2024) | Bösartiges PyPI-Paket las SSH-Schlüssel und Umgebungsvariablen bei pip install |
| xz-utils (2024) | Build-Zeit-Hintertür, die während des make-Schritts bei der Installation eingeschleust wurde |
| event-stream (npm, 2018) | Kompromittiertes npm-Paket stahl still Bitcoin-Wallets |
| SolarWinds | Supply-Chain-Angriff über die Build-/Update-Pipeline |
Cordons Antwort: Lass den Prozess nicht sehen, was er nicht sehen sollte, selbst wenn der Code bösartig ist.
Jeder cordon run erstellt eine frische isolierte Umgebung:
/usr, /bin, /lib werden schreibgeschützt eingehängt – Dinge können ausgeführt werden, ohne das System zu zerstörennpm install erstellt node_modules/, Builds funktionierensrc/ ist schreibgeschützt, falls vorhanden – Quelldateien können nicht stillschweigend überschrieben werden~/.ssh, ~/.aws, HOME – standardmäßig gar nicht eingehängt--net=allow gefiltertWenn der Prozess beendet wird, ist die Sandbox weg. Nichts bleibt bestehen.
Der --net=allow-Modus startet einen eingebauten Rust-HTTP/HTTPS-Proxy auf einem zufälligen localhost-Port und injiziert ihn über Umgebungsvariablen (HTTP_PROXY, https_proxy, npm_config_proxy usw.) in die Sandbox. Er fängt CONNECT-Tunnel ab und prüft jede Domain gegen eine Allowlist, bevor er sie weiterleitet.
Die Standard-Allowlist umfasst registry.npmjs.org, pypi.org, crates.io, github.com. Alles, was nicht auf der Liste steht, erhält einen 403 – selbst wenn das Postinstall-Skript des Pakets versucht, nach Hause zu telefonieren.
# Erreicht nur npmjs.org und seine CDNs – nichts anderes
cordon run --net=allow -- npm install
# Domain für ein privates Registry hinzufügen
cordon run --net=allow --domain my.internal.registry -- npm install
Optional einen Syscall-Filter hinzufügen:
# Blockiert ptrace, kexec_load, mount, perf_event_open, process_vm_*
cordon run --seccomp basic --net=allow -- npm install
# Strenge Allowlist – nur bekannte sichere Syscalls
cordon run --seccomp strict -- python3 untrusted.py
Dies ist eine zweite Verteidigungslinie. Selbst wenn etwas aus der Dateisystem-Einschränkung ausbricht, kann es immer noch nicht ptrace aufrufen, um sich an einen anderen Prozess anzuhängen, oder perf_event_open für Seitenkanalarbeiten.
git clone https://github.com/LORDv1shnu/Cordon
cd Cordon
bash install.sh # baut Release-Binary → ~/.local/bin/cordon
Oder manuell:
cargo build --release
cp target/release/cordon ~/.local/bin/
Sie benötigen installiertes bubblewrap:
sudo apt install bubblewrap # Ubuntu/Debian
sudo dnf install bubblewrap # Fedora
sudo pacman -S bubblewrap # Arch
Erster Start nach der Installation:
cordon scan # scannt Ihr System einmal, dauert ~30s, schreibt ~/.config/cordon/system.toml
cordon check # Gesundheitscheck – stellt sicher, dass alles bereit ist
# Die Grundlagen
cordon run -- echo "hello"
cordon run --net=allow -- npm install
cordon run --net=allow -- pip install -r requirements.txt
cordon run --net=full -- curl https://example.com # uneingeschränkt (kein Filter)
# Seccomp
cordon run --seccomp basic --net=allow -- npm install
# GUI-Apps
cordon run --gui -- code .
cordon run --gui --optional audio_pipewire --optional dbus_session -- discord
# Integrierte Profile (vorkonfiguriert für gängige Laufzeitumgebungen)
cordon run --profile node -- npm install
cordon run --profile python -- python3 script.py
cordon run --profile rust -- cargo build
# Debuggen, was blockiert wird
cordon run --trace -- node server.js # strace-Wrapper, meldet verweigerte Pfade
cordon add --from-trace ~/.config/cordon/logs/last-trace.log # Batch-Hinzufügen fehlender Pfade
# Ressourcenlimits (benötigt systemd)
cordon run --mem 512M --cpu 2.0 --timeout 60 -- npm install
# Dry Run / Ausführlich
cordon run --dry-run -- npm install # gibt den bwrap-Befehl aus, führt ihn nicht aus
cordon run --verbose -- npm install # gibt jedes bwrap-Argument während der Ausführung aus
cordon.toml)cordon init # erkennt automatisch Cargo.toml / package.json / pyproject.toml
cordon set --net=allow # speichert Flags dauerhaft, sodass Sie sie nicht jedes Mal eingeben müssen
cordon add /path/to/assets --mode ro # gibt zusätzliche Pfade in die Sandbox frei
cordon edit # öffnet cordon.toml in $EDITOR
cordon check # Gesundheitscheck: bwrap, Namespaces, AppArmor, Module
cordon doctor # tiefergehend: Kernelversion, Distro-Besonderheiten, genaue Lösungsvorschläge
cordon status # zeigt, was gerade in system.toml steht
cordon list # zeigt alle Mounts, die beim nächsten Lauf aktiv wären
cordon log --errors # zeigt die letzten Logs des letzten Durchlaufs, nur Fehler
cordon syscalls --preset basic # listet, was jedes Seccomp-Preset blockiert
# Benannte Profile (gespeichert in ~/.config/cordon/profiles.toml)
cordon profile create ci-node --net=allow --optional ld_so_cache
cordon run --profile ci-node -- npm test
# Lockfile für reproduzierbare Umgebungen
cordon lock update # SHA-256 aller Mount-Pfade → cordon.lock
cordon lock verify # prüft, ob nichts abgewichen ist
# Sandbox-Konfiguration mit dem Team teilen
cordon export > sandbox.json
cordon import sandbox.json
# Tab-Vervollständigung
cordon completions zsh > ~/.zfunc/_cordon
# Transparente Wrapper – "npm" immer in der Sandbox ausführen
cordon wrap npm
cordon wrap pip
npm install # führt tatsächlich aus: cordon run -- npm install "$@"
cordon unwrap npm
# Man-Page
cordon man | man -l -
Es gibt vier Konfigurationsdateien, die in der folgenden Reihenfolge angewendet werden:
| Ebene | Wo | Wer schreibt sie? |
|---|---|---|
core.toml | in die Binary kompiliert | zur Laufzeit nicht bearbeitbar (manipulationssicher) |
system.toml | ~/.config/cordon/ | cordon scan |
profiles.toml | ~/.config/cordon/ | cordon profile create |
cordon.toml | Projektverzeichnis | cordon init / cordon set / cordon add |
CLI-Flags gewinnen immer. cordon.toml schlägt ein benanntes Profil. Die eingebaute core.toml der Binary kann zur Laufzeit nicht berührt werden.
| Code | Bedeutung |
|---|---|
| 0 | Erfolg |
| 1 | Interner Fehler von Cordon |
| 2 | Ungültige CLI-Verwendung |
| 125 | Sandbox-Einrichtung fehlgeschlagen (bwrap fehlt o.ä.) |
| 126 | Befehl gefunden, aber innerhalb der Sandbox nicht ausführbar |
| 127 | Befehl innerhalb der Sandbox nicht gefunden |
| N | Vom sandboxierten Prozess weitergeleitet |
Gleiche Konvention wie bwrap und die Shell.
Cordon ist kein Container, kein Antivirus und kein Ersatz für SELinux oder AppArmor. Es schränkt die Dateisystemsichtbarkeit und den Netzwerkzugriff ein – es versucht nicht, Malware zu erkennen. Wenn etwas einen Kernel-Exploit hat, wird es ausbrechen. Das Ziel ist, Supply-Chain-Angriffe deutlich zu erschweren, nicht unmöglich zu machen.
Außerdem: Derzeit nur Linux x86_64 und aarch64. bubblewrap ist erforderlich.
In Rust geschrieben. Verwendet bubblewrap für Namespacing, seccompiler für die BPF-Filter-Kompilierung, clap für CLI, tracing für strukturiertes Logging. Der Domain-Filtering-Proxy wurde von Grund auf in purem Rust geschrieben (kein externes Proxy-Tool).
→ COMMANDS.md – vollständige Flag-Referenz
→ SCANNER_LOGIC.md – wie der System-Scanner funktioniert
→ MODULE_INFO.md – jede Quelldatei erklärt
Erstellt mit KI-Unterstützung (Gemini). Architektur, Sicherheitsmodell und Designentscheidungen sind die Arbeit des Autors.