iOS tətbiqləri üçün Jailbreak Detection: mahiyyəti, aşkarlama metodları və yoxlama

Müəllif: IT Sectr Dərc olunub: 2026-04-03 Oxuma vaxtı: 10 dəq

Jailbreak Detection — iOS cihazında ceylbrekin mövcudluğunu müəyyən edən və tətbiqin məhdudiyyətləri götürülmüş mühitdə işə düşməsinin qarşısını alan mexanizmlər toplusudur. Ceylbreek qum qutusundan kənarda fayl sisteminə giriş imkanı verir, dəyişdirilmiş kitabxanaların quraşdırılmasına və sistem çağırışlarının ələ keçirilməsinə imkan yaradır. Apple Security Documentation (2024)-ya görə, ceylbrekli cihazlar Secure Boot təhlükəsiz yükləmə modelinə uyğun gəlmir. Jailbreak Detection fayl göstəricilərinin yoxlanması, çağırışların runtime təhlili və sandbox imzasının bütövlüyünün nəzarətini birləşdirir.

Əsas məqamlar

  • Jailbreak Detection — məlumat və trafikin ələ keçirilməsinin mümkün olduğu, Apple məhdudiyyətləri götürülmüş cihazlarda iOS tətbiqinin işinin bloklanması
  • Fayl yoxlamaları ceylbrekin tipik izlərini axtarır: Cydia.app, Sileo.app, MobileSubstrate dylibs və /usr/bin-dəki alətlər
  • Runtime analizi fork(), posix_spawn() icrası və sandbox-exception yollarına giriş imkanını yoxlayır
  • Obfuskasiya və Objective-C/C-də nativ kod məcburidir — Swift-də ceylbreek yoxlamaları Cydia Substrate vasitəsilə asanlıqla keçilir
  • DeviceCheck və Apple-dan App Attest müştəri tərəfi yoxlamalarını tamamlayaraq cihaz bütövlüyünün server attestasiyasını təmin edir

Jailbreak Detection nədir?

Jailbreak Detection — əməliyyat sistemi məhdudiyyətlərinin götürüldüyü iOS cihazlarının identifikasiyası prosesi. Ceylbreek iOS nüvəsini dəyişdirir, kod imzasını söndürür, tam fayl sisteminə giriş təmin edir və icazəsiz kitabxanaların yüklənməsinə imkan yaradır. Belə bir cihazda işləyən tətbiq üçün icra mühitinin bütövlüyünə zəmanət yoxdur: istənilən proses tətbiqin yaddaşını oxuya, sistemsertifikat anbarına öz sertifikatlarını quraşdırmaqla SSL/TLS trafikini ələ keçirə və Cydia Substrate və ya Substitute vasitəsilə kod inyeksiyası edə bilər.

iOS altında maliyyə tətbiqləri PCI DSS standartının tələblərinə uyğun olaraq Jailbreak Detection tətbiq etməlidir — sertifikasiya üçün tətbiq kompromizə edilmiş cihazda işləmədiyini sübut etməlidir. OWASP Mobile Security (2024) Jailbreak Detection-in olmamasını M8 zəifliyi kimi təsnif edir. App Store tətbiqləri üçün Apple ceylbrekli cihazlarda funksionallığın bloklanmasını qadağan etmir, lakin dəyişdirilə bilən müştəri koduna tam etibar etməmək üçün müştəri tərəfi və server yoxlamalarının birləşdirilməsini tövsiyə edir.

iOS-da Jailbreak Detection arxitekturası sandbox modelinə görə Android-dəki Root Detection-dən daha mürəkkəbdir. Android-də tətbiq sistemi təhlil etmək üçün /proc-u oxuya bilər. iOS qum qutusu (sandbox) əksər sistem göstəricilərinə birbaşa girişi bloklayır. Tərtibatçılar canAccessFile API vasitəsilə qadağan olunmuş zonalarda faylların əlçatanlığını yoxlamaq və ya fork() vasitəsilə uşaq proseslərini işə salmaqla çıxış kodunu yoxlamaq kimi yan keçmə texnikalarından istifadə etmək məcburiyyətindədirlər. Müasir yoxlamalar yalnız ceylbreek zamanı mümkün olan hərəkətləri yerinə yetirmək cəhdi və nəticənin təhlili üzərində qurulur.

