Телефонда chroot астында Linux таралымын іске қосасыз, ішіне VPN клиентін орнатасыз, ал қабық туннель дайын деп хабарлайды. Сосын браузерге өтесіз, ал трафик ештеңе болмағандай ұялы деректер арқылы шығады. Немесе керісінше: телефонның барлық қосымшасы байланыстан айырылады, себебі клиент Android шын мәнінде қолданатын аттар кеңістігіне әдепкі маршрут қосқан. Бұл екі белгі бірдей жетіспейтін бөліктен шығады және ешқайсысы VPN клиентінің қатесі емес.

Қабық қосылды дейді, қосымшалар келіспейді

Бірінші нәтиже қарапайым. chroot-тан ашылған пайдаланушы кеңістігіндегі туннель қол алысуды аяқтап, статистикасын басып шығарып, сол қабық жасайтын трафикті тасымалдай алады, ал Android қосымшалары телефонның әдепкі желісін қолдана береді. Оларды ештеңе ұстап алмайды, өйткені VPN бар екенін Android-қа ештеңе айтқан жоқ.

Екінші нәтиже қауіпті. Егер chroot Android-тың желілік аттар кеңістігін бөліссе, бұл әдепкі жағдай, жеткілікті артықшылығы бар процесс бүкіл телефонға әсер ететін маршруттар мен TUN интерфейсін қоса алады. Сонда туннель әр қосымша үшін жұмыс істейді, соның ішінде маршруттауды ойламағандарыңыз да, ал телефонның байланысы енді өмірлік циклін басқаруы, қосылым индикаторы және әрдайым қосу саясаты жоқ демонға тәуелді.

Екеуінің қайсысын алғаныңызды бір командиен білуге болады. chroot ішіндегі ip route командасын сырттағы Android қабығынан сол командамен салыстырыңыз. Бірдей шығыс chroot хосттың аттар кеңістігінде екенін білдіреді: оның кез келген желілік өзгерісі бүкіл телефонға қатысты. Басқа шығыс іске қосқыш оған жеке аттар кеңістігін жасағанын білдіреді, ал оның туннелі құрылымы бойынша Android үшін көрінбейді.

chroot нені өзгертті және нені өзгертпеді

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

chroot жүйелік шақыруы бір нәрсе істейді: жолдарды шешуге қолданылатын каталогты өзгертеді. man беті бұл қауіпсіздік шекарасы емес екенін анық айтады және интерфейстер, маршруттар немесе VPN күйі туралы ештеңе айтпайды. Адамдар Linux контейнерінен күтетіннің бәрі — жеке желілік стек, сүзілген файл жүйесі, ресурс шектеулері — іске қосқыш қолданған немесе қолданбаған басқа механизмдерден келеді.

Сондықтан chroot VPN-ді оқшаулайды деген тұжырымдар әдетте дұрыс емес сұраққа жауап береді. Маңызды сұрақ — процесс қай аттар кеңістігінде жұмыс істейді және қай SELinux доменінде шектелген, ал екеуі де оның қалай іске қосылғанының қасиеті, chroot сөзінің емес.

TUN-ға үш нәрсе керек, ал құрылғы түйіні тек біреуі

Дәстүрлі пайдаланушы кеңістігіндегі туннельге өзі аша алатын TUN құрылғысы, сол құрылғыға ядро қолдауы және интерфейс пен маршруттарды конфигурациялау рұқсаты керек. Бұлар жеке талаптар, ал /dev астында жол атауын жасау олардың ешқайсысын өздігінен қанағаттандырмайды:

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

Android-та TUN қолдауы әдетте ядроға кіріктірілген, өйткені платформаның өз VPN қызметі оны қолданады, бірақ бұл сіздің процесіңізге оны қолдануға болады дегенді білдірмейді. Интерфейсті конфигурациялау үшін желіні басқару қабілеті керек, ал SELinux процесс құрылғы түйініне жететінін шешеді. Бас тарту себебі айқын емес рұқсат қатесіне ұқсайды, ал жауап аудит ізінде:

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

