4 points par GN⁺ 2025-06-02 | 2 commentaires | Partager sur WhatsApp
  • Outil qui enferme n’importe quel programme Linux dans un environnement réseau séparé et envoie tout le trafic via Tor, afin de réduire les risques de fuite liés aux réglages de proxy propres à chaque application
  • Il repose principalement sur les espaces de noms réseau du noyau Linux : l’application ne voit que onion0 au lieu des interfaces système, ce qui complique les connexions de contournement
  • L’outil existant torsocks remplace des fonctions libc ; des données peuvent donc fuiter avec des binaires statiques ou des appels qui ne passent pas par libc, comme dans l’écosystème Zig
  • oniux est un outil Rust réservé à Linux, basé sur Arti et onionmasq, tandis que torsocks est une implémentation C basée sur CTor, multiplateforme et utilisée depuis plus de 15 ans
  • Les utilisateurs peuvent préfixer leurs commandes habituelles avec oniux pour lancer curl, bash, hexchat, etc., mais doivent garder à l’esprit qu’il s’agit d’un outil nouveau et expérimental

Le problème d’isolation Tor qu’oniux cherche à résoudre

  • Lorsqu’on exécute des applications ou services sensibles à la confidentialité, tous les paquets doivent effectivement sortir uniquement via Tor
  • Si un réglage de proxy est mal saisi ou si un appel système se produit en dehors d’un wrapper SOCKS, des données peuvent être exposées
  • oniux est un utilitaire en ligne de commande qui fournit une isolation réseau Tor aux applications tierces au moyen des espaces de noms Linux
  • Il fonctionne au-dessus d’Arti et d’onionmasq, et place les programmes Linux dans leur propre espace de noms réseau afin de les router via Tor
  • Un avertissement en haut de la documentation indique qu’oniux dispose désormais d’un site web distinct et que le numéro de version de cet article est largement obsolète

Le rôle des espaces de noms Linux

  • Les espaces de noms sont une fonctionnalité d’isolation du noyau Linux, introduite vers l’an 2000
  • Ils permettent de séparer en toute sécurité certaines parties d’une application du reste du système
  • Les espaces de noms se déclinent en plusieurs formes selon ce qui doit être isolé
    • Espace de noms réseau
    • Espace de noms de montage
    • Espace de noms de processus
    • Et plusieurs autres formes
  • Les ressources système de Linux sont généralement accessibles globalement par toutes les applications
    • Horloge du système d’exploitation
    • Liste complète des processus
    • Système de fichiers
    • Liste des utilisateurs
  • Les espaces de noms conteneurisent une partie d’une application par rapport au reste du système d’exploitation ; Docker utilise également cette fonctionnalité pour fournir des primitives d’isolation

Comment Tor et les espaces de noms sont combinés

  • oniux exécute chaque application dans un espace de noms réseau qui ne peut pas accéder aux interfaces réseau globales du système
  • Au lieu d’interfaces système comme eth0, cet espace de noms ne reçoit qu’une interface réseau personnalisée, onion0
  • Cette approche s’appuie sur des primitives de sécurité fournies par le noyau du système d’exploitation pour isoler l’accès à Tor d’applications arbitraires
  • Contrairement à l’approche SOCKS, elle réduit les situations où, à cause d’une erreur de développement, certaines connexions ne passent pas par le SOCKS configuré et laissent fuiter des données

Différences entre oniux et torsocks

  • torsocks est un outil qui remplace des fonctions libc liées au réseau afin d’envoyer le trafic vers le proxy SOCKS fourni par Tor
  • Cette méthode est plus multiplateforme qu’oniux, mais des données peuvent fuiter lors d’appels système qui ne passent pas par une libc liée dynamiquement
  • En particulier, les binaires purement statiques et les applications de l’écosystème Zig ne sont pas couverts par torsocks
  • oniux

    • Application autonome
    • Utilise les espaces de noms Linux
    • Fonctionne avec toutes les applications
    • Conçu de façon à empêcher les fuites de données même avec des applications malveillantes
    • Réservé à Linux
    • Outil nouveau et expérimental
    • Utilise Arti comme moteur
    • Écrit en Rust
  • torsocks

    • Nécessite un démon Tor en cours d’exécution
    • Utilise un hack de préchargement ld.so
    • Ne fonctionne qu’avec les applications qui effectuent leurs appels système via libc
    • Une application malveillante peut fabriquer des appels système en assembleur brut et laisser fuiter des données
    • Multiplateforme
    • Éprouvé depuis plus de 15 ans
    • Utilise CTor comme moteur
    • Écrit en C