Ceylbrekin aşkarlanmasının fayl metodları

Ən sadə və tarixən ilk yanaşma — yalnız ceylbrekli cihazlarda quraşdırılan fayl və tətbiqlərin mövcudluğunun yoxlanılmasıdır. Sadəliyinə baxmayaraq, fayl yoxlamaları əsas qorunma təbəqəsi olaraq qalır, çünki onların keçilməsi istifadəçidən aktiv hərəkətlər tələb edir.

Ceylbreek paketlərinin yoxlanılması

Ceylbrekli cihazda Cydia, Sileo, Zebra və ya Installer tətbiqləri mövcuddur. Onların olması NSFileManager vasitəsilə yoxlanılır: [[NSFileManager defaultManager] fileExistsAtPath:@"/Applications/Cydia.app"]. Eyni şəkildə unc0ver, checkra1n, Taurine və Chimera paketləri yoxlanılır. Bu yoxlamalar NSFileManager çağırışlarını ələ keçirən HideJB tweak-ləri vasitəsilə keçilir.

/usr/bin-də alətlərin yoxlanılması

Ceylbreek stock iOS-da mövcud olmayan UNIX alətlərini quraşdırır: apt, dpkg, ssh, rsync, sftp, dd, readlink və s. /usr/bin/ssh, /bin/bash, /bin/sh və /usr/libexec/sftp-server-in mövcudluğu yoxlanılır. Bu fayllardan hər hansı biri aşkar edildikdə, ceylbreek ehtimalı yüksəkdir. iOS 13–17 üçün həmçinin /var/jb — unc0ver və Taurine üçün bootstrap kök kataloqunun mövcudluğunu yoxlamaq aktualdır.

Dinamik kitabxanaların yoxlanılması

MobileSubstrate (CydiaSubstrate.dylib) və Substitute — proseslərə kod inyeksiyası üçün kitabxanalar. Onların mövcudluğu RTLD_NOLOAD bayrağı ilə dlopen() vasitəsilə yoxlanılır. Əgər kitabxana ünvan sahəsinə yüklənibsə — proses ceylbreek mühitində işləyir. Bu daha etibarlı yoxlamadır, çünki HideJB artıq prosesə yüklənmiş kitabxananı boşalda bilməz.

objective-c
- (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;
}

İcra vaxtının dinamik yoxlamaları

Dinamik yoxlamalar iOS qum qutusunda qadağan olunan hərəkətləri yerinə yetirir və nəticəni təhlil edir. Əgər hərəkət bloklanmayıbsa — cihaz çox güman ki, ceylbreklidir.

fork() və posix_spawn() yoxlanılması

Stock iOS-da fork() çağırışı errno = EPERM ilə -1 qaytarır. Ceylbrekli cihazda fork() icra oluna bilər, çünki qum qutusu məhdudiyyətləri götürülüb. Bu yoxlama etibarlıdır, lakin bəzi iOS versiyalarında yanlış müsbət nəticələr verə bilər. fork() həmçinin uşaq prosesinin işə salınma imkanını yoxlamaq üçün posix_spawn() ilə əvəz edilə bilər.

Sandbox sistem imzasının yoxlanılması

Qadağan olunmuş zonalarda faylların oxunması cəhdi: /etc/master.passwd, /var/log/system.log, /private/var/cache. Stock iOS-da bu oxumalar xəta qaytarır. Əgər tətbiq bu faylları uğurla oxuyursa — sandbox söndürülüb. Əlavə olaraq /private/-a yazma imkanı yoxlanılır — qum qutusunda bütün sistem bölmələri adi tətbiqlər üçün yalnız oxunabilir olaraq quraşdırılıb.