Root мұны шешпейді. SELinux uid 0 ретінде жұмыс істейтін процестерді де басқалар сияқты шектейді, сондықтан root қабығынан басталған chroot өзі көретін құрылғыға бас тарту ала алады. Ескі орнатушыны іске қосу үшін мәжбүрлеуді өшіру — туннельден әлдеқайда алыс салдарлары бар бүкіл телефонға арналған шешім және ескірген бинарды түзету емес.

Android қосымшалары сіздің туннеліңізді неге елемейді

Android-тың қолдайтын моделі — платформаның VPN қызметіне тіркелетін, пайдаланушыдан бір рет келісім сұрайтын және өз туннеліне файл дескрипторын алатын VPN қосымшасы. Сосын платформа трафикті сол дескрипторға бағыттайды және пайдаланушы немесе әкімші таңдаған қосымша ауқымын орындайды, сондықтан бір механизм қосымша бойынша, профиль бойынша және әрдайым қосу мен VPN-сіз блоктау параметрлерімен бірігуі мүмкін. Android VPN әзірлеу нұсқаулығы сол қол алысуды сипаттайды, ал бастысы — бұл тіркеу, маршруттау айласы емес.

chroot ішіндегі демон ешқашан тіркелмейді. Келісім диалогы жоқ, күй жолағында кілт белгішесі жоқ, қосымша бойынша қосу немесе шығару тізімі жоқ және әрдайым қосу саясатына қатысу жоқ. Сондықтан қосымшалар әдепкі желіні қолдана береді, ал туннель тек қабық өзі жіберетін нәрсені тасымалдайды.

Кері бағыт та көмектеспейді. Маршруттарды хосттың аттар кеңістігіне итеру бәрін ұстайды, платформа жергілікті қалдыруды күткен трафикті қоса, және мұны қосымша бойынша бақылаусыз, пайдаланушы көріп немесе жоя алатын тәсілсіз жасайды. chroot демоны тек бір қосымша үшін трафикті бағыттайтын аралық параметр жоқ.

Бинарлық үйлесімділік — бөлек қабырға

Желі жағы қызықты болса да, орындалатын файлдың өз талаптары бар: процессор архитектурасы, динамикалық жүктеуші, C кітапханасы және ол күтетін ядро мүмкіндіктері. Android glibc орнына bionic қолданады, ал жұмыс үстелі таралымына құрастырылған ескі бинар құрылғыда жоқ кітапханаларды қажет етуі мүмкін.

Кітапхана файлының атауын жаңарақ нұсқаға байлау ABI үйлесімділігін жасамайды, ал он жылдық пакеттен мұрағатталған криптографиялық кітапхана қолдау көрсетілетін құрамдас емес. Жоспар осыған тәуелді болса, жоспар — телефонда желілік артықшылықтармен қолдаусыз кодты іске қосу.

Мұны Android контекстінде дәлелдеп, кейін тазалаңыз

Шынымен маңызды нәрсені маңызды жақтан тексеріңіз: нақты қосымшаны ашыңыз, нақты жеке межеге жетіңіз, қай шешуші жауап бергенін растаңыз, сосын туннельді ажыратып, құжатталған әрекетті растаңыз. chroot ішіндегі терминалдан алынған нәтиже тек сол терминалдың орындалу контексті туралы дәлел, одан артық емес.

Тәжірибе кезінде хост маршруттарын өзгертсеңіз, оларды қайтарыңыз және нені өзгерткеніңізді жазып қойыңыз. Сосын телефонда әрдайым қосылатын VPN бар-жоғын тексеріңіз, өйткені ереже қалдырған ескі тәжірибе айлар өткен соң платформа ақауы болып көрінуі мүмкін.

Шынайы қашықтан қатынау қажеттілігі үшін қызметтің қолдайтын клиентін немесе бекітілген шлюз жобасын қолданыңыз. Сұрауға тұрарлық сұрақ — root орнатушыны іске қосуға бола ма емес, қолдау көрсетілетін іске асыру сізге керек қосымшаларды көздеген шекарадан өткізе ме және құрылғыда иесіз артықшылықты өзгерістер қалдырмай ма.

Қатысты мақалалар