Les appareils d'un LAN peuvent être accessibles par n'importe quelle 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é, telles que la création d'une empreinte de l'utilisateur et le fait d'être un 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 derrière une nouvelle autorisation d'exécution.
Impact
Sous Android 16, cette autorisation est une fonctionnalité activable, ce qui signifie que seules les applications qui l'activent seront concernées. L'objectif de l'activation est que les développeurs d'applications comprennent quelles parties de leur application dépendent de l'accès au réseau local implicite afin de pouvoir les protéger par autorisation dans une prochaine 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 par bibliothèque de sockets bruts sur des adresses réseau locales (par exemple, protocole de détection de services mDNS ou 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 une autorisation d'accès au réseau local. Le tableau suivant présente quelques cas courants:
Opérations réseau de bas niveau de l'application | Autorisation du réseau local requise |
---|---|
Établir une connexion TCP sortante | oui |
Accepter une connexion TCP entrante | oui |
Envoyer une diffusion UDP, une diffusion unicast ou une diffusion multicast | oui |
Recevoir une diffusion, une multidiffusion ou une unicast UDP entrante | oui |
Ces restrictions sont implémentées profondément 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 en plus. Pour tenter de résoudre des services sur le réseau local (c'est-à-dire ceux avec un suffixe .local), vous devez disposer d'une autorisation de 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 le sélecteur de sortie comme sélecteur intégré à l'application n'auront pas besoin d'autorisations de réseau local (plus d'informations à venir dans une prochaine version).
Conseils
Pour activer les restrictions de réseau local, procédez comme suit:
- Flasher votre appareil vers une version avec Android 16 version bêta 3 ou 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é, et 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 réseau locales en dehors de votre processus d'application (par exemple, NsdManager), elles ne seront 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 son fichier manifeste. - 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 comment le trafic réseau de l'application sera affecté.
Autorisation | Requête LAN sortante | Requête Internet sortante/entrante | Requête 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 appelle send
ou une variante de send
vers une adresse réseau locale.
Exemples d'erreurs:
sendto failed: EPERM (Operation not permitted)
sendto failed: ECONNABORTED (Operation not permitted)
Bugs
Signalez des bugs et envoyez des commentaires sur:
- Incohérences concernant l'accès au LAN (vous pensez qu'un accès donné ne doit pas être considéré comme un accès au réseau local)
- Bugs où l'accès au LAN devrait être bloqué, mais ne l'est pas
- Bugs où l'accès au LAN 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