Linuxアプリ向けカーネルレベルTor分離ツール「Oniux」の紹介
(blog.torproject.org)- Oniuxは、LinuxアプリのすべてのトラフィックをTorネットワークへ強制的に迂回させ、データ漏えいリスクを最小化するカーネルレベルの分離ツール
- Linux名前空間を活用し、各アプリを独立したネットワーク環境に隔離して、Tor経由の安全な通信を実現
- 従来のtorsocksとは異なり、libcを使わない、または静的バイナリでも動作し、悪意あるアプリによる直接的なデータ漏えい経路を遮断
- Oniuxは新しいArti、onionmasqベースでRust言語により書かれており、セキュリティと拡張性の両方を強化
- 現在のOniuxは実験的ツールであり、安定性の面では実績あるtorsocksとは異なるものの、次世代のTorトラフィック分離ソリューションとして注目される
Oniuxの紹介
Oniuxは、LinuxでTorネットワーク分離を通じて個人情報保護の水準を飛躍的に高めるコマンドラインユーティリティ。開発者、活動家、研究者が、誤ったプロキシ設定やちょっとした不注意によるデータ漏えいの可能性を完全に封じられるよう設計されている。OniuxはArtiとonionmasqの上で動作し、あらゆるLinuxアプリを個別のネットワーク名前空間に隔離して、トラフィックをTorネットワーク経由にのみ強制的に迂回させる。
Linux名前空間とは何か
- 名前空間はLinuxカーネルの主要な分離機能
- アプリケーションの一部リソースをシステム全体から論理的に分離する
- ネットワーク、マウント、プロセスなどさまざまな資源をこの仕組みで分離可能
- それぞれの名前空間はOSリソースを分離し、コンテナ環境やセキュリティ目的に使われる
- Dockerなど代表的なコンテナソリューションが名前空間を基本原理として活用している
Torと名前空間を組み合わせる意味
- 名前空間は任意のアプリケーションによるTorネットワークアクセスを完全分離で保護する
- 各アプリをネットワーク名前空間に独立して配置し、
onion0というカスタムインターフェースのみを公開する - アプリはOS全体のネットワークインターフェース(例:
eth0)にアクセスできず、安全性の最大化を達成できる - SOCKSベースのプロキシ方式とは異なり、どのようなミスや欠陥があっても直接的なトラフィック漏えいのリスクがない
Oniuxとtorsocksの比較
- Torsocksはlibcのネットワーク関数をLD_PRELOAD方式でフックし、TorのSOCKSプロキシへ迂回させる
- Oniuxは名前空間分離で動作するため、静的バイナリやZigなどでもトラフィック漏えいを100%防止する
- 主な比較内容
- Oniux: 別個のTorデーモン不要、名前空間を使用、すべてのアプリをサポート、悪意あるアプリのrawシステムコールも遮断、Linux専用、新規・実験的、Artiベース、Rust製
- Torsocks: Torデーモンが必要、ld.soハック、libc連携アプリのみ対応、rawシステムコールでは漏えいの可能性あり、クロスプラットフォーム、15年以上の実績、CTorエンジン、C言語製
Oniuxの使い方
- Rust開発環境が構築されたLinuxシステムが必要
- コマンドラインから簡単にoniuxをインストールして実行可能
主な使用例:
- $ oniux curl https://icanhazip.com # Tor経由で取得したIPを確認
- $ oniux bash # シェル全体をTor分離で実行
- $ oniux hexchat # GUIアプリもTorへ強制迂回可能
- $ RUST_LOG=debug oniux curl ... # デバッグログをサポート
内部動作の仕組み
- Oniuxは
clone(2)システムコールで、独立したネットワーク・マウント・PID・ユーザー名前空間内に子プロセスを生成する - 子プロセスは
/procを個別にマウントし、UID/GIDマッピングで権限を調整する - ネームサーバー情報を含む一時ファイルを
/etc/resolv.confへバインドマウントし、Torベースのネームリゾルバの使用を強制する - onionmasqで**TUNインターフェース (
onion0)**を作成した後、IPの割り当てと設定を行う - 子プロセスがインターフェースfdをUnixドメインソケットで親プロセスへ渡し、権限を最小化する
- Rustの機能を利用して、最終的にユーザーが入力したコマンドを実行する
Oniuxの実験的な性質
- OniuxはArti、onionmasqなどの新技術を基盤として作られた初期バージョン
- 現時点では正常に動作するが、torsocksのように長年にわたり成熟した事例の経験はまだ不足している
- 安定性の確保と性能改善のために、多様な実運用からのフィードバックが必要
クレジットと支援
- RustベースのIPスタックであるsmoltcpや、ユーザー名前空間の活用方法について開発に助言した7ppKb5bWなどの開発者への謝意を表明
- The Tor Projectおよびコミュニティの支援によりoniuxプロジェクトは維持されており、プライバシーとオープンソースソフトウェアの発展のため支援が呼びかけられている
2件のコメント
Tor はプライバシーには悪くないように思いますが、匿名性に適したツールかどうかはよく分かりませんね。出口ノードはすでに国家機関に掌握されているという話もありますし。
Hacker Newsのコメント
torsockとtorifyも基本的には同じ役割を果たすが、堅牢性の面ではやや劣ると感じるcargo install --git https://gitlab.torproject.org/tpo/core/oniux oniux@0.5.0torsocksのようにローカルで動くtorデーモン経由でトラフィックが出ていくのだと思っていた。ところがローカルのtorデーモンを止めてもoniuxは問題なく動く一方で、torifyやtorsocksは動かない。ドキュメントを見ると実際そのようになっている。とても興味深い。dockerでも問題なく動いたが、--privilegedオプションが必要で、単にバイナリをdebian:12コンテナにコピーするだけでも正常に動作したdocker run -it --rm --privileged -v "$PWD/oniux:/usr/bin/oniux" debian:12https://tpo.pages.torproject.net/core/arti/
iptables/iprouteツールとシェルスクリプトでうまく動いているorjailにはfirejailで追加の分離を行えるオプションもあるが、Oniuxにはまだその機能はない
https://github.com/orjail/orjail/blob/master/usr/sbin/orjail
https://raw.githubusercontent.com/orjail/orjail/master/usr/sbin/orjail
syncthingのようなものにトラフィックを送ることもできるhttps://github.com/acheong08/syndicate
ブラウザを起動すればCookieのようなものも漏れる可能性がある