- 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
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.
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.
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.
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.
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.
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
https://raw.githubusercontent.com/orjail/orjail/master/usr/s...
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 conteneurdebian:12, ça marche aussi là-dedans :docker run -it --rm --privileged -v "$PWD/oniux:/usr/bin/oniux" debian:12
https://tpo.pages.torproject.net/core/arti/
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 ?
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 ?
On pourrait dire la même chose si l’on se connectait à Gmail via Tor. À condition que ce ne soit pas en HTTPS.
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
Bien. Maintenant, réécrivez le prototype en C et je l’utiliserai volontiers.