4 Punkte von GN⁺ 2025-06-02 | 2 Kommentare | Auf WhatsApp teilen
  • 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

 
ndrgrd 2025-06-03

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.

 
GN⁺ 2025-06-02
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

    • Ich denke, dass es ein strategischer Fehler von Tor war, diese Richtung nicht weiterzuverfolgen
      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
    • Seltsam. torsocks und torify machen im Grunde dasselbe, nur weniger robust
  • 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

    • Ich kenne die Details nicht, aber auf https://gitlab.torproject.org/tpo/core/onionmasq steht Folgendes:
      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
    • Wie gehen Nutzer des Tor Browser mit YouTube oder DNS um? Ich frage mich auch, was mit HTTP/3 passiert
    • Nicht-TCP-Aktivitäten würden nicht geroutet und die Übertragung würde fehlschlagen
  • 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

  • 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 einen debian:12-Container kopiert und dort lief es ebenfalls:
    docker run -it --rm --privileged -v "$PWD/oniux:/usr/bin/oniux" debian:12

  • 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?

    • Ja, aber bitte lieber nicht. Damit fällt man eher noch mehr auf. Tor Browser hat verschiedene Strategien gegen Fingerprinting, die Chrome nicht hat
    • Das ging auch früher schon, wenn man nur die Proxy-Umgebungsvariablen oder Einstellungen gesetzt hat. Der Standardport des tor-Daemons ist 9050
      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?

    • Es geht um die Trennung von Anliegen. Tor investiert zwar viel Aufwand, um Fingerprinting zu verhindern, aber ich persönlich denke, dass der Hauptzweck von Tor und Oniux darin besteht, die Ursprungs-IP unzurückverfolgbar zu machen
      Dasselbe hätte man auch über einen Gmail-Login über Tor sagen können. Jedenfalls sofern es nicht HTTPS gewesen wäre
    • Ich bin mir nicht sicher, was mit „der Benutzername läuft aus“ gemeint ist. Dass der Benutzername Tor verwendet, kann sichtbar sein
      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

    • Überhaupt nicht. Idioten sind erfinderisch. Die operativen Vorsichtsmaßnahmen, die nötig sind, um das auf eine Weise zu benutzen, die Anonymität bewahrt, sind für die meisten Nutzer viel zu schwierig
  • Schön. Wenn ihr den Prototyp jetzt noch in C neu schreibt, würde ich ihn gern benutzen

    • Das ist in Rust geschrieben. Warum braucht es eine C-Version?