Två Android-dialoger blandas ihop hela tiden: VPN-samtyckesfrågan och de behörighetsförfrågningar som en app gör för dina data. Den första lämnar över en nätverksposition, platsen där paket kan läsas och skrivas om. Den andra lämnar över lagrat innehåll som Android skyddar app för app. Behandlar du dem som en och samma sak, överdriver du antingen vad en tunnel kan se eller underskattar grovt vad en beslutsam app kommer att begära härnäst.

Vad samtyckesdialogen faktiskt lämnar över

En app som implementerar VpnService och deklarerar BIND_VPN_SERVICE ber systemet att bli enhetens VPN. Efter godkännandet skapar ramverket ett tun-gränssnitt och ger appen en fildeskriptor för det. Allt appen gör efteråt flödar genom den deskriptorn: den läser IP-paket utåt, bestämmer vad som ska hända med dem och skriver paket inåt igen.

Gränssnittets omfattning är uttrycklig. Rutter avgör vilka destinationer som fångas, och addAllowedApplication eller addDisallowedApplication avgör vilka appar som matar det. En VPN per app som listar två appar ser inte resten av enheten.

Det är ett beviljande på paketnivå, inte på datanivå. Tjänsten ser de byte en app lämnar till nätverksstacken, adresserade till en destination. Den får inte tillgång till den sändande appens privata lagring, dess databasfiler eller dess dekrypterade minne. Filer som en app sparat i sin egen sandlåda är precis lika svåra att läsa som tidigare.

Där paketvyn upphör

TLS gör fortfarande sitt jobb inne i tunneln, eftersom handskakningen sker mellan appen och servern och inte mellan appen och VPN:en. VPN:en vidarebefordrar krypterad text som den inte kan dekryptera utan sessionsnycklarna. Därför avslöjar en tunnel ensam inte innehållet i en HTTPS-sida eller en skyddad mejlsession.

Metadata runt den krypterade texten är en annan historia, och det är här de flesta självsäkra påståenden faller samman. Destinations-IP, port, paketstorlekar och timing är alla synliga, plus servernamnet i TLS ClientHello, som normalt skickas i klartext även under TLS 1.3. Encrypted Client Hello ändrar det, men det är inte universellt. Vanlig DNS läcker namn lika lätt när frågorna går ut okrypterade.

Äldre eller felkonfigurerade protokoll lämnar över mer. Vanlig HTTP, IMAP utan TLS och ett antal spel- och IoT-protokoll exponerar sin nyttolast för allt som har tun-deskriptorn.

Behörigheterna som aldrig följer med

Att godkänna en VPN godkänner inte kontakter, SMS, foton eller mediebiblioteket. Det är separata behörigheter vid körning, var och en med sin egen dialog och sin egen återkallningsväg på appens inställningssida. En VPN-klient som vill ha din samtalslogg måste fråga om den som vilken annan app som helst, och du kan neka och behålla tunneln.

Installation av certifikat är den du bör se upp med, eftersom den ser ut som en del av VPN-konfigurationen och inte är det. Att installera en användar-CA i autentiseringslagret ändrar vilka certifikat Android accepterar, och sedan Android 7.0 ignorerar en app som riktar sig mot API 24 eller senare användartillagda CA:er om inte dess nätverkssäkerhetskonfiguration väljer dem med ett användarförtroendeankare. En klient som insisterar på en CA kan ägna sig åt legitim företagsavlyssning, eller så kan den begära något som VPN-dialogen aldrig nämnde.

Tillgänglighetsåtkomst ligger ännu längre ut. En tjänst med tillgänglighet aktiverad kan läsa skärminnehållet i andra appar, vilket ingen position på paketnivå ger.

Lokalt filter eller fjärrgateway

Samma API täcker två produkter som förtjänar olika nivåer av förtroende. En brandvägg eller annonsblockerare på enheten tar tun-deskriptorn och svarar på trafiken lokalt, utan att någonsin skicka den till en server den själv driver. En riktig tunnel vidarebefordrar paketen till en gateway någon annanstans, och den operatören ser samma metadata från andra änden och avgör samtidigt vad som kommer tillbaka.

Ett praktiskt sätt att skilja dem åt är att kontrollera din offentliga adress med VPN:en på och av, och se om aviseringen namnger en fjärrendpunkt. Om adressen aldrig ändras går trafiken förmodligen i cirkel på själva enheten.

Båda fallen är fortfarande en paketposition. Skillnaden är vem mer som står vid utgången.

Granska vad du godkände

Öppna Inställningar, sedan Nätverk och internet, sedan VPN, och läs posten i stället för ikonen i statusfältet. Alltid på VPN och Blockera anslutningar utan VPN är enhetsinställningar som håller gränssnittet vid liv och skär av läckor; de vidgar ingenting. Från samma skärm kan du glömma profilen och återkalla beviljandet.

Gå sedan igenom de andra behörigheterna. Appinformation visar vilka behörigheter vid körning klienten har, och säkerhetsinställningarna visar om ett användarcertifikat installerades samtidigt. Båda kan tas bort oberoende av varandra.

Frågan som är värd att besvara är smal: vilka paket kommer in i den här tjänsten, vart tar de vägen och vad behåller implementeringen. Allt annat i dialogen är brus. VpnService-referensen är den auktoritativa listan över vad gränssnittet exponerar.

Relaterade artiklar