Berechtigung für das lokale Netzwerk

Auf Geräte in einem LAN kann jede App zugreifen, die die Berechtigung INTERNET hat. Das erleichtert Apps die Verbindung zu lokalen Geräten, hat aber auch Auswirkungen auf den Datenschutz, da ein Nutzer-Fingerabdruck erstellt und ein Proxy für den Standort verwendet wird.

Das Projekt „Local Network Protections“ soll die Privatsphäre der Nutzer schützen, indem der Zugriff auf das lokale Netzwerk durch eine neue Laufzeitberechtigung eingeschränkt wird.

Positiv beeinflussen

Unter Android 16 ist diese Berechtigung eine optionale Funktion. Das bedeutet, dass nur die Apps betroffen sind, für die sie aktiviert wurde. Ziel der Einwilligung ist es, dass App-Entwickler nachvollziehen können, welche Teile ihrer App vom impliziten Zugriff auf das lokale Netzwerk abhängen, damit sie sich darauf vorbereiten können, sie in einem zukünftigen Android-Release mit Berechtigungen zu schützen.

Apps sind davon betroffen, wenn sie über Folgendes auf das lokale Netzwerk des Nutzers zugreifen:

  • Direkte oder Bibliotheksnutzung von Raw-Sockets an lokalen Netzwerkadressen (z.B. mDNS oder SSDP-Diensterkennungsprotokoll)
  • Verwendung von Klassen auf Frameworkebene, die auf das lokale Netzwerk zugreifen (z.B. NsdManager)

Details zu den Auswirkungen

Für Traffic zu und von einer lokalen Netzwerkadresse ist die Berechtigung zum Zugriff auf das lokale Netzwerk erforderlich. In der folgenden Tabelle sind einige häufige Fälle aufgeführt:

Low-Level-Netzwerkbetrieb der App Berechtigung für das lokale Netzwerk erforderlich
Ausgehende TCP-Verbindung herstellen Ja
Eingehende TCP-Verbindung akzeptieren Ja
UDP-Unicast, Multicast und Broadcast senden Ja
Eingehendes UDP-Unicast-, Multicast- oder Broadcast-Paket empfangen Ja

Diese Einschränkungen sind tief im Netzwerkstack implementiert und gelten daher für alle Netzwerk-APIs. Dazu gehören Sockets, die in der Plattform oder in verwaltetem Code erstellt wurden, Netzwerkbibliotheken wie Cronet und OkHttp sowie alle APIs, die darauf aufbauen. Wenn Sie versuchen, Dienste im lokalen Netzwerk aufzulösen (d.h. Dienste mit dem Suffix „.local“), ist die Berechtigung für das lokale Netzwerk erforderlich.

Ausnahmen von den oben genannten Regeln:

  • Wenn sich der DNS-Server eines Geräts in einem lokalen Netzwerk befindet, ist für den Traffic zu / von ihm (über Port 53) keine Berechtigung für den lokalen Netzwerkzugriff erforderlich.
  • Für Anwendungen, die den Ausgabeschalter als In-App-Auswahl verwenden, sind keine Berechtigungen für lokale Netzwerke erforderlich. Weitere Informationen folgen in einer späteren Version.

Anleitung

So aktivieren Sie Einschränkungen für lokale Netzwerke:

  1. Flashen Sie Ihr Gerät mit Android 16 Beta 3 oder höher
  2. Zu testende App installieren
  3. App-Kompatibilitätskonfiguration mit adb aktivieren und deaktivieren

    adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>
    
  4. Starten Sie das Gerät neu.

Jetzt ist der Zugriff Ihrer App auf das lokale Netzwerk eingeschränkt und jeder Versuch, auf das lokale Netzwerk zuzugreifen, führt zu Socket-Fehlern. Wenn Sie APIs verwenden, die lokale Netzwerkvorgänge außerhalb Ihres App-Prozesses ausführen (z. B. NsdManager), sind diese nicht von der Aktivierung betroffen.

Wenn Sie den Zugriff wiederherstellen möchten, müssen Sie Ihrer App die Berechtigung für NEARBY_WIFI_DEVICES erteilen.

  • Die App muss die Berechtigung NEARBY_WIFI_DEVICES in ihrem Manifest deklarieren.
  • Gehen Sie zu „Einstellungen“ > „Apps“ > [Name der App] > „Berechtigungen“ > „Geräte in der Nähe“ > „Zulassen“.

Der Zugriff Ihrer App auf das lokale Netzwerk sollte jetzt wiederhergestellt sein und alle Szenarien sollten wie vor der Aktivierung der App funktionieren. Hier sehen Sie, wie sich das auf den Netzwerkverkehr Ihrer App auswirkt.

Berechtigung Ausgehende LAN-Anfrage Ausgehende/eingehende Internetanfrage Eingehende LAN-Anfrage
Gewährt Microsoft Works Microsoft Works Microsoft Works
Nicht gewährt Pannen Microsoft Works Pannen

Mit dem folgenden Befehl können Sie die App-Kompatibilitätskonfiguration deaktivieren:

adb shell am compat disable RESTRICT_LOCAL_NETWORK <package_name>

Fehler

Fehler, die aufgrund dieser Einschränkungen auftreten, werden an den anrufenden Socket zurückgegeben, wenn send oder eine send-Variante für eine lokale Netzwerkadresse aufgerufen wird.

Beispiele für Fehler:

sendto failed: EPERM (Operation not permitted)

sendto failed: ECONNABORTED (Operation not permitted)

Fehler

Fehler melden und Feedback geben für:

  • Abweichungen beim LAN-Zugriff (Sie sind der Meinung, dass ein bestimmter Zugriff nicht als „Zugriff auf lokales Netzwerk“ betrachtet werden sollte)
  • Fehler, bei denen der LAN-Zugriff blockiert werden sollte, aber nicht wird
  • Fehler, bei denen der LAN-Zugriff nicht blockiert werden sollte, aber blockiert wird

Folgendes sollte von dieser Änderung nicht betroffen sein:

  • Internetzugriff
  • Mobilfunknetz