Jailbreak Detection — iOS qurilmasida jeylbrek mavjudligini aniqlaydigan va ilovani cheklovlar olib tashlangan muhitda ishga tushishining oldini oladigan mexanizmlar to'plamidir. Jeylbrek qum qutisidan tashqarida fayl tizimiga kirish imkonini beradi, o'zgartirilgan kutubxonalarni o'rnatish va tizim chaqiruvlarini tutib olishga ruxsat beradi. Apple Security Documentation (2024) ma'lumotlariga ko'ra, jeylbrekli qurilmalar Secure Boot xavfsiz yuklash modeliga mos kelmaydi. Jailbreak Detection fayl ko'rsatkichlarini tekshirish, chaqiruvlarni ish vaqti tahlili va sandbox imzosining yaxlitligi nazoratini birlashtiradi.
Asosiy ma'lumotlar
Jailbreak Detection — operatsion tizim cheklovlari olib tashlangan iOS qurilmalarini identifikatsiya qilish jarayoni. Jeylbrek iOS yadrosini o'zgartiradi, kod imzosini o'chiradi, to'liq fayl tizimiga kirishni ta'minlaydi va ruxsatsiz kutubxonalarni yuklashga imkon beradi. Bunday qurilmada ishlaydigan ilova uchun bajarish muhitining yaxlitligi kafolatlanmaydi: har qanday jarayon ilova xotirasini o'qishi, tizim sertifikatlar omboriga o'z sertifikatlarini o'rnatish orqali SSL/TLS trafigini tutib olishi va Cydia Substrate yoki Substitute orqali kod inyeksiyasini amalga oshirishi mumkin.
iOS ostidagi moliyaviy ilovalar PCI DSS standarti talablariga muvofiq Jailbreak Detection ni joriy qilishi shart — sertifikatsiya uchun ilova buzilgan qurilmada ishlamasligini isbotlashi kerak. OWASP Mobile Security (2024) Jailbreak Detection ning yo'qligini M8 zaifligi sifatida tasniflaydi. App Store ilovalari uchun Apple jeylbrekli qurilmalarda funksionallikni bloklashni taqiqlamaydi, biroq o'zgartirilishi mumkin bo'lgan mijoz kodiga to'liq ishonmaslik uchun mijoz tomoni va server tekshiruvlarini birlashtirishni tavsiya qiladi.
iOS da Jailbreak Detection arxitekturasi sandbox modeli tufayli Android dagi Root Detection dan murakkabroq. Android da ilova tizimni tahlil qilish uchun /proc ni o'qishi mumkin. iOS qum qutisi (sandbox) ko'pchilik tizim ko'rsatkichlariga to'g'ridan-to'g'ri kirishni bloklaydi. Dasturchilar canAccessFile API orqali taqiqlangan zonalarda fayllarning mavjudligini tekshirish yoki fork() orqali bolajara yonlarini ishga tushirish bilan chiqish kodini tekshirish kabi chetlab o'tish texnikalaridan foydalanishga majbur. Zamonaviy tekshiruvlar faqat jeylbrek vaqtida mumkin bo'lgan harakatlarni bajarishga urinish va natijani tahlil qilishga asoslanadi.
Eng sodda va tarixan birinchi yondashuv — faqat jeylbrekli qurilmalarda o'rnatiladigan fayl va ilovalarning mavjudligini tekshirish. Oddiyligiga qaramay, fayl tekshiruvlari asosiy himoya qatlami bo'lib qoladi, chunki ularni chetlab o'tish foydalanuvchidan faol harakatlarni talab qiladi.
Jeylbrekli qurilmada Cydia, Sileo, Zebra yoki Installer ilovalari mavjud. Ularning borligi NSFileManager orqali tekshiriladi: [[NSFileManager defaultManager] fileExistsAtPath:@"/Applications/Cydia.app"]. Xuddi shunday unc0ver, checkra1n, Taurine va Chimera paketlari tekshiriladi. Bu tekshiruvlar NSFileManager chaqiruvlarini tutib oladigan HideJB tweaklari orqali chetlab o'tiladi.
Jeylbreek stock iOS da mavjud bo'lmagan UNIX vositalarini o'rnatadi: apt, dpkg, ssh, rsync, sftp, dd, readlink va boshqalar. /usr/bin/ssh, /bin/bash, /bin/sh va /usr/libexec/sftp-server mavjudligi tekshiriladi. Ushbu fayllardan biri topilganda, jeylbrek ehtimoli yuqori. iOS 13-17 uchun shuningdek /var/jb — unc0ver va Taurine uchun bootstrap ildiz katalogining mavjudligini tekshirish dolzarbdir.
MobileSubstrate (CydiaSubstrate.dylib) va Substitute — jarayonlarga kod inyeksiyasi uchun kutubxonalar. Ularning mavjudligi RTLD_NOLOAD bayrog'i bilan dlopen() orqali tekshiriladi. Agar kutubxona manzil maydoniga yuklangan bo'lsa — jarayon jeylbrek muhitida ishlaydi. Bu ishonchli tekshiruv, chunki HideJB jarayonga allaqachon yuklangan kutubxonani tushira olmaydi.
- (BOOL)isJailbrokenByFiles {
NSArray *paths = @[
@"/Applications/Cydia.app",
@"/Applications/Sileo.app",
@"/Applications/Zebra.app",
@"/usr/bin/ssh",
@"/bin/bash",
@"/var/jb",
@"/etc/apt"
];
for (NSString *path in paths) {
if ([[NSFileManager defaultManager]
fileExistsAtPath:path]) {
return YES;
}
}
return NO;
}
- (BOOL)isSubstrateLoaded {
void *handle = dlopen(
"/Library/MobileSubstrate/MobileSubstrate.dylib",
RTLD_NOLOAD | RTLD_LAZY
);
if (handle) {
dlclose(handle);
return YES;
}
return NO;
}
Dinamik tekshiruvlar iOS qum qutisida taqiqlangan harakatlarni bajaradi va natijani tahlil qiladi. Agar harakat bloklanmagan bo'lsa — qurilma katta ehtimol bilan jeylbreklidir.
Stock iOS da fork() chaqiruvi errno = EPERM bilan -1 qaytaradi. Jeylbrekli qurilmada fork() bajarilishi mumkin, chunki qum qutisi cheklovlari olib tashlangan. Bu tekshiruv ishonchli, ammo ba'zi iOS versiyalarida noto'g'ri ijobiy natijalar berishi mumkin. fork() shuningdek bolajara yonini ishga tushirish imkoniyatini tekshirish uchun posix_spawn() bilan almashtirilishi mumkin.
Taqiqlangan zonalarda fayllarni o'qishga urinish: /etc/master.passwd, /var/log/system.log, /private/var/cache. Stock iOS da bu o'qishlar xato qaytaradi. Agar ilova bu fayllarni muvaffaqiyatli o'qisa — sandbox o'chirilgan. Qo'shimcha ravishda /private/ ga yozish imkoniyati tekshiriladi — qum qutisida barcha tizim bo'limlari oddiy ilovalar uchun faqat o'qish uchun o'rnatilgan.
Jeylbreek tizim kutubxonalarini, jumladan dyld shared cache ni o'zgartiradi. Tizim freymvorklarining yoki alohida simvollarning xeshini tekshirish o'zgarishni aniqlashi mumkin. iOS 14+ uchun jit_region_create simvolining yoki Fugu14/checkra1n belgilarining sysctl kern.version ni o'qish orqali yadro manzil maydonida mavjudligi tekshiriladi.
- (BOOL)isJailbrokenByRuntime {
// fork() tekshiruvi
int pid = fork();
if (pid == 0) {
exit(0);
}
if (pid > 0) {
waitpid(pid, NULL, 0);
return YES;
}
// Tizim fayllariga kirishni tekshirish
FILE *f = fopen("/etc/master.passwd", "r");
if (f) {
fclose(f);
return YES;
}
// sysctl kern.version tekshiruvi
size_t size = 0;
sysctlbyname("kern.version", NULL, &size, NULL, 0);
if (size > 0) {
char *version = malloc(size);
sysctlbyname("kern.version", version, &size, NULL, 0);
NSString *str = [NSString stringWithUTF8String:version];
free(version);
if ([str containsString:"pwned"]) {
return YES;
}
}
return NO;
}
Swift kodi osonlik bilan deassemlanadi va Substrate orqali chetlab o'tiladi. libobjc va C tizim funksiyalarining to'g'ridan-to'g'ri chaqiruvlari bilan Objective-C da nativ tatbiq tekshiruvlarni chetlab o'tishga nisbatan sezilarli darajada chidamli qiladi.
libc dan stat() chaqiruvi Objective-C darajasida tutib olinmaydi. NSFileManager metodlarini tutib oladigan HideJB tweaklari stat() ga ta'sir qilmaydi. stat() bilan nativ tekshiruv o'rnatilgan HideJB modullari bo'lgan qurilmalarda ham fayl ko'rsatkichlarini aniqlaydi. Fayllar uchun stat() va kutubxonalar uchun RTLD_NOLOAD bilan dlopen() kombinatsiyasi ikkita kesishmaydigan aniqlash kanalini beradi.
SecStaticCodeCheckValidity nativ funksiyasi ilova kod imzosining Apple sertifikatiga mosligini tekshiradi. Jeylbrekli qurilmada bu tekshiruv kernel-patch orqali almashtirilishi mumkin. Almashtirishning oldini olish uchun tekshiruv Swift Bridge orqali emas, Security.framework dan dlopen() orqali chaqiruv bilan nativ koddan amalga oshirilishi kerak.
#import <sys/stat.h>
#import <dlfcn.h>
- (BOOL)nativeCheckForJailbreak {
// stat() NSFileManager hook-dan chetlab o'tish
struct stat st;
if (stat("/Applications/Cydia.app", &st) == 0) {
return YES;
}
// Yuklamasdan Substratni tekshirish uchun dlopen
void *substrate = dlopen(
"/Library/MobileSubstrate/MobileSubstrate.dylib",
RTLD_NOLOAD
);
if (substrate) {
dlclose(substrate);
return YES;
}
return NO;
}
Chetlab o'tish texnikalarini tushunish barqaror himoya qurish uchun muhimdir. Zamonaviy chetlab o'tish vositalari faol rivojlanmoqda va statik tekshiruvlar to'plami bir necha oy ichida samarasiz bo'ladi.
HideJB — NSFileManager, stat(), dlopen() va fork() chaqiruvlarini tutib oladigan va qaytariladigan qiymatlarni almashtiradigan tweakdir. HideJB Cydia Substrate darajasida ishlaydi, shuning uchun ham Objective-C, ham C funksiyalarini tutib oladi. iOS 15-16 uchun HideJB versiyasi (Shadow) kernel-level hook metodologiyasidan foydalanadi. Qarshi chora: tekshiruvni natijani IPC orqali uzatadigan alohida jarayonda bajarish, bu hook zanjirini uzadi.
Choicy ma'lum jarayonlar uchun Substrate ni o'chirishga imkon beradi. Foydalanuvchi himoyalangan ilova uchun inyeksiyani o'chiradi — kutubxona tekshiruvlarining barchasi false qaytaradi. Liberty Lite — mashhur himoya kutubxonalarining ko'pchilik tekshiruvlarini qamrab oluvchi kompleks chetlab o'tish vositasidir. Qarshi chora: DeviceCheck va App Attest orqali server tasdiqlash — serverda qurilmaning jeylbrekli qurilmada soxtalashtirib bo'lmaydigan haqiqiy Apple sertifikatiga ega ekanligi tekshiriladi.
Fugu14 va KFD kabi yadro eksploytlari yadro maydonida (kernel-space) kod bajaradi, bu tizim chaqiruvlarini ilova ko'rishidan oldin tutib olishga imkon beradi. Bu darajada stat() va fork() tekshiruvlari samarasiz bo'ladi. Yagona ishonchli qarshi chora — qurilmaning Apple Attestation protsedurasidan o'tganligini tekshirish bilan server attestatsiyasi. Bu protokol Secure Enclave ichidagi kriptografik kalitlarga asoslangan bo'lib, ular hatto kernel-level eksployt vaqtida ham o'qish uchun mavjud emas.
Samarali Jailbreak Detection qurish uchun jeylbrek vaqtida iOS ning qaysi xavfsizlik mexanizmlari o'chirilishini tushunish kerak.
iOS imzo tekshiruvlari ketma-ketligi orqali yuklanadi: Boot ROM → iBoot → iOS Kernel. Agar jeylbrek bootrom eksploytidan (checkra1n) foydalansa, butun Secure Boot Chain buzilgan — ilova darajasidagi tekshiruvlar foydasiz. Agar software-only eksployt (unc0ver, Taurine, Fugu14) ishlatilsa, yuklash zanjiri buzilmagan va App Attest kabi Apple xizmatlari ishonchli qoladi.
iOS 10 dan boshlab Apple KPP ni — har 200 ms da yadro yaxlitligini qayta tekshiruvchi apparat himoyasini joriy qildi. Barcha zamonaviy jeylbreklar (iOS 14-17) PAC yoki APRR orqali KTRR chetlab o'tishdan foydalanadi, ammo KPP o'zgartirilgan sysctl tizim jadvallari shaklida izlar qoldiradi. kern.version da pwned, prod yoki nostandart versiyali xnu satrlarining mavjudligini tekshirish yadro yamasi borligini aniqlashi mumkin.
iOS Sandboxi entitlements dan foydalanib TrustedBSD darajasida ishlaydi. Jeylbreek sandbox profilini allow-all bilan almashtiradi. Ilova sandboxni o'z Documents papkasidan tashqarida istalgan faylni o'qishga urinish orqali tekshirishi mumkin. Agar muvaffaqiyatli bo'lsa — sandbox o'zgartirilgan. Sandbox yaxlitligi — ruxsat tekshiruvi tutib olinishidan oldin yadroda amalga oshirilgani uchun kernel-level eksploytsiz soxtalashtirib bo'lmaydigan kam sonli ko'rsatkichlardan biridir.
Tez-tez beriladigan savollar
Root Detection Android uchun su ikkilik fayli va Magisk mavjudligini tekshiradi. Jailbreak Detection iOS uchun Cydia, Sileo, MobileSubstrate ni qidiradi, fork() imkoniyatini tekshiradi va tizim fayllarini o'qiydi. iOS Sandbox arxitekturasi Android dan qattiqroq, shuning uchun iOS tekshiruvlari tizim ko'rsatkichlarini o'qishdan ko'ra ko'proq taqiqlangan harakatlarni bajarishga urinishga asoslanadi.
Ha, iOS 16-17 uchun Dopamine, palera1n va checkra1n jeylbreklari dolzarb. Jailbreak Detection ishlaydi, ammo tekshiruvlarni yangi vositalarga mos ravishda yangilashni talab qiladi. iOS 17 da Apple sandboxni kuchaytirdi va ko'plab eski tekshiruvlar (masalan, fork()) XNU dagi o'zgarishlar sababli ishonchli bo'lishdan to'xtadi
Eng oddiy usul — kutubxona darajasida tekshiruvlarni tutib oladigan HideJB yoki Shadow. Murakkabroq himoya uchun muayyan ilova uchun inyeksiyani o'chirish bilan Frida yoki Choicy ishlatiladi. Server attestatsiyasi (App Attest) faqat Secure Enclave apparat kalitini almashtirish bilan kernel-level eksployt orqali chetlab o'tiladi, bu amalda mumkin emas.
Jeylbrekli qurilmadagi har qanday ilova quyidagilarga duchor bo'lishi mumkin: ishonchli sertifikatlar omborini o'zgartirish orqali SSL trafigini tutib olish, fayl tizimiga kirish orqali Keychain ni o'qish, tokenlar bilan ishlash metodlarini tutib olish bilan Substrate orqali kod inyeksiyasi, shifrlash kalitlarini olish uchun jarayon xotirasini dump qilish.
App Attest — Apple ning ilova va qurilma yaxlitligini tekshirish xizmati. Ishga tushganda ilova Apple serveridan attestation challenge oladi, uni Secure Enclave dan shaxsiy kalit bilan imzolaydi va o'z serveriga yuboradi. Agar qurilma jeylbrekli bo'lsa, Secure Enclave attestation failure bilan javob beradi, bu himoyalangan funksiyalarga kirishni bloklaydi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.