VPN am chroot op Android: firwat den Tunnel funktionéiert a firwat d’Appen en ignoréieren
chroot ännert d’Opléisung vu Weeër, net de Kernel, den Netz-Nummensraum oder d’VPN-Registréierung vun Android. Dueraus entstinn zwee Resultater an allebiddersetzen d’Leit.
Du bréngs eng Linux-Distributioun ënner engem chroot um Telefon zum Lafen, installéiers en VPN-Client dran, an d’Shell mellt en ofgeschlossenen Tunnel. Duerno wiesselt du op e Browser an den Trafik geet iwwer mobil Donnéeën eraus, wéi wann näischt geschitt wier. Oder ëmgedréit: all App um Telefon verléiert d’Verbindung, well de Client eng Standardroute an de Nummensraum gesat huet, deen Android tatsächlech benotzt. Déi zwee Symptomer kommen aus demselwechte fehlenden Deel, an keen dovun ass e Feeler am VPN-Client.
D’Shell seet verbonnen, d’Appen sinn net d’accord
Dat éischt Resultat ass dat gewéinlecht. En Tunnel am Benotzerraum, deen aus engem chroot opgemaach gouf, kann säin Handshake ofschléissen, seng Statistike drécken an den Trafik droen, deen déiselwecht Shell produzéiert, wärend d’Appen vun Android weider de Standardnetz vum Telefon benotzen. Näischt fänkt si of, well näischt Android gesot huet, datt et eng VPN gëtt.
Dat zweet Resultat ass dat geféierlecht. Wann de chroot den Netz-Nummensraum vun Android deelt, wat standardméisseg de Fall ass, kann e Prozess mat genuch Rechter Routen an eng TUN-Interface derbäisetzen, déi den ganzen Telefon betreffen. Dann funktionéiert den Tunnel fir all App, och fir déi, déi s du net wëlles hatest ze routen, an d’Verbindung vum Telefon hänkt elo vun engem Daemon of ouni Liewenszyklus-Management, ouni Verbindungsindikator an ouni Ëmmer-un-Politik.
Wéi eng vun den zwou s du kriss, léisst sech mat engem eenzegen Uerder beäntweren. Vergläich ip route am chroot mat demselwechten Uerder aus enger Android-Shell dobaussen. Identesch Ausgab heescht, de chroot ass am Nummensraum vum Host: all Netzwierkännerung, déi en mécht, gëllt fir den ganzen Telefon. Aner Ausgab heescht, de Launcher huet en Nummensraum fir en ugeluecht, an säin Tunnel ass fir Android duerch seng Konstruktioun onsichtbar.
Wat chroot geännert huet a wat net
| Object | Effect of a chroot |
|---|---|
| Pathname resolution | Changed: lookups start at the new root |
| Kernel and drivers | Unchanged: the phone's kernel, its TUN driver, its limits |
| Network namespace | Unchanged unless the launcher creates one |
| Android VPN registration | Unchanged: no app consented, no VPN is selected |
De Systemuerder chroot mécht eng Saach: en ännert den Verzeechnis, deen zur Opléisung vu Weeër benotzt gëtt. D’Man-Säit seet kloer, datt et keng Sécherheetsgrenz ass, an et seet näischt iwwer Interfacen, Routen oder VPN-Zoustand. Alles, wat d’Leit vun engem Linux-Container erwaarden — en private Netzwierkstapel, e gefilterte Fichiersystem, Ressourcelimiten — kënnt aus aneren Mechanismen, déi de Launcher benotzt huet oder net.
Dofir beäntweren d’Aussagen, datt en chroot eng VPN isoléiert, meeschtens déi falsch Fro. Déi relevant Fro ass, an wéi engem Nummensraum de Prozess leeft an a wéi engem SELinux-Domän e beschränkt ass, an allebids sinn dat Eegenschafte vu wéi e gestart gouf, net vum Wuert chroot.
TUN brauch dräi Saachen, an en Apparatknuet ass just eng
En traditionellen Tunnel am Benotzerraum brauch en TUN-Apparat, deen e ka opmaachen, Kernelënnerstëtzung fir deen Apparat, an d’Erlaabnis, d’Interface an d’Routen ze konfiguréieren. Dat sinn ënnerschiddlech Fuerderungen, an den Uleeë vun engem Weenumm ënner /dev erfëllt der keng dovun eleng:
ls -l /dev/net/tun
ip tuntap add dev tun0 mode tun
Op Android ass d’TUN-Ënnerstëtzung meeschtens an de Kernel kompiléiert, well de eegenen VPN-Service vun der Plattform se benotzt, awer dat heescht net, datt däi Prozess se benotze däerf. D’Konfiguratioun vun der Interface brauch d’Netzwierkverwaltungskapazitéit, an SELinux entscheet, ob de Prozess iwwerhaapt un den Apparatknuet erukënnt. Eng Oflehnung gesäit aus wéi e Berechtegungsfeeler ouni kloer Ursaach, an d’Äntwert ass am Audit-Trail:
dmesg | grep avc
logcat -d | grep "avc: denied"
Root léist dat net. SELinux beschränkt Prozesser mat uid 0 genau wéi anerer, dofir kann engem chroot, deen aus enger Root-Shell gestart gouf, nach ëmmer en Apparat verweigert ginn, deen en gesäit. D’Duerchsetzung ofzeschalten, fir en ale Installer zum Lafen ze bréngen, ass eng Entscheedung fir den ganzen Telefon mat Konsequenzen wäit iwwer den Tunnel eraus, an et ass keng Reparatur fir en iwwerhollene Binär.
Firwat d’Appen vun Android däin Tunnel ignoréieren
Dat ënnerstëtzt Modell vun Android ass eng VPN-App, déi sech iwwer de VPN-Service vun der Plattform registréiert, de Benotzer eng Kéier ëm Zoustëmmung freet an e Fichierdeskriptor fir säin Tunnel kritt. Duerno leet d’Plattform den Trafik an deen Deskriptor an setzt de Appëmfang duerch, deen de Benotzer oder den Administrateur gewielt huet, dofir kann deeselwechte Mechanismus pro App, pro Profil a kombinéiert mat Ëmmer-un an Blockéiere ouni VPN sinn. Den Android-Entwécklungsguide fir VPN beschreift deen Handshake, an de Kärpunkt ass, datt et eng Registréierung ass, keen Routingstrick.
En Daemon an engem chroot registréiert sech ni. Et gëtt keen Zoustëmmungsdialog, keen Schlësselikon an der Statusläischt, keng Lëscht fir Appen anzeschléissen oder auszeschléissen, an keng Bedeelegung un der Ëmmer-un-Politik. Dofir benotzen d’Appen weider de Standardnetz, an den Tunnel dréit just dat, wat d’Shell selwer schéckt.
Déi aner Richtung hëlleft och net. Routen an den Nummensraum vum Host ze drécken fänkt alles of, och den Trafik, deen d’Plattform erwaart huet lokal ze halen, an et mécht dat ouni Kontroll pro App an ouni Manéier fir de Benotzer, et ze gesinn oder zréckzezéien. Et gëtt keng Mëttelastellung, wou en chroot-Daemon den Trafik just fir eng eenzeg App leet.
Binär Kompatibilitéit ass eng eege Mauer
Och wann d’Netzwiersäit interessant ass, huet d’ausféierbar Datei hir eegen Ufuerderungen: CPU-Architektur, de dynamesche Lueder, d’C-Bibliothéik an d’Kernel-Kapazitéiten, déi se erwaart. Android benotzt bionic amplaz glibc, an en ale Binär, dee fir eng Desktop-Distributioun gebaut gouf, kann Bibliothéiken brauchen, déi et um Apparat net méi gëtt.
E Bibliothéiksfichiernumm un eng méi nei Versioun ze linken schaaft keng ABI-Kompatibilitéit, an eng archivéiert Kryptobibliothéik aus engem zéng Joer ale Paket ass keen ënnerhalene Komponent. Wann de Plang dovu ofhänkt, ass de Plang, onënnerhalene Code mat Netzwierkrechter op engem Telefon lafen ze loossen.
Beweis et am Android-Kontext an räum duerno op
Test dat, wat dir wierklech wichteg ass, vun der Säit, déi zielt: maach déi konkreet App op, erreech déi konkreet privat Destinatioun, bestäteg, wéi ee Resolver geäntwert huet, trenn dann den Tunnel of a bestäteg dat dokumentéiert Verhalen. En Resultat aus engem Terminal am chroot ass e Beweis iwwer den Ausféierungskontext vun deem Terminal an näischt méi.
Wann s du während dem Experiment Hostrouten geännert hues, setz se zréck a schreif op, wat s geännert hues. Kontrolléier duerno, ob den Telefon eng Ëmmer-un-VPN konfiguréiert huet, well en aalt Experiment, dat eng Regel hannerlooss huet, Méint méi spéit wéi e Plattformfeeler ausgesi kann.
Fir e richtegen Ufuerderung un Fernzougrëff benotz de vum Service ënnerstëtzte Client oder en approuvéierte Gateway-Design. D’Fro, déi et wäert ass ze stellen, ass net, ob een Root-Installer zum Lafen ze bréngen ass, mä ob eng ënnerstëtzt Ëmsetzung déi Appen, déi s brauchs, iwwer d’Grenz dréit, déi s gemengt hues, ouni onbesëtzte privilegeéiert Ännerungen um Apparat ze hannerloossen.