4 pontos por GN⁺ 2025-06-02 | 2 comentários | Compartilhar no WhatsApp
  • É uma ferramenta que coloca qualquer programa Linux em um ambiente de rede separado e envia todo o tráfego pelo Tor, reduzindo o risco de vazamentos que antes dependia de configurações de proxy por aplicativo
  • O núcleo da abordagem são os namespaces de rede do kernel Linux, fazendo o app enxergar apenas onion0 em vez das interfaces do sistema, o que dificulta conexões de desvio
  • O torsocks tradicional usa sobrescrita de funções da libc, então dados podem vazar em binários estáticos ou em chamadas que não passam pela libc, como no ecossistema Zig
  • O oniux é uma ferramenta em Rust exclusiva para Linux baseada em Arti e onionmasq, enquanto o torsocks é uma implementação em C baseada em CTor, multiplataforma e usada há mais de 15 anos
  • O usuário pode executar oniux curl, oniux bash, oniux hexchat e outros comandos, mas deve considerar que se trata de uma ferramenta nova e experimental

O problema de isolamento Tor que o oniux quer resolver

  • Ao executar apps ou serviços sensíveis à privacidade, todos os pacotes precisam realmente sair somente via Tor
  • Se a configuração de proxy estiver errada ou se uma chamada de sistema ocorrer fora do wrapper SOCKS, os dados podem ficar expostos
  • O oniux é um utilitário de linha de comando que fornece isolamento de rede Tor para aplicativos de terceiros usando namespaces do Linux
  • Ele funciona sobre Arti e onionmasq, colocando programas Linux em seu próprio namespace de rede e roteando tudo pelo Tor
  • No topo da documentação há um aviso de que o oniux agora tem um site próprio e que o número de versão deste texto está bastante desatualizado

O papel dos namespaces do Linux

  • Namespaces são um recurso de isolamento do kernel Linux, introduzido por volta de 2000
  • Eles permitem separar com segurança partes específicas de uma aplicação do restante do sistema
  • Há vários tipos de namespace, dependendo do que será isolado
    • Namespace de rede
    • Namespace de montagem
    • Namespace de processos
    • E vários outros tipos
  • Os recursos de sistema do Linux normalmente podem ser acessados globalmente por todas as aplicações
    • Relógio do sistema operacional
    • Lista completa de processos
    • Sistema de arquivos
    • Lista de usuários
  • Namespaces containerizam partes da aplicação em relação ao restante do sistema operacional, e o Docker também usa esse recurso ao fornecer primitivas de isolamento

Como Tor e namespaces são combinados

  • O oniux executa cada aplicação dentro de um namespace de rede que não pode acessar as interfaces de rede globais do sistema
  • Nesse namespace, em vez de interfaces do sistema como eth0, só é disponibilizada a interface de rede personalizada onion0
  • Essa abordagem depende das primitivas de segurança fornecidas pelo kernel do sistema operacional para isolar o acesso ao Tor por aplicações arbitrárias
  • Diferentemente da abordagem via SOCKS, ela reduz situações em que, por erro do desenvolvedor, algumas conexões não passam pelo SOCKS configurado e acabam vazando dados

Diferenças entre oniux e torsocks

  • torsocks é uma ferramenta que sobrescreve funções de rede da libc para enviar tráfego ao proxy SOCKS fornecido pelo Tor
  • Essa abordagem é mais multiplataforma que a do oniux, mas pode vazar dados em chamadas de sistema que não passam por uma libc vinculada dinamicamente
  • Em especial, binários totalmente estáticos e aplicações do ecossistema Zig ficam fora do alcance de suporte do torsocks
  • oniux

    • É uma aplicação independente
    • Usa namespaces do Linux
    • Funciona com todas as aplicações
    • Tem uma estrutura em que até aplicações maliciosas não conseguem vazar dados
    • É exclusivo para Linux
    • É uma ferramenta nova e experimental
    • Usa Arti como motor
    • Foi escrito em Rust
  • torsocks

    • Requer um daemon Tor já em execução
    • Usa hack de preload do ld.so
    • Só funciona com aplicações que fazem chamadas de sistema via libc
    • Aplicações maliciosas podem fazer chamadas de sistema em assembly puro e vazar dados
    • É multiplataforma
    • Foi validado em uso por mais de 15 anos
    • Usa CTor como motor
    • Foi escrito em C

