Ai đó đã tạo một quy trình tự động bật VPN khi tab ẩn danh xuất hiện, và nó không hoạt động đáng tin cậy. Có một lý do cấu trúc cho việc đó, và đáng để hiểu trước khi tinh chỉnh quy trình. Các quy tắc VPN theo ứng dụng của Android chọn gói ứng dụng, còn ẩn danh là một trạng thái bên trong một gói, nên quy tắc không thể phân biệt hai thứ đó. Thông báo kích hoạt sau khi trình duyệt đã bắt đầu làm việc, nên ngay cả một trình kích hoạt đúng cũng đến muộn. Hãy đi qua các kiểm tra dưới đây theo thứ tự; thất bại ở kiểm tra thứ tư nghĩa là cách tiếp cận, không phải cấu hình, cần thay đổi.

Kiểm tra một: xác nhận quy tắc theo ứng dụng có thể chọn gì

Một ứng dụng VPN trên Android xây dựng đường hầm của nó với danh sách ứng dụng được phép hoặc bị chặn, và những danh sách đó nhận tên gói. Chrome ở chế độ thường và Chrome ở chế độ ẩn danh là cùng một gói, với cùng id người dùng và cùng quyền mạng, nên một quy tắc bao gồm hoặc loại trừ Chrome áp dụng như nhau cho cả hai. Nền tảng không có danh tính gắn với tab để đối chiếu.

Đó không phải lỗi cần lách; đó là mức độ chi tiết mà API cung cấp. Nếu yêu cầu của bạn là lưu lượng Chrome đi qua đường hầm và mọi thứ khác ở ngoài, một quy tắc theo ứng dụng diễn đạt chính xác điều đó. Nếu yêu cầu của bạn là chỉ các tab riêng tư đi qua đường hầm trong khi tab thường đi trực tiếp, không quy tắc theo ứng dụng nào có thể diễn đạt điều đó, và không lượng logic thông báo nào thêm được một bộ chọn mà nền tảng không có.

Hãy chú ý cái bẫy danh tính gói trong khi kiểm tra. Bản beta hoặc bản dựng của nhà sản xuất là một gói khác với trình duyệt ổn định, nên một quy tắc bao phủ gói này sẽ bỏ sót gói kia một cách âm thầm:

adb shell pm list packages | grep -i chrome

Kiểm tra hai: kiểm tra xem trình kích hoạt có bao giờ đủ sớm hay không

Một trình lắng nghe thông báo quan sát các thông báo mà nó được phép thấy. Quan sát không phải chặn bắt: trình duyệt đã phân giải tên và mở kết nối vào lúc thông báo tồn tại, và không gì trên đường đó chờ quy trình tự động của bạn kết thúc. Một tác vụ sau đó khởi chạy ứng dụng VPN phải chờ giao diện ứng dụng, mọi lời nhắc đồng ý và bắt tay đường hầm, được đo bằng giây, trong khi yêu cầu đầu tiên được đo bằng mili giây.

Bản thân việc phát hiện cũng mong manh vì lý do thứ hai. Văn bản thông báo thay đổi giữa các phiên bản và bản địa hóa, nên một mẫu khớp với một bản phát hành sẽ ngừng khớp sau khi cập nhật, và lỗi diễn ra âm thầm. Một thông báo thiếu không phải bằng chứng rằng không có duyệt web riêng tư; nó chỉ có thể nghĩa là chuỗi đã thay đổi hoặc kênh đã bị tắt tiếng.

Có một phiên bản hợp lý của quy trình này, và nó được sắp xếp thay vì phản ứng: trước tiên hãy kết nối VPN đã được phê duyệt, xác nhận một tín hiệu sẵn sàng thực sự chứng minh đường hầm đang mang lưu lượng, sau đó mở phiên ẩn danh qua các điều khiển trình duyệt được hỗ trợ, và dừng lại nếu kiểm tra sẵn sàng thất bại. Điều đó bảo vệ phiên bạn sắp bắt đầu mà không giả vờ bảo vệ phiên đã đang chạy.

