Quyền truy cập mạng cục bộ

Mọi ứng dụng có quyền INTERNET đều có thể truy cập vào các thiết bị trên Mạng cục bộ (LAN). Điều này giúp các ứng dụng dễ dàng kết nối với các thiết bị cục bộ, nhưng cũng có những tác động đến quyền riêng tư, chẳng hạn như tạo dấu vân tay của người dùng và là một proxy cho vị trí.

Dự án Bảo vệ mạng cục bộ nhằm bảo vệ quyền riêng tư của người dùng bằng cách hạn chế quyền truy cập vào mạng cục bộ thông qua một quyền trong thời gian chạy mới.

Tác động

Trong Android 16, quyền này là một tính năng chọn sử dụng, tức là chỉ những ứng dụng chọn sử dụng mới bị ảnh hưởng. Mục tiêu của việc chọn sử dụng là để nhà phát triển ứng dụng hiểu được những phần nào trong ứng dụng của họ phụ thuộc vào quyền truy cập ngầm vào mạng cục bộ, từ đó họ có thể chuẩn bị để bảo vệ những phần đó bằng quyền trong một bản phát hành Android trong tương lai.

Các ứng dụng sẽ bị ảnh hưởng nếu truy cập vào mạng cục bộ của người dùng bằng cách sử dụng:

  • Sử dụng trực tiếp hoặc sử dụng thư viện của các socket thô trên địa chỉ mạng cục bộ, ví dụ: Multicast DNS (mDNS) hoặc Simple Service Discovery Protocol (SSDP).
  • Sử dụng các lớp cấp khung truy cập vào mạng cục bộ, ví dụ: NsdManager.

Thông tin chi tiết về tác động

Lưu lượng truy cập đến và đi từ một địa chỉ mạng cục bộ cần có quyền truy cập mạng cục bộ. Bảng sau đây liệt kê một số trường hợp phổ biến:

Thao tác mạng cấp thấp của ứng dụng Cần có quyền truy cập mạng cục bộ
Tạo kết nối TCP đi
Chấp nhận kết nối TCP đến
Gửi một gói đơn điểm, đa điểm, truyền tin quảng bá UDP
Nhận một gói đơn phương, đa phương, quảng bá UDP đến

Những hạn chế này được triển khai sâu trong ngăn xếp mạng, do đó, chúng áp dụng cho tất cả các API mạng. Điều này bao gồm các ổ cắm được tạo trong nền tảng hoặc mã được quản lý, các thư viện mạng như Cronet và OkHttp, cũng như mọi API được triển khai trên các thư viện đó. Để cố gắng phân giải các dịch vụ trên mạng cục bộ có hậu tố .local, bạn cần có quyền truy cập mạng cục bộ.

Các trường hợp ngoại lệ đối với các quy tắc nêu trên:

  • Nếu máy chủ DNS của một thiết bị nằm trên mạng cục bộ, thì lưu lượng truy cập đến / từ thiết bị đó (ở cổng 53) không yêu cầu quyền truy cập vào mạng cục bộ.
  • Những ứng dụng sử dụng Output Switcher làm bộ chọn trong ứng dụng sẽ không cần quyền truy cập vào mạng cục bộ (sẽ có thêm hướng dẫn ở bản phát hành sau).

Hướng dẫn

Để chọn áp dụng các quy định hạn chế đối với mạng cục bộ, hãy làm như sau:

  1. Cài đặt ROM cho thiết bị của bạn bằng bản dựng Android 16 Beta 3 trở lên
  2. Cài đặt ứng dụng cần kiểm thử
  3. Bật/tắt cấu hình Appcompat bằng adb

    adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>
    
  4. Khởi động lại thiết bị

Giờ đây, quyền truy cập của ứng dụng vào mạng cục bộ sẽ bị hạn chế và mọi nỗ lực truy cập vào mạng cục bộ sẽ dẫn đến lỗi socket. Nếu bạn đang sử dụng các API thực hiện các thao tác trên mạng cục bộ bên ngoài quy trình ứng dụng của bạn (ví dụ: NsdManager), thì các API này sẽ không bị ảnh hưởng trong quá trình chọn sử dụng.

Để khôi phục quyền truy cập, bạn phải cấp cho ứng dụng của mình quyền NEARBY_WIFI_DEVICES.

  • Đảm bảo ứng dụng khai báo quyền NEARBY_WIFI_DEVICES trong manifest.
  • Chuyển đến phần Cài đặt > Ứng dụng > [Tên ứng dụng] > Quyền > Thiết bị ở gần > Cho phép

Giờ đây, quyền truy cập của ứng dụng vào mạng cục bộ sẽ được khôi phục và tất cả các trường hợp của bạn sẽ hoạt động như trước khi chọn sử dụng ứng dụng. Sau đây là những ảnh hưởng đến lưu lượng truy cập mạng của ứng dụng.

Quyền Yêu cầu LAN đi Yêu cầu Internet đi/đến Yêu cầu LAN đến
Đã cấp Works Works Works
Không được cấp Thất bại Works Thất bại

Sử dụng lệnh sau để tắt cấu hình Appcompat

adb shell am compat disable RESTRICT_LOCAL_NETWORK <package_name>

Lỗi

Lỗi phát sinh từ những hạn chế này sẽ được trả về cho ổ cắm gọi bất cứ khi nào ổ cắm này gọi send hoặc một biến thể send đến một địa chỉ mạng cục bộ.

Ví dụ về lỗi:

sendto failed: EPERM (Operation not permitted)

sendto failed: ECONNABORTED (Operation not permitted)

Lỗi

Gửi lỗi và ý kiến phản hồi cho:

  • Sự khác biệt về quyền truy cập vào mạng LAN (bạn không nghĩ rằng một quyền truy cập nhất định nên được coi là quyền truy cập vào "mạng cục bộ")
  • Lỗi khi quyền truy cập vào mạng LAN lẽ ra phải bị chặn nhưng không bị chặn
  • Lỗi khiến quyền truy cập vào mạng LAN bị chặn dù không nên

Những nội dung sau đây sẽ không bị ảnh hưởng bởi thay đổi này:

  • Quyền truy cập Internet
  • Mạng di động