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:
- Flashen Sie Ihr Gerät mit Android 16 Beta 3 oder höher
- Zu testende App installieren
App-Kompatibilitätskonfiguration mit adb aktivieren und deaktivieren
adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>
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