diosra2’s blog

iOSのJailbreak、ダウングレード

SHSHなしでiOSをダウングレードする


SHSHとは

『SHSH』とはiPhone 3GSから導入されたファームウェアの認証システムです。

これにより、iPhone 3GS以降, またはiOS 4以降のファームウェアはAppleの認証無しに復元や起動をすることができなくなっています。

iOS 4までは、Appleがファームウェアを認証しているうちに署名(SHSH blobs, ECID SHSH)を取得しておくことで、Cydia(Saurik) ServerやTinyUmbrella等を通してAppleの認証サーバーを偽装することで、あらかじめ保存しておいたSHSH blobsを使ってファームウェアを認証し、SHSH blobsのある特定のバージョンに復元することが可能です。

iOS 5以降はAPTicketが導入され、nonceが含まれるようになったため、上記のように簡単に任意のバージョンへダウングレードすることは難しくなりました。iOS 5以降はBootRom Exploitなどを活用し、デバイスをPwned DFU Modeにしてカスタム・ファームウェア(CFW)で復元する必要があります。

A7(64bit)デバイス以降はA6デバイス以前とは少し認証方法が異なります。

 

SHSHの導入されていないiPhone, iPod Touch, iPhone 3G(iOS<4.0), iPod Touch 2G(iOS<4.0)はiTunesでファームウェアを指定して復元するだけでダウングレードできます。

 

SHSHのないファームウェアにダウングレードする

iOSデバイスをSHSHなしでダウングレードするためにはUntetheredで実行可能なBootRom Exploit、またはiBoot Exploitが必要です。例えば、iPhone 3GSでは0x24000 Segment Overflowの脆弱性を利用することでSHSHなしでCFWを起動できます。

SHSHのないファームウェアへダウングレード可能なデバイス一覧

詳しいことは各項目で説明しますが、ここではひとまず簡単にまとめておきたいと思います。

仕様上可能なデバイス・バージョン

iPhone, iPhone 3G (ios<4.0), iPod Touch 2G (ios<4.0)

これらのデバイスにはSHSHの概念がありません。

iPhone 3GとiPod Touch 2Gは、iOS 4未満なら自由です。(iOS 4は後述の方法で可能です。)

 

VROM/Bootrom exploitにより可能なデバイス 

iPhone 3G, iPhone 3GS, iPod Touch 2G (MBモデル)

これらのデバイスは、ローレベルのexploitを使用して全バージョンにダウングレード可能です。

iPhone 3GSやiPod Touch 2GにはそれぞれBootromのバージョンが2種類あります。(古い方がOld Bootrom、新しい方がNew Bootrom。)

iPod Touch 2GはOld Bootromのみ可能です。

 

iBoot exploitにより可能なデバイス

iBootはiOS更新によりアップデートが可能なので、バージョン記述がある場合は最新バージョンでは塞がれていると考えてください(この場合は表記されているバージョンのSHSHは必ず必要)。ここでは理論上可能なデバイスを記しています。

iPhone

iPhone 4, iPhone 4S (iOS 5, 7), iPhone 5 (iOS 7), iPhone 5c (iOS 7)

iPad

iPad, iPad 2 (iOS 5, 7), iPad 3rd (iOS 5, 7), iPad 4th (iOS 7), iPad mini (iOS 7)

iPod Touch

iPod Touch 3G, iPod Touch 4G (iOS 5), iPod Touch 5G (iOS 7)

 

iOS 7の64-bitデバイスも理論上は可能ですが、方法が確立されていません。

 

Bootrom exploit

この章ではBootrom exploitを使用したSHSHなしでのダウングレードについて記します。

32-bit iOSデバイスは電源をONにすると最初に書き換え不能なSecureROM(Bootrom)が起動します。その次にLLB(Low-level Bootloader)の署名チェックを行い、正しければLLBに移行します。

Bootrom exploitを使用したダウングレードでは、このSecureROM->LLB間の脆弱性を使用して未署名のLLBを許可させることで達成します。LLBの署名認証がスキップされるとそれ以降の署名認証を飛ばすことができるので、完全にSHSHを使用せずにダウングレードが可能です。

 

利用可能なデバイスと使用する脆弱性

0x24000 Segment Overflow

Developer: iPhone Dev Team 

0x24000 Segment Overflow - The iPhone Wiki

Device: iPod Touch 2nd Generation (Old BootRom), iPhone 3GS (Old BootRom)

Bootrom 240.4, Bootrom 359.3のデバイス上で未署名なLLBを実行できるUntethered BootRom Exploitです。

