Izin jaringan lokal

Perangkat di Local Area Network (LAN) dapat diakses oleh aplikasi apa pun yang memiliki izin INTERNET. Hal ini memudahkan aplikasi untuk terhubung ke perangkat lokal, tetapi juga menimbulkan implikasi privasi seperti membentuk sidik jari pengguna dan menjadi proxy untuk lokasi.

Project Perlindungan Jaringan Lokal bertujuan untuk melindungi privasi pengguna dengan membatasi akses ke jaringan lokal di balik izin runtime baru.

Dampak

Selama Android 16, izin ini adalah fitur keikutsertaan yang berarti hanya aplikasi yang memilih untuk menggunakan fitur ini yang akan terpengaruh. Tujuan keikutsertaan ini adalah agar developer aplikasi memahami bagian aplikasi mereka yang bergantung pada akses jaringan lokal implisit sehingga mereka dapat bersiap untuk melindungi izinnya pada rilis Android mendatang.

Aplikasi akan terpengaruh jika mengakses jaringan lokal pengguna menggunakan:

  • Penggunaan soket mentah secara langsung atau melalui library pada alamat jaringan lokal, misalnya, Multicast DNS (mDNS) atau Simple Service Discovery Protocol (SSDP).
  • Penggunaan class tingkat framework yang mengakses jaringan lokal, misalnya, NsdManager.

Detail dampak

Traffic ke dan dari alamat jaringan lokal memerlukan izin akses jaringan lokal. Tabel berikut mencantumkan beberapa kasus umum:

Operasi Jaringan Tingkat Rendah Aplikasi Izin Jaringan Lokal Diperlukan
Membuat koneksi TCP keluar ya
Menerima koneksi TCP masuk ya
Mengirim unicast, multicast, siaran UDP ya
Menerima unicast, multicast, siaran UDP masuk ya

Pembatasan ini diterapkan jauh di dalam stack jaringan, sehingga berlaku untuk semua API jaringan. Hal ini mencakup soket yang dibuat di platform atau kode terkelola, library jaringan seperti Cronet dan OkHttp, serta API apa pun yang diimplementasikan di atasnya. Mencoba menyelesaikan layanan di jaringan lokal yang memiliki sufiks .local memerlukan izin jaringan lokal.

Pengecualian untuk aturan sebelumnya:

  • Jika server DNS perangkat berada di jaringan lokal, traffic ke / dari server tersebut (di port 53) tidak memerlukan izin akses jaringan lokal.
  • Aplikasi yang menggunakan Pengalih Output sebagai pemilih dalam aplikasinya tidak memerlukan izin jaringan lokal (panduan lebih lanjut akan tersedia pada rilis mendatang).

Panduan

Untuk mengaktifkan batasan jaringan lokal, lakukan hal berikut:

  1. Mem-flash perangkat Anda ke build dengan Android 16 Beta 3 atau yang lebih baru
  2. Menginstal aplikasi yang akan diuji
  3. Mengganti konfigurasi Appcompat menggunakan adb

    adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>
    
  4. Mulai ulang perangkat

Sekarang akses aplikasi Anda ke jaringan lokal dibatasi dan setiap upaya untuk mengakses jaringan lokal akan menyebabkan error soket. Jika Anda menggunakan API yang melakukan operasi jaringan lokal di luar proses aplikasi Anda—misalnya, NsdManager—API tersebut tidak terpengaruh selama keikutsertaan.

Untuk memulihkan akses, Anda harus memberikan izin aplikasi Anda untuk NEARBY_WIFI_DEVICES.

  • Pastikan aplikasi mendeklarasikan izin NEARBY_WIFI_DEVICES dalam manifest-nya.
  • Buka Setelan > Aplikasi > [Nama Aplikasi] > Izin > Perangkat di sekitar > Izinkan

Sekarang, akses aplikasi Anda ke jaringan lokal akan dipulihkan dan semua skenario Anda akan berfungsi seperti sebelum mengikutsertakan aplikasi. Berikut pengaruhnya terhadap traffic jaringan aplikasi.

Izin Permintaan LAN Keluar Permintaan Internet Keluar/Masuk Permintaan LAN Masuk
Diberikan Works Works Works
Tidak Diberikan Gagal Works Gagal

Gunakan perintah berikut untuk menonaktifkan konfigurasi Appcompat

adb shell am compat disable RESTRICT_LOCAL_NETWORK <package_name>

Error

Error yang muncul dari batasan ini akan ditampilkan ke soket panggilan setiap kali soket memanggil send atau varian send ke alamat jaringan lokal.

Contoh error:

sendto failed: EPERM (Operation not permitted)

sendto failed: ECONNABORTED (Operation not permitted)

Bug

Kirimkan bug dan masukan untuk:

  • Perbedaan dalam akses LAN (Anda tidak menganggap akses tertentu sebagai akses "jaringan lokal")
  • Bug saat akses LAN seharusnya diblokir, tetapi tidak
  • Bug yang menyebabkan akses LAN seharusnya tidak diblokir, tetapi diblokir

Hal berikut tidak akan terpengaruh oleh perubahan ini:

  • Akses ke Internet
  • Jaringan Seluler