4 điểm bởi GN⁺ 2025-06-02 | 2 bình luận | Chia sẻ qua WhatsApp
  • Oniux là công cụ cô lập cấp kernel giúp buộc toàn bộ lưu lượng của ứng dụng Linux đi vòng qua mạng Tor, qua đó giảm thiểu rủi ro rò rỉ dữ liệu
  • Công cụ tận dụng Linux namespace để cô lập từng ứng dụng trong môi trường mạng độc lập và triển khai giao tiếp an toàn thông qua Tor
  • Khác với torsocks hiện có, Oniux vẫn hoạt động với binary tĩnh hoặc ứng dụng không dùng libc, nhờ đó chặn được đường rò rỉ dữ liệu trực tiếp từ ứng dụng độc hại
  • Oniux được xây dựng bằng Rust trên nền Artionionmasq mới, tăng cường cả tính bảo mật lẫn khả năng mở rộng
  • Hiện Oniux vẫn là công cụ thử nghiệm; về độ ổn định, nó khác với torsocks đã được kiểm chứng, nhưng đang được chú ý như một giải pháp cô lập lưu lượng Tor thế hệ tiếp theo

Giới thiệu Oniux

Oniux là một tiện ích dòng lệnh giúp nâng mức bảo vệ quyền riêng tư trên Linux lên đáng kể thông qua cô lập mạng Tor. Công cụ được thiết kế để giúp nhà phát triển, nhà hoạt động và nhà nghiên cứu chặn hoàn toàn khả năng rò rỉ dữ liệu do cấu hình proxy sai hoặc chỉ một chút bất cẩn gây ra. Oniux hoạt động trên nền Artionionmasq, cô lập bất kỳ ứng dụng Linux nào vào một namespace mạng riêng biệt và buộc toàn bộ lưu lượng chỉ được định tuyến qua mạng Tor.

Linux namespace là gì

  • Namespace là một tính năng cô lập cốt lõi của kernel Linux
  • Nó giúp tách biệt về mặt logic một phần tài nguyên của ứng dụng khỏi toàn bộ hệ thống
  • Có thể cô lập nhiều loại tài nguyên như mạng, mount, tiến trình bằng kỹ thuật này
  • Mỗi namespace sẽ tách riêng tài nguyên hệ điều hành, nên được dùng trong môi trường container hoặc cho mục đích bảo mật
  • Các giải pháp container tiêu biểu như Docker sử dụng namespace làm nguyên lý nền tảng

Ý nghĩa của việc kết hợp Tor và namespace

  • Namespace bảo vệ việc truy cập mạng Tor của ứng dụng bất kỳ bằng cơ chế cô lập hoàn toàn
  • Mỗi ứng dụng được đặt độc lập trong network namespace và chỉ được lộ ra giao diện tùy biến có tên onion0
  • Ứng dụng không thể truy cập các giao diện mạng của toàn bộ hệ điều hành (ví dụ: eth0), từ đó tối đa hóa an toàn
  • Khác với cách dùng proxy dựa trên SOCKS, không có nguy cơ rò rỉ lưu lượng trực tiếp do sai sót hay lỗi phát sinh

So sánh Oniux và torsocks

  • Torsocks hook các hàm mạng của libc bằng kỹ thuật LD_PRELOAD để chuyển hướng qua SOCKS proxy của Tor
  • Oniux hoạt động bằng cô lập namespace, nên có thể ngăn rò rỉ lưu lượng 100% ngay cả với binary tĩnh hoặc ứng dụng như Zig
  • Các điểm so sánh chính
    • Oniux: không cần daemon Tor riêng, dùng namespace, hỗ trợ mọi ứng dụng, chặn cả raw syscall từ ứng dụng độc hại, chỉ dành cho Linux, mới/thử nghiệm, dựa trên Arti, viết bằng Rust
    • Torsocks: cần daemon Tor, dùng kiểu hack ld.so, chỉ hỗ trợ ứng dụng liên kết với libc, raw syscall vẫn có thể rò rỉ, đa nền tảng, đã được kiểm chứng hơn 15 năm, dùng engine CTor, viết bằng C

Cách dùng Oniux

  • Cần một hệ thống Linux đã thiết lập môi trường phát triển Rust
  • Có thể cài đặt và chạy oniux đơn giản từ dòng lệnh