Limera1n Exploitと組み合わせてSHSHなしで復元・ダウングレードしてiOSを起動することが可能です。

 

alloc8 exploit

Developer: @axi0mX

Device: iPhone 3GS

iPhone 3GS上で使用できるUntetehred BootRom Exploitです。

Limera1n Exploitと組み合わせてSHSHなしで復元・ダウングレードし、起動することが可能です。(ただし制約あり)

Old BRの場合は24kpwnを利用したほうが良いです。 

 

iBoot exploit

A5デバイス以降ではBootrom exploitはありません。また、A4デバイスのBootrom exploitはデバイス単体では動作しません。(USBからの攻撃が必要。)

しかし、過去のiBootには幾つかの脆弱性が存在していたため、条件付きですがA5デバイス以降でも利用可能なものがあります。

よく知られた強力なiBoot exploitでは、iH8sn0w氏が保有していると思われる非公開なiBoot exploitです。彼はこの脆弱性を使用してiPad 3rdやiPhone 5でiOS 8.1.1や9.0、10.0 betaなどの完全脱獄を行った様子を公開しました。その動画から、起動時にCustom Boot Logoが適用されている点やVerbose bootで起動している点から電源をOnにしてからすぐに動作する強力なものだと推測できます。

iBoot exploitはiBootで発動されるため、ソフトウェアアップデートで修正可能です。したがって、修正される前のSHSHを持っていることが必要になります。しかし、理論上は(少なくとも32-bitデバイスでは)脆弱なiBootでexploitを発動し、それよりも新しいバージョンのiOSを、そのバージョンのSHSHなしに起動させることは可能です。

公開されている中でA4デバイス以降に有効なexploitは以下の2種類存在します。 

 

利用可能なデバイスと使用する脆弱性

iBoot HFS heap buffer overflow

Developer: @p0sixninja

対象: iOS 5のiBoot

iOS 5のiBootのバグです。iOS 5のSHSHが必要です。

@nyan_satan氏らによると、これはiOS 6でfixされたようです。

このexploitでは全バージョンのUntethered Jailbreakや全バージョンへアップ・ダウングレードすることが可能です。実際に、@nyan_satan氏によるiPod Touch 3rdのverbose bootによる起動や、@ShadowLee19氏によるiPad 2でのiOS 7.1.2のCustom boot logoの適用やverbose bootによる起動などが公開されています。

実際にexploitを適用させる手法は公開されていますが、基本的にはシリアルケーブルがないときつい作業になると思われます。

 

De Rebus Antiquis

Developer: @xerub

対象: iOS 7のiBoot

iOS 7のiBootのバグです。iOS 7のSHSHが必要です。

@xerubによると、これはiOS 8でfixされたようです。

全バージョンのUntethered Jailbreakや全バージョンへアップ・ダウングレードすることが可能です。

iOS 5のものと比べると、こちらは複雑とされていて@xerub氏以外にbuild出来た人は現段階ではおそらくいません。

現在では、iPhone 4 [iPhone3,1]のiOS 7.1.2、iPhone 5 [iPhone5,2]のiOS 7.0.4、iPhone 4s [iPhone4,1]のiOS 7.1.2で動作するものがそれぞれ公開されています。

私もこれを使用して、iPhone 4をiOS 4.3.5にしたりiPhone 5でiOS 10を完全脱獄するなど、様々なことを実行することができました。

 

Tethered Downgrade (紐付きダウングレード)

A4デバイス以降はUntethered BootRom Exploitが存在しないため、SHSHなしではiOSを起動することはできません。

A4デバイスではBootrom Exploit (Limera1n Exploit)を利用してTethered Downgrade (紐付きダウングレード)をすることは可能です。

例としてはSund0wnのようなツールが存在します。

 

利用可能なデバイスと使用する脆弱性

Limera1n Exploit

by geohot

Device: iPhone 3GS, iPhone 4, iPad, iPod Touch 3rd Generation, iPod Touch 4th Generation

USBの接続で、未署名のコードを実行可能にするTehered BootRom Exploitです。

SHSHなしでダウングレードすることが可能ですが、これらのデバイスはSHSHなしでは起動できないため、起動時にLimera1n Exploitを使用してBootする必要があります。

Tethered Downgrade (紐付きダウングレード)です。

手法

CFWで復元するためにiBSS/iBECにパッチをして復元時の署名認証を無効化し、CFWで復元が実行されるようRamdiskのasrにパッチをします。