Sistem simvollarının yoxlanılması

Ceylbreek sistem kitabxanalarını, o cümlədən dyld shared cache-i dəyişdirir. Sistem freymvorklarının və ya ayrı-ayrı simvolların hashinin yoxlanılması dəyişikliyi aşkar edə bilər. iOS 14+ üçün jit_region_create simvolunun və ya Fugu14/checkra1n işarələrinin sysctl kern.version oxunması vasitəsilə nüvə ünvan sahəsində mövcudluğu yoxlanılır.

objective-c
- (BOOL)isJailbrokenByRuntime {
    // fork() yoxlanması
    int pid = fork();
    if (pid == 0) {
        exit(0);
    }
    if (pid > 0) {
        waitpid(pid, NULL, 0);
        return YES;
    }

    // Sistem fayllarına girişin yoxlanması
    FILE *f = fopen("/etc/master.passwd", "r");
    if (f) {
        fclose(f);
        return YES;
    }

    // sysctl kern.version yoxlanması
    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;
}

Objective-C-də nativ tətbiq

Swift kodu asanlıqla deassemblənir və Substrate vasitəsilə keçilir. libobjc və C sistem funksiyalarının birbaşa çağırışları ilə Objective-C-də nativ tətbiq yoxlamaları keçilməyə qarşı əhəmiyyətli dərəcədə davamlı edir.

NSFileManager əvəzinə stat() istifadəsi

libc-dən stat() çağırışı Objective-C səviyyəsində ələ keçirilə bilməz. NSFileManager metodlarını ələ keçirən HideJB tweak-ləri stat()-a təsir etmir. stat() ilə nativ yoxlama quraşdırılmış HideJB modulları olan cihazlarda belə fayl göstəricilərini aşkar edir. Fayllar üçün stat() və kitabxanalar üçün RTLD_NOLOAD ilə dlopen() birləşməsi iki kəsişməyən aşkarlama kanalı verir.

Kod imzasının bütövlüyünün yoxlanılması

SecStaticCodeCheckValidity nativ funksiyası tətbiqin kod imzasının Apple sertifikatına uyğunluğunu yoxlayır. Ceylbrekli cihazda bu yoxlama kernel-patch vasitəsilə əvəz edilə bilər. Əvəzlənmənin qarşısını almaq üçün yoxlama Swift Bridge deyil, Security.framework-dən dlopen() vasitəsilə çağırışla nativ koddan aparılmalıdır.

objective-c
#import <sys/stat.h>
#import <dlfcn.h>

- (BOOL)nativeCheckForJailbreak {
    // stat() NSFileManager hook-dan yan keçmə
    struct stat st;
    if (stat("/Applications/Cydia.app", &st) == 0) {
        return YES;
    }

    // Yükləmədən Substrate yoxlamaq üçün dlopen
    void *substrate = dlopen(
        "/Library/MobileSubstrate/MobileSubstrate.dylib",
        RTLD_NOLOAD
    );
    if (substrate) {
        dlclose(substrate);
        return YES;
    }

    return NO;
}

Jailbreak Detection-ın keçilmə metodları

Keçilmə texnikalarını başa düşmək davamlı müdafiə qurmaq üçün vacibdir. Müasir keçilmə alətləri fəal şəkildə inkişaf edir və statik yoxlama dəsti bir neçə ay ərzində səmərəsiz olur.

HideJB və Shadow

HideJB — NSFileManager, stat(), dlopen() və fork() çağırışlarını ələ keçirən və qaytarılan dəyərləri əvəz edən tweakdir. HideJB Cydia Substrate səviyyəsində işləyir, buna görə də həm Objective-C, həm də C funksiyalarını ələ keçirir. iOS 15–16 üçün HideJB versiyası (Shadow) kernel-level hook metodologiyasından istifadə edir. Əks-tədbir: yoxlamanın nəticəni IPC vasitəsilə ötürən ayrıca prosesdə aparılması, bu da hook zəncirini qırır.