Kiểm tra ba: đánh giá quyền bạn sắp cấp

Quyền truy cập thông báo là một khoản cấp nhạy cảm cho phép một dịch vụ đọc thông báo từ mọi ứng dụng, không chỉ trình duyệt. Cấp nó cho một công cụ tự động không quen biết để theo dõi một trạng thái trình duyệt là một trao đổi tồi, và quyền truy cập vẫn tồn tại sau khi thí nghiệm kết thúc. Các lần chạm do trợ năng điều khiển còn tệ hơn: chúng là một lớp script trên giao diện, không phải giao diện điều khiển VPN được hỗ trợ, và hỏng khi bố cục thay đổi.

Trước khi cấp bất cứ thứ gì, hãy hỏi liệu cùng kết quả có thể đạt được bằng một cơ chế được hỗ trợ. Nếu câu trả lời là yêu cầu chính sách, thường là có: nền tảng có thể áp đặt một đường hầm cho một ứng dụng hoặc hồ sơ mà không cần bất kỳ dịch vụ lắng nghe nào.

Kiểm tra bốn: dùng luôn bật và chặn khi yêu cầu là thực thi

Nếu trình duyệt không bao giờ được liên lạc bên ngoài đường hầm, việc thực thi thuộc về cài đặt nền tảng, không phải macro. Android hỗ trợ VPN luôn bật với chế độ chặn ngăn lưu lượng khi đường hầm chưa được thiết lập, và thiết bị được quản lý có thể nhận nó qua chính sách. Hãy xác nhận thiết bị hiện có gì thay vì giả định:

adb shell settings get global always_on_vpn_app
adb shell settings get global always_on_vpn_lockdown

Giá trị ứng dụng khác null nghĩa là một gói được cấu hình là luôn bật, và giá trị chặn bằng 1 nghĩa là các kết nối bên ngoài đường hầm bị chặn. Chính cặp này biến một thói quen nỗ lực tối đa thành bảo đảm, và nó cũng loại bỏ hoàn toàn cuộc đua, vì đường hầm được thiết lập trước khi lưu lượng ứng dụng được cho phép.

Hai ranh giới đáng được nêu ở đây. Hồ sơ công việc mang cấu hình VPN riêng, nên một quy tắc đã xác minh trong hồ sơ cá nhân không nói gì về hồ sơ công việc. Và một trình duyệt được cài riêng, một tab tùy chỉnh do ứng dụng khác mở, hoặc một webview trong ứng dụng là một gói hoặc ngữ cảnh khác với định tuyến riêng, nên hãy xác minh gói thực tế thay vì giả định một cửa sổ có kiểu khác là một miền riêng.

Kiểm tra năm: viết quy trình và kiểm tra đường thất bại

Dù bạn chọn gì, hãy ghi lại thứ tự và điều kiện hủy. Với quy trình tiện lợi, điều đó nghĩa là: đường hầm lên, sẵn sàng được chứng minh, ẩn danh mở, và dừng cứng nếu sẵn sàng thất bại. Với đường thực thi, nó nghĩa là: ứng dụng luôn bật được cấu hình, chặn được bật, và hành vi mong đợi khi đường hầm hoàn toàn không thể lên, tức là không có lưu lượng thay vì lưu lượng không được bảo vệ.

Sau đó hãy kiểm tra thất bại, không chỉ thành công. Ngắt đường hầm trong một phiên và xem trình duyệt làm gì; chặn tiến trình của ứng dụng VPN và xác nhận không có gì rò rỉ. Cuối cùng, giữ hai mô hình riêng tư tách biệt trong tài liệu người dùng: ẩn danh kiểm soát trạng thái trình duyệt tạm thời và không giấu lưu lượng với mạng, trong khi VPN mang lưu lượng nhưng không xóa đăng nhập hay bất cứ thứ gì được gửi trong phiên riêng tư.

Bài viết liên quan