続いて、Ramdisk内のoption.plistを開き、FlashNORをfalseに設定します。

これにより復元時にブートチェーンは復元されないため、元々のブートチェーンが維持されます。そのため復元後は、維持された元々のブートチェーンが新たに書き込まれたiOSの起動をできないため、デバイスは起動を停止しリカバリーモードとなります。(Sund0wnやGeekGradeではこの調整が実行されています。)

起動するためにはLimera1n Exploitを利用してデバイスをPwned DFU Modeに入れ、redsn0w等でデバイスにブートチェーンを送り込み、Just Bootする必要があります(Tethered)。この動作は再起動するたびに毎回必要です。

この方法では起動するために毎回母艦からブートローダーを送信しなければならない、A4デバイス以外では使用できないため、後述のデュアルブートによる方法をお勧めします。

デュアルブート

任意のiOSを起動させる方法としては、kloaderを利用してDual(Multi) Bootをする方法もあります。

任意のiOSをデュアルブートするためには、デバイスのパーティションを分割し、新たに生成した領域に任意のiOSのRoot FileSystemをインストールします。

Untethered(紐なし)での起動方法は2つ存在します。

一つはNOR Baseのもので、あらかじめ復元時にデュアルブートするiOSを起動するためのカスタムイメージを復元し、kloaderを利用しでパッチをしたLLBからカスタムイメージを起動してiOSをブートする方法です。これはあらかじめiOSの復元が必要です。

もう一つはOTA Updateの仕組みを利用したものです。パッチされたiBSS/iBECをmulti_kloadeを使ってロードしてiOSをブートします。この方法はiOSの復元は不要です。CoolBooterなどはこちらを採用しています。

どちらの方法でもkloaderを使用するため、32bitデバイスでJailbreakが必要です。

利用可能なデバイスと使用するツール

kloader/multi_kloader

by winocm

Device: Jailbreak済みの32bitデバイス。(tfp0/hgsp4が有効であること。)

kloaderを利用して、復号化されたイメージをRAMにBootstrapし、新しくインストールされたiOSを起動します。

デュアルブートを利用した擬似ダウングレード

デュアルブートを行う場合には、デュアルブートするiOSしか利用しない/通常のiOSは使わない/SHSHがないため仕方なくデュアルブートをしている/etc..といった場合があるでしょう。

デュアルブートをする方法の重要部である、kloader実行部分をブートプロセスに組み込むことで擬似的にSHSHなしのダウングレードを実装することもできます。

**CoolBooter Untethererをインストールすることで、かんたんに実装できます。

・起動順序

色分け: 通常のiOS, デュアルブートするiOS

電源ON->通常のiOSのブート(Signed)--Jailbreak(untether実行)-->SpringBoard起動(Jailbroken)->MobileSubstrateでkloaderを起動---LLB(unsigned)ロード->iBoot(unsigned)->kernel(unsigned)->iOS起動

f:id:diosra2:20180125123506p:plain

 

再起動後にMobile Substrateを利用してSpringBoardが起動した時点でkloaderを自動で実行させること(上記太字下線部)で、電源ONからデュアルブートしたiOSを起動するまでの手順が自動化されます。

(要約すると、電源ONするだけでデュアルブートしたiOSが起動します。)

セーフモードで起動させることでMSのdylibのロードを阻止して通常起動させることもできるため安全に実行可能かと思います。

条件として、通常起動するiOSは完全脱獄である必要があります。

欠点としては通常の起動の約2倍、時間がかかります。A4デバイス以降は署名されていないファームウェアのブートができないため、目当てのiOSを起動するためのカスタムイメージの起動に、通常iOSが起動する時間分が犠牲になります。この問題の解消には24kpwnのようなBootRom Exploitなど、強力なローレベルのExploitが必要になります。

その他、高バージョンのiOSをデュアルブートで起動する場合は問題が起きる場合もあるため注意が必要です。

 

ポイントとして、kloaderにはaxi0m氏のものを使用します。

GitHub - axi0mX/ios-kexec-utils: boot LLB/iBoot/iBSS/iBEC image from a jailbroken iOS kernel

このkloaderは実行後、2秒程度で自動でデバイスを起動できるため、すべての動作を自動化する場合はこのkloaderが必要です。(通常のkloaderでは実行後にホームボタンなどを押す必要がある。)

 

64bitデバイス

64bitデバイスではSHSHなしでiOSをダウングレードする方法は存在しません。

 

 


Copyright (C) 2017-2018 Diosra2. All Rights Reserved.