Int tikseb distribuzzjoni Linux li taħdem taħt chroot fuq it-telefon, tinstalla klijent VPN ġo fiha, u l-shell tħabbar li t-tunell tlestiet. Imbagħad tgħaddi għall-browser u t-traffiku joħroġ mid-dejta mobbli bħallikieku ma ġara xejn. Jew l-oppost: kull app fuq it-telefon titlef il-konnettività għax il-klijent installa rotta default fin-namespace li Android qed juża tassew. Dawn iż-żewġ sintomi ġejjin mill-istess biċċa nieqsa, u l-ebda wieħed mhu żball fil-klijent VPN.

Il-shell tgħid konnessa, l-apps ma jaqblux

L-ewwel riżultat huwa dak komuni. Tunell fl-ispazju tal-utent miftuħa minn chroot tista' ttemm il-handshake tagħha, tipprintja l-istatistika u tġorr traffiku li jiġġenera l-istess shell, filwaqt li l-apps ta' Android ikomplu jużaw in-netwerk default tat-telefon. Xejn mhu qed jinterċettahom, għax xejn ma qal lil Android li teżisti VPN.

It-tieni riżultat huwa dak perikoluż. Jekk chroot taqsam in-namespace tan-netwerk ta' Android, li tagħmel b'mod default, proċess b'biżżejjed privileġġi jista' jżid rotot u interface TUN li jaffettwaw it-telefon kollu. Imbagħad it-tunell taħdem għal kull app, inkluż dawk li ma kontx beħsiebek tgħaddi minnhom, u l-konnettività tat-telefon issa tiddependi fuq daemon mingħajr ġestjoni taċ-ċiklu tal-ħajja, mingħajr indikatur tal-konnessjoni u mingħajr politika always-on.

Liema miż-żewġ tħoss wieġeb b'komanda waħda. Qabbel ip route ġewwa chroot mal-istess komanda minn shell Android barra minnha. Output identiku jfisser li chroot qiegħda fin-namespace tal-host: kull bidla fin-netwerk li tagħmel tapplika għat-telefon kollu. Output differenti jfisser li l-lancher ħoloq namespace għaliha, u t-tunell tagħha hija inviżibbli għal Android b'mod strutturali.

X'bidlet chroot u x'ma bidlitx

ObjectEffect of a chroot
Pathname resolutionChanged: lookups start at the new root
Kernel and driversUnchanged: the phone's kernel, its TUN driver, its limits
Network namespaceUnchanged unless the launcher creates one
Android VPN registrationUnchanged: no app consented, no VPN is selected

Is-sejħa tas-sistema chroot tagħmel ħaġa waħda: tibdel id-direttorju użat għar-riżoluzzjoni tal-ismijiet tal-mogħdijiet. Il-man page tgħid b'mod espliċitu li mhix konfini tas-sigurtà, u ma tgħid xejn dwar interfaces, rotot jew stat tal-VPN. Kull ma n-nies jistennew minn kontenitur Linux — stack tan-netwerk privat, filesystem iffiltrat, limiti tar-riżorsi — jiġi minn mekkaniżmi oħra li l-lancher seta' uża jew le.

Għalhekk it-talbiet li chroot tiżola VPN normalment iwieġbu mistoqsija ħażina. Il-mistoqsija rilevanti hija f'liema namespace taħdem il-proċess u f'liema dominju SELinux hija ristretta, u t-tnejn huma proprjetajiet ta' kif inbeda, mhux tal-kelma chroot.

TUN teħtieġ tliet affarijiet, u n-node tal-apparat huwa biss waħda

Tunell tradizzjonali fl-ispazju tal-utent teħtieġ apparat TUN li tista' tiftaħ, appoġġ tal-kernel għal dan l-apparat, u permess biex tikkonfigura l-interface u r-rotot. Dawn huma rekwiżiti separati, u l-ħolqien ta' isem ta' mogħdija taħt /dev ma jissodisfa l-ebda waħda minnhom waħdu:

ls -l /dev/net/tun
ip tuntap add dev tun0 mode tun

Fuq Android il-kernel normalment ikollu appoġġ TUN ikkompilat, għax is-servizz VPN tal-pjattaforma stess jużah, imma dan ma jfissirx li l-proċess tiegħek jista' jużah. Il-konfigurazzjoni tal-interface teħtieġ il-kapaċità tal-amministrazzjoni tan-netwerk, u SELinux jiddeċiedi jekk il-proċess jistax jilħaq in-node tal-apparat xejn. Ċaħda tidher bħala żball ta' permess mingħajr kawża ovvja, u t-tweġiba tinsab fit-traċċa tal-awditjar:

