Autorizzazione di accesso alla rete locale

I dispositivi su una rete locale (LAN) sono accessibili a qualsiasi app con l'autorizzazione INTERNET. In questo modo, le app possono connettersi facilmente ai dispositivi locali, ma ciò comporta anche implicazioni per la privacy, come la creazione di un'impronta dell'utente e la funzione di proxy per la posizione.

Il progetto Protezioni rete locale mira a proteggere la privacy dell'utente limitando l'accesso alla rete locale tramite una nuova autorizzazione di runtime.

Impatto

Durante Android 16, questa autorizzazione è una funzionalità di attivazione facoltativa, il che significa che saranno interessate solo le app che la attivano. L'obiettivo dell'attivazione è consentire agli sviluppatori di app di capire quali parti della loro app dipendono dall'accesso implicito alla rete locale in modo da prepararsi a proteggerle con le autorizzazioni in una futura release di Android.

Le app saranno interessate se accedono alla rete locale dell'utente utilizzando:

  • Utilizzo diretto o di libreria di socket non elaborati su indirizzi di rete locali, ad esempio Multicast DNS (mDNS) o Simple Service Discovery Protocol (SSDP).
  • Utilizzo di classi a livello di framework che accedono alla rete locale, ad esempio NsdManager.

Dettagli dell'impatto

Il traffico da e verso un indirizzo di rete locale richiede l'autorizzazione di accesso alla rete locale. La seguente tabella elenca alcuni casi comuni:

Operazione di rete di basso livello dell'app Autorizzazione di accesso alla rete locale richiesta
Creazione di una connessione TCP in uscita
Accettare una connessione TCP in entrata
Invio di un unicast, multicast, broadcast UDP
Ricezione di un unicast, multicast o broadcast UDP in entrata

Queste limitazioni sono implementate in profondità nello stack di rete e pertanto si applicano a tutte le API di rete. Ciò include i socket creati nella piattaforma o nel codice gestito, le librerie di rete come Cronet e OkHttp e qualsiasi API implementata sopra queste. Il tentativo di risolvere i servizi sulla rete locale che hanno un suffisso .local richiede l'autorizzazione di accesso alla rete locale.

Eccezioni alle regole precedenti:

  • Se il server DNS di un dispositivo si trova su una rete locale, il traffico da / verso il server (sulla porta 53) non richiede l'autorizzazione di accesso alla rete locale.
  • Le applicazioni che utilizzano Output Switcher come selettore in-app non avranno bisogno delle autorizzazioni di rete locale (ulteriori indicazioni verranno fornite in una release successiva).

Assistenza

Per attivare le limitazioni della rete locale:

  1. Esegui il flash del dispositivo con una build con Android 16 Beta 3 o versioni successive
  2. Installare l'app da testare
  3. Attiva/disattiva la configurazione Appcompat utilizzando adb

    adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>
    
  4. Riavvia il dispositivo

Ora l'accesso dell'app alla rete locale è limitato e qualsiasi tentativo di accedere alla rete locale genererà errori di socket. Se utilizzi API che eseguono operazioni di rete locale al di fuori del processo dell'app, ad esempio NsdManager, queste non vengono interessate durante l'attivazione.

Per ripristinare l'accesso, devi concedere all'app l'autorizzazione a NEARBY_WIFI_DEVICES.

  • Assicurati che l'app dichiari l'autorizzazione NEARBY_WIFI_DEVICES nel relativo manifest.
  • Vai a Impostazioni > App > [Nome applicazione] > Autorizzazioni > Dispositivi nelle vicinanze > Consenti.

Ora l'accesso dell'app alla rete locale dovrebbe essere ripristinato e tutti gli scenari dovrebbero funzionare come prima dell'attivazione dell'app. Ecco come verrà interessato il traffico di rete dell'app.

Autorizzazione Richiesta LAN in uscita Richiesta internet in uscita/in entrata Inbound LAN Request
Concesso Works Works Works
Non concesso Fallimenti Works Fallimenti

Utilizza il seguente comando per disattivare la configurazione Appcompat

adb shell am compat disable RESTRICT_LOCAL_NETWORK <package_name>

Errori

Gli errori derivanti da queste limitazioni verranno restituiti al socket chiamante ogni volta che richiama send o una variante di send a un indirizzo di rete locale.

Esempi di errori:

sendto failed: EPERM (Operation not permitted)

sendto failed: ECONNABORTED (Operation not permitted)

Bug

Invia bug e feedback per:

  • Discrepanze nell'accesso alla LAN (non ritieni che un determinato accesso debba essere considerato "accesso alla rete locale")
  • Bug in cui l'accesso LAN dovrebbe essere bloccato, ma non lo è
  • Bug in cui l'accesso LAN non dovrebbe essere bloccato, ma lo è

Questa modifica non dovrebbe interessare:

  • Accesso a internet
  • Rete mobile