Exemplos de instalação e uso

  • É necessário um sistema Linux e o toolchain Rust
  • A instalação é feita com cargo install
cargo install --git https://gitlab.torproject.org/tpo/core/oniux --tag v0.4.0 oniux
  • É possível executar uma requisição HTTPS simples via Tor
oniux curl https://icanhazip.com
  • Requisições IPv6 também são suportadas
oniux curl -6 https://ipv6.icanhazip.com
  • Também é possível acessar um onion service
oniux curl http://2gzyxa5ihm7nsggfxnu52rck2vv4rvmdlkiu3zzui5du4xyclen53wid.onion/…
  • O logging pode ser ativado com RUST_LOG=debug
RUST_LOG=debug oniux curl https://icanhazip.com
  • Ao executar um shell inteiro via Tor, é possível isolar todos os processos dentro dele
oniux bash
  • Em ambientes desktop, aplicações gráficas também podem ser isoladas
oniux hexchat

Fluxo interno de funcionamento

  • O oniux primeiro cria um processo filho com a chamada de sistema clone(2)
  • O processo filho é isolado em seus próprios namespaces de rede, montagem, PID e usuário
  • Em seguida, o processo filho monta sua própria cópia de /proc e configura o mapeamento de UID/GID de acordo com o UID e GID do processo pai
  • Ele cria um arquivo temporário com uma entrada de nameserver para que a aplicação resolva nomes via Tor e faz bind mount desse arquivo em /etc/resolv.conf
  • O processo filho usa onionmasq para criar uma interface TUN chamada onion0
  • Depois, configura a interface com operações rtnetlink(7), incluindo tarefas como atribuição de endereço IP
  • O processo filho envia o descritor de arquivo da interface TUN ao processo pai por meio de um socket de domínio Unix
  • O processo pai aguarda essa mensagem desde a execução inicial de clone(2)
  • Quando a transferência termina, o processo filho descarta todas as capabilities obtidas ao se tornar o processo root do namespace de usuário
  • Por fim, executa o comando fornecido pelo usuário com recursos da biblioteca padrão do Rust

Estado experimental e cuidados de uso

  • O oniux é uma funcionalidade relativamente nova e usa softwares Tor recentes como Arti e onionmasq
  • No momento ele funciona como esperado, mas o torsocks tem mais experiência prática por estar em uso há mais de 15 anos
  • O objetivo é que o oniux também alcance um nível de maturidade semelhante ao do torsocks

2 comentários

 
ndrgrd 2025-06-03