Ví dụ sử dụng chính:

  • $ oniux curl https://icanhazip.com # Kiểm tra IP nhận được khi đi qua Tor
  • $ oniux bash # Chạy toàn bộ shell trong môi trường cô lập Tor
  • $ oniux hexchat # Ứng dụng GUI cũng có thể bị buộc đi qua Tor
  • $ RUST_LOG=debug oniux curl ... # Hỗ trợ ghi log để gỡ lỗi

Nguyên lý hoạt động bên trong

  • Oniux dùng syscall clone(2) để tạo tiến trình con trong các namespace mạng, mount, PID và người dùng độc lập
  • Tiến trình con mount riêng /proc và điều chỉnh quyền thông qua ánh xạ UID/GID
  • Một tệp tạm chứa thông tin nameserver được bind mount vào /etc/resolv.conf, từ đó buộc sử dụng trình phân giải tên dựa trên Tor
  • Tạo giao diện TUN (onion0) bằng onionmasq rồi gán và cấu hình IP
  • Tiến trình con truyền interface fd sang tiến trình cha qua Unix domain socket để giảm thiểu đặc quyền
  • Cuối cùng sử dụng các tính năng của Rust để thực thi lệnh do người dùng nhập

Tính chất thử nghiệm của Oniux

  • Oniux là phiên bản đầu được xây dựng trên các công nghệ mới như Arti và onionmasq
  • Ở thời điểm hiện tại công cụ vẫn hoạt động bình thường, nhưng còn thiếu kinh nghiệm trưởng thành qua thời gian dài như torsocks
  • Cần thêm nhiều phản hồi từ quá trình sử dụng thực tế để tăng độ ổn định và cải thiện hiệu năng