Choicy və Liberty Lite

Choicy müəyyən proseslər üçün Substrate-ı söndürməyə imkan verir. İstifadəçi sadəcə qorunan tətbiq üçün inyeksiyanı söndürür — kitabxana yoxlamalarının hamısı false qaytarır. Liberty Lite — populyar müdafiə kitabxanalarının əksər yoxlamalarını əhatə edən kompleks keçilmə vasitəsidir. Əks-tədbir: DeviceCheck və App Attest vasitəsilə server təsdiqi — serverdə cihazın ceylbrekli cihazda saxtalaşdırıla bilməyən etibarlı Apple sertifikatına malik olması yoxlanılır.

Fugu14 və KFD vasitəsilə keçilmə

Fugu14 və KFD kimi nüvə eksploytları nüvə məkanında (kernel-space) kod icra edir ki, bu da sistem çağırışlarını tətbiqin görməsindən əvvəl ələ keçirməyə imkan verir. Bu səviyyədə stat() və fork() yoxlamaları səmərəsiz olur. Yeganə etibarlı əks-tədbir — cihazın Apple Attestation prosedurundan keçdiyinin yoxlanılması ilə server attestasiyasıdır. Bu protokol Secure Enclave daxilində kriptoqrafik açarlara əsaslanır ki, onlar hətta kernel-level eksployt zamanı da oxunmaq üçün əlçatan deyil.

iOS təhlükəsizlik arxitekturası və ceylbrekin rolu

Səmərəli Jailbreak Detection qurmaq üçün ceylbreek zamanı iOS-un hansı təhlükəsizlik mexanizmlərinin söndürüldüyünü başa düşmək lazımdır.

Secure Boot Chain

iOS imza yoxlamaları ardıcıllığı ilə yüklənir: Boot ROM → iBoot → iOS Kernel. Əgər ceylbreek bootrom eksploytundan (checkra1n) istifadə edirsə, bütün Secure Boot Chain kompromizə edilmişdir — tətbiq səviyyəsində yoxlamalar faydasızdır. Əgər software-only eksployt (unc0ver, Taurine, Fugu14) istifadə olunursa, yükləmə zənciri pozulmayıb və App Attest kimi Apple xidmətləri etibarlı qalır.

Kernel Patch Protection (KPP)

iOS 10-dan başlayaraq Apple KPP-ni — hər 200 ms-dən bir nüvənin bütövlüyünü yenidən yoxlayan aparat qorunmasını tətbiq etdi. Bütün müasir ceylbreeklər (iOS 14–17) PAC və ya APRR vasitəsilə KTRR keçilməsindən istifadə edir, lakin KPP dəyişdirilmiş sysctl sistem cədvəlləri şəklində izlər buraxır. kern.version-da pwned, prod və ya qeyri-standart versiyalı xnu sətirlərinin olmasının yoxlanılması nüvə yamasının mövcudluğunu aşkar edə bilər.

Sandbox bütövlüyü

iOS Sandboxı entitlements istifadə edərək TrustedBSD səviyyəsində işləyir. Ceylbreek sandbox profilini allow-all ilə əvəz edir. Tətbiq sandboxı öz Documents qovluğundan kənarda hər hansı faylı oxumaq cəhdi ilə yoxlaya bilər. Əgər uğurlu olarsa — sandbox dəyişdirilib. Sandbox bütövlüyü — icazə yoxlaması ələ keçirilməzdən əvvəl nüvədə aparıldığı üçün kernel-level eksployt olmadan saxtalaşdırıla bilməyən azsaylı göstəricilərdən biridir.

Tez-tez verilən suallar

Jailbreak Detection Root Detection-dən nə ilə fərqlənir?