dmesg | grep avc
logcat -d | grep "avc: denied"

Root ma jsolvix dan. SELinux tillimita l-proċessi li jaħdmu bħala uid 0 eżattament bħal oħrajn, għalhekk chroot mibdija minn shell root xorta waħda tista' tiċċaħħad minn apparat li tara. L-għoti tal-infurzar biex jaħdem installatur qadim hija deċiżjoni għat-telefon kollu b'konsegwenzi ferm lil hinn mit-tunell, u mhix soluzzjoni għal binarij antik.

Għaliex l-apps ta' Android jinjoraw it-tunell tiegħek

Il-mudell appoġġat ta' Android huwa app VPN li tirreġistra permezz tas-servizz VPN tal-pjattaforma, titlob il-kunsens tal-utent darba, u tirċievi deskrittur tal-fajl għat-tunell tagħha. Il-pjattaforma mbagħad tgħaddi t-traffiku f'dak id-deskrittur u tinforza l-ambitu tal-apps li għażel l-utent jew l-amministratur, u għalhekk l-istess mekkaniżmu jista' jkun għal kull app, għal kull profil, u magħqud ma' settings always-on u block-without-VPN. Il-gwida tal-iżvilupp tal-VPN f'Android tiddeskrivi dak il-handshake, u l-punt ewlieni huwa li hija reġistrazzjoni, mhux trick ta' routing.

Daemon ġewwa chroot qatt ma tirreġistra. M'hemmx dialog tal-kunsens, m'hemmx ikona taċ-ċavetta fil-bar tal-istat, m'hemmx lista ta' inklużjoni jew esklużjoni għal kull app, u m'hemmx parteċipazzjoni fil-politika always-on. Għalhekk l-apps ikomplu jużaw in-netwerk default, u t-tunell iġġorr biss dak li tibgħat l-istess shell.

Li tmur fid-direzzjoni l-oħra lanqas tgħin. Li timbotta rotot fin-namespace tal-host taqbad kollox, inkluż traffiku li l-pjattaforma kienet tistenna li jibqa' lokali, u tagħmilha mingħajr kontroll għal kull app u mingħajr mod kif l-utent jara jew jirrevokaha. M'hemmx setting tan-nofs fejn daemon chroot tgħaddi traffiku għal app waħda biss.

Il-kompatibilità binarja hija ħajt separat

Anki meta n-naħa tan-netwerk hija interessanti, l-esegwibbli għandu rekwiżiti tiegħu: arkitettura CPU, il-loader dinamiku, il-librerija C, u l-faċilitajiet tal-kernel li jistenna. Android juża bionic mhux glibc, u binarij qadim mibni għal distribuzzjoni desktop jista' jkun jeħtieġ libreriji li m'għadhomx jeżistu fuq l-apparat.

Li tgħaddi isem ta' fajl tal-librerija b'kollegament simboliku għal verżjoni aktar ġdida ma joħloqx kompatibilità ABI, u librerija kriptografika arkivjata minn pakkett ta' għaxar snin ilu mhix komponent miżmum. Jekk il-pjan jiddependi fuq dan, il-pjan huwa li jitmexxa kod mhux miżmum b'privileġġi tan-netwerk fuq telefon.

Ipprovah fil-kuntest ta' Android u naddaf warajh

Ittestja dak li tassew jinteressak, min-naħa li timporta: iftaħ l-app speċifika, ilħaq id-destinazzjoni privata speċifika, ikkonferma liema resolver wieġeb, imbagħad skonnettja t-tunell u kkonferma l-imġiba dokumentata. Riżultat minn terminal ġewwa chroot huwa evidenza dwar il-kuntest tal-eżekuzzjoni ta' dak it-terminal u xejn aktar.

Jekk bidelt rotot tal-host waqt l-esperimenti, ġibhom lura u iddokumenta x'bidelt. Imbagħad iċċekkja jekk it-telefon għandux VPN always-on ikkonfigurat, għax esperiment qadim li ħalla regola warajh jista' jidher bħala ħsara tal-pjattaforma xhur wara.

Għal ħtieġa reali ta' aċċess mill-bogħod, uża l-klijent appoġġat tas-servizz jew disinn tal-gateway approvat. Il-mistoqsija li jixirqilha tistaqsi mhix jekk installatur bl-għeruq jistax jitmexxa, imma jekk implimentazzjoni appoġġata ġġorrx l-apps li għandek bżonn madwar il-konfini li ħsibt, mingħajr ma tħalli bidliet privileġġati bla sid fuq l-apparat.

Artikli relatati