Jailbreak Detection v aplikacích pro iOS: podstata, metody detekce a kontrola

Autor: IT Sectr Publikováno: 2026-04-03 Doba čtení: 10 min

Jailbreak Detection — soubor mechanismů, které zjišťují přítomnost jailbreaku na zařízení iOS a zabraňují spuštění aplikace v prostředí s odstraněnými omezeními. Jailbreak poskytuje přístup k souborovému systému mimo sandbox, umožňuje instalaci upravených knihoven a zachycování systémových volání. Podle Apple Security Documentation (2024) zařízení s jailbreakem neodpovídají modelu bezpečného spouštění Secure Boot. Jailbreak Detection kombinuje kontroly souborových indikátorů, runtime analýzu volání a kontrolu integrity podpisu sandboxu.

Hlavní body

  • Jailbreak Detection — blokování chodu iOS aplikace na zařízeních s odstraněnými omezeními Apple, kde je možné zachycování dat a provozu
  • Souborové kontroly hledají typické stopy jailbreaku: Cydia.app, Sileo.app, knihovny MobileSubstrate a nástroje v /usr/bin
  • Runtime analýza kontroluje možnost provedení fork(), posix_spawn() a přístupu k sandbox-exception cestám
  • Obfuskace a nativní kód v Objective-C/C jsou povinné — Swift kontroly jailbreaku jsou jednoduše obejity přes Cydia Substrate
  • DeviceCheck a App Attest od Apple poskytují serverovou atestaci integrity zařízení, doplňující client-side kontroly

Co je Jailbreak Detection?

Jailbreak Detection — proces identifikace zařízení iOS, na kterých byla odstraněna omezení operačního systému. Jailbreak modifikuje jádro iOS, vypíná podepisování kódu, poskytuje přístup k plnému souborovému systému a umožňuje načítání neautorizovaných knihoven. Pro aplikaci běžící na takovém zařízení neexistují žádné záruky integrity běhového prostředí: jakýkoli proces může číst paměť aplikace, zachytávat SSL/TLS provoz instalací vlastních certifikátů do úložiště systému a injektovat kód přes Cydia Substrate nebo Substitute.

Finanční aplikace na iOS jsou povinny zavést Jailbreak Detection podle požadavků standardu PCI DSS — pro certifikaci musí aplikace prokázat, že neběží na kompromitovaném zařízení. OWASP Mobile Security (2024) klasifikuje absenci Jailbreak Detection jako zranitelnost M8. Pro aplikace v App Store Apple nezakazuje blokování funkcionality na jailbreaknutých zařízeních, nicméně doporučuje kombinovat client-side a server-side kontroly, aby se nespoléhalo výhradně na klientský kód, který může být modifikován.

Architektura Jailbreak Detection v iOS je složitější než Root Detection v Androidu kvůli modelu sandboxu. V Androidu může aplikace číst /proc pro analýzu systému. iOS sandbox blokuje přímý přístup k většině systémových indikátorů. Vývojáři jsou nuceni používat techniky obcházení, jako je kontrola dostupnosti souborů v zakázaných zónách přes API canAccessFile nebo spouštění podřízených procesů přes fork() s kontrolou exit kódu. Moderní kontroly jsou postaveny na pokusu o provedení akcí dostupných pouze při jailbreaku a analýze výsledku.

Souborové metody detekce jailbreaku

Nejjednodušší a historicky první přístup — kontrola přítomnosti souborů a aplikací, které se instalují pouze na zařízeních s jailbreakem. Navzdory své jednoduchosti zůstávají souborové kontroly základní vrstvou ochrany, protože jejich obejití vyžaduje aktivní akce ze strany uživatele.

Kontrola jailbreak balíčků

Na jailbreaknutém zařízení jsou přítomny aplikace Cydia, Sileo, Zebra nebo Installer. Jejich přítomnost je kontrolována přes NSFileManager: [[NSFileManager defaultManager] fileExistsAtPath:@"/Applications/Cydia.app"]. Podobně jsou kontrolovány balíčky od unc0ver, checkra1n, Taurine a Chimera. Tyto kontroly jsou obcházeny pomocí HideJB tweaků, které zachycují volání NSFileManager.

Kontrola nástrojů v /usr/bin

Jailbreak instaluje UNIXové nástroje nedostupné v stock iOS: apt, dpkg, ssh, rsync, sftp, dd, readlink a další. Kontroluje se existence /usr/bin/ssh, /bin/bash, /bin/sh a /usr/libexec/sftp-server. Při úspěšné detekci kteréhokoli z těchto souborů je pravděpodobnost jailbreaku vysoká. Pro iOS 13–17 je také relevantní kontrola přítomnosti /var/jb — kořenového adresáře bootstrapu pro unc0ver a Taurine.

Kontrola dynamických knihoven

MobileSubstrate (CydiaSubstrate.dylib) a Substitute — knihovny pro injektování kódu do procesů. Jejich přítomnost je kontrolována přes dlopen() s flagem RTLD_NOLOAD. Pokud je knihovna načtena do adresního prostoru — proces běží v prostředí s jailbreakem. Toto je spolehlivější kontrola, protože HideJB nemůže uvolnit již načtenou knihovnu z procesu.

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;
}

Dynamické kontroly běhového prostředí

Dynamické kontroly provádějí akce, které jsou v iOS sandboxu zakázány, a analyzují výsledek. Pokud akce není zablokována — zařízení má s největší pravděpodobností jailbreak.

Kontrola fork() a posix_spawn()

V stock iOS volání fork() vrací -1 s errno = EPERM. Na jailbreaknutém zařízení může fork() proběhnout, protože omezení sandboxu byla odstraněna. Tato kontrola je spolehlivá, ale může vést k falešně pozitivním výsledkům na některých verzích iOS. fork() lze také nahradit posix_spawn() pro kontrolu možnosti spuštění podřízeného procesu.

Kontrola systémového podpisu sandboxu

Pokus o čtení souborů v zakázaných zónách: /etc/master.passwd, /var/log/system.log, /private/var/cache. V stock iOS tato čtení vracejí chybu. Pokud aplikace úspěšně čte tyto soubory — sandbox je vypnutý. Doplňkově se kontroluje možnost zápisu do /private/ — v sandboxu jsou všechny systémové oddíly připojeny jako pouze pro čtení pro běžné aplikace.

Kontrola systémových symbolů

Jailbreak modifikuje systémové knihovny, včetně dyld shared cache. Kontrola hash systémových frameworků nebo jednotlivých symbolů může odhalit modifikaci. Pro iOS 14+ se kontroluje přítomnost symbolu jit_region_create nebo jiných známek činnosti Fugu14/checkra1n v adresním prostoru jádra přes čtení sysctl kern.version.

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

    // Kontrola přístupu k systémovým souborům
    FILE *f = fopen("/etc/master.passwd", "r");
    if (f) {
        fclose(f);
        return YES;
    }

    // Kontrola 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;
}

Nativní implementace v Objective-C

Swift kód je snadno disasemblovatelný a obejitelný přes Substrate. Nativní implementace v Objective-C s přímými voláními libobjc a systémových funkcí C činí kontroly výrazně odolnějšími vůči obcházení.

Použití stat() místo NSFileManager

Volání stat() z libc nemůže být zachyceno na úrovni Objective-C. HideJB tweaky, které zachycují metody NSFileManager, neovlivňují stat(). Nativní kontrola se stat() detekuje souborové indikátory i na zařízeních s nainstalovanými HideJB moduly. Kombinace stat() pro soubory a dlopen() s RTLD_NOLOAD pro knihovny poskytuje dva nepřekrývající se kanály detekce.

Kontrola integrity podpisu kódu

Nativní funkce SecStaticCodeCheckValidity kontroluje podpis kódu aplikace na shodu s certifikátem Apple. Na jailbreaknutém zařízení může být tato kontrola nahrazena přes kernel-patch. Aby se předešlo nahrazení, měla by být kontrola provedena z nativního kódu s voláním přes dlopen() z Security.framework, nikoli přes Swift Bridge.

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

- (BOOL)nativeCheckForJailbreak {
    // stat() obejití NSFileManager hooku
    struct stat st;
    if (stat("/Applications/Cydia.app", &st) == 0) {
        return YES;
    }

    // dlopen pro kontrolu Substrate bez načtení
    void *substrate = dlopen(
        "/Library/MobileSubstrate/MobileSubstrate.dylib",
        RTLD_NOLOAD
    );
    if (substrate) {
        dlclose(substrate);
        return YES;
    }

    return NO;
}

Metody obcházení Jailbreak Detection

Porozumění technikám obcházení je nezbytné pro vybudování odolné ochrany. Moderní nástroje pro obcházení se aktivně vyvíjejí a statická sada kontrol se stává během několika měsíců neúčinnou.

HideJB a Shadow

HideJB — tweak, který zachycuje volání NSFileManager, stat(), dlopen() a fork() a nahrazuje vrácené hodnoty. HideJB pracuje na úrovni Cydia Substrate, takže zachycuje jak Objective-C, tak C funkce. Verze HideJB pro iOS 15–16 (Shadow) používá metodologii kernel-level hooků. Protiopatření: provedení kontroly v samostatném procesu s přenosem výsledku přes IPC, což přeruší řetězec hooků.

Choicy a Liberty Lite

Choicy umožňuje vypnout Substrate pro konkrétní procesy. Uživatel jednoduše vypne injekci pro chráněnou aplikaci — všechny kontroly knihoven vracejí false. Liberty Lite — komplexní obcházení, které pokrývá většinu kontrol z populárních knihoven ochrany. Protiopatření: serverová verifikace přes DeviceCheck a App Attest — na serveru se kontroluje, zda zařízení má platný Apple certifikát, který nemůže být padělán na jailbreaknutém zařízení.

Obcházení přes Fugu14 a KFD

Exploity jádra, jako jsou Fugu14 a KFD, spouštějí kód v prostoru jádra (kernel-space), což umožňuje zachycovat systémová volání dříve, než je aplikace uvidí. Na této úrovni se kontroly stat() a fork() stávají neúčinnými. Jediné spolehlivé protiopatření — serverová atestace s ověřením, že zařízení prošlo procedurou Apple Attestation. Tento protokol je založen na kryptografických klíčích uvnitř Secure Enclave, které jsou nečitelné i při kernel-level exploitaci.

Architektura zabezpečení iOS a role jailbreaku

Pro vybudování efektivního Jailbreak Detection je nutné porozumět tomu, které bezpečnostní mechanismy iOS jsou při jailbreaku vypnuty.

Secure Boot Chain

iOS se spouští přes sekvenci kontrol podpisů: Boot ROM → iBoot → iOS Kernel. Pokud jailbreak používá bootrom exploit (checkra1n), celý Secure Boot Chain je kompromitován — kontroly na úrovni aplikace jsou zbytečné. Pokud je použit software-only exploit (unc0ver, Taurine, Fugu14), řetězec spouštění není narušen a Apple služby, jako je App Attest, zůstávají důvěryhodné.

Kernel Patch Protection (KPP)

Od iOS 10 Apple implementoval KPP — hardwarovou ochranu, která každých 200 ms znovu kontroluje integritu jádra. Všechny moderní jailbreaky (iOS 14–17) používají obcházení KTRR přes PAC nebo APRR, ale KPP zanechává stopy v podobě modifikovaných systémových tabulek sysctl. Kontrola kern.version na přítomnost řetězců pwned, prod nebo xnu s nestandardní verzí může odhalit přítomnost kernel patche.