Installation et exemples d’utilisation

  • Nécessite un système Linux et la chaîne d’outils Rust
  • L’installation se fait avec cargo install
cargo install --git https://gitlab.torproject.org/tpo/core/oniux --tag v0.4.0 oniux
  • Une simple requête HTTPS peut être exécutée via Tor
oniux curl https://icanhazip.com
  • Les requêtes IPv6 sont également prises en charge
oniux curl -6 https://ipv6.icanhazip.com
  • L’accès aux onion services est aussi possible
oniux curl http://2gzyxa5ihm7nsggfxnu52rck2vv4rvmdlkiu3zzui5du4xyclen53wid.onion/…
  • La journalisation peut être activée avec RUST_LOG=debug
RUST_LOG=debug oniux curl https://icanhazip.com
  • Exécuter un shell entier via Tor permet d’isoler tous les processus qu’il contient
oniux bash
  • Dans un environnement de bureau, les applications graphiques peuvent elles aussi être isolées
oniux hexchat

Fonctionnement interne

  • oniux commence par créer un processus enfant avec l’appel système clone(2)
  • Le processus enfant est isolé dans ses propres espaces de noms réseau, de montage, PID et utilisateur
  • Ensuite, le processus enfant monte sa propre copie de /proc et configure les correspondances UID/GID d’après l’UID et le GID du processus parent
  • Pour que l’application résolve les noms via Tor, il crée un fichier temporaire contenant une entrée nameserver, puis le monte en bind mount sur /etc/resolv.conf
  • Le processus enfant utilise onionmasq pour créer une interface TUN appelée onion0
  • Il configure ensuite l’interface au moyen d’opérations rtnetlink(7), notamment l’attribution d’adresses IP
  • Le processus enfant transmet le descripteur de fichier de l’interface TUN au processus parent via un socket Unix Domain
  • Le processus parent attend ce message après l’exécution initiale de clone(2)
  • Une fois la transmission terminée, le processus enfant abandonne toutes les capabilities obtenues en devenant le processus root de l’espace de noms utilisateur
  • Enfin, il exécute la commande fournie par l’utilisateur à l’aide de fonctionnalités de la bibliothèque standard Rust

État expérimental et précautions d’usage

  • oniux est une fonctionnalité relativement nouvelle et utilise de nouveaux logiciels Tor comme Arti et onionmasq
  • Il fonctionne actuellement comme prévu, mais torsocks dispose de davantage de retour d’expérience en conditions réelles après plus de 15 ans d’utilisation
  • L’objectif est qu’oniux atteigne une maturité comparable à celle de torsocks

2 commentaires

 
ndrgrd 2025-06-03

