Do urządzeń w sieci LAN może uzyskać dostęp każda aplikacja z uprawnieniami INTERNET
.
Ułatwia to aplikacjom nawiązywanie połączeń z urządzeniami lokalnymi, ale niesie też ze sobą konsekwencje dla prywatności, takie jak tworzenie odcisku palca użytkownika i działanie jako serwer pośredniczący w przypadku lokalizacji.
Projekt „Ochrona sieci lokalnej” ma na celu ochronę prywatności użytkownika przez ograniczenie dostępu do sieci lokalnej za pomocą nowego uprawnienia w czasie wykonywania.
Wpływ
W Androidzie 16 to uprawnienie jest funkcją opcjonalną, co oznacza, że dotyczy ono tylko aplikacji, które zostały do niej dodane. Celem tej opcji jest umożliwienie deweloperom aplikacji zrozumienia, które części ich aplikacji są zależne od domyślnego dostępu do sieci lokalnej, aby mogli przygotować się do wprowadzenia w przyszłej wersji Androida mechanizmu ochrony uprawnień.
Dotyczy to aplikacji, które uzyskują dostęp do sieci lokalnej użytkownika za pomocą:
- bezpośrednie lub biblioteczne korzystanie z setektów bez obróbki na adresy sieci lokalnej (np. protokół wykrywania usług mDNS lub SSDP);
- Używanie klas na poziomie frameworku, które uzyskują dostęp do sieci lokalnej (np.NsdManager).
Szczegóły wpływu
Ruch do i z adresu sieci lokalnej wymaga uprawnień dostępu przez sieć lokalną. W tabeli poniżej znajdziesz kilka typowych przypadków:
Operacje sieciowe na niskim poziomie aplikacji | Wymagany dostęp do sieci lokalnej |
---|---|
Nawiązywanie wychodzącego połączenia TCP | tak |
Akceptowanie przychodzącego połączenia TCP | tak |
Wysyłanie transmisji unicast, multicast i broadcast UDP | tak |
Odbieranie przychodzącego unicastu, multicastu lub transmisji UDP | tak |
Ograniczenia te są wdrażane głęboko w składniku sieciowym, dlatego dotyczą wszystkich interfejsów API sieciowych. Dotyczy to gniazd utworzonych w ramach platformy lub kodu zarządzanego, bibliotek sieciowych, takich jak Cronet i OkHttp, oraz interfejsów API zaimplementowanych na ich podstawie. Próba rozwiązania usług w sieci lokalnej (czyli usług z przyrostkiem .local) wymaga uprawnień do sieci lokalnej.
Wyjątki od powyższych zasad:
- Jeśli serwer DNS urządzenia znajduje się w sieci lokalnej, ruch do niego i z niego (na porcie 53) nie wymaga uprawnień dostępu do sieci lokalnej.
- Aplikacje korzystające z przełącznika wyjścia jako selektora w aplikacji nie będą wymagać uprawnień do sieci lokalnej (więcej wskazówek pojawi się w późniejszej wersji).
Wskazówki
Aby włączyć ograniczenia w sieci lokalnej, wykonaj te czynności:
- Flashowanie urządzenia za pomocą wersji Androida 16 w wersji beta 3 lub nowszej
- Zainstaluj aplikację, którą chcesz przetestować
Przełączanie konfiguracji Appcompat za pomocą adb
adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>
Uruchom ponownie urządzenie
Teraz dostęp aplikacji do sieci lokalnej jest ograniczony, a próba uzyskania dostępu do sieci lokalnej spowoduje błąd gniazda. Jeśli używasz interfejsów API, które wykonują operacje sieci lokalnej poza procesem aplikacji (np. NsdManager), nie będą one miały wpływu na proces rejestracji.
Aby przywrócić dostęp, musisz przyznać aplikacji uprawnienia do NEARBY_WIFI_DEVICES
.
- Upewnij się, że aplikacja deklaruje uprawnienie
NEARBY_WIFI_DEVICES
w pliku manifestu. - Kliknij Ustawienia > Aplikacje > [Nazwa aplikacji] > Uprawnienia > Urządzenia w pobliżu > Zezwól
Teraz dostęp aplikacji do sieci lokalnej powinien zostać przywrócony, a wszystkie scenariusze powinny działać tak samo jak przed włączeniem aplikacji. Oto, jak ta zmiana wpłynie na ruch w sieci aplikacji.
Uprawnienia | Wychodzące żądanie LAN | Wychodzące/przychodzące żądanie internetowe | Żądanie przychodzące z sieci LAN |
---|---|---|---|
Przyznano | Works | Works | Works |
Nie przyznano | Wpadki | Works | Wpadki |
Aby wyłączyć konfigurację zgodności aplikacji, użyj tego polecenia:
adb shell am compat disable RESTRICT_LOCAL_NETWORK <package_name>
Błędy
Błędy wynikające z tych ograniczeń będą zwracane do wywołującego gniazda, gdy wywołuje on send
lub jego wariant send
do lokalnego adresu sieci.
Przykładowe błędy:
sendto failed: EPERM (Operation not permitted)
sendto failed: ECONNABORTED (Operation not permitted)
Robaki
Przesyłanie zgłoszeń o błędach i opinii:
- rozbieżności w przypadku dostępu przez sieć LAN (nie uważasz, że dany dostęp powinien być uznany za „dostęp przez sieć lokalną”)
- Błędy, w których dostęp LAN powinien być zablokowany, ale nie jest
- Błędy, w których dostęp LAN nie powinien być zablokowany, ale jest
Ta zmiana nie powinna mieć wpływu na te elementy:
- dostęp do internetu;
- Sieć komórkowa