Autorisation d'accéder au réseau local

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) ou Simple 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 :

  1. Flasher votre appareil avec une version incluant la version bêta 3 d'Android 16 ou une version ultérieure
  2. Installer l'application à tester
  3. Activer/Désactiver la configuration Appcompat à l'aide d'adb

    adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>
    
  4. 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 son manifest.
  • 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