Autorizzazione di accesso alla rete locale

I dispositivi su una LAN possono essere accessibili a qualsiasi app che dispone dell'autorizzazione INTERNET. In questo modo, le app possono connettersi facilmente ai dispositivi locali, ma comporta anche implicazioni per la privacy, ad esempio la formazione di un'impronta dell'utente e il suo utilizzo come proxy per la posizione.

Il progetto Protezioni della rete locale ha lo scopo di proteggere la privacy dell'utente impedendo l'accesso alla rete locale dietro una nuova autorizzazione di runtime.

Impatto

In Android 16, questa autorizzazione è una funzionalità che richiede l'attivazione, il che significa che solo le app che la attivano saranno interessate. Lo scopo dell'attivazione è consentire agli sviluppatori di app di capire quali parti della loro app dipendono dall'accesso alla rete locale implicito, in modo da potersi preparare 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 tramite libreria di socket non elaborati sugli indirizzi di rete locale (ad es. protocollo di rilevamento dei servizi mDNS o SSDP)
  • Utilizzo di classi a livello di framework che accedono alla rete locale (ad es. NsdManager)

Dettagli dell'impatto

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

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

Queste limitazioni sono implementate in profondità nello stack di rete e pertanto si applicano a tutte le API di rete. Sono inclusi i socket creati nella piattaforma o nel codice gestito, le librerie di rete come Cronet e OkHttp e qualsiasi API implementata su queste. Il tentativo di risolvere i servizi sulla rete locale (ovvero quelli con il 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 verso / da questo 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 saranno disponibili in una release successiva).

Assistenza

Per attivare le limitazioni della rete locale:

  1. Eseguire il flashing del dispositivo su una build con Android 16 beta 3 o versioni successive
  2. Installa l'app da testare
  3. Attiva/disattiva la configurazione di AppCompat utilizzando adb

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

Ora l'accesso della tua app alla rete locale è limitato e qualsiasi tentativo di accedere alla rete locale comporterà errori di socket. Se utilizzi API che eseguono operazioni di rete locale al di fuori del processo dell'app (ad es. NsdManager), queste non saranno interessate durante l'attivazione.

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

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

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

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

Utilizza il seguente comando per disattivare la configurazione di AppCompat

adb shell am compat disable RESTRICT_LOCAL_NETWORK <package_name>

Errori

Gli errori derivanti da queste limitazioni verranno restituiti alla socket di chiamata ogni volta che viene invocato send o una variante di send per un indirizzo di rete locale.

Esempi di errori:

sendto failed: EPERM (Operation not permitted)

sendto failed: ECONNABORTED (Operation not permitted)

Bug

Segnala bug e feedback per:

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

I seguenti elementi non dovrebbero essere interessati da questa modifica:

  • Accesso a internet
  • Rete mobile