Android chroot VPN: tunnel nima uchun ishlaydi va ilovalar uni nega e'tiborsiz qoldiradi
Chroot faqat yo'l qidiruvini o'zgartiradi, yadro, tarmoq nomlar fazosi yoki Android'ning VPN ro'yxatga olishini emas. Bundan ikki natija kelib chiqadi va ikkisi ham odamlarni hayratga soladi.
Telefonda chroot ostida ishlaydigan Linux tarqatmasini ishga tushirasiz, ichiga VPN mijozi o'rnatasiz va shell tunnel tayyorligini e'lon qiladi. Keyin brauzerga o'tasiz va trafik hech narsa bo'lmagandek mobil ma'lumot orqali chiqadi. Yoki aksincha: mijoz Android haqiqatda ishlatadigan nomlar fazosiga standart marshrut qo'shgani uchun telefondagi har bir ilova ulanishni yo'qotadi. Ikkala belgi ham bir xil yetishmayotgan qismdan keladi va ikkisi ham VPN mijozidagi xato emas.
Shell ulandi deydi, ilovalar rozi emas
Birinchi natija odatiy. Chroot'dan ochilgan foydalanuvchi fazosi tunneli qo'l berib ko'rishni tugatishi, statistikasini chop etishi va o'sha shell yaratadigan trafikni tashishi mumkin, ammo Android ilovalari telefonning standart tarmog'idan foydalanishda davom etadi. Hech narsa ularni ushlamaydi, chunki hech narsa Android'ga VPN borligini aytmagan.
Ikkinchi natija xavfli. Agar chroot Android'ning tarmoq nomlar fazosini bo'lishsa, bu standart holat, yetarli imtiyozga ega jarayon butun telefonga ta'sir qiladigan marshrutlar va TUN interfeysini qo'shishi mumkin. Shunda tunnel har bir ilova uchun ishlaydi, siz marshrutlashni niyat qilmagan ilovalar ham, va telefon aloqasi endi hayot tsikli boshqaruvi, ulanish ko'rsatkichi va doim yoniq siyosati bo'lmagan demonlarga bog'liq bo'ladi.
Qaysi birini olganingizni bitta buyruq bilan aniqlash mumkin. Chroot ichidagi ip route ni tashqaridagi Android shell'dan o'sha buyruq bilan solishtiring. Bir xil chiqish chroot xost nomlar fazosida ekanini bildiradi: u qiladigan har qanday tarmoq o'zgarishi butun telefonga tegishli. Boshqacha chiqish esa ishga tushiruvchi unga nomlar fazosi yaratganini va tunnel Android uchun tuzilishi jihatidan ko'rinmasligini bildiradi.
Chroot nimani o'zgartirdi va nimani o'zgartirmadi
| 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 |
Chroot tizim chaqiruvi bitta ish qiladi: yo'l nomlarini hal qilishda ishlatiladigan katalogni o'zgartiradi. Man sahifasi bu xavfsizlik chegarasi emasligini aniq aytadi va interfeyslar, marshrutlar yoki VPN holati haqida hech narsa demaydi. Odamlar Linux konteyneridan kutadigan hamma narsa — shaxsiy tarmoq steki, filtrlangan fayl tizimi, resurs cheklovlari — ishga tushiruvchi ishlatgan yoki ishlatmagan boshqa mexanizmlardan keladi.
Shuning uchun chroot VPN'ni izolyatsiya qiladi degan da'volar odatda noto'g'ri savolga javob beradi. Tegishli savol jarayon qaysi nomlar fazosida ishlaydi va qaysi SELinux domeni bilan cheklangan, va ikkisi ham qanday ishga tushirilganiga xos xususiyat, chroot so'ziga emas.
TUN uchta narsani talab qiladi va qurilma tuguni faqat bittasi
An'anaviy foydalanuvchi fazosi tunneli ocha oladigan TUN qurilmasi, shu qurilma uchun yadro qo'llab-quvvatlashi va interfeys hamda marshrutlarni sozlash ruxsatini talab qiladi. Bular alohida talablar va /dev ostida yo'l nomi yaratish ularning hech birini o'zi bajarmaydi:
ls -l /dev/net/tun
ip tuntap add dev tun0 mode tun
Android'da yadroda odatda TUN qo'llab-quvvatlashi kompilyatsiya qilingan, chunki platformaning o'z VPN xizmati undan foydalanadi, lekin bu sizning jarayoningiz undan foydalanishi mumkin degani emas. Interfeys sozlash tarmoq administratsiyasi qobiliyatini talab qiladi va SELinux jarayon qurilma tuguniga umuman yeta oladimi-yo'qmi shuni hal qiladi. Rad etish aniq sababsiz ruxsat xatosi kabi ko'rinadi va javob audit yozuvida bo'ladi:
dmesg | grep avc
logcat -d | grep "avc: denied"
Root buni hal qilmaydi. SELinux uid 0 sifatida ishlaydigan jarayonlarni boshqalar kabi cheklaydi, shuning uchun root shell'dan boshlangan chroot ham o'zi ko'radigan qurilmadan rad etilishi mumkin. Eski o'rnatuvchi ishlashi uchun majburlashni o'chirish tunneldan ancha uzoq oqibatlarga ega butun telefon qarori va eskirgan binar faylning tuzatishi emas.
Android ilovalari tunnelingizni nega e'tiborsiz qoldiradi
Android'ning qo'llab-quvvatlanadigan modeli — platformaning VPN xizmati orqali ro'yxatdan o'tadigan, foydalanuvchidan bir marta rozilik so'raydigan va o'z tunneli uchun fayl deskriptorini oladigan VPN ilovasi. Keyin platforma trafikni o'sha deskriptorga yo'naltiradi va foydalanuvchi yoki administrator tanlagan ilova doirasini ijro etadi; shuning uchun bir xil mexanizm har bir ilova, har bir profil uchun bo'lishi va doim yoniq hamda VPN'siz bloklash sozlamalari bilan birlashtirilishi mumkin. Android VPN ishlab chiqish qo'llanmasi o'sha qo'l berib ko'rishni tasvirlaydi va asosiy fikr shuki, bu ro'yxatga olish, marshrutlash hiylasi emas.
Chroot ichidagi demon hech qachon ro'yxatdan o'tmaydi. Rozilik muloqoti yo'q, holat satrida kalit belgisi yo'q, har bir ilova uchun qo'shish yoki chiqarib tashlash ro'yxati yo'q va doim yoniq siyosatda ishtirok yo'q. Shuning uchun ilovalar standart tarmoqdan foydalanadi va tunnel faqat shell o'zi yuborganini tashiydi.
Boshqa tomonga ketish ham yordam bermaydi. Marshrutlarni xost nomlar fazosiga surish hamma narsani ushlaydi, platforma mahalliy saqlashni kutgan trafikni ham, va buni har bir ilova nazoratisiz hamda foydalanuvchi ko'ra olmaydigan yoki bekor qila olmaydigan tarzda qiladi. Chroot demon faqat bitta ilova uchun trafikni marshrutlaydigan oraliq sozlama yo'q.
Binar moslik alohida devor
Tarmoq tomoni qiziqarli bo'lsa ham, bajariladigan faylning o'z talablari bor: CPU arxitekturasi, dinamik yuklagich, C kutubxonasi va u kutgan yadro imkoniyatlari. Android glibc o'rniga bionic ishlatadi va ish stoli tarqatmasi uchun qurilgan eski binar qurilmada endi yo'q kutubxonalarni talab qilishi mumkin.
Kutubxona fayl nomini yangi versiyaga ramziy bog'lash ABI mosligini yaratmaydi, o'n yillik paketdan arxivlangan kriptografik kutubxona esa qo'llab-quvvatlanadigan komponent emas. Agar reja shunga tayansa, reja telefonda tarmoq imtiyozlari bilan qo'llab-quvvatlanmaydigan kod ishga tushirishdir.
Android kontekstida isbotlang va keyin tozalang
Sizga haqiqatan muhim narsani muhim tomondan sinang: aniq ilovani oching, aniq shaxsiy manzilga yeting, qaysi hal qiluvchi javob berganini tasdiqlang, keyin tunnelni uzing va hujjatlashtirilgan xatti-harakatni tasdiqlang. Chroot ichidagi terminaldan olingan natija faqat o'sha terminalning ijro konteksti haqida dalil, undan ortiq emas.
Tajriba paytida xost marshrutlarini o'zgartirgan bo'lsangiz, ularni qaytaring va nima o'zgartirganingizni yozib qo'ying. Keyin telefonda doim yoniq VPN sozlanganmi-yo'qmi tekshiring, chunki qoida qoldirgan eski tajriba oylar o'tib platforma nosozligidek ko'rinishi mumkin.
Haqiqiy masofaviy kirish ehtiyoji uchun xizmatning qo'llab-quvvatlanadigan mijozini yoki tasdiqlangan shlyuz dizaynini ishlating. So'rashga arziydigan savol root qilingan o'rnatuvchini ishga tushirish mumkinmi emas, balki qo'llab-quvvatlanadigan amalga oshirish kerakli ilovalarni siz ko'zda tutgan chegara orqali olib o'tadimi, qurilmada egasiz imtiyozli o'zgarishlar qoldirmasdan.