4 điểm bởi GN⁺ 2025-06-02 | 2 bình luận | Chia sẻ qua WhatsApp
  • Đây là công cụ nhốt các chương trình Linux bất kỳ vào môi trường mạng riêng biệt và buộc toàn bộ lưu lượng đi qua Tor, giúp giảm rủi ro rò rỉ vốn trước đây phụ thuộc vào cấu hình proxy theo từng ứng dụng
  • Trọng tâm của công cụ là network namespace của nhân Linux, khiến ứng dụng chỉ nhìn thấy onion0 thay vì giao diện hệ thống, từ đó làm cho việc kết nối đi vòng trở nên khó khăn hơn
  • torsocks hiện có dùng cách ghi đè hàm libc, nên dữ liệu có thể bị rò rỉ ở các binary tĩnh hoặc các lời gọi không đi qua libc như trong hệ sinh thái Zig
  • oniux là công cụ Rust chỉ dành cho Linux dựa trên Arti và onionmasq, còn torsocks là bản cài đặt C dựa trên CTor, đa nền tảng và đã được sử dụng hơn 15 năm
  • Người dùng có thể thêm oniux trước các lệnh hiện có để chạy curl, bash, hexchat..., nhưng cần lưu ý đây là công cụ mới và mang tính thử nghiệm

Vấn đề cô lập Tor mà oniux muốn giải quyết

  • Khi chạy các ứng dụng hoặc dịch vụ nhạy cảm về quyền riêng tư, mọi gói tin thực sự phải chỉ đi ra qua Tor
  • Nếu nhập sai cấu hình proxy hoặc có system call xảy ra ngoài SOCKS wrapper, dữ liệu có thể bị lộ
  • oniux là tiện ích dòng lệnh cung cấp khả năng cô lập mạng Tor cho ứng dụng bên thứ ba bằng Linux namespace
  • Nó hoạt động trên Arti và onionmasq, đưa chương trình Linux vào network namespace riêng và định tuyến qua Tor
  • Phần đầu tài liệu có cảnh báo rằng oniux nay đã có website riêng và số phiên bản trong bài viết này đã khá cũ

Vai trò của Linux namespace

  • Namespace là tính năng cô lập của nhân Linux, được giới thiệu vào khoảng năm 2000
  • Nó cho phép tách biệt an toàn một số phần cụ thể của ứng dụng khỏi phần còn lại của hệ thống
  • Namespace được chia thành nhiều dạng tùy theo đối tượng cần cô lập
    • network namespace
    • mount namespace
    • process namespace
    • và nhiều dạng khác
  • Tài nguyên hệ thống trong Linux thông thường có thể được mọi ứng dụng truy cập ở phạm vi toàn cục
    • đồng hồ hệ điều hành
    • toàn bộ danh sách tiến trình
    • hệ thống tệp
    • danh sách người dùng
  • Namespace container hóa một phần ứng dụng khỏi phần còn lại của hệ điều hành, và Docker cũng dùng tính năng này khi cung cấp primitive cô lập

Cách kết hợp Tor với namespace

  • oniux chạy từng ứng dụng bên trong một network namespace không thể truy cập các giao diện mạng của toàn hệ thống
  • Trong namespace đó, thay vì các giao diện hệ thống như eth0, chỉ có giao diện mạng tùy chỉnh onion0 được cung cấp
  • Cách làm này dựa vào primitive bảo mật do kernel của hệ điều hành cung cấp để cô lập quyền truy cập Tor của ứng dụng bất kỳ
  • Khác với cách dùng SOCKS, nó giúp giảm tình huống một số kết nối vô tình không đi qua SOCKS đã cấu hình do lỗi của nhà phát triển, gây rò rỉ dữ liệu

Khác biệt giữa oniux và torsocks

  • torsocks là công cụ ghi đè các hàm libc liên quan đến mạng để gửi lưu lượng qua proxy SOCKS do Tor cung cấp
  • Cách này có tính đa nền tảng cao hơn oniux, nhưng dữ liệu có thể bị rò rỉ ở các system call không đi qua libc liên kết động
  • Đặc biệt, binary tĩnh thuần túy và các ứng dụng trong hệ sinh thái Zig nằm ngoài phạm vi hỗ trợ của torsocks
  • oniux

    • là ứng dụng độc lập
    • dùng Linux namespace
    • hoạt động với mọi ứng dụng
    • có cấu trúc khiến cả ứng dụng độc hại cũng không thể làm rò rỉ dữ liệu
    • chỉ dành cho Linux
    • là công cụ mới và mang tính thử nghiệm
    • dùng Arti làm engine
    • được viết bằng Rust
  • torsocks

    • cần một Tor daemon đang chạy
    • dùng thủ thuật preload của ld.so
    • chỉ hoạt động với ứng dụng thực hiện system call qua libc
    • ứng dụng độc hại có thể tự tạo system call bằng raw assembly và làm rò rỉ dữ liệu
    • là đa nền tảng
    • đã được kiểm chứng hơn 15 năm
    • dùng CTor làm engine
    • được viết bằng C

