Android VPN brez roota: komu pripadajo soglasje, poti in blokiranje
Soglasje, vmesnik TUN in sistemska politika blokiranja so tri različna dovoljenja. Ugotovite, katera komponenta ima vsako od njih, preden pregledate aplikacijo VPN za Android.
Root ni tisto, kar omogoča aplikaciji VPN za Android, da prenaša promet, blokira uhajanja ali preživi ponovni zagon. Ljudje vse to strnejo v „aplikacija ima dovoljenje VPN“, kar skrije tri ločene mehanizme: soglasje uporabnika, paketni vmesnik, ki ga sistem vzpostavi, in politiko blokiranja platforme, ki je aplikacija ne določa. Pregledovati zasnovo VPN za Android pomeni vprašati, na katero od treh se trditev v resnici opira, ker ima vsaka drugega lastnika in drugačen način odpovedi.
Soglasje pride prek sistemske dejavnosti
VpnService.prepare() ne podeli ničesar. Vrne intent sistemski dejavnosti za soglasje, ko soglasja ni, in aplikacija odpre ta dialog, da uporabnik odobri storitev. Zagon lastnega procesa aplikacije, dodajanje dovoljenja v manifest ali prikaz lastnega zaslona „omogoči VPN“ ne ustvari dovoljenja.
Dovoljenje je tudi omejeno. Pripada paketu v uporabniškem profilu, zato sta osebna in delovna kopija ločeni odločitvi, lastnik naprave pa lahko upravljani profil pripravi drugače kot osebnega. Če se dialog nikoli ne pojavi in prepare() vrne null, soglasje za ta paket v tem profilu že obstaja; to ni dokaz, da je aplikacija zanesljiva, le da je dovoljenje na mestu.
Vmesnik je zahteva, ki jo sistem izpolni
Po soglasju aplikacija opiše, kaj želi, z VpnService.Builder: naslove, poti, strežnike DNS, MTU in, kjer je podprto, aplikacije za vključitev ali izključitev. establish() prosi sistem, naj ustvari vmesnik predora in vanj usmeri ustrezni promet. Odločitev o usmerjanju ima sistem; aplikacija prejme deskriptor datoteke in mora nato s paketi narediti nekaj koristnega.
| What you observe | Who actually owns it |
|---|---|
| VPN consent dialog | The system, triggered by prepare() |
| Routes, DNS and app lists | The app requests them; the system applies them |
| One active VPN per profile | The platform; a new service replaces the old one |
| Always-on and block-without-VPN | Device policy enforced by the platform |
Ta tabela je arhitektura na enem mestu. Aplikacija sodeluje pri obdelavi paketov; ne poseduje vmesnika, usmerjevalne tabele ali števila storitev, ki smejo teči.
Vtičnica predora mora pobegniti iz lastnega predora
Povezava, ki prenaša šifriran promet, je sama vtičnica. Če se usmeri nazaj v vmesnik, ki ga je aplikacija pravkar ustvarila, je predor odvisen od predora in se ustavi. VpnService.protect() to vtičnico priveže na spodnje omrežje, da obide zajem, zato pravilen odjemalec zaščiti svojo zunanjo vtičnico pred prvim rokovanjem.
adb shell dumpsys connectivity | grep -i -A5 vpn
adb shell settings get global always_on_vpn_app
adb shell settings get global always_on_vpn_lockdown
Ti ukazi prikažejo nameščeno omrežje VPN, paket stalnega vklopa in ali je blokiranje nastavljeno. To so opažanja samo za branje: če se vrednosti ne ujemajo s tem, kar trdi zasnova, se trditev nanaša na vmesnik aplikacije in ne na stanje sistema.
Blokiranje lahko pripada platformi
Android dokumentira politiko, ki blokira povezave, ki ne uporabljajo VPN. To izvajanje je pogodba platforme, ne aplikacija, ki v zanki znova poskuša povezave. Stikalo je v nastavitvah VPN naprave kot Blokiraj povezave brez VPN, na upravljani napravi pa ga lastnik lahko vklopi za celoten profil. Razlika je pomembna pri ocenjevanju marketinške trditve: odjemalec lahko prikaže ikono ključavnice in se agresivno znova povezuje, medtem ko je neposredni promet še vedno mogoč, ali pa zajete aplikacije ostanejo brez povezave, ker sistem izvaja blokiranje.
Ikono ključavnice nariše aplikacija, zato dokazuje le, da aplikacija verjame, da je povezana. Ali bo druga aplikacija izgubila omrežni dostop, odloči platforma, zato je koristen pregled opazovati, kako ta aplikacija ne uspe, medtem ko je predor aktiven.
Tudi oznaka „vedno vklopljeno“ iz trgovine z aplikacijami ne nadomesti te pogodbe. Stalni vklop in blokiranje sta nastavitvi naprave, ki ju pogosto uporabi lastnik, njuno vedenje za izvzete aplikacije pa določi platforma. Berite nastavitev, ne značke.
Štiri vprašanja za pregled zasnove
Prvič, kdo je dal soglasje: kateri paket, kateri profil in ali je bil uporabnik ali politika upravljane naprave? Drugič, kaj je aplikacija zahtevala: katere poti, katere družine naslovov, katere vključene ali izvzete aplikacije? Tretjič, kaj se zgodi, ko predor ni na voljo: sistem blokira ali promet pade nazaj v spodnje omrežje? Četrtič, kaj aplikacija naredi s prejetimi paketi?
Četrto vprašanje je tisto, na katero model dovoljenj ne more odgovoriti. Soglasje in vmesnik TUN dokazujeta, da lahko aplikacija sprejema promet, ne pa da ga šifrira, overi nasprotno stran ali se čisto obnovi. To so lastnosti izvedbe in tam pošten pregled preživi svoj čas.
Nepotrebna zahteva za root ne postane zakonita, če se rezultat imenuje izklopno stikalo, in dialog soglasja ni varnostna revizija. Tri dovoljenja imejte ločena in vsaka trditev postane preverljiva.