TOPlist

Evasi0n pod lupou: Jak funguje dosud nejpropracovanější jailbreak?

Před nedávnem zveřejněný jailbreak pro zařízení s iOS 6.x známý pod názvem Evasi0n, je dosud nejpropracovanějším nástrojem svého druhu. Jak funguje vám odhalíme v tomto článku.

Skupina hackerů sdružená pod názvem Evad3rs v pondělí vydala dlouho očekávaný nástroj pro jailbreak zařízení s iOS ve verzi 6.0 a 6.1. Program nesoucí název Evasi0n podobně jako jeho předchůdci umožňuje překonat systémová omezení a instalovat do iPhonů, iPadů i iPodů Touch prakticky jakékoliv aplikace.

Podle Jaye Freemana, administrátora neoficiálního appstoru Cydia, byl Evasi0n během prvních šesti hodin od zveřejnění použit v nejméně 800 000 případech. Navíc se prý jedná jen o velice skromný odhad, vzhledem k tomu, že byly statistiky serverů narušeny při jejich opakovaném pádu způsobeném ohromným přílivem uživatelů. V úterý už se prý číslo vyšplhalo až k 1,7 milionu.

Apple do svých mobilních zařízení přináší s každou novou verzí systému stále lepší zabezpečení, která mají podobnému prolomení zabránit. Pro hackery a šťouraly všeho druhu tedy není vůbec lehké najít onu osudovou skulinku, pomocí které by mohli onu ochranu překonat. Na webu známého magazínu Forbes proto vyšel článek, ve kterém David Wang, jeden ze čtyř kodéru v Evad3rs, popisuje, jak vlastně Evasi0n funguje. Jejich program prý využil minimálně pěti nových bugů v kódu iOs.

Celý proces jailbreaku začíná spuštěním programu libimobiledevice, který se zařízeními komunikuje přes stejný protokol jako iTunes. Díky němu dojde k využití bugu v systému zálohování v iOS a Evasi0n tak získá přístup k některým jinak zapovězeným nastavením. Konkrétně se jedná o soubor s údajem o časovém pásmu, ve kterém se přístroj nachází.

Nástroj potom do tohoto souboru umístí symbolický odkaz, který vede ke konkrétnímu socketu. Ten slouží ke vzájemné komunikaci různých programů a umožní tak Evasi0nu přistupovat k hlavnímu procesu Launch Daemon (launchd), který startuje vždy jako první  při bootování zařízení a může spouštět aplikace s kořenovým oprávněním. Ve výsledku tedy, kdykoliv se na zařízení spustí automatická aktualizace, získá Evasi0n přístup i k launchd.

iOS6 má ale ještě jednu pojistku proti běhu neautorizovaných aplikací – podepisování kódu. Jednoduše řečeno, veškerý kód, který je v zařízení spuštěn musí být zkontrolován a elektronicky podepsán Applem. Evasi0n proto spustí novou aplikaci, která zdánlivě neobsahuje žádný kód. Pokud ale uživatel klikne v průběhu provádění jailbreaku na její ikonu, dojde k využití unixového triku známého pod pojmem „shebang“, který dokáže využít kód z jiné, již dříve podepsané aplikace. V tomto případě si díky postupu popsaném v předchozím kroku zavolíá launchd a použije jej ke spuštění příkazu „remount”. S jeho pomocí tak přepíše paměťové nastavení kořenového souborového systému, který byl dosud dostupný pouze ke čtení, a umožní do něj zapisovat.

 

Nyní, když lze zapisovat do kořenových souborů, Evasi0n změní jeden z nich – launchd.conf. Tím se upraví vlastnost samotného zavaděče launchd, takže se od této chvíle nastavené změny automaticky provedou při každém startu zařízení a uživatel tak nemusí svůj iPhone nebo iPad neustále připojovat přes USB.

Ani po těchto úpravách ale ještě není jailbreak hotový. Nejdříve je třeba zrušit ochranu na úrovni samotného jádra. V této nejhlubší části operačního systému se totiž provádí kontroly podepsání kódu, které nepovolí běh neautorizovaných aplikací. Využívá se k tomu proces zvaný Apple Mobile File Integrity Daemon (AMFID). Evasi0n proto využije launchd, takže se při každém spuštění nějakého programu načte knihovna funkcí AMFID a místo požadavku na kontrolu automaticky odešle potvrzení o schválení. Wang ale neprozradil podrobnosti ohledně tohoto kroku a na doplňující otázky odpověděl slovy: „Ať si na to Apple přijde sám.”

iOS má v sobě ale ještě jednu ochranu, která má zabránit hackerům v úpravě paměti v kernelu: Address Space Layout Randomization (ASLR). Její trik spočívá v náhodném posouvání umístění kódu uvnitř paměti flash při každém startu systému, čímž se zabraňuje přepsání jeho konkrétní části. Evasi0n ale dokáže najít jedno místo v paměti, které se v případě zařízení běžících na architektuře ARM těžko skrývá, a tím je ARM Exception Vector. Tato část jádra se využívá při pádu aplikací a k hlášení, na kterém místě v paměti k chybě došlo. Evasi0n tedy nasimuluje pád a pomocí tohoto reportu zjistí přesné místo, kde k němu došlo. Pak už není problém se v paměti zorientovat a přesně si ji zmapovat.

Jakmile je překonána i tato ochrana, Evasi0n využije poslední bug v iOS, konkrétně v jeho USB rozhraní. To totiž programu  předává adresu v paměti jádra a „naivně očekává, že ji uživatel vrátí zpátky neupravenou,” říká Wang. Tím umožní Evasi0nu zapisovat do libovolné části kernelu. Prvním místem, kam pak nástroj zamíří je ta jeho část , která zakazuje změny v kódu. „Jakmile se dostaneme do jádra, na žádné ochraně už nezáleží,” uzavírá Wang. „To je ten okamžik našeho vítězství.”

Nástroj Evasi0n můžete stáhovat na této adrese.

Autor článku Miroslav Havlíček
Miroslav Havlíček

Kapitoly článku