Ví dụ cài đặt và sử dụng

  • Cần hệ thống Linux và Rust toolchain
  • Việc cài đặt được thực hiện bằng cargo install
cargo install --git https://gitlab.torproject.org/tpo/core/oniux --tag v0.4.0 oniux
  • Có thể thực hiện một yêu cầu HTTPS đơn giản qua Tor
oniux curl https://icanhazip.com
  • Cũng hỗ trợ yêu cầu IPv6
oniux curl -6 https://ipv6.icanhazip.com
  • Cũng có thể truy cập onion service
oniux curl http://2gzyxa5ihm7nsggfxnu52rck2vv4rvmdlkiu3zzui5du4xyclen53wid.onion/…
  • Có thể bật logging bằng RUST_LOG=debug
RUST_LOG=debug oniux curl https://icanhazip.com
  • Nếu chạy cả shell qua Tor, có thể cô lập mọi tiến trình bên trong nó
oniux bash
  • Trong môi trường desktop, cũng có thể cô lập các ứng dụng đồ họa
oniux hexchat

Luồng hoạt động bên trong

  • oniux trước tiên tạo tiến trình con bằng system call clone(2)
  • Tiến trình con được cô lập bên trong network, mount, PID, user namespace riêng của nó
  • Sau đó tiến trình con mount bản sao riêng của /proc và thiết lập ánh xạ UID/GID khớp với UID và GID của tiến trình cha
  • Nó tạo một tệp tạm chứa mục nameserver để ứng dụng phân giải tên qua Tor, rồi bind mount tệp này vào /etc/resolv.conf
  • Tiến trình con dùng onionmasq để tạo giao diện TUN tên là onion0
  • Sau đó nó cấu hình giao diện bằng các thao tác rtnetlink(7), bao gồm những việc như gán địa chỉ IP
  • Tiến trình con chuyển file descriptor của giao diện TUN cho tiến trình cha qua Unix Domain socket
  • Tiến trình cha chờ thông điệp này sau lần gọi clone(2) ban đầu
  • Sau khi việc chuyển hoàn tất, tiến trình con từ bỏ toàn bộ capability có được khi trở thành tiến trình root trong user namespace
  • Cuối cùng, nó thực thi lệnh do người dùng cung cấp bằng chức năng của thư viện chuẩn Rust

Trạng thái thử nghiệm và lưu ý khi sử dụng

  • oniux là tính năng tương đối mới và dùng phần mềm Tor mới như Artionionmasq
  • Hiện tại nó hoạt động đúng như kỳ vọng, nhưng torsocks đã được dùng hơn 15 năm nên có nhiều kinh nghiệm thực chiến hơn
  • Mục tiêu là để oniux cũng đạt tới mức độ trưởng thành tương tự torsocks

2 bình luận

 
ndrgrd 2025-06-03

