VPN pe Android versus permisiuni ale aplicațiilor: ce înseamnă avertismentul
Fereastra de consimțământ VPN din Android acordă o poziție la nivel de pachete, nu acces la e-mail, la fotografii sau la contacte. Iată unde se află de fapt această graniță.
Două ferestre din Android sunt confundate constant: solicitarea de consimțământ pentru VPN și cererile de permisiuni pe care o aplicație le face pentru datele tale. Prima cedează o poziție în rețea, locul unde pachetele pot fi citite și rescrise. A doua cedează conținut stocat pe care Android îl protejează aplicație cu aplicație. Dacă le tratăm ca pe un singur lucru, fie exagerăm ce poate vedea un tunel, fie subestimăm grav ce va cere în continuare o aplicație hotărâtă.
Ce cedează de fapt fereastra de consimțământ
O aplicație care implementează VpnService și declară BIND_VPN_SERVICE cere sistemului să devină VPN-ul dispozitivului. După aprobare, cadrul creează o interfață tun și îi dă aplicației un descriptor de fișier pentru ea. Tot ce face aplicația după aceea trece prin acel descriptor: citește pachete IP în afară, decide ce să facă cu ele și scrie pachete înapoi înăuntru.
Amploarea acelei interfețe este explicită. Rutele decid ce destinații sunt capturate, iar addAllowedApplication sau addDisallowedApplication decide ce aplicații o alimentează. Un VPN pe aplicație care listează două aplicații nu vede restul dispozitivului.
Este o acordare la nivel de pachet, nu la nivel de date. Serviciul vede octeții pe care o aplicație îi predă stivei de rețea, adresați unei destinații. Nu primește acces la stocarea privată a aplicației care trimite, la fișierele ei de bază de date sau la memoria ei decriptată. Fișierele pe care o aplicație le-a salvat în propriul sandbox rămân exact la fel de greu de citit ca înainte.
Unde se oprește vizualizarea pachetelor
TLS își face în continuare treaba în interiorul tunelului, pentru că strângerea de mână are loc între aplicație și server, nu între aplicație și VPN. VPN-ul transmite text criptat pe care nu îl poate decripta fără cheile de sesiune. De aceea un tunel singur nu dezvăluie conținutul unei pagini HTTPS sau al unei sesiuni de e-mail protejate.
Metadatele din jurul textului criptat sunt altă poveste, și aici se destramă majoritatea afirmațiilor încrezătoare. IP-ul destinației, portul, dimensiunile pachetelor și temporizarea sunt toate vizibile, plus numele serverului din TLS ClientHello, care este de obicei trimis în clar chiar și sub TLS 1.3. Encrypted Client Hello schimbă asta, dar nu este universal. DNS-ul simplu scurge nume la fel de ușor când interogările ies necriptate.
Protocoalele mai vechi sau prost configurate cedează mai mult. HTTP simplu, IMAP fără TLS și o serie de protocoale de jocuri și IoT își expun încărcătura oricui deține descriptorul tun.
Permisiunile care nu vin niciodată cu el
Aprobarea unui VPN nu aprobă contacte, SMS-uri, fotografii sau biblioteca media. Acestea sunt acordări separate de execuție, fiecare cu fereastra ei și cu propria cale de revocare în pagina de setări a aplicației. Un client VPN care vrea istoricul apelurilor trebuie să îl ceară ca orice altă aplicație, iar tu poți refuza păstrând tunelul.
Instalarea certificatului este cea la care trebuie să fii atent, pentru că pare parte din configurarea VPN și nu este. Instalarea unui CA de utilizator în magazinul de acreditări schimbă ce certificate va accepta Android, iar din Android 7.0 o aplicație vizând API 24 sau mai nou ignoră CA-urile adăugate de utilizator dacă configurația sa de securitate a rețelei nu le acceptă cu o ancoră de încredere a utilizatorului. Un client care insistă pe un CA poate face interceptare corporativă legitimă sau poate cere ceva ce fereastra VPN nu a menționat niciodată.
Accesul de accesibilitate stă și mai departe. Un serviciu cu accesibilitatea activată poate citi conținutul ecranului altor aplicații, ceea ce nicio poziție la nivel de pachet nu oferă.
Filtru local sau poartă la distanță
Aceeași API acoperă două produse care merită niveluri diferite de încredere. Un firewall sau un blocant de reclame de pe dispozitiv ia descriptorul tun și răspunde traficului local, fără a-l trimite vreodată către un server pe care îl administrează chiar el. Un tunel real transmite acele pachete către o poartă în altă parte, iar operatorul respectiv vede aceleași metadate de la celălalt capăt și decide totodată ce se întoarce.
O modalitate practică de a le deosebi este să verifici adresa publică cu VPN-ul pornit și oprit și să te uiți dacă notificarea numește un punct final la distanță. Dacă adresa nu se schimbă niciodată, traficul se învârte probabil pe dispozitivul însuși.
Ambele cazuri rămân o poziție la nivel de pachete. Diferența este cine altcineva stă la ieșire.
Verifică ce ai aprobat
Deschide Setări, apoi Rețea și internet, apoi VPN, și citește înregistrarea, nu pictograma din bara de stare. VPN permanent și Blochează conexiunile fără VPN sunt setări ale dispozitivului care țin interfața vie și taie scurgerile; nu lărgesc nimic. Din același ecran poți uita profilul și revoca acordarea.
Apoi parcurge celelalte permisiuni. Informațiile despre aplicație arată ce acordări de execuție are clientul, iar setările de Securitate arată dacă a fost instalat în același timp un certificat de utilizator. Oricare dintre ele poate fi eliminată independent.
Întrebarea care merită un răspuns este îngustă: ce pachete intră în acest serviciu, încotro merg și ce păstrează implementarea. Tot restul din fereastră este zgomot. Referința VpnService este lista autoritară a ceea ce expune interfața.