O Tor parece não ser ruim para privacidade, mas não tenho certeza se é uma ferramenta adequada para anonimato. Também há relatos de que os nós de saída já estão sob controle de órgãos estatais.

 
GN⁺ 2025-06-02
Comentários no Hacker News
  • Há uns 10 anos, quando os namespaces de rede estavam começando a ganhar força, conversei com um desenvolvedor do Tor sobre esse tema
    O feedback que recebi na época foi que isso seria uma forma fácil de fazer as pessoas acharem que estavam seguras, ao mesmo tempo em que deixariam vazar muitas informações identificáveis, então não insistimos mais nisso

    • Acho que o lado do Tor ter insistido nessa direção foi um erro estratégico
      É verdade que pessoas sob ameaça séria devem usar o Tor Browser e continuar tomando cuidado com outras formas de vazamento, mas, se o Tor fosse usado em todo lugar, a vigilância em massa teria sido muito mais difícil
      Hoje, a vigilância em massa consegue detectar quem usa Tor, mas, se todo mundo usasse, esse fato não significaria muita coisa
    • Estranho. torsocks e torify fazem a mesma coisa, só que de forma menos robusta
  • Isso tudo não se aplica apenas a TCP? Em outras palavras, fico curioso sobre como atividades que não sejam TCP podem ser protegidas

    • Não sei os detalhes, mas em https://gitlab.torproject.org/tpo/core/onionmasq está escrito o seguinte
      Este projeto é uma tentativa de implementar uma pilha de rede simples em espaço de usuário capaz de lidar com estados de TCP e UDP, para permitir encaminhar tráfego para a rede Tor
    • Como os usuários do Tor Browser lidam com YouTube ou DNS? Também fico curioso sobre como ficaria o HTTP/3
    • Atividades que não forem TCP não serão roteadas e falharão na transmissão
  • As instruções de instalação da primeira página não funcionam. É preciso mudar o número da versão de 0.4.0 para 0.5.0
    cargo install --git https://gitlab.torproject.org/tpo/core/oniux oniux@0.5.0

  • O Oniux parece ser uma ferramenta com suporte “oficial”, semelhante ao orjail. O orjail não recebe commits há 4 anos, mas ainda funciona muito bem como script de shell usando ferramentas iptables/iproute [1]
    O orjail também tem uma opção para rodar junto com firejail para isolamento adicional, algo que o Oniux aparentemente ainda não tem
    [1] https://github.com/orjail/orjail/blob/master/usr/sbin/orjail

  • No começo achei que isso funcionasse como o torsocks, enviando o tráfego por meio de um daemon tor rodando localmente
    Mas vi que, mesmo parando o daemon tor local, o oniux continua funcionando, enquanto torify e torsocks não funcionam. A documentação realmente dizia isso. Bem interessante
    Também funcionou dentro do Docker, mas exigiu --privileged. Copiei o binário para um contêiner debian:12 e também funcionou lá:
    docker run -it --rm --privileged -v "$PWD/oniux:/usr/bin/oniux" debian:12

  • Um fato interessante é que isso está quebrado no curl há 5 anos, e os exemplos de blog também estão. Isso porque os desenvolvedores do Tor insistiam antigamente que os apps não deveriam tentar resolver nomes de domínio .onion: https://daniel.haxx.se/blog/2025/05/16/leeks-and-leaks/
    Seria bom se conseguissem encontrar uma solução

  • Então isso quer dizer que agora dá para acessar sites Tor com o Chrome?

    • Dá, mas por favor não faça isso. Na verdade você vai se destacar ainda mais. O Tor Browser tem várias estratégias contra fingerprinting que o Chrome não tem
    • Isso já era possível antes apenas definindo variáveis de ambiente de proxy ou configurações. A porta padrão do daemon tor é 9050
      Na verdade, é relativamente fácil criar um proxy SOCKS que permita rotear tráfego por meio de protocolos arbitrários. Por exemplo, você pode usar um proxy SOCKS5 como camada de conversão para servir ou visitar sites sobre o syncthing: https://github.com/acheong08/syndicate
  • Eles usam hexchat no exemplo, mas esse tipo de processo é executado com configurações do usuário? Se você esquecer de mudar as configurações, o nome de usuário do IRC não pode vazar?
    Se você abrir o navegador, os cookies também podem vazar?

    • É uma questão de separar preocupações. O Tor faz um grande esforço para impedir fingerprinting, mas, pessoalmente, acho que o objetivo principal do Tor e do Oniux é tornar impossível rastrear o IP de origem
      Daria para dizer a mesma coisa sobre fazer login no Gmail pelo Tor. Isso se não fosse HTTPS
    • Não entendo o que você quer dizer com o nome de usuário vazar. O fato de o nome de usuário estar usando Tor pode ficar evidente
      Também continuará evidente que todos os nomes de usuário que se conectam ao mesmo host IRC são da mesma pessoa
      Se você está tentando preservar o anonimato, IRC parece bastante arriscado, porque muitas pessoas registram os horários de desconexão, o que permite correlacioná-los com outros eventos de falha de rede
  • A experiência de desenvolvedor aqui foi muito bem pensada, a ponto de até um idiota conseguir usar. Mandaram bem demais <3

    • Nada disso. Idiotas são engenhosos. As precauções operacionais necessárias para usar isso de forma a preservar o anonimato são difíceis demais para a maioria dos usuários
  • Legal. Agora, se reescreverem o protótipo em C, eu usaria com prazer

    • Isso foi escrito em Rust. Por que seria preciso uma versão em C?