Ghi công và hỗ trợ

  • Dự án bày tỏ lời cảm ơn tới smoltcp, stack IP viết bằng Rust, cùng các nhà phát triển như 7ppKb5bW đã tư vấn cách tận dụng user namespace trong quá trình phát triển
  • Dự án oniux được duy trì nhờ sự hỗ trợ của The Tor Project và cộng đồng, đồng thời khuyến khích tài trợ để thúc đẩy quyền riêng tư và phần mềm nguồn mở

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 Hacker News
  • Khoảng 10 năm trước, khi network namespace trở thành một chủ đề nóng, tôi từng trao đổi với một nhà phát triển Tor về việc này. Phản hồi tôi nhận được khi đó là: cách ly bằng namespace khiến mọi người yên tâm hơn về bảo mật, nhưng vẫn có thể rò rỉ rất nhiều thông tin có thể định danh, nên tôi nhớ là họ đã không tiếp tục thúc đẩy hướng đó nữa.
    • Tôi nghĩ việc nhóm Tor nhấn mạnh điểm đó là một sai lầm về mặt chiến lược. Đúng là những người đối mặt với các mối đe dọa nghiêm trọng nên dùng Tor Browser và cũng phải chú ý tới các kênh rò rỉ thông tin khác, nhưng nếu Tor trở thành mặc định cho tất cả mọi người thì việc giám sát trên diện rộng hẳn đã khó hơn rất nhiều. Hiện tại, bản thân việc ai đang dùng Tor cũng đã là đối tượng bị giám sát, nhưng nếu ai cũng dùng thì thông tin đó sẽ trở nên vô nghĩa.
    • torsocktorify về cơ bản cũng làm cùng vai trò, nhưng tôi cảm thấy chúng kém vững chắc hơn.
  • Nếu làm đúng theo lệnh trong hướng dẫn cài đặt thì sẽ không chạy. Cần đổi số phiên bản từ 0.4.0 sang 0.5.0.
    cargo install --git https://gitlab.torproject.org/tpo/core/oniux oniux@0.5.0
  • Ban đầu tôi cứ nghĩ lưu lượng sẽ đi ra thông qua một tor daemon chạy cục bộ, giống như torsocks. Nhưng ngay cả khi tắt tor daemon cục bộ thì oniux vẫn hoạt động tốt, còn torifytorsocks thì không. Đọc tài liệu mới thấy đúng là nó được thiết kế như vậy. Một chi tiết rất thú vị. Nó cũng chạy tốt trong docker, nhưng tôi phải dùng tùy chọn --privileged, và chỉ cần chép binary vào container debian:12 là cũng chạy bình thường.
    docker run -it --rm --privileged -v "$PWD/oniux:/usr/bin/oniux" debian:12
  • Tôi thắc mắc liệu tất cả chuyện này chỉ áp dụng cho TCP hay không. Tức là không rõ lưu lượng không phải TCP có được bảo vệ hay không.
    • Tôi không biết chi tiết, nhưng nhìn vào https://gitlab.torproject.org/tpo/core/onionmasq thì có vẻ họ đang cố xây dựng một network stack trong user space hỗ trợ không chỉ TCP mà cả UDP để chuyển tiếp vào mạng Tor.
    • Tôi tự hỏi những người dùng Tor Browser xử lý YouTube, DNS và HTTP/3 như thế nào.
    • Lưu lượng không phải TCP sẽ không được định tuyến mà chỉ đơn giản là gửi thất bại.
  • Oniux có vẻ là một công cụ được hỗ trợ chính thức. Nó khá giống orjail, nhưng orjail đã 4 năm không có commit nào mà vẫn hoạt động ổn dưới dạng shell script cùng với các công cụ iptables/iproute.
    orjail còn có một tùy chọn để tăng cường cách ly bằng firejail, nhưng Oniux thì hiện chưa có tính năng đó.
    https://github.com/orjail/orjail/blob/master/usr/sbin/orjail
  • Giờ tôi tự hỏi liệu có thể dùng chrome để truy cập các website tor hay không.
    • Làm được, nhưng tôi khuyên đừng làm vậy. Chrome không có các chiến lược chống fingerprinting khác nhau như Tor Browser. Dùng một trình duyệt thông thường sẽ khiến bạn trở thành một người dùng nổi bật hơn.
    • Thật ra từ lâu rồi chỉ cần đặt đúng biến môi trường proxy (hoặc cấu hình) là có thể truy cập bằng các trình duyệt như chrome. Cổng chuẩn của tor daemon là 9050. Việc tự viết một socks proxy để định tuyến lưu lượng cũng khá dễ. Ví dụ, bạn có thể gửi lưu lượng từ những thứ như syncthing qua một proxy socks5.
      https://github.com/acheong08/syndicate
  • Họ lấy hexchat làm ví dụ, nhưng nếu giữ nguyên thiết lập hồ sơ của người dùng thì chẳng phải tên người dùng IRC sẽ bị lộ sao?
    Khi chạy trình duyệt thì cookie các kiểu cũng có thể bị lộ.
    • Phân tách vai trò là rất quan trọng. Tor bỏ ra rất nhiều công sức để chống fingerprinting, nhưng về bản chất mục tiêu của Tor và Oniux là khiến IP nguồn không thể bị truy vết. Nếu bạn đăng nhập Gmail qua Tor thì cũng gặp vấn đề tương tự (trừ khi HTTPS không được áp dụng).
    • Tôi thắc mắc “làm lộ tên người dùng” ở đây nghĩa là gì. Trên thực tế, điều đó chỉ cho thấy tên người dùng đó đang dùng Tor. Nếu cùng một tên người dùng tiếp tục kết nối tới cùng một máy chủ IRC, thì người ta có thể suy ra tất cả đều là cùng một người. IRC là một phương tiện khá rủi ro nếu mục tiêu là ẩn danh. Nhiều người còn lưu log và liên hệ chúng với các sự kiện ngắt kết nối mạng, nên có thể làm lộ các mối tương quan.
  • Phần DevEx (trải nghiệm phát triển) được làm rất tốt, đến mức tôi thấy gần như chống-ngốc. Muốn vỗ tay cho đội phát triển.
    • Thực ra tôi không nghĩ hoàn toàn như vậy. Những người ngốc luôn rất sáng tạo, và để bảo đảm ẩn danh thì cần vận hành cực kỳ cẩn trọng, ở mức mà phần lớn người dùng khó có thể đáp ứng.
  • Nếu ai đó viết lại phần code này bằng C thì tôi sẽ vui vẻ dùng ngay.
    • Nó vốn đã được viết bằng Rust rồi. Tôi tò mò không hiểu vì sao lại cần một bản bằng C đến vậy.