Root Detection Android üçün su ikili faylının və Magisk-in mövcudluğunu yoxlayır. Jailbreak Detection iOS üçün Cydia, Sileo, MobileSubstrate axtarır, fork() imkanını yoxlayır və sistem fayllarını oxuyur. iOS Sandbox arxitekturası Android-dən daha sərtdir, buna görə iOS yoxlamaları sistem göstəricilərini oxumaqdansa, daha çox qadağan olunmuş hərəkətləri yerinə yetirməyə cəhd etməyə əsaslanır.

Jailbreak Detection iOS 16 və 17-də işləyir?

Bəli, iOS 16–17 üçün Dopamine, palera1n və checkra1n ceylbreekləri aktualdır. Jailbreak Detection işləyir, lakin yoxlamaların yeni alətlərə uyğun yenilənməsini tələb edir. iOS 17-də Apple sandboxı gücləndirdi və bir çox köhnə yoxlamalar (məsələn, fork()) XNU-dakı dəyişikliklər səbəbindən etibarlı olmaqdan çıxdı

Tətbiqdə Jailbreak Detection-ı necə keçmək olar?

Ən sadə üsul — kitabxana səviyyəsində yoxlamaları ələ keçirən HideJB və ya Shadow-dur. Daha mürəkkəb müdafiə üçün müəyyən tətbiq üçün inyeksiyanı söndürməklə Frida və ya Choicy istifadə olunur. Server attestasiyası (App Attest) yalnız Secure Enclave-in aparat açarını əvəz etməklə kernel-level eksployt vasitəsilə keçilir ki, bu da praktiki olaraq mümkün deyil.

Tətbiqin ceylbrekli cihazda işləməsinin nəticələri nələrdir?

Ceylbrekli cihazdakı istənilən tətbiq aşağıdakılara məruz qala bilər: etibarlı sertifikat anbarının dəyişdirilməsi ilə SSL trafikinin ələ keçirilməsi, fayl sisteminə giriş vasitəsilə Keychain-in oxunması, tokenlərlə iş metodlarının ələ keçirilməsi ilə Substrate vasitəsilə kod inyeksiyası, şifrələmə açarlarının əldə edilməsi üçün proses yaddaşının dumpı.

App Attest nədir və necə kömək edir?

App Attest — Apple-ın tətbiq və cihaz bütövlüyünü yoxlamaq üçün xidmətidir. İşə düşərkən tətbiq Apple serverindən attestation challenge alır, onu Secure Enclave-dən şəxsi açar ilə imzalayır və öz serverinə göndərir. Əgər cihaz ceylbreklidirsə, Secure Enclave attestation failure ilə cavab verir ki, bu da qorunan funksiyalara girişi bloklayır.

Xülasə

  • Jailbreak Detection — maliyyə və şəxsi məlumatları emal edən iOS tətbiqləri üçün məcburi qorunma mexanizmi, məhdudiyyətləri götürülmüş cihazlarda işə düşməyi bloklayır
  • Fayl yoxlamaları HideJB-nin NSFileManager hooklarından yan keçərək stat() və dlopen() vasitəsilə Cydia, Sileo, Zebra və /usr/bin-dəki alətləri axtarır
  • Dinamik yoxlamalar sandboxın söndürülməsini təsdiqləmək üçün fork(), posix_spawn() və /etc/master.passwd oxuma cəhdini yerinə yetirir
  • Nativ tətbiq libc birbaşa çağırışları ilə Objective-C-də Substrate vasitəsilə keçilməyə Swift yoxlamalarından qat-qat davamlıdır
  • HideJB və Shadow — proses səviyyəsində əsas keçilmə alətləri, server attestasiyası ilə zərərsizləşdirilir
  • Secure Enclave istifadə edən Apple-dan App Attest software-only ceylbreekdə keçilməz olan kriptoqrafik cihaz təsdiqini təmin edir
  • Tövsiyə olunan arxitektura: iOS tətbiqlərinin kompleks qorunması üçün nativ fayl yoxlamaları + runtime analizi + DeviceCheck server attestasiyası

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun