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)oSimple 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 | sì |
| Accettare una connessione TCP in entrata | sì |
| Invio di un unicast, multicast, broadcast UDP | sì |
| Ricezione di un unicast, multicast o broadcast UDP in entrata | sì |
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:
- Esegui il flash del dispositivo con una build con Android 16 Beta 3 o versioni successive
- Installare l'app da testare
Attiva/disattiva la configurazione Appcompat utilizzando adb
adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>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_DEVICESnel relativomanifest. - 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