To Android-dialoger blir stadig blandet sammen: VPN-samtykkeforespørselen og tillatelsene en app ber om for dataene dine. Den første overlater en nettverksposisjon, stedet der pakker kan leses og skrives om. Den andre overlater lagret innhold som Android beskytter app for app. Behandler du dem som én ting, overdriver du enten hva en tunnel kan se, eller undervurderer grovt hva en målbevisst app vil be om neste gang.

Hva samtykkedialogen faktisk overlater

En app som implementerer VpnService og erklærer BIND_VPN_SERVICE, ber systemet om å bli enhetens VPN. Etter godkjenning lager rammeverket et tun-grensesnitt og gir appen en filbeskrivelse for det. Alt appen gjør etterpå, går gjennom den filbeskrivelsen: den leser IP-pakker ut, bestemmer hva som skal skje med dem og skriver pakker inn igjen.

Omfanget av grensesnittet er eksplisitt. Ruter bestemmer hvilke mål som fanges, og addAllowedApplication eller addDisallowedApplication bestemmer hvilke apper som forer det. En VPN per app som lister opp to apper, ser ikke resten av enheten.

Dette er en tillatelse på pakkenivå, ikke på datanivå. Tjenesten ser bytene en app leverer til nettverksstakken, adressert til et mål. Den får ikke tilgang til den sendende appens private lagring, databasefilene eller det dekrypterte minnet. Filer en app har lagret i sin egen sandkasse, er nøyaktig like vanskelige å lese som før.

Der pakkevisningen stopper

TLS gjør fortsatt jobben sin inne i tunnelen, fordi håndtrykket går mellom appen og serveren, ikke mellom appen og VPN-en. VPN-en videresender kryptert tekst som den ikke kan dekryptere uten øktnøklene. Derfor avslører en tunnel alene ikke innholdet i en HTTPS-side eller en beskyttet e-postøkt.

Metadataene rundt den krypterte teksten er en annen historie, og det er her de fleste selvsikre påstandene faller sammen. Mål-IP, port, pakkestørrelser og tidspunkt er alt synlig, i tillegg til servernavnet i TLS ClientHello, som vanligvis sendes i klartekst selv under TLS 1.3. Encrypted Client Hello endrer dette, men det er ikke universelt. Vanlig DNS lekker navn like lett når spørringene går ut ukryptert.

Eldre eller feilkonfigurerte protokoller overlater mer. Vanlig HTTP, IMAP uten TLS og en rekke spill- og IoT-protokoller eksponerer nyttelasten sin for alt som har tun-filbeskrivelsen.

Tillatelsene som aldri følger med

Å godkjenne en VPN godkjenner ikke kontakter, SMS, bilder eller mediebiblioteket. Det er separate kjøretidstillatelser, hver med sin egen dialog og sin egen tilbakekallingsvei på appens innstillingsside. En VPN-klient som vil ha anropsloggen din, må be om den som enhver annen app, og du kan nekte og beholde tunnelen.

Installasjon av sertifikat er den du bør følge med på, fordi den ser ut som en del av VPN-oppsettet og ikke er det. Å installere en bruker-CA i legitimasjonslageret endrer hvilke sertifikater Android godtar, og siden Android 7.0 ignorerer en app som retter seg mot API 24 eller nyere, brukertilførte CA-er med mindre nettverkssikkerhetskonfigurasjonen velger dem med et brukertillitsanker. En klient som insisterer på en CA, kan drive lovlig virksomhetsavlytting, eller den kan be om noe VPN-dialogen aldri nevnte.

Tilgjengelighetstilgang ligger enda lenger ute. En tjeneste med tilgjengelighet aktivert kan lese skjerminnholdet i andre apper, noe ingen posisjon på pakkenivå gir.

Lokalt filter eller ekstern gateway

Den samme API-en dekker to produkter som fortjener ulike nivåer av tillit. En brannmur eller annonseblokker på enheten tar tun-filbeskrivelsen og svarer trafikken lokalt, uten noen gang å sende den til en server den selv driver. En ekte tunnel videresender disse pakkene til en gateway et annet sted, og den operatøren ser de samme metadataene fra den andre enden og bestemmer samtidig hva som kommer tilbake.

En praktisk måte å skille dem på er å sjekke den offentlige adressen din med VPN-en på og av, og se om varselet nevner et eksternt endepunkt. Hvis adressen aldri endrer seg, går trafikken sannsynligvis i ring på selve enheten.

Begge tilfellene er fortsatt en pakkeposisjon. Forskjellen er hvem ellers som står ved utgangen.

Kontroller hva du godkjente

Åpne Innstillinger, deretter Nettverk og internett, deretter VPN, og les oppføringen i stedet for ikonet i statuslinjen. Alltid på VPN og Blokker tilkoblinger uten VPN er enhetsinnstillinger som holder grensesnittet i live og kutter lekkasjer; de utvider ingenting. Fra samme skjerm kan du glemme profilen og tilbakekalle tillatelsen.

Gå deretter gjennom de andre tillatelsene. Appinformasjon viser hvilke kjøretidstillatelser klienten har, og sikkerhetsinnstillingene viser om et brukersertifikat ble installert samtidig. Begge kan fjernes uavhengig.

Spørsmålet som er verdt å besvare, er smalt: hvilke pakker kommer inn i denne tjenesten, hvor går de, og hva beholder implementasjonen. Alt annet i dialogen er støy. VpnService-referansen er den autoritative listen over hva grensesnittet eksponerer.

Relaterte artikler