Dự án Tor đang chuyển sang Rust
(itsfoss.com)- Phần mã cốt lõi của mạng Tor đang được chuyển từ ngôn ngữ C hiện có sang Arti dựa trên Rust
- Trong mã C hiện tại tồn tại các lỗ hổng như tràn bộ đệm, use-after-free, hỏng bộ nhớ
- Phiên bản mới Arti 1.8.0 loại bỏ các mẫu có thể dự đoán thông qua thiết kế lại thời gian chờ mạch, từ đó giảm nguy cơ bị theo dõi
- Đã bổ sung lệnh mới để nhà vận hành onion service có thể tự động di chuyển khóa từ Tor dựa trên C sang Arti
- Đợt chuyển đổi này là một bước tiến kỹ thuật quan trọng của dự án Tor nhằm cải thiện bảo mật và độ ổn định
Những thay đổi chính trong Arti 1.8.0
-
Trọng tâm của bản phát hành này là áp dụng làm lại thời gian chờ mạch (circuit timeout rework)
- Circuit Dirty Timeout (CDT) của Tor trước đây điều khiển thời điểm đóng mạch bằng một bộ hẹn giờ duy nhất
- Cách này có tính dự đoán, nên kẻ giám sát lưu lượng có thể nhận diện các mẫu
- Arti 1.8.0 đưa vào thời gian chờ dựa trên mức sử dụng và các bộ hẹn giờ riêng lẻ, thay đổi để mạch kết thúc tại thời điểm ngẫu nhiên khi chấp nhận kết nối mới hoặc ở trạng thái nhàn rỗi
- Nhờ đó giảm rủi ro lấy dấu vân tay (fingerprinting)
-
Bổ sung lệnh thử nghiệm
arti hsc ctor-migratemới- Nhà vận hành onion service có thể di chuyển restricted discovery keys từ Tor dựa trên C sang kho khóa (keystore) của Arti
- Các khóa này được dùng cho xác thực máy khách, và lệnh mới hỗ trợ di chuyển tự động mà không cần thao tác thủ công
-
Các cải tiến bổ sung
- Cải thiện nhiều thành phần nội bộ như kiến trúc định tuyến, triển khai giao thức, hỗ trợ bộ nhớ đệm thư mục, thiết lập trình lắng nghe cổng OR
- Có thể xem chi tiết thay đổi trong nhật ký thay đổi chính thức của Arti 1.8.0
Bối cảnh của quá trình chuyển sang Rust
- Mạng Tor đã được vận hành trên nền tảng ngôn ngữ C từ đầu những năm 2000
- Tuy nhiên, codebase C liên tục phát sinh lỗ hổng bảo mật do vấn đề an toàn bộ nhớ
- Vì vậy, dự án Tor đang thúc đẩy dự án viết lại Arti tận dụng tính an toàn bộ nhớ của Rust
- Arti tái triển khai các chức năng của Tor bằng Rust, với mục tiêu tăng cường bảo mật, độ ổn định và khả năng bảo trì
Ý nghĩa kỹ thuật
- Việc chuyển sang Rust là hướng đi củng cố tận gốc cấu trúc đảm bảo tính ẩn danh của Tor
- Loại bỏ hành vi mạch có thể dự đoán và tự động hóa quản lý khóa góp phần nâng cao mức độ bảo vệ quyền riêng tư của người dùng
- Các bản cập nhật liên tục của Arti được xem là tín hiệu thúc đẩy thay thế từng bước Tor dựa trên C
2 bình luận
Phát hành Arti 1.0.0 - bản triển khai Tor được viết bằng Rust
Ý kiến trên Hacker News
Gần đây tôi đã thử bài test EFF's Cover Your Tracks, và kết quả cho thấy chỉ Tor Browser khi tắt JS mới hoàn toàn chống được fingerprinting.
Ngay cả Tor khi bật JS cũng chỉ được đánh giá là chống được “một phần”, còn Firefox thì dù tắt JS vẫn không cho ra kết quả. Đây là một kết quả khá đáng sợ nên tôi cũng tò mò về thử nghiệm của những người khác
Ngược lại, những công cụ chỉ kiểm tra tính bền vững như fingerprinting.com/demo cũng có vấn đề.
Tín hiệu cảnh báo thật sự là khi thất bại ở cả hai bài test
Tuy vậy, dù Tor Browser chắc chắn rất dễ bị chú ý, nhưng chỉ từ bài test này thì khó kết luận rằng việc phân biệt fingerprint giữa các người dùng Tor là dễ
Mức bảo mật càng cao thì số bit nhận dạng lại càng tăng, rồi khi tắt hẳn JS thì lại giảm xuống.
Tức là vô hiệu hóa JS cho mức độ ẩn danh cao nhất
Giá mà Mozilla tiếp tục đẩy mạnh hơn việc chuyển sang Rust (oxidizing) của Firefox thì tốt biết mấy. Điều đó hẳn cũng sẽ tích cực cho hệ sinh thái Rust
Nếu Rust cứ là “vũ khí bí mật” của Mozilla thì có khi việc phổ biến Rust còn bị chậm lại
Nếu việc dùng Rust giúp họ giải quyết vấn đề thì đó là một lựa chọn hợp lý.
Ngôn ngữ là công cụ được chọn khác nhau tùy dự án, đội ngũ và bài toán
Đây không phải luận điệu fanboy Rust, mà giống vấn đề tâm lý phản kháng như thời các bác sĩ hay phi công từng chống lại checklist
UI cần lặp nhanh và GC quan trọng, còn hiệu năng thì ít quan trọng hơn. Viết UI bằng Rust có thể thành địa ngục bảo trì
Vì Tor là môi trường đa luồng nơi cả bảo mật lẫn hiệu năng đều quan trọng.
Zig cũng có thể là một lựa chọn thay thế nhưng vẫn chưa đủ trưởng thành. Cách tiếp cận coi trọng determinism như Tigerbeetle cũng khá thú vị
Điều tôi bất mãn nhất với dự án Tor là tốc độ chậm. Chuyển sang Rust có lẽ cũng không làm nó nhanh hơn
Đợt chuyển sang Rust lần này được thực hiện nhờ tài trợ từ Zcash Community Grants. Ngay cả trong R&D tiền mã hóa cũng có thể có kết quả tốt
Tuy vậy, cũng có thể đùa rằng tiền mã hóa còn tệ hơn cả nước tiểu
Tôi lo về rủi ro pháp lý khi vận hành exit node của Tor. Không biết có cách nào chỉ cho phép theo kiểu whitelist không
Nếu có thể thì nên đăng ký dưới danh nghĩa tổ chức, và nếu chỉ muốn hỗ trợ an toàn hơn thì vận hành relay sẽ tốt hơn
Hoặc chạy guard/middle relay cũng sẽ giúp ích rất nhiều cho mạng
Chỉ là cần chặn một số ASN của Trung Quốc. Có rất nhiều lưu lượng tải xuống giả
Việc đưa Rust vào giống như thay những cột gỗ trong một pháo đài cũ bằng thép.
Mã C của Tor mang theo dấu vết của hàng chục năm thỏa hiệp về bảo mật và hiệu năng, nên Rust hóa dần dần là cách thực tế nhất để nâng mức an toàn
Cốt lõi không phải là “viết lại toàn bộ” mà là thu hẹp các vùng không an toàn về bộ nhớ.
Chỉ cần chuyển những phần parsing, crypto và ranh giới giao thức có mức rủi ro cao sang Rust thì Tor sẽ vững chắc hơn
Cũng thú vị khi nghĩ rằng sau này nó có thể phát triển theo hướng pluggable transport dựa trên Rust hoặc runtime lai
Thực ra đây không phải quyết định mới gần đây. Tor đã bắt đầu dự án Arti viết bằng Rust từ năm 2020, và công bố Arti 1.0 vào năm 2022
Họ cho rằng việc refactor dần codebase C là rất khó, đồng thời hài lòng với tốc độ phát triển, tính di động và khả năng thu hút contributor của Rust
Gần đây theo Arti changelog, dự án vẫn đang được phát triển rất tích cực
Ví dụ, app nhắn tin có thể dùng mạng này mà không cần daemon Tor riêng. Tôi nghĩ đây mới là thay đổi lớn hơn
Tor không chỉ là một khái niệm đơn giản mà là cái tên bao gồm cả giao thức (onion routing), mạng lưới, và bản triển khai tham chiếu
Cũng có một đề xuất nửa đùa nửa thật rằng biết đâu biên dịch Tor bằng Fil-C sẽ có ngay tính an toàn bộ nhớ miễn phí