Jailbreak Detection میکانزم کا ایک مجموعہ ہے جو iOS ڈیوائس پر جیل بریک کی موجودگی کا پتہ لگاتا ہے اور ایپلیکیشن کو محدودیتوں سے پاک ماحول میں چلنے سے روکتا ہے۔ جیل بریک سینڈ باکس کے باہر فائل سسٹم تک رسائی فراہم کرتا ہے، جس سے تبدیل شدہ لائبریریاں انسٹال کرنا اور سسٹم کالز کو روکنا ممکن ہوتا ہے۔ Apple Security Documentation (2024) کے مطابق، جیل بریک شدہ ڈیوائسز Secure Boot سیکیورٹی ماڈل کی تعمیل نہیں کرتی ہیں۔ Jailbreak Detection فائل انڈیکیٹر کی جانچ، رن ٹائم کال تجزیہ اور سینڈ باکس دستخط کی سالمیت کی تصدیق کو یکجا کرتا ہے۔
اہم نکات
Jailbreak Detection ان iOS ڈیوائسز کی شناخت کا عمل ہے جن سے آپریٹنگ سسٹم کی پابندیاں ہٹا دی گئی ہیں۔ جیل بریک iOS کرنل میں تبدیلی کرتا ہے، کوڈ سائننگ کو غیر فعال کرتا ہے، مکمل فائل سسٹم تک رسائی فراہم کرتا ہے اور غیر مجاز لائبریریاں لوڈ کرنے کی اجازت دیتا ہے۔ ایسے ڈیوائس پر چلنے والی ایپلیکیشن کے لیے، رن ٹائم ماحول کی سالمیت کی کوئی گارنٹی نہیں ہے: کوئی بھی عمل ایپلیکیشن کی میموری پڑھ سکتا ہے، سسٹم ٹرسٹ اسٹور میں اپنے سرٹیفکیٹ انسٹال کرکے SSL/TLS ٹریفک کو روک سکتا ہے، اور Cydia Substrate یا Substitute کے ذریعے کوڈ انجیکٹ کر سکتا ہے۔
iOS پر مالیاتی ایپلیکیشنز PCI DSS معیارات کے مطابق Jailbreak Detection لاگو کرنے کی پابند ہیں — تصدیق کے لیے، ایپلیکیشن کو یہ ثابت کرنا ہوگا کہ وہ کسی سمجھوتہ شدہ ڈیوائس پر نہیں چل رہی ہے۔ OWASP Mobile Security (2024) Jailbreak Detection کی عدم موجودگی کو M8 کمزوری کے طور پر درجہ بندی کرتا ہے۔ App Store ایپلیکیشنز کے لیے، Apple جیل بریک شدہ ڈیوائسز پر فعالیت کو مسدود کرنے سے منع نہیں کرتا، لیکن کلائنٹ کوڈ پر صرف انحصار نہ کرنے کے لیے کلائنٹ سائڈ اور سرور سائڈ جانچ کو یکجا کرنے کی سفارش کرتا ہے جسے تبدیل کیا جا سکتا ہے۔
سینڈ باکس ماڈل کی وجہ سے iOS پر Jailbreak Detection کا آرکیٹیکچر Android پر Root Detection سے زیادہ پیچیدہ ہے۔ Android پر، ایک ایپلیکیشن سسٹم کا تجزیہ کرنے کے لیے /proc پڑھ سکتی ہے۔ iOS سینڈ باکس زیادہ تر سسٹم انڈیکیٹرز تک براہ راست رسائی کو روکتا ہے۔ ڈویلپرز canAccessFile API کے ذریعے محدود زونوں میں فائل کی دستیابی کی جانچ کرنے یا fork() کے ذریعے چائلڈ پروسیس شروع کرنے جیسی متبادل تکنیک استعمال کرنے پر مجبور ہیں۔ جدید جانچ صرف جیل بریک کے تحت دستیاب کارروائیوں کی کوشش کرنے اور نتیجہ کا تجزیہ کرنے پر مبنی ہے۔
سب سے آسان اور تاریخی طور پر پہلا طریقہ ان فائلوں اور ایپلیکیشنز کی موجودگی کی جانچ کرنا ہے جو صرف جیل بریک شدہ ڈیوائسز پر انسٹال ہوتی ہیں۔ سادگی کے باوجود، فائل کی جانچ دفاع کی ایک بنیادی تہہ بنی ہوئی ہے، کیونکہ انہیں نظرانداز کرنے کے لیے صارف کی فعال کارروائی کی ضرورت ہوتی ہے۔
جیل بریک شدہ ڈیوائس پر، Cydia، Sileo، Zebra یا Installer جیسی ایپلیکیشنز موجود ہوتی ہیں۔ ان کی موجودگی NSFileManager کے ذریعے جانچی جاتی ہے: [[NSFileManager defaultManager] fileExistsAtPath:@"/Applications/Cydia.app"]۔ unc0ver، checkra1n، Taurine اور Chimera کے پیکجز اسی طرح جانچے جاتے ہیں۔ یہ جانچیں HideJB ٹویکس کے ذریعے نظرانداز کی جا سکتی ہیں جو NSFileManager کالز کو روکتی ہیں۔
جیل بریک اسٹاک iOS میں دستیاب نہ ہونے والی UNIX یوٹیلیٹیز انسٹال کرتا ہے: apt، dpkg، ssh، rsync، sftp، dd، readlink اور دیگر۔ /usr/bin/ssh، /bin/bash، /bin/sh اور /usr/libexec/sftp-server کے وجود کی جانچ کی جاتی ہے۔ اگر ان میں سے کوئی بھی فائل کامیابی سے دریافت ہو جائے تو جیل بریک کا امکان زیادہ ہے۔ iOS 13–17 کے لیے، /var/jb کی موجودگی کی جانچ کرنا بھی متعلقہ ہے — unc0ver اور Taurine کے لیے بوٹسٹریپ روٹ ڈائریکٹری۔
MobileSubstrate (CydiaSubstrate.dylib) اور Substitute عمل میں کوڈ انجیکشن کے لیے لائبریریاں ہیں۔ ان کی موجودگی RTLD_NOLOAD پرچم کے ساتھ dlopen() کے ذریعے جانچی جاتی ہے۔ اگر لائبریری ایڈریس اسپیس میں لوڈ ہے — تو عمل جیل بریک والے ماحول میں چل رہا ہے۔ یہ زیادہ قابل اعتماد جانچ ہے، کیونکہ HideJB کسی عمل میں پہلے سے لوڈ لائبریری کو ان لوڈ نہیں کر سکتا۔
- (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;
}
متحرک جانچیں iOS سینڈ باکس میں ممنوع کارروائیاں انجام دیتی ہیں اور نتیجہ کا تجزیہ کرتی ہیں۔ اگر کارروائی مسدود نہیں ہوتی — تو ڈیوائس ممکنہ طور پر جیل بریک شدہ ہے۔
اسٹاک iOS میں، fork() کال errno = EPERM کے ساتھ -1 لوٹاتی ہے۔ جیل بریک شدہ ڈیوائس پر، fork() کامیاب ہو سکتی ہے کیونکہ سینڈ باکس کی پابندیاں ہٹا دی گئی ہیں۔ یہ جانچ قابل اعتماد ہے لیکن iOS کے کچھ ورژنز پر غلط مثبت نتائج دے سکتی ہے۔ fork() کو چائلڈ پروسیس شروع کرنے کی صلاحیت جانچنے کے لیے posix_spawn() سے بھی تبدیل کیا جا سکتا ہے۔
محدود زونوں میں فائلیں پڑھنے کی کوشش: /etc/master.passwd، /var/log/system.log، /private/var/cache۔ اسٹاک iOS میں، یہ پڑھنا غلطی لوٹاتا ہے۔ اگر ایپلیکیشن کامیابی سے یہ فائلیں پڑھ لے — تو سینڈ باکس غیر فعال ہے۔ مزید برآں، /private/ میں لکھنے کی صلاحیت جانچی جاتی ہے — سینڈ باکس میں، تمام سسٹم پارٹیشنز عام ایپلیکیشنز کے لیے صرف پڑھنے کے قابل ہوتی ہیں۔
جیل بریک سسٹم لائبریریوں میں تبدیلی کرتا ہے، بشمول dyld مشترکہ کیشے۔ سسٹم فریم ورک یا انفرادی علامتوں کے ہیش کی جانچ تبدیلی کو ظاہر کر سکتی ہے۔ iOS 14+ کے لیے، sysctl kern.version پڑھ کر کرنل ایڈریس اسپیس میں jit_region_create علامت یا Fugu14/checkra1n آپریشن کے دیگر نشانات کی موجودگی کی جانچ کی جاتی ہے۔
- (BOOL)isJailbrokenByRuntime {
// fork() کی جانچ
int pid = fork();
if (pid == 0) {
exit(0);
}
if (pid > 0) {
waitpid(pid, NULL, 0);
return YES;
}
// سسٹم فائلوں تک رسائی کی جانچ
FILE *f = fopen("/etc/master.passwd", "r");
if (f) {
fclose(f);
return YES;
}
// sysctl kern.version کی جانچ
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 کوڈ آسانی سے ڈی اسمبل اور Substrate کے ذریعے نظرانداز کیا جاتا ہے۔ libobjc اور C سسٹم فنکشنز میں براہ راست کالز کے ساتھ Objective-C میں مقامی نفاذ جانچ کو نظرانداز کرنے کے لیے نمایاں طور پر زیادہ مزاحم بناتا ہے۔
libc سے stat() کال کو Objective-C سطح پر روکا نہیں جا سکتا۔ NSFileManager طریقوں کو روکنے والے HideJB ٹویکس stat() کو متاثر نہیں کرتے۔ stat() استعمال کرنے والی مقامی جانچ HideJB ماڈیولز انسٹال ڈیوائسز پر بھی فائل انڈیکیٹرز کا پتہ لگاتی ہے۔ فائلوں کے لیے stat() اور لائبریریوں کے لیے RTLD_NOLOAD کے ساتھ dlopen() کا امتزاج دو غیر اوورلیپنگ پتہ لگانے والے چینل فراہم کرتا ہے۔
مقامی فنکشن SecStaticCodeCheckValidity Apple سرٹیفکیٹ کے مقابلے ایپلیکیشن کے کوڈ دستخط کی تصدیق کرتا ہے۔ جیل بریک شدہ ڈیوائس پر، یہ جانچ کرنل پیچ کے ذریعے جعلی ہو سکتی ہے۔ جعلی سے بچنے کے لیے، جانچ Swift Bridge کے بجائے Security.framework سے dlopen() کے ذریعے کال کے ساتھ مقامی کوڈ سے کی جانی چاہیے۔
#import <sys/stat.h>
#import <dlfcn.h>
- (BOOL)nativeCheckForJailbreak {
// stat() NSFileManager ہک کو نظرانداز کر رہا ہے
struct stat st;
if (stat("/Applications/Cydia.app", &st) == 0) {
return YES;
}
// لوڈ کیے بغیر Substrate کی جانچ کے لیے dlopen
void *substrate = dlopen(
"/Library/MobileSubstrate/MobileSubstrate.dylib",
RTLD_NOLOAD
);
if (substrate) {
dlclose(substrate);
return YES;
}
return NO;
}
مضبوط تحفظ بنانے کے لیے نظرانداز کی تکنیکوں کو سمجھنا ضروری ہے۔ جدید نظرانداز کے اوزار فعال طور پر تیار ہو رہے ہیں، اور جانچ کا ایک جامد سیٹ مہینوں میں غیر موثر ہو جاتا ہے۔
HideJB ایک ٹویک ہے جو NSFileManager، stat()، dlopen() اور fork() پر کالز کو روکتا ہے اور واپسی کی قدروں کو بدل دیتا ہے۔ HideJB Cydia Substrate سطح پر کام کرتا ہے، Objective-C اور C دونوں فنکشنز کو روکتا ہے۔ iOS 15–16 کے لیے HideJB (Shadow) کا ورژن کرنل سطح کے ہک طریقہ کار کا استعمال کرتا ہے۔ جوابی اقدام: ہک چین کو توڑنے کے لیے IPC کے ذریعے نتیجہ کی ترسیل کے ساتھ ایک علیحدہ عمل میں جانچ کریں۔
Choicy مخصوص عمل کے لیے Substrate کو غیر فعال کرنے کی اجازت دیتا ہے۔ صارف محفوظ ایپلیکیشن کے لیے انجیکشن بند کر دیتا ہے — تمام لائبریری جانچیں false لوٹاتی ہیں۔ Liberty Lite ایک جامع نظرانداز ہے جو مشہور تحفظ لائبریریوں کی زیادہ تر جانچوں کا احاطہ کرتا ہے۔ جوابی اقدام: DeviceCheck اور App Attest کے ذریعے سرور سائڈ تصدیق — سرور تصدیق کرتا ہے کہ ڈیوائس کے پاس ایک درست Apple سرٹیفکیٹ ہے جو جیل بریک شدہ ڈیوائس پر جعلی نہیں بنایا جا سکتا۔
Fugu14 اور KFD جیسے کرنل استحصال کرنل اسپیس میں کوڈ انجام دیتے ہیں، جس سے ایپلیکیشن کے دیکھنے سے پہلے سسٹم کالز کو روکنا ممکن ہوتا ہے۔ اس سطح پر، stat() اور fork() کی جانچ غیر موثر ہو جاتی ہے۔ واحد قابل اعتماد جوابی اقدام سرور سائڈ تصدیق ہے جس میں یہ یقینی بنایا جاتا ہے کہ ڈیوائس Apple Attestation کے عمل سے گزری ہے۔ یہ پروٹوکول Secure Enclave کے اندر کرپٹوگرافک کلیدوں پر مبنی ہے، جو کرنل سطح کے استحصال سے بھی ناقابل پڑھنے والی ہیں۔
مؤثر Jailbreak Detection بنانے کے لیے یہ سمجھنا ضروری ہے کہ جیل بریک کے دوران iOS کے کون سے سیکیورٹی میکانزم غیر فعال ہو جاتے ہیں۔
iOS دستخطی جانچ کے ایک سلسلے کے ذریعے بوٹ ہوتا ہے: Boot ROM → iBoot → iOS Kernel۔ اگر جیل بریک bootrom استحصال (checkra1n) استعمال کرتا ہے، تو پوری محفوظ بوٹ چین سے سمجھوتہ ہو جاتا ہے — ایپلیکیشن سطح کی جانچیں بیکار ہیں۔ اگر صرف سافٹ ویئر استحصال (unc0ver، Taurine، Fugu14) استعمال کیا جاتا ہے، تو بوٹ چین نہیں ٹوٹتی ہے اور App Attest جیسی Apple خدمات قابل اعتماد رہتی ہیں۔
iOS 10 سے شروع کرتے ہوئے، Apple نے KPP متعارف کرایا — ہارڈویئر تحفظ جو ہر 200 ms میں کرنل کی سالمیت کی دوبارہ تصدیق کرتا ہے۔ تمام جدید جیل بریک (iOS 14–17) PAC یا APRR کے ذریعے KTRR نظرانداز استعمال کرتے ہیں، لیکن KPP تبدیل شدہ sysctl سسٹم ٹیبلز کی شکل میں نشانات چھوڑتا ہے۔ pwned، prod، یا غیر معیاری ورژن والے xnu جیسی سٹرنگز کی موجودگی کے لیے kern.version کی جانچ کرنے سے کرنل پیچ ظاہر ہو سکتا ہے۔
iOS سینڈ باکس entitlements استعمال کرتے ہوئے TrustedBSD سطح پر کام کرتا ہے۔ جیل بریک سینڈ باکس پروفائل کو allow-all سے بدل دیتا ہے۔ ایک ایپلیکیشن اپنی Documents ڈائریکٹری سے باہر کسی بھی فائل کو پڑھنے کی کوشش کر کے سینڈ باکس کی تصدیق کر سکتی ہے۔ اگر کامیاب ہو — تو سینڈ باکس تبدیل کر دیا گیا ہے۔ سینڈ باکس سالمیت ان چند انڈیکیٹرز میں سے ایک ہے جسے کرنل سطح کے استحصال کے بغیر جعلی نہیں بنایا جا سکتا، کیونکہ اجازت کی جانچ کرنل میں اس سے پہلے کی جاتی ہے کہ اسے روکا جا سکے۔
اکثر پوچھے گئے سوالات
Android کے لیے Root Detection su بائنری اور Magisk کی موجودگی کی جانچ کرتا ہے۔ iOS کے لیے Jailbreak Detection Cydia، Sileo، MobileSubstrate کو تلاش کرتا ہے، fork() انجام دینے کی صلاحیت کی جانچ کرتا ہے اور سسٹم فائلیں پڑھتا ہے۔ iOS سینڈ باکس آرکیٹیکچر Android سے زیادہ سخت ہے، اس لیے iOS کی جانچیں سسٹم انڈیکیٹرز پڑھنے کے بجائے ممنوع کارروائیاں انجام دینے کی کوشش پر زیادہ انحصار کرتی ہیں۔
ہاں، iOS 16–17 کے لیے Dopamine، palera1n اور checkra1n جیل بریک متعلقہ ہیں۔ Jailbreak Detection کام کرتا ہے لیکن نئے ٹولز کے لیے جانچ کو اپ ڈیٹ کرنے کی ضرورت ہوتی ہے۔ iOS 17 میں، Apple نے سینڈ باکس کو مضبوط کیا، اور XNU میں تبدیلیوں کی وجہ سے بہت سی پرانی جانچیں (مثال کے طور پر، fork()) ناقابل اعتبار ہو گئی ہیں۔
سب سے آسان طریقہ HideJB یا Shadow ہے، جو لائبریری سطح پر جانچ کو روکتے ہیں۔ زیادہ پیچیدہ تحفظ کے لیے، کسی مخصوص ایپلیکیشن کے لیے انجیکشن غیر فعال کرنے کے لیے Frida یا Choicy استعمال کیا جاتا ہے۔ سرور سائڈ تصدیق (App Attest) کو صرف Secure Enclave ہارڈویئر کلید کو تبدیل کرنے والے کرنل سطح کے استحصال کے ذریعے نظرانداز کیا جا سکتا ہے، جو عملی طور پر ناممکن ہے۔
جیل بریک شدہ ڈیوائس پر کسی بھی ایپلیکیشن کو ان کا سامنا ہو سکتا ہے: قابل اعتماد اسٹور میں تبدیلی کے ذریعے SSL ٹریفک کی روک تھام، فائل سسٹم تک رسائی کے ذریعے Keychain پڑھنا، ٹوکن ہینڈلنگ کے طریقوں کی روک تھام کے ساتھ Substrate کے ذریعے کوڈ انجیکشن، اور خفیہ کاری کی چابیاں حاصل کرنے کے لیے میموری ڈمپنگ۔
App Attest ایپلیکیشن اور ڈیوائس کی سالمیت کی تصدیق کے لیے Apple کی خدمت ہے۔ شروع ہونے پر، ایپلیکیشن Apple سرور سے تصدیقی چیلنج وصول کرتی ہے، اسے Secure Enclave سے نجی کلید کے ساتھ دستخط کرتی ہے اور اپنے سرور کو بھیجتی ہے۔ اگر ڈیوائس جیل بریک شدہ ہے تو Secure Enclave تصدیقی ناکامی لوٹاتا ہے، جو محفوظ فنکشنز تک رسائی کو روکتا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں