diosra2’s blog

iOSの脱獄、ダウングレード

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を起動できます。

 

Bootrom exploit

利用可能なデバイスと使用する脆弱性(iPhone 3GS/iPod 2nd)

0x24000 Segment Overflow

by 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

by axi0mX

Device: iPhone 3GS

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

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

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

 

iBoot exploit

A5/A6デバイスにはBootrom exploitはありませんが、iOS 7のiBoot exploitは存在します。このexploitはすでにパッチ済みなため、iOS 7のSHSHがない場合は利用できません。

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

De Rebus Antiquis

by xerub

Device: iPhone 5 (iOS 7.0.4), iPhone 4 (iOS 7.1.2)

未署名のコードを実行可能にするiBoot Exploitです。

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

 

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.