Root is net wat in Android-VPN-app yn steat stelt om ferkear te dragen, lekken te blokkearjen of in werstart te oerlibjen. Minsken fetsje dat allegear gear as „de app hat VPN-tastimming“, wat trije aparte meganismen ferberget: in tastimming fan de brûker, in pakketinterface dy't it systeem oanmakket, en in blokkearbelied fan it platform dat net fan de app is om te bepalen. In Android-VPN-ûntwerp beoardielje betsjut freegje op hokker fan de trije in bewearing echt rêstet, want elk hat in oare eigner en in oare flatermodus.

Tastimming komt troch in systeemaktiviteit

VpnService.prepare() jout neat. It jout in intent werom nei de systeemtastimmingsaktiviteit as tastimming ûntbrekt, en de app start dy dialooch sadat de brûker de tsjinst goedkrije kin. It eigen proses fan 'e app starte, in tastimming oan it manifest taheakje of in oanpast skerm „VPN ynskeakelje“ sjen litte makket de tastimming net.

De tastimming is ek beheind. It heart by in pakket yn in brûkersprofyl, dus de persoanlike kopy en de wurkkopy binne aparte besluten, en in apparaateigner kin in beheard profyl oars taret as in persoanlik ien. As de dialooch nea ferskynt en prepare() jout null werom, bestiet tastimming al foar dat pakket yn dat profyl; dat is gjin bewiis dat de app betrouber is, allinnich dat de tastimming der is.

De interface is in fersyk dat it systeem ferfollet

Nei tastimming beskriuwt de app wat er wol mei VpnService.Builder: adressen, rûtes, DNS-tsjinners, MTU en, wêr't stipe, de apps om op te nimmen of út te sluten. establish() freget it systeem om de tunnelinterface te meitsjen en it oerienkommende ferkear dêrhinne te lieden. It systeem besit de routedecision; de app krijt de triemdeskriptor en moat dan wat nuttichs dwaan mei de pakketten.

What you observeWho actually owns it
VPN consent dialogThe system, triggered by prepare()
Routes, DNS and app listsThe app requests them; the system applies them
One active VPN per profileThe platform; a new service replaces the old one
Always-on and block-without-VPNDevice policy enforced by the platform

Dy tabel is de arsjitektuer op ien plak. De app docht mei oan pakketferwurking; se besit de interface, de routetabel of it oantal tsjinsten dat rinne mei net.

De tunnelsocket moat út syn eigen tunnel ûntkomme

De ferbining dy't it fersifere ferkear draacht is sels in socket. As dy werom liedt nei de interface dy't de app krekt makke hat, hinget de tunnel fan de tunnel ôf en stûket. VpnService.protect() bynt dy socket oan it ûnderlizzende netwurk sadat it de opfangst omgiet, en dêrom beskermet in korrekte klient syn bûtenste socket foar de earste hânskobbe.

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

Dizze opdrachten litte it ynstalleare VPN-netwurk sjen, it pakket foar altyd-oan en oft de beskoatteling ynsteld is. It binne lês-inkeld-waarnimmings: as de wearden net oerienkomme mei wat it ûntwerp beweart, giet de bewearing oer de interface fan de app en net oer de tastân fan it systeem.

Blokkearring kin fan it platform wêze

Android dokumintearret in belied dat ferbiningen blokkearret dy't de VPN net brûke. Dy hanthavening is in platformkontrakt, net in app dy't ferbiningen yn in lus op 'e nij besiket. De skeakel sit yn 'e VPN-ynstellingen fan it apparaat as Blokkearje ferbiningen sûnder VPN, en op in beheard apparaat kin in eigner it foar it hiele profyl oansette. It ûnderskied is wichtich by it beoardieljen fan in marketingbewearing: in klient kin in slotikoan sjen litte en agressyf wer ferbine wylst direkte ferkear noch mooglik is, of oerdekte apps kinne offline bliuwe om't it systeem de beskoatteling hanthavent.

It slotikoan wurdt troch de app tekene, dus it bewiist allinnich dat de app tinkt dat er ferbûn is. Oft in oare app syn netwurktagong ferliest wurdt troch it platform besletten, dus de nuttige kontrôle is om dy app te sjen mislearjen wylst de tunnel oan is.

In „altyd oan“-label fan 'e appwinkel ferfangt dat kontrakt ek net. Altyd-oan en beskoatteling binne apparaatynstellingen, faak tapast troch in eigner, en har gedrach foar útsletten apps wurdt troch it platform bepaald. Lês de ynstelling, net it badge.

Fjouwer fragen foar in ûntwerpbewurking

Earst, wa joech tastimming: hokker pakket, hokker profyl, en wie it de brûker of in beheard-apparaatbelied? Twadde, wat frege de app: hokker rûtes, hokker adresfamyljes, hokker opnommen of útsletten apps? Tredde, wat bart der as de tunnel net beskikber is: blokkearret it systeem, of falt it ferkear werom op it ûnderlizzende netwurk? Fjouwerde, wat docht de app mei de pakketten dy't er ûntfangt?

De fjouwerde fraach is dy't it tastimmingsmodel net beantwurdzje kin. Tastimming en in TUN-interface bewize dat de app ferkear ûntfange kin, net dat it dat fersiferet, in pear autentisearret of him skjin herstelt. Dat binne ymplemintaasje-eigenskippen, en dêr't in earlike beoardieling syn tiid trochbringt.

In ûnnedige root-fersyk wurdt net legitym troch it resultaat in kill switch te neamen, en in tastimmingsdialooch is gjin feiligensaudit. Hâld de trije tastimmingen apart en elke bewearing wurdt kontrolearber.

Relatearre artikelen