Địa chỉ IP thoát của Mullvad VPN có thể trở thành vector nhận diện người dùng bất ngờ
Một nghiên cứu mới chỉ ra rằng Mullvad VPN phân bổ địa chỉ IP thoát dựa trên khóa WireGuard theo một quy trình có thể dự đoán được. Do cách triển khai bộ tạo số ngẫu nhiên (RNG) trong ngôn ngữ Rust, các IP này tuân theo một tỷ lệ cụ thể, cho phép kẻ tấn công hoặc quản trị viên hệ thống nhận diện và theo dõi người dùng qua các máy chủ khác nhau, gây rủi ro về quyền riêng tư.

Mullvad từ lâu đã được biết đến là một trong những nhà cung cấp dịch vụ VPN hàng đầu về vấn đề quyền riêng tư. Một trong những tính năng độc đáo của họ là cung cấp nhiều địa chỉ IP thoát (exit IPs) cho mỗi máy chủ, giúp tránh việc quá nhiều người dùng chen chúc trên cùng một địa chỉ IP, từ đó giảm thiểu nguy cơ bị chặn hoặc giới hạn tốc độ bởi các trang web.
Tuy nhiên, một phát hiện mới đây đã hé lộ một lỗ hổng tiềm ẩn trong cơ chế phân bổ IP này. Thay vì ngẫu nhiên hoàn toàn như nhiều người lầm tưởng, địa chỉ IP thoát mà bạn nhận được thực tế được chọn một cách xác định dựa trên khóa công khai WireGuard của bạn. Điều này tạo ra một khả năng đáng lo ngại: kẻ tấn công có thể sử dụng IP thoát như một "vân tay" để nhận diện và theo dõi người dùng, ngay cả khi họ chuyển đổi giữa các máy chủ khác nhau của Mullvad.
Thử nghiệm thực tế
Để kiểm chứng giả thuyết này, một nhà nghiên cứu đã viết một kịch bản (script) thay đổi liên tục khóa công khai và lấy địa chỉ IP thoát từ một tập hợp 9 máy chủ của Mullvad. Sau một đêm chạy thử nghiệm với dữ liệu từ 3.650 khóa công khai, kết quả thu được khá bất ngờ.
Mặc dù về mặt lý thuyết, tổng số lượng tổ hợp IP thoát có thể lên tới hơn 8.200 tỷ, nhưng thực tế tất cả các khóa được kiểm tra chỉ rơi vào một trong 284 tổ hợp IP cụ thể. Điều này cho thấy sự ngẫu nhiên ở đây không hoàn toàn như mong đợi.
Mô hình tỷ lệ ẩn giấu
Khi phân tích sâu hơn về vị trí của các địa chỉ IP trong dải (pool) của từng máy chủ, một mô hình rõ ràng đã xuất hiện. Nếu tính toán vị trí số của một IP dựa trên khoảng cách từ IP bắt đầu của dải đó, rồi chia cho tổng kích thước của dải, một tỷ lệ chung sẽ hiện ra.
Ví dụ, đối với máy chủ ở Sydney, IP được gán có thể nằm ở vị trí thứ 49 trên tổng số 60 IP available, tạo ra tỷ lệ khoảng 0,816. Đáng ngạc nhiên là các máy chủ khác nhau, từ Chile đến Nam Phi, cũng gán các IP có tỷ lệ tương tự (khoảng 0,81 - 0,82). Điều này có nghĩa là Mullvad chỉ gán các IP lân cận nằm trong cùng một phân vị (percentile) trên tất cả các máy chủ cho một người dùng cụ thể.
Nguyên nhân sâu xa: RNG trong ngôn ngữ Rust
Tại sao lại có hiện tượng này? Câu trả lời có vẻ nằm ở cách Mullvad triển khai bộ tạo số ngẫu nhiên (RNG) bằng ngôn ngữ lập trình Rust.
Trong Rust, khi bạn khởi tạo một RNG với một hạt giống (seed) cố định và gọi hàm tạo số ngẫu nhiên trong một phạm vi (bound) cụ thể, kết quả sẽ luôn như nhau. Hơn nữa, khi thay đổi phạm vi này, entropy của RNG không bị ảnh hưởng ngay lập tức. Thay vào đó, cùng một số thực (float) được tạo ra trong lần gọi đầu tiên sẽ được dùng làm hệ số nhân cho phạm vi mới.
Kết quả là, dù kích thước dải IP (pool size) của từng máy chủ có khác nhau, thuật toán vẫn chọn ra các vị trí có tỷ lệ tương đối đồng nhất. Đây có thể là một hiểu lầm phổ biến về cách hoạt động của random_range trong Rust, hoặc có thể là một lỗi lập trình vô tình.
Công cụ ước tính seed của Mullvad
Rủi ro bị lộ danh tính
Mặc dù việc chỉ có 284 tổ hợp IP có nghĩa là bạn chia sẻ đặc điểm nhận dạng với một nhóm nhỏ người dùng khác (khoảng 0,34% tổng số người dùng), nhưng mức độ chính xác >99% vẫn là một vấn đề lớn.
Hãy tưởng tượng bạn là một quản trị viên của một diễn đàn và nghi ngờ một thành viên mới thực chất là "sockpuppet" (tài khoản ảo) của một người dùng vừa bị cấm. Bằng cách kiểm tra nhật ký IP, bạn thấy rằng hai tài khoản này sử dụng các máy chủ Mullvad khác nhau, nhưng các dải tỷ lệ IP của chúng lại trùng khớp (ví dụ: 0.4334 - 0.4428). Điều này cho phép bạn kết luận với độ tin cậy cao rằng cả hai tài khoản đều thuộc về một người.
Khi áp dụng phương pháp này vào các dữ liệu rò rỉ hoặc các yêu cầu pháp lý, kẻ tấn công hoàn toàn có thể giải nặc danh (deanonymize) người dùng VPN thông qua các cuộc tấn công tương quan.
Cách tự bảo vệ
Để giảm thiểu rủi ro này, người dùng Mullvad có thể áp dụng các biện pháp sau:
- Tránh chuyển đổi máy chủ quá nhiều lần cho cùng một khóa công khai.
- Buộc xoay vòng khóa công khai (pubkey) bằng cách đăng xuất và đăng nhập lại ứng dụng Mullvad.
Việc hiểu rõ cách thức hoạt động của các công cụ bảo mật mà mình tin dùng là bước đầu tiên quan trọng để bảo vệ quyền riêng tư kỹ thuật số.
Bài viết liên quan

AI & ML
Nguy cơ bảo mật từ "Vibe-Coding": Hàng nghìn ứng dụng AI để lộ dữ liệu nhạy cảm trên mạng
07 tháng 5, 2026

Phần mềm
Google tung ra Antigravity 2.0: Ứng dụng lập trình thế hệ mới với công cụ CLI và gói đăng ký AI Ultra
19 tháng 5, 2026

Phần mềm
Plugin Checkmarx Jenkins bị xâm phạm trong cuộc tấn công chuỗi cung ứng
11 tháng 5, 2026
