Kill switch theo từng ứng dụng nghe như lựa chọn thận trọng: khi đường hầm sụp, chỉ ứng dụng công việc mất mạng, còn mọi thứ khác vẫn chạy. Rồi ai đó nhận ra trình duyệt cá nhân vẫn tải một trang, trình trợ giúp đồng bộ đi kèm cùng bộ vẫn tiếp tục thử, và một tên trong bộ nhớ đệm vẫn phân giải tới địa chỉ chưa bao giờ đi qua đường hầm. Nhãn trên tính năng và tập kết nối mà nó thực sự bảo vệ là hai thứ khác nhau. Hãy xác định tập được bảo vệ trước, vì chính tập đó quyết định việc thực thi theo từng ứng dụng hay khóa toàn bộ thiết bị mới là mô tả trung thực.

Bắt đầu từ tập, không phải nhãn

Chính sách theo từng ứng dụng bảo vệ các ứng dụng được chọn. Khóa thiết bị nhắm tới ranh giới mạng rộng hơn, thường có các ngoại lệ được ghi lại cho in cục bộ, lưu lượng quản trị hoặc cổng captive. Cả hai nhãn đều chưa đầy đủ cho tới khi bạn trả lời được ba câu hỏi: điều gì xảy ra với ứng dụng bị loại trừ, điều gì xảy ra với các trình trợ giúp mà ứng dụng đó khởi chạy, và điều gì xảy ra với các kết nối được mở khi bảo vệ không khả dụng.

Viết các câu trả lời đó trước khi chạm vào bất kỳ cài đặt nào của ứng dụng khách. Nếu yêu cầu là "ứng dụng tính lương này không bao giờ được nói chuyện với internet ngoài đường hầm, còn trình duyệt của tôi thì được", tập hợp nhỏ và thực thi theo từng ứng dụng phù hợp. Nếu yêu cầu là "không gì trên thiết bị này tới được internet mà không có bảo vệ, trừ dịch vụ cập nhật", không chính sách theo từng ứng dụng nào tạo ra được điều đó, vì chính những ứng dụng bạn không nêu tên là vấn đề.

Thực thi theo từng ứng dụng khớp với định danh, không phải tên chương trình

Android cung cấp VPN theo từng ứng dụng qua các gói, và tài liệu VpnService của nó mô tả cách nó tương tác với chế độ luôn bật và chặn. iOS cấu hình VPN theo từng ứng dụng qua hồ sơ quản lý và khớp theo ứng dụng hoặc theo miền. Windows và Linux hoàn toàn không có tuyến theo tiến trình, nên ý tưởng đó được xấp xỉ bằng quy tắc tường lửa giới hạn cho một chương trình hoặc quy tắc khớp với người dùng sở hữu.

Ranh giới là định danh, và định danh rất dễ lách. Một ứng dụng chuyển URL cho trình duyệt hệ thống, hoặc mở tài liệu trong trình xem, sẽ chuyển sang một tiến trình mà chính sách của bạn chưa bao giờ nêu tên. Tùy chọn kết thúc khi sụp cũng không phải bộ lọc gói: nó giết ứng dụng bạn đã cấu hình, trong khi tiến trình con, công nhân hàng đợi hoặc tab trình duyệt có thể giữ một socket hiện có sống.

Khóa bao phủ điều mà chính sách theo từng ứng dụng không thấy được

Khóa toàn bộ thiết bị loại bỏ sự lựa chọn. Mọi gói đi ra không thuộc đường hầm đều bị bỏ, kể cả lưu lượng từ những tiến trình mà chính sách ứng dụng của bạn chưa bao giờ biết. Trên Android đó là VPN luôn bật kết hợp với cài đặt chặn kết nối, và việc thực thi diễn ra trong hệ thống, không phải trong cửa sổ ứng dụng khách. Trên máy tính để bàn đó là một quy tắc tường lửa thường trực hoặc tuyến mặc định trỏ tới cổng không thể tới.

Cái giá là mọi thứ khác dừng lại, nên các ngoại lệ trở thành một phần của thiết kế chứ không phải ý nghĩ sau đó. Máy in cục bộ, khám phá dịch vụ, đăng nhập cổng captive, tác nhân quản trị và cập nhật hệ điều hành đều cần một lỗ được ghi lại, vì mỗi thứ là một con đường vẫn mở khi đường hầm sụp. Khóa chỉ mạnh bằng mục ngắn nhất trong danh sách đó.

DNS, IPv6 và trình trợ giúp nền che giấu rò rỉ

Việc ứng dụng được bảo vệ không phân giải được một tên không chứng minh rằng câu trả lời trong bộ nhớ đệm hoặc lưu lượng IP trực tiếp đã bị chặn. Nếu trình phân giải vẫn tới được bên ngoài đường hầm, tên vẫn phân giải và kết nối thất bại, điều trông như kill switch đang hoạt động và không phải vậy. Tệ hơn, một bản ghi trong bộ nhớ đệm có thể trỏ tới địa chỉ mà đường hầm không chở, nên kết nối đi thẳng ra ngoài trong khi ứng dụng báo lỗi VPN.

IPv6 cần quy tắc riêng trên mọi nền tảng chạy nó, vì quy tắc bỏ gói cho v4 không bao phủ tuyến v6. Trên di động, cài đặt DNS riêng có thể chuyển việc phân giải vào một kênh mã hóa mà chính sách thiết bị không kiểm tra. Và trình trợ giúp nền là thủ phạm quen thuộc trên máy tính: tiến trình cập nhật hoặc đồng bộ trong khay hệ thống khởi chạy trước ứng dụng khách VPN và giữ kết nối riêng của nó, nên nó không bao giờ thấy tuyến đã thay đổi.

Kiểm tra ba ứng dụng và hai lần chuyển

TestWhat it proves
Included app, by name and by direct IPthe policy is applied, not just the resolver
Excluded app, same checksthe exclusion is intentional and documented
Helper or updater processnothing inherited an older route
Tunnel drop, then Wi-Fi to cellularthe block survives the transition

Chạy mỗi hàng hai lần, một lần với tên máy chủ và một lần với địa chỉ nguyên văn, và thêm một lần qua IPv6 nếu mạng hỗ trợ. Đạt nghĩa là ứng dụng được gồm đã dừng, ứng dụng bị loại trừ hành xử đúng như bạn đã ghi, và trình trợ giúp không lọt ra ngoài. Ghi lại hành vi trực tiếp mà bạn đã cho là chấp nhận được, để quản trị viên tiếp theo phân biệt được ngoại lệ có chủ đích với sự cố.

Sau đó mô tả kết quả bằng một câu nêu tên các ứng dụng và điều kiện, ví dụ: ứng dụng tính lương không có tuyến ra ngoài đường hầm, trình duyệt đi thẳng theo thiết kế, và mọi thứ khác dừng lại khi đường hầm sụp. Nếu câu đó khó viết, chính sách vẫn là hai chính sách đang chống lại nhau.

Bài viết liên quan