Dostęp do sieci lokalnej

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:

  1. Flashowanie urządzenia za pomocą wersji Androida 16 w wersji beta 3 lub nowszej
  2. Zainstaluj aplikację, którą chcesz przetestować
  3. Przełączanie konfiguracji Appcompat za pomocą adb

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