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_DEVICES
nel 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