- Ein Tool, das beliebige Linux-Programme in eine separate Netzwerkumgebung einsperrt und den gesamten Traffic über Tor leitet, wodurch das Risiko von Leaks sinkt, die durch app-spezifische Proxy-Einstellungen entstehen
- Kernstück sind Netzwerk-Namespaces des Linux-Kernels: Apps sehen statt der System-Interfaces nur
onion0, was Umgehungsverbindungen erschwert
- Das bisherige torsocks überschreibt libc-Funktionen; bei statischen Binaries oder Aufrufen, die wie im Zig-Ökosystem nicht über libc laufen, können Daten durchsickern
- oniux ist ein Linux-exklusives Rust-Tool auf Basis von Arti und onionmasq, während torsocks eine plattformübergreifende C-Implementierung auf CTor-Basis ist, die seit über 15 Jahren genutzt wird
- Nutzer können
oniux vor bestehende Befehle setzen, um etwa curl, bash oder hexchat auszuführen, sollten aber berücksichtigen, dass es sich um ein neues und experimentelles Tool handelt
Das Tor-Isolationsproblem, das oniux lösen will
- Beim Ausführen von Apps oder Diensten, bei denen Privatsphäre wichtig ist, müssen alle Pakete tatsächlich ausschließlich über Tor hinausgehen
- Werden Proxy-Einstellungen falsch eingegeben oder erfolgt ein Systemaufruf außerhalb eines SOCKS-Wrappers, können Daten offengelegt werden
- oniux ist ein Kommandozeilen-Utility, das Drittanbieter-Anwendungen mithilfe von Linux-Namespaces Tor-Netzwerkisolation bereitstellt
- Es läuft auf Arti und onionmasq und platziert Linux-Programme in einem eigenen Netzwerk-Namespace, sodass sie über Tor geroutet werden
- Am Anfang der Dokumentation steht der Hinweis, dass oniux inzwischen eine eigene Website hat und die Versionsnummer dieses Artikels deutlich veraltet ist
Die Rolle von Linux-Namespaces
- Namespaces sind eine Isolationsfunktion des Linux-Kernels, die um das Jahr 2000 eingeführt wurde
- Sie können bestimmte Teile einer Anwendung sicher vom Rest des Systems trennen
- Namespaces gibt es je nach zu isolierendem Bereich in mehreren Formen
- Netzwerk-Namespace
- Mount-Namespace
- Prozess-Namespace
- weitere Formen
- Auf Systemressourcen unter Linux können in der Regel alle Anwendungen global zugreifen
- Betriebssystemuhr
- vollständige Prozessliste
- Dateisystem
- Benutzerliste
- Namespaces containerisieren Teile einer Anwendung gegenüber dem restlichen Betriebssystem; auch Docker nutzt diese Funktion, wenn es Isolationsprimitive bereitstellt
Wie Tor und Namespaces kombiniert werden
- oniux führt jede Anwendung in einem Netzwerk-Namespace aus, der keinen Zugriff auf die systemweiten Netzwerk-Interfaces hat
- In diesem Namespace wird statt eines System-Interfaces wie
eth0 nur das benutzerdefinierte Netzwerk-Interface onion0 bereitgestellt
- Dieser Ansatz stützt sich auf die vom Betriebssystem-Kernel bereitgestellten Sicherheitsprimitive, um den Tor-Zugriff beliebiger Anwendungen zu isolieren
- Im Unterschied zum SOCKS-Ansatz kann er Fälle reduzieren, in denen durch Entwicklerfehler manche Verbindungen nicht über den eingerichteten SOCKS-Proxy laufen und dadurch Daten leaken
Unterschiede zwischen oniux und torsocks
torsocks ist ein Tool, das netzwerkbezogene libc-Funktionen überschreibt, um Traffic an den von Tor bereitgestellten SOCKS-Proxy zu senden
- Dieser Ansatz ist plattformübergreifender als oniux, kann aber bei Systemaufrufen, die nicht über dynamisch gelinkte libc laufen, Daten leaken
- Insbesondere rein statische Binaries und Anwendungen aus dem Zig-Ökosystem fallen aus dem Unterstützungsbereich von torsocks heraus
-
oniux
- Ist eine eigenständige Anwendung
- Verwendet Linux-Namespaces
- Funktioniert mit allen Anwendungen
- Ist so aufgebaut, dass selbst bösartige Anwendungen keine Daten leaken können
- Ist Linux-exklusiv
- Ist ein neues und experimentelles Tool
- Verwendet Arti als Engine
- Ist in Rust geschrieben
-
torsocks
- Benötigt einen laufenden Tor-Daemon
- Verwendet einen
ld.so-Preload-Hack
- Funktioniert nur mit Anwendungen, die Systemaufrufe über libc ausführen
- Bösartige Anwendungen können mit Raw Assembly Systemaufrufe erzeugen, wodurch Daten leaken können
- Ist plattformübergreifend
- Ist seit über 15 Jahren erprobt
- Verwendet CTor als Engine
- Ist in C geschrieben
Installation und Nutzungsbeispiele
- Erforderlich sind ein Linux-System und eine Rust-Toolchain
- Die Installation erfolgt mit
cargo install
cargo install --git https://gitlab.torproject.org/tpo/core/oniux --tag v0.4.0 oniux
- Eine einfache HTTPS-Anfrage lässt sich über Tor ausführen
oniux curl https://icanhazip.com
- Auch IPv6-Anfragen werden unterstützt
oniux curl -6 https://ipv6.icanhazip.com
- Der Zugriff auf Onion Services ist ebenfalls möglich
oniux curl http://2gzyxa5ihm7nsggfxnu52rck2vv4rvmdlkiu3zzui5du4xyclen53wid.onion/…
- Logging kann mit
RUST_LOG=debug aktiviert werden
RUST_LOG=debug oniux curl https://icanhazip.com
- Führt man eine komplette Shell über Tor aus, können alle darin laufenden Prozesse isoliert werden
oniux bash
- In Desktop-Umgebungen lassen sich auch grafische Anwendungen isolieren
oniux hexchat
Interner Ablauf
- oniux erzeugt zunächst mit dem Systemaufruf
clone(2) einen Kindprozess
- Der Kindprozess wird in eigenen Netzwerk-, Mount-, PID- und Benutzer-Namespaces isoliert
- Anschließend mountet der Kindprozess eine eigene Kopie von
/proc und richtet UID/GID-Mappings passend zur UID und GID des Elternprozesses ein
- Damit die Anwendung Namen über Tor auflöst, erstellt er eine temporäre Datei mit Nameserver-Eintrag und bind-mountet sie nach
/etc/resolv.conf
- Der Kindprozess erzeugt mithilfe von onionmasq ein TUN-Interface namens
onion0
- Danach richtet er das Interface über
rtnetlink(7)-Operationen ein, einschließlich Aufgaben wie der Zuweisung von IP-Adressen
- Der Kindprozess übergibt den File Descriptor des TUN-Interfaces über einen Unix-Domain-Socket an den Elternprozess
- Der Elternprozess wartet nach dem ersten
clone(2)-Aufruf auf diese Nachricht
- Nach der Übergabe legt der Kindprozess alle Capabilities ab, die er dadurch erhalten hat, dass er zum Root-Prozess des Benutzer-Namespace wurde
- Zuletzt führt er den vom Nutzer angegebenen Befehl mit Funktionen der Rust-Standardbibliothek aus
Experimenteller Status und Hinweise zur Nutzung
- oniux ist eine vergleichsweise neue Funktion und nutzt neue Tor-Software wie Arti und onionmasq
- Derzeit funktioniert es wie erwartet, doch torsocks wird seit über 15 Jahren verwendet und hat mehr Praxiserfahrung
- Ziel ist, dass auch oniux einen Reifegrad ähnlich wie torsocks erreicht
2 Kommentare
Tor scheint für die Privatsphäre nicht schlecht zu sein, aber ich bin mir nicht sicher, ob es wirklich das richtige Werkzeug für Anonymität ist. Es heißt auch, dass staatliche Stellen die Exit-Nodes bereits unter ihre Kontrolle gebracht haben.
Hacker-News-Kommentare
Ich habe vor etwa 10 Jahren mit einem Tor-Entwickler über dieses Thema gesprochen, als Network Namespaces gerade aufkamen
Das damalige Feedback war, dass dies eine einfache Möglichkeit wäre, Leute in falscher Sicherheit zu wiegen und dabei dennoch viele identifizierende Informationen durchsickern zu lassen, daher habe ich es nicht weiter vorangetrieben
Für Menschen, die ernsthaften Bedrohungen ausgesetzt sind, ist es natürlich richtig, den Tor Browser zu verwenden und weiterhin auf andere Leckpfade zu achten, aber wenn Tor überall verwendet würde, wäre Massenüberwachung viel schwieriger
Im Moment kann Massenüberwachung erkennen, wer Tor nutzt, aber wenn es alle nutzen würden, wäre diese Tatsache weit weniger aussagekräftig
Gilt das nicht alles nur für TCP? Anders gesagt: Ich frage mich, wie sich Aktivitäten schützen lassen, die nicht über TCP laufen
Dieses Projekt ist ein Versuch, einen einfachen User-Space-Netzwerk-Stack zu implementieren, der TCP- und UDP-Zustände verarbeiten kann, damit Traffic in das Tor-Netzwerk weitergeleitet werden kann
Die Installationsanleitung auf der Startseite funktioniert nicht. Die Versionsnummer muss von 0.4.0 auf 0.5.0 geändert werden
cargo install --git https://gitlab.torproject.org/tpo/core/oniux oniux@0.5.0
Oniux wirkt wie ein „offiziell“ unterstütztes Tool, ähnlich wie orjail. orjail hatte seit 4 Jahren keine Commits mehr, funktioniert aber als Shell-Skript mit iptables/iproute-Tools immer noch sehr gut [1]
orjail hat auch eine Option, es zusammen mit firejail für zusätzliche Isolation auszuführen, was Oniux anscheinend noch nicht bietet
[1] https://github.com/orjail/orjail/blob/master/usr/sbin/orjail
https://raw.githubusercontent.com/orjail/orjail/master/usr/s...
Zuerst dachte ich, das wäre wie torsocks und würde den Traffic über einen lokal laufenden tor-Daemon schicken
Dann habe ich gesehen, dass oniux weiter funktioniert, auch wenn der lokale tor-Daemon gestoppt wird, während torify und torsocks dann nicht mehr funktionieren. In der Dokumentation stand tatsächlich, dass es so arbeitet. Ziemlich cool
Es funktioniert auch in Docker, brauchte aber
--privileged. Ich habe das Binary in einendebian:12-Container kopiert und dort lief es ebenfalls:docker run -it --rm --privileged -v "$PWD/oniux:/usr/bin/oniux" debian:12
https://tpo.pages.torproject.net/core/arti/
Als interessante Randnotiz: Das ist in curl seit 5 Jahren kaputt, und in Blog-Beispielen genauso. Der Grund ist, dass Tor-Entwickler früher darauf bestanden haben, dass Apps nicht versuchen sollten,
.onion-Domainnamen aufzulösen: https://daniel.haxx.se/blog/2025/05/16/leeks-and-leaks/Wäre schön, wenn sich dafür eine Lösung finden ließe
Bedeutet das, dass man jetzt mit Chrome auf Tor-Websites zugreifen kann?
Tatsächlich lässt sich ein SOCKS-Proxy, der Traffic über ein beliebiges Protokoll routen kann, relativ leicht bauen. Zum Beispiel kann man einen SOCKS5-Proxy als Übersetzungsschicht verwenden, um Websites über syncthing bereitzustellen oder zu besuchen: https://github.com/acheong08/syndicate
Als Beispiel wird hexchat verwendet, aber werden solche Prozesse mit Benutzereinstellungen ausgeführt? Wenn man vergisst, die Einstellungen zu ändern, läuft dann nicht der IRC-Benutzername aus
Und wenn man einen Browser startet, könnten dann nicht auch Cookies auslaufen?
Dasselbe hätte man auch über einen Gmail-Login über Tor sagen können. Jedenfalls sofern es nicht HTTPS gewesen wäre
Es bleibt auch sichtbar, dass alle Benutzernamen, die sich mit demselben IRC-Host verbinden, zur selben Person gehören
Wenn man Anonymität wahren will, wirkt IRC ziemlich riskant. Viele Leute protokollieren Verbindungsabbruchszeiten, sodass sich Korrelationen mit anderen Netzwerkausfällen herstellen lassen
Die Developer Experience hier ist wirklich sehr gut gemacht, so einfach, dass sogar Idioten es benutzen könnten. Gut gemacht an die Leute, die das gebaut haben <3
Schön. Wenn ihr den Prototyp jetzt noch in C neu schreibt, würde ich ihn gern benutzen