Tor n’est pas mal pour la vie privée, mais je ne sais pas vraiment si c’est un outil adapté à l’anonymat. On entend aussi dire que les nœuds de sortie sont déjà sous le contrôle des autorités étatiques.

 
GN⁺ 2025-06-02
Avis sur Hacker News
  • Il y a une dizaine d’années, à l’époque où les network namespaces commençaient à émerger, j’ai discuté de ce sujet avec un développeur de Tor.
    Le retour que j’avais reçu, c’est que c’était un moyen facile de faire croire aux gens qu’ils étaient en sécurité tout en laissant fuiter beaucoup d’informations identifiables, donc je n’ai pas poussé plus loin.

    • Je pense que c’était une erreur stratégique de la part de Tor de ne pas aller dans cette direction.
      Les personnes exposées à des menaces sérieuses doivent certes utiliser Tor Browser et rester vigilantes face aux autres canaux de fuite, mais si Tor était devenu omniprésent, la surveillance de masse aurait été bien plus difficile.
      Aujourd’hui, la surveillance de masse peut détecter qui utilise Tor ; si tout le monde l’utilisait, ce fait n’aurait pas eu beaucoup de signification.
    • C’est étrange. torsocks et torify font la même chose, mais de façon simplement moins robuste.
  • Tout cela ne concerne-t-il pas uniquement TCP ? Autrement dit, je me demande comment les activités non TCP peuvent être protégées.

    • Je ne connais pas les détails, mais https://gitlab.torproject.org/tpo/core/onionmasq dit ceci :
      Ce projet tente de mettre en œuvre une pile réseau simple en espace utilisateur capable de gérer l’état TCP et UDP, afin de permettre de transmettre le trafic vers le réseau Tor.
    • Comment les utilisateurs de Tor Browser gèrent-ils YouTube ou le DNS ? Je me demande aussi ce qu’il en est de HTTP/3.
    • Les activités non TCP ne seront pas routées et échoueront à la transmission.
  • Les instructions d’installation en première page ne fonctionnent pas. Il faut changer le numéro de version de 0.4.0 à 0.5.0.
    cargo install --git https://gitlab.torproject.org/tpo/core/oniux oniux@0.5.0

  • Oniux ressemble à un outil pris en charge « officiellement », similaire à orjail. orjail n’a pas eu de commit depuis 4 ans, mais comme script shell utilisant les outils iptables/iproute, il fonctionne encore très bien [1].
    orjail propose aussi une option pour être exécuté avec firejail afin d’ajouter une isolation supplémentaire, une fonctionnalité qui ne semble pas encore exister dans Oniux.
    [1] https://github.com/orjail/orjail/blob/master/usr/sbin/orjail

  • Au début, je pensais que cela envoyait le trafic via un daemon tor exécuté localement, comme torsocks.
    Mais j’ai vu qu’oniux continue de fonctionner même après avoir arrêté le daemon tor local, alors que torify et torsocks ne fonctionnent plus. C’était en fait indiqué dans la documentation. Plutôt pas mal.
    Ça fonctionne aussi dans Docker, mais il a fallu --privileged. En copiant le binaire dans un conteneur debian:12, ça marche aussi là-dedans :
    docker run -it --rm --privileged -v "$PWD/oniux:/usr/bin/oniux" debian:12

  • Fait intéressant, c’était cassé dans curl depuis 5 ans, tout comme les exemples de blog. La raison est que les développeurs de Tor insistaient auparavant sur le fait que les applis ne devaient pas essayer de résoudre les noms de domaine .onion : https://daniel.haxx.se/blog/2025/05/16/leeks-and-leaks/
    J’espère qu’une solution pourra être trouvée.

  • Cela veut-il dire qu’on peut maintenant accéder aux sites web Tor avec Chrome ?

    • C’est possible, mais, s’il vous plaît, mieux vaut ne pas le faire. Cela vous rend au contraire plus identifiable. Tor Browser dispose de plusieurs stratégies anti-empreinte que Chrome n’a pas.
    • C’était déjà possible auparavant en définissant simplement les variables d’environnement ou les réglages de proxy. Le port standard du daemon tor est 9050.
      En fait, un proxy SOCKS permettant de router le trafic via un protocole arbitraire est relativement facile à créer. Par exemple, on peut utiliser un proxy SOCKS5 comme couche de conversion pour héberger ou consulter des sites web au-dessus de syncthing : https://github.com/acheong08/syndicate
  • L’exemple utilise hexchat ; ce genre de processus s’exécute-t-il avec la configuration de l’utilisateur ? Si on oublie de modifier les réglages, le nom d’utilisateur IRC ne risque-t-il pas de fuiter ?
    Et si on lance un navigateur, les cookies peuvent aussi fuiter ?

    • C’est une séparation des responsabilités. Tor fait beaucoup d’efforts pour empêcher le fingerprinting, mais à titre personnel, je considère que l’objectif principal de Tor et d’Oniux est de rendre l’adresse IP d’origine impossible à tracer.
      On pourrait dire la même chose si l’on se connectait à Gmail via Tor. À condition que ce ne soit pas en HTTPS.
    • Je ne comprends pas ce que signifie « le nom d’utilisateur fuit ». Le fait que le nom d’utilisateur utilise Tor peut être révélé.
      Le fait que tous les noms d’utilisateur se connectant au même hôte IRC appartiennent à la même personne restera également visible.
      Si l’on cherche à rester anonyme, IRC semble assez risqué. Beaucoup de gens enregistrent les heures de déconnexion, ce qui permet de les corréler avec d’autres événements de panne réseau.
  • Ici, l’expérience développeur est très bien conçue, au point qu’un idiot pourrait l’utiliser. Bravo aux créateurs <3

    • Pas du tout. Les idiots sont inventifs. La prudence opérationnelle nécessaire pour l’utiliser tout en préservant l’anonymat est trop difficile pour la plupart des utilisateurs.
  • Bien. Maintenant, réécrivez le prototype en C et je l’utiliserai volontiers.

    • C’est écrit en Rust. Pourquoi faudrait-il une version C ?