VPN w Androidzie a uprawnienia aplikacji: co oznacza ostrzeżenie
Okno zgody na VPN w Androidzie daje pozycję na poziomie pakietów, a nie dostęp do poczty, zdjęć czy kontaktów. Oto gdzie naprawdę przebiega ta granica.
Dwa okna w Androidzie są stale mylone: prośba o zgodę na VPN i prośby o uprawnienia, o które aplikacja występuje w sprawie twoich danych. Pierwsze przekazuje pozycję w sieci, miejsce, w którym pakiety można czytać i przepisywać. Drugie przekazuje przechowywaną treść, której Android strzeże aplikacja po aplikacji. Traktowanie ich jako jednej rzeczy albo wyolbrzymia to, co widzi tunel, albo mocno zaniża to, o co następnie poprosi zdeterminowana aplikacja.
Co naprawdę przekazuje okno zgody
Aplikacja, która implementuje VpnService i deklaruje BIND_VPN_SERVICE, prosi system, aby stał się VPN urządzenia. Po zatwierdzeniu framework tworzy interfejs tun i daje aplikacji deskryptor pliku dla niego. Wszystko, co aplikacja robi potem, płynie przez ten deskryptor: odczytuje pakiety IP na zewnątrz, decyduje, co z nimi zrobić, i zapisuje pakiety z powrotem do środka.
Zakres tego interfejsu jest wyraźny. Trasy decydują, które cele są przechwytywane, a addAllowedApplication lub addDisallowedApplication decyduje, które aplikacje go zasilają. VPN dla poszczególnych aplikacji, który wymienia dwie aplikacje, nie widzi reszty urządzenia.
To przydział na poziomie pakietów, nie na poziomie danych. Usługa widzi bajty, które aplikacja przekazuje stosowi sieciowemu, zaadresowane do celu. Nie dostaje dostępu do prywatnego magazynu aplikacji wysyłającej, jej plików bazy danych ani odszyfrowanej pamięci. Pliki zapisane przez aplikację w jej własnej piaskownicy pozostają dokładnie tak samo trudne do odczytania jak wcześniej.
Gdzie kończy się widok pakietów
TLS nadal robi swoje wewnątrz tunelu, ponieważ uzgadnianie odbywa się między aplikacją a serwerem, a nie między aplikacją a VPN. VPN przekazuje zaszyfrowany tekst, którego nie może odszyfrować bez kluczy sesji. Dlatego sam tunel nie ujawnia treści strony HTTPS ani chronionej sesji pocztowej.
Metadane wokół zaszyfrowanego tekstu to inna historia i tu właśnie rozpadają się najbardziej pewne twierdzenia. Docelowy adres IP, port, rozmiary pakietów i czasy są widoczne, plus nazwa serwera w TLS ClientHello, która zwykle jest wysyłana jawnie nawet w TLS 1.3. Encrypted Client Hello to zmienia, ale nie jest powszechne. Zwykły DNS ujawnia nazwy równie łatwo, gdy zapytania wychodzą niezaszyfrowane.
Starsze lub źle skonfigurowane protokoły przekazują więcej. Zwykły HTTP, IMAP bez TLS oraz szereg protokołów gier i IoT wystawia swoje dane na widok wszystkiego, co ma deskryptor tun.
Uprawnienia, które nigdy z tym nie przychodzą
Zatwierdzenie VPN nie zatwierdza kontaktów, SMS-ów, zdjęć ani biblioteki multimediów. To osobne przydziały czasu wykonania, każdy z własnym oknem i własną ścieżką cofnięcia na stronie ustawień aplikacji. Klient VPN, który chce twojej historii połączeń, musi o nią poprosić jak każda inna aplikacja, a ty możesz odmówić, zachowując tunel.
Instalacja certyfikatu to ta, na którą trzeba uważać, bo wygląda jak część konfiguracji VPN, a nią nie jest. Zainstalowanie certyfikatu CA użytkownika w magazynie poświadczeń zmienia to, które certyfikaty Android zaakceptuje, a od Androida 7.0 aplikacja kierowana na API 24 lub nowsze ignoruje certyfikaty CA dodane przez użytkownika, chyba że jej konfiguracja bezpieczeństwa sieci włączy je z kotwicą zaufania użytkownika. Klient, który nalega na CA, może prowadzić legalne przechwytywanie korporacyjne, a może prosić o coś, o czym okno VPN nigdy nie wspomniało.
Dostęp przez funkcje ułatwień dostępu jest jeszcze dalej. Usługa z włączoną dostępnością może czytać zawartość ekranu innych aplikacji, czego nie daje żadna pozycja na poziomie pakietów.
Filtr lokalny czy brama zdalna
To samo API obejmuje dwa produkty, które zasługują na różne poziomy zaufania. Zapora lub blokada reklam na urządzeniu bierze deskryptor tun i odpowiada na ruch lokalnie, nigdy nie wysyłając go do serwera, którym sama zarządza. Prawdziwy tunel przekazuje te pakiety do bramy gdzie indziej, a ten operator widzi te same metadane z drugiej strony i jednocześnie decyduje, co wraca.
Praktyczny sposób, aby je odróżnić, to sprawdzenie swojego publicznego adresu przy włączonym i wyłączonym VPN oraz sprawdzenie, czy powiadomienie wymienia zdalny punkt końcowy. Jeśli adres nigdy się nie zmienia, ruch prawdopodobnie krąży na samym urządzeniu.
Oba przypadki to nadal pozycja na poziomie pakietów. Różnica polega na tym, kto jeszcze stoi przy wyjściu.
Sprawdź, na co wyraziłeś zgodę
Otwórz Ustawienia, następnie Sieć i internet, następnie VPN, i czytaj wpis, a nie ikonę na pasku stanu. Zawsze włączony VPN i Blokuj połączenia bez VPN to ustawienia urządzenia, które utrzymują interfejs przy życiu i odcinają wycieki; niczego nie poszerzają. Z tego samego ekranu możesz zapomnieć profil i cofnąć przydział.
Następnie przejrzyj pozostałe uprawnienia. Informacje o aplikacji pokazują, jakie przydziały czasu wykonania ma klient, a ustawienia Zabezpieczeń pokazują, czy jednocześnie zainstalowano certyfikat użytkownika. Każde z nich można usunąć niezależnie.
Pytanie, na które warto odpowiedzieć, jest wąskie: które pakiety wchodzą do tej usługi, dokąd idą i co zachowuje implementacja. Wszystko inne w oknie to szum. Dokumentacja VpnService to autorytatywna lista tego, co udostępnia interfejs.