Телефондо 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 орнотуучуну иштетсе болобу эмес, колдоого алынган ишке ашыруу сизге керектүү колдонмолорду көздөгөн чектен өткөрөбү жана түзмөктө ээсиз артыкчылыктуу өзгөртүүлөрдү калтырбайбы.

Тектеш макалалар