Tor có vẻ không tệ về mặt quyền riêng tư, nhưng tôi không chắc đó có phải là công cụ phù hợp cho tính ẩn danh hay không. Cũng có những câu chuyện nói rằng các nút thoát đã bị các cơ quan nhà nước kiểm soát từ lâu.

 
GN⁺ 2025-06-02
Ý kiến trên Hacker News
  • Khoảng 10 năm trước, khi network namespace mới bắt đầu nổi lên, tôi từng nói chuyện với một nhà phát triển Tor về chủ đề này
    Phản hồi lúc đó là đây là một cách dễ khiến mọi người tưởng là an toàn nhưng lại làm rò rỉ nhiều thông tin có thể định danh, nên tôi đã không thúc đẩy thêm

    • Tôi nghĩ việc phía Tor thúc đẩy theo hướng đó là một sai lầm chiến lược
      Đúng là những người đang đối mặt với mối đe dọa nghiêm trọng nên dùng Tor Browser và tiếp tục cẩn thận với các kênh rò rỉ khác, nhưng nếu Tor được dùng ở khắp nơi, giám sát đại trà đã khó hơn rất nhiều
      Hiện nay giám sát đại trà có thể phát hiện ai đang dùng Tor, nhưng nếu tất cả mọi người đều dùng thì việc đó sẽ chẳng còn nhiều ý nghĩa
    • Lạ thật. torsockstorify cũng làm việc tương tự, chỉ là kém chắc chắn hơn thôi
  • Có phải toàn bộ chuyện này chỉ áp dụng cho TCP không? Nói cách khác, tôi tò mò các hoạt động không phải TCP có thể được bảo vệ bằng cách nào

    • Tôi không biết chi tiết, nhưng https://gitlab.torproject.org/tpo/core/onionmasq có ghi như sau
      Dự án này là một nỗ lực triển khai một network stack đơn giản ở không gian người dùng có thể xử lý trạng thái TCP và UDP, để có thể chuyển tiếp lưu lượng qua mạng Tor
    • Người dùng Tor Browser xử lý YouTube hay DNS như thế nào? Tôi cũng tò mò HTTP/3 thì sao
    • Hoạt động không phải TCP sẽ không được định tuyến và việc truyền sẽ thất bại
  • Hướng dẫn cài đặt ở trang đầu không hoạt động. Cần đổi số phiên bản từ 0.4.0 thành 0.5.0
    cargo install --git https://gitlab.torproject.org/tpo/core/oniux oniux@0.5.0

  • Oniux trông giống một công cụ được hỗ trợ “chính thức” tương tự orjail. orjail đã 4 năm không có commit, nhưng là một shell script dùng các công cụ iptables/iproute và vẫn hoạt động rất tốt [1]
    orjail còn có tùy chọn chạy cùng firejail để cô lập bổ sung, một tính năng mà có vẻ Oniux hiện chưa có
    [1] https://github.com/orjail/orjail/blob/master/usr/sbin/orjail

  • Ban đầu tôi nghĩ cái này hoạt động giống torsocks, tức là gửi lưu lượng qua tor daemon đang chạy cục bộ
    Nhưng tôi thấy rằng ngay cả khi dừng tor daemon cục bộ thì oniux vẫn tiếp tục hoạt động, còn torify và torsocks thì không. Tài liệu thực ra cũng viết như vậy. Khá ổn
    Nó cũng chạy được trong Docker, nhưng cần --privileged. Tôi sao chép binary vào container debian:12 thì nó cũng chạy ở đó:
    docker run -it --rm --privileged -v "$PWD/oniux:/usr/bin/oniux" debian:12

  • Một sự thật thú vị là chuyện này đã bị hỏng trong curl suốt 5 năm, và các ví dụ trên blog cũng vậy. Vì trước đây các nhà phát triển Tor từng khăng khăng rằng ứng dụng không nên cố phân giải tên miền .onion: https://daniel.haxx.se/blog/2025/05/16/leeks-and-leaks/
    Hy vọng có thể tìm được giải pháp

  • Vậy nghĩa là giờ có thể dùng Chrome để truy cập website Tor à?

    • Có thể, nhưng làm ơn đừng. Nó sẽ khiến bạn nổi bật hơn. Tor Browser có nhiều chiến lược chống fingerprinting mà Chrome không có
    • Trước đây cũng đã có thể làm nếu chỉ định biến môi trường proxy hoặc cấu hình proxy. Cổng chuẩn của tor daemon là 9050
      Thực ra SOCKS proxy cho phép định tuyến lưu lượng qua một giao thức tùy ý tương đối dễ tạo. Ví dụ có thể dùng SOCKS5 proxy làm lớp chuyển đổi để phục vụ hoặc truy cập website trên syncthing: https://github.com/acheong08/syndicate
  • Ví dụ dùng hexchat, nhưng các tiến trình như vậy có chạy với cấu hình người dùng không? Nếu quên đổi cấu hình thì chẳng phải tên người dùng IRC sẽ bị rò rỉ sao
    Nếu chạy trình duyệt thì cookie cũng có thể bị rò rỉ chứ?

    • Đây là sự tách biệt mối quan tâm. Tor nỗ lực rất nhiều để ngăn fingerprinting, nhưng cá nhân tôi nghĩ mục đích chính của Tor và Oniux là làm cho IP nguồn không thể bị truy vết
      Có thể nói điều tương tự khi đăng nhập Gmail qua Tor. Nếu không có HTTPS thì là chuyện khác
    • Tôi không hiểu “tên người dùng bị rò rỉ” nghĩa là gì. Việc tên người dùng đó dùng Tor có thể bị lộ
      Việc tất cả tên người dùng kết nối tới cùng một host IRC là cùng một người thì vẫn sẽ bị lộ
      Nếu đang cố duy trì ẩn danh thì IRC có vẻ khá rủi ro. Vì nhiều người ghi lại thời điểm ngắt kết nối, nên có thể tương quan nó với các sự kiện lỗi mạng khác
  • Trải nghiệm dành cho nhà phát triển ở đây được làm rất tốt, đến mức người ngốc cũng dùng được. Khen đội làm ra nó <3

    • Hoàn toàn không. Người ngốc rất sáng tạo. Sự thận trọng trong vận hành cần thiết để dùng thứ này theo cách bảo toàn ẩn danh là quá khó với hầu hết người dùng
  • Hay đấy. Giờ nếu viết lại prototype bằng C thì tôi sẽ sẵn lòng dùng

    • Cái này được viết bằng Rust. Tại sao cần phiên bản C?