Les appareils d'un réseau local (LAN) sont accessibles par toute application disposant de l'autorisation INTERNET
.
Cela permet aux applications de se connecter facilement aux appareils locaux, mais a également des implications en termes de confidentialité, comme la création d'une empreinte digitale de l'utilisateur et le fait de servir de proxy pour la localisation.
Le projet Local Network Protections vise à protéger la confidentialité de l'utilisateur en limitant l'accès au réseau local à l'aide d'une nouvelle autorisation d'exécution.
Impact
Sur Android 16, cette autorisation est une fonctionnalité optionnelle, ce qui signifie que seules les applications qui l'activent seront concernées. L'objectif de l'activation est de permettre aux développeurs d'applications de comprendre quelles parties de leur application dépendent de l'accès implicite au réseau local afin qu'ils puissent se préparer à les protéger par des autorisations dans une future version d'Android.
Les applications seront affectées si elles accèdent au réseau local de l'utilisateur à l'aide des éléments suivants :
- Utilisation directe ou de bibliothèque de sockets bruts sur des adresses de réseau local, par exemple
Multicast DNS (mDNS)
ouSimple Service Discovery Protocol (SSDP)
. - Utilisation de classes au niveau du framework qui accèdent au réseau local, par exemple
NsdManager
.
Détails de l'impact
Le trafic vers et depuis une adresse réseau locale nécessite l'autorisation d'accès au réseau local. Le tableau suivant liste certains cas courants :
Opération réseau de bas niveau de l'application | Autorisation d'accéder au réseau local requise |
---|---|
Établir une connexion TCP sortante | oui |
Accepter une connexion TCP entrante | oui |
Envoyer une monodiffusion, une multidiffusion ou une diffusion UDP | oui |
Réception d'un unicast, d'un multicast ou d'un broadcast UDP entrant | oui |
Ces restrictions sont implémentées en profondeur dans la pile réseau et s'appliquent donc à toutes les API réseau. Cela inclut les sockets créés dans la plate-forme ou le code géré, les bibliothèques réseau telles que Cronet et OkHttp, ainsi que toutes les API implémentées par-dessus. La résolution des services sur le réseau local qui ont un suffixe .local
nécessite l'autorisation du réseau local.
Exceptions aux règles précédentes :
- Si le serveur DNS d'un appareil se trouve sur un réseau local, le trafic vers / depuis celui-ci (sur le port 53) ne nécessite pas d'autorisation d'accès au réseau local.
- Les applications qui utilisent Output Switcher comme sélecteur intégré n'auront pas besoin d'autorisations pour le réseau local (d'autres conseils seront disponibles dans une prochaine version).
Conseils
Pour activer les restrictions sur le réseau local :
- Flasher votre appareil avec une version incluant la version bêta 3 d'Android 16 ou une version ultérieure
- Installer l'application à tester
Activer/Désactiver la configuration Appcompat à l'aide d'adb
adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>
Redémarrez l'appareil.
L'accès de votre application au réseau local est désormais limité. Toute tentative d'accès au réseau local entraînera des erreurs de socket.
Si vous utilisez des API qui effectuent des opérations sur le réseau local en dehors du processus de votre application (par exemple, NsdManager
), elles ne sont pas affectées lors de l'activation.
Pour restaurer l'accès, vous devez accorder à votre application l'autorisation NEARBY_WIFI_DEVICES
.
- Assurez-vous que l'application déclare l'autorisation
NEARBY_WIFI_DEVICES
dans sonmanifest
. - Accédez à Paramètres > Applications > [Nom de l'application] > Autorisations > Appareils à proximité > Autoriser.
L'accès de votre application au réseau local devrait maintenant être rétabli, et tous vos scénarios devraient fonctionner comme avant l'activation de l'application. Voici l'impact sur le trafic réseau de l'application.
Autorisation | Demande LAN sortante | Requête Internet sortante/entrante | Demande LAN entrante |
---|---|---|---|
Accordé | Works | Works | Works |
Refusé | Gags | Works | Gags |
Utilisez la commande suivante pour désactiver la configuration Appcompat :
adb shell am compat disable RESTRICT_LOCAL_NETWORK <package_name>
Erreurs
Les erreurs découlant de ces restrictions seront renvoyées au socket appelant chaque fois qu'il invoque send
ou une variante send
à une adresse réseau locale.
Exemples d'erreurs :
sendto failed: EPERM (Operation not permitted)
sendto failed: ECONNABORTED (Operation not permitted)
Bugs
Signaler des bugs et envoyer des commentaires pour :
- Incohérences dans l'accès au réseau local (vous pensez qu'un certain accès ne devrait pas être considéré comme un accès au réseau local)
- Bugs où l'accès au réseau local devrait être bloqué, mais ne l'est pas
- Bugs où l'accès au réseau local ne devrait pas être bloqué, mais l'est
Ce changement ne devrait pas avoir d'incidence sur les éléments suivants :
- Accès à Internet
- Réseau mobile