Integrita sandboxu

iOS Sandbox pracuje na úrovni TrustedBSD s využitím entitlements. Jailbreak nahrazuje profil sandboxu na allow-all. Aplikace může zkontrolovat sandbox pokusem o čtení libovolného souboru mimo svůj adresář Documents. Pokud uspěje — sandbox byl modifikován. Integrita sandboxu — jeden z mála indikátorů, který nelze padělat bez kernel-level exploitace, protože kontrola oprávnění se provádí v jádře dříve, než může být zachycena.

Často kladené otázky

Čím se Jailbreak Detection liší od Root Detection?

Root Detection pro Android kontroluje přítomnost su binárky a Magisk. Jailbreak Detection pro iOS hledá Cydia, Sileo, MobileSubstrate, kontroluje možnost fork() a čte systémové soubory. Architektura iOS Sandbox je přísnější než Android, proto se iOS kontroly více spoléhají na pokus o provedení zakázaných akcí než na čtení systémových indikátorů.

Funguje Jailbreak Detection na iOS 16 a 17?

Ano, pro iOS 16–17 jsou aktuální jailbreaky Dopamine, palera1n a checkra1n. Jailbreak Detection funguje, ale vyžaduje aktualizaci kontrol pro nové nástroje. V iOS 17 Apple posílil sandbox a mnoho starých kontrol (například fork()) přestalo být spolehlivých kvůli změnám v XNU

Jak obejít Jailbreak Detection v aplikaci?

Nejjednodušší způsob — HideJB nebo Shadow, které zachycují kontroly na úrovni knihoven. Pro složitější ochranu se používá Frida nebo Choicy s vypnutím injekce pro konkrétní aplikaci. Serverová atestace (App Attest) je obejita pouze přes kernel-level exploit s nahrazením hardwarového klíče Secure Enclave, což je prakticky nerealizovatelné.

Jaké jsou důsledky běhu aplikace na jailbreaknutém zařízení?

Jakákoli aplikace na jailbreaknutém zařízení může být vystavena: zachycení SSL provozu přes modifikaci důvěryhodného úložiště, čtení Keychain přes přístup k souborovému systému, injekci kódu přes Substrate se zachycením metod práce s tokeny, dumpu paměti procesu pro získání šifrovacích klíčů.

Co je App Attest a jak pomáhá?

App Attest — služba Apple pro kontrolu integrity aplikace a zařízení. Při spuštění aplikace obdrží od Apple serveru attestation challenge, podepíše jej soukromým klíčem ze Secure Enclave a pošle na svůj server. Pokud je zařízení jailbreaknuté, Secure Enclave odpoví attestation failure, což zablokuje přístup k chráněným funkcím.

Shrnutí

  • Jailbreak Detection — povinný ochranný mechanismus pro iOS aplikace zpracovávající finanční a osobní údaje, blokující spuštění na zařízeních s odstraněnými omezeními
  • Souborové kontroly hledají Cydia, Sileo, Zebra a nástroje v /usr/bin přes stat() a dlopen(), obcházejíce NSFileManager hooky HideJB
  • Dynamické kontroly provádějí fork(), posix_spawn() a pokus o čtení /etc/master.passwd pro ověření vypnutí sandboxu
  • Nativní implementace v Objective-C s přímými voláními libc je výrazně odolnější vůči obcházení přes Substrate než Swift kontroly
  • HideJB a Shadow — hlavní nástroje pro obcházení na úrovni procesů, neutralizované serverovou atestací
  • App Attest od Apple s využitím Secure Enclave poskytuje kryptografickou verifikaci zařízení, neobcházitelnou při software-only jailbreaku
  • Doporučená architektura: nativní souborové kontroly + runtime analýza + serverová atestace DeviceCheck pro komplexní ochranu iOS aplikací

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také