Saurikが3GSの3.0へのダウングレード方法を確立した際に、作業方法をまとめた記事。
かなり時間をかけて書き上げたようで、大作である。
なんか前置きは長いが、後半にはJailbreak手法の理解に、役に立つ情報がたくさん含まれている。
一部翻訳したので、ご参考までにまとめておく。
なお、スターウォーズのような一大ストーリーになっており、全部はとても訳せないので、実用的なセクションだけ翻訳した。
The Next Hope、The True Enemy、The Point of Jailbreaking、An Exploit a Day…の章については省略。壮大なストーリーを楽しみたい方は、原文をドゾー。
では、以下超訳(部分訳):
Caching Apple’s Signature Server
最初に言っておくが、友愛wの精神に基づいて、なにか問題があっても、私にメールを送らないでほしい。代わりに、この記事のために、ModMyi.comに3G[S] Downgradingという特別フォーラムを作ったので、そっちへ行ってほしい。
The Signature Server
AppleはiPhone 3G[S]で、jailbreakに対して、強力に打って出る決断をした。ローカルでの新しいプロテクトを行うだけでなく、デバイスの復元時に毎回、(ファームウェアが)正当なものであるかどうか、Apple自身で照合を行うことを決めた。
これを行うために、復元のプロセスを実行中に”Verifying restore with Apple…”がユーザに表示される。この間、iPhoneとAppleサーバの間で、チャレンジ・レスポンス・プロトコルが使用される: ファームウェアの” 部分的な要約”がサーバへの送信に利用され、照合結果によって署名の可否を決定する。
これにより、Appleはカスタム・ファームウェアが、機器に導入されることを防ぐことができる。また、現行のファームウェアに、将来ダウングレードすることを防ぐことも可能になる。そのためには、単に署名を拒否すればいい。たとえば、iPhone OS 3.0に戻すような場合だ。
でも、このモデルを強固なものにするためには、そのシステムを、単純な”replay attack”に晒されないようにする必要がある。: アップルの署名を保存しておいて、後でそれを送り返すようなやり方だ。これは”初歩的な攻撃”で、いくつかの方法によって、簡単に防ぐことができる。
For a Purple Ra1ny Day
Apple’s 3G[S]のセキュリティ・メカニズムは、そこへ到達できていない。シンプルな乱数を使うのでなく、デバイスごとに特定のチャレンジをハードコードしている。ここで使われる特定の数値は、デバイスの”ECID”、”ユニーク・チップ ID”になる。ECIDは、これまで発売されたすべてのデバイスが持つIDであったにもかかわらず、これまで使われたことがなかった。
つまり、現状Appleが”OK”と判断する(判定結果として、必須のSHSHを含むBLOB、署名ハッシュを返す)ファームウェアであれば、誰でも、割り当てられたECIDを使用して、Appleの署名サーバに署名を行わせ、結果を永久に保存することができてしまう。
実際に必須となる署名済みファイルは、たった1つだけ ;P これがiBSSであり、iBootの形式のひとつだ。ECID/iBSS署名が入手できれば、バグのあるコードを利用して、引き続きjailbreakすることができる。
これが実際にpurplera1n.comが行ってきたことだ: iBSSファイルのための、最低限必要な署名ハッシュだけを返す。それだけで、将来だれかがその署名ハッシュを利用したツールを書くには十分だ。
Personalized Firmware パーソナライズされたファームウェア
iTunesはこれらのBLOBを使用して、ECID、SHSH、SHSHおよびCERTをファームウェア・ファイルに統合し、”パーソナライズ”している。
多くのユーザが、この”パーソナライズ”の仕組みを利用して、慎重にiBSSとiBECファイルを拾得したことと思う。このプロセスで作られるiBSSファイルは、purplera1nydayファイルと比べて、別段多くの情報を含んでいない。
しかし、残念なことは、この情報は必要十分ではあるが、簡単にjailbreakできるというわけでもない。誰かが、これらのファイルを利用する、jailbreakのための特別なツールを書いてくれなければ、ここから先へは進めない。
Your iPhone 3G[S] has an ECID SHSH on file.
実際に必要になるのは、iTunesで復元に必要となる、パーソナライズされたファームウェアのすべてを保存することだ。(現実的には、フルセットのSHSH BLOB) 現時点で、iTunesを使えば通常のデバイス復元を行うことはできる。
この機能は、ギリギリの時点でCydiaで提供できた: CydiaがECIDとAppleサーバを利用して署名した、フルセットのSHSH BLOBを生成した。
これにより、50,000を超える3G[S]の、ECID SHSHを取得、保存できた。そしてこれらを利用した、iPhone OS 3.0への無期限ダウングレードの準備ができた。
A Narrow Window
残念ながら、リリースのタイミングが遅かったため(効率的に実行するための手法を見つけるのに時間がかかった)、Appleによる署名終了に間に合わず署名済ECIDを取得できなかったユーザも多かった。
これらのユーザは将来、3.0のままでいることも、ダウングレードもできないことを意味する。しかし、3.1のexploitが発見されたとのうわさがある。
つまり、まだいつかはわからないが、ユーザはiPhone OS 3.1上で、3G[S]のjailbreakができることになる。
この手法をサポートするために、今夜からCydiaで、3.1ファームウェアを利用したECIDの保存を開始する。将来、ユーザが再びAppleにLock outされた時の手段を準備するために。
それまでには、何十万ものユーザが、Appleの『情報浄化作戦』に対抗できる準備ができていることだろう。
Bypassing the Overlord
私はAppleの署名サーバの機能を模倣したサーバを構築した。相違点は、ライブリクエストではなく、ファイルとして保存する点だけだ。
今必要なのは、iTunesがこいつを利用できるようにするだけだ。幸運なことに、多くのOSではhostsファイル経由で、特定のホストへのバイパスを設定できる。これを利用して、Appleの署名サーバへのリクエストを、Cydiaにリダイレクトする。
Windowsの場合:
C:\Windows\System32\drivers\etc\hosts (Windows)
Mac OS Xの場合:
/etc/hosts
の最後に、以下のエントリを追加する
74.208.105.171 gs.apple.com74.208.10.249 gs.apple.com (変更になっているので注意)
これで、iTunesがAppleと通信していると思っているとき、実はCydiaにつながっていることになる。この方法により、すでにCydiaに”on file”機能で保存された署名にアクセスできるようになる。
このサーバは、Appleのサーバとの中間に位置して、どのSHSH BLOBに対しても、キャッシュとしても働く機能を持っている。この働きにより、あなたのデバイスを、”on file”の仕組みとともに、効果的に登録する。つまり、jailbreakしていない環境からでも、ファームウェアのダウングレード方法を確保することができたということだ。
強調しておく:もし、jailbreakそしていなくても、する気がなくても、新しい”on file”サービスを検討する価値がある。
たとえば、将来AppleがOSアップグレードをリリース、あなたがそれを導入し、なんらかの理由で重要なものが壊れてしまった場合。メールアカウントや、Todo listとか。ビジネスに支障がでる。
ダウングレードができれば、問題がないのだが、Appleはもうサポートしてくれない。そこで、あたらしい署名サーバの出番: このサーバで復元することにより、Appleからの不必要なアップグレードを、確実に回避することができる。
Performing the Restore
“3.0 IPSWを利用して復元” と同じぐらい、プロセスが簡単だったらいいと思うが、そこまでは甘くない。最初の問題は、3.1から3.0へのダウングレードは、必ずDFUモードで行う必要があることだ。
作業開始:
ロック(電源)とメニュー(Home)ボタンを同時に10秒間押し、次にロックボタンだけを離す。iTunesが” iTunesは復元モードのiPhoneを認識しました”のメッセージを出すまで、メニューボタンは押し続ける。iTunesで利用する前に、まずこのiPhoneを復元する必要がある。
この時点でiPhoneの画面は真っ暗になっているはずである。多くの人が、”DFU”を”リカバリー”と混同しているが、この2つは大きく異なるものだ。(実際のところ、iTunes自体がこの誤解に拍車をかけている) iTunesロゴと同期ケーブルや、Steve Jobsが文句を言っているイラストとかが表示されていたら、リカバリーモードなのでやり直し。
まず、最初に”通常”の3.0ソフトウェアへの復元を行う。最初に、Mac OSXならoptionキー、WindowsならShiftキーを押しながら、iTunesの復元ボタンを押す。ファームウェア(おそらく iPhone2,1_3.0_7A341_Restore.ipsw という名前)を選択すれば、復元作業が開始される。
“unknown error (3002)”が表示された場合、あなたの3.0 ECID SHSHがCydiaに ”on file” されていない可能性がある。残念ながら、Appleはもう3.0ファームウェアに対して署名をしてくれないので、あなたのデバイスをCydiaに登録する方法はない。
運良く、iPhone OS 3.1で別のexploitへの脆弱性が確認されたとの報告がある。これにより。3.1用のjailbreakがリリースされれば、OS 3.0で署名が保存できなかったユーザーも、将来のjailbreakに備えることができる。
1回でもこのサービスを利用しようと試みていれば(Cydia上で、”make your life easier”と答えていれば)、署名トラッカーに記録され、Cydia HQが復元のためにベストを行うはずだ。
もう一度お願いしておくが、このプロセスで何か問題があった場合、頼むから私にメールしないで欲しい。代わりに、ModMyi.comの、この記事の特設フォーラム、3G[S] Downgrading へどうぞ。
NAND Format Invalid
もし3.0を使っていた場合、このプロセスは、問題なく進められるはずだ。だが、すでに3.1にアップグレードしていた場合、妙なエラーに直面することになる。
“The iPhone “iPhone” could not be restored. An unknown error occured (1015).”
これは想定されている振る舞いだ。
ご興味のある方向けだが、このエラーは、3.1によりNANDストレージのある区画が整理され、3.0 iBootでは解釈できなくなっている事による。USBでつないで、iRecoveryを実行して確認したところ、下記のメッセージを見ることができた。(誤字はAppleによる)
[WMR:ERR] NAND format invalid (mismatch, corrupt, read error or blank NAND device) [WMR:ERR] boolSignatureFound false boolProductionFormatVerified true nSig 0x0 ****************************************************************************** ****************************************************************************** AND: NAND initialisaton failed due to format mismatch or uninitialised NAND. AND: Please reboot with reformatting enabled. ****************************************************************************** ****************************************************************************** NAND FTL failed initialisation
最初にこの問題がおきたとき、“reboot with reformatting enabled”に、どう対処するべきか、MuscleNerdと時間をかけて考えた: この問題への対処で、非常に重要な時間を失った。修正後もブートできず、2回目の復元を実行しなければ、プロセスを終了できなかった。
しかし、結果として2回目の復元をしたら、NANDが正常にフォーマットされることがわかった。そこで、他に色んなことを試みてみずに、普通に3.0ファームウェアを指定して、2回目の復元を開始してほしい。(今度はリカバリーモードでかまわない: DFUは必要ない)
Stuck in Restore
残念ながら、この2度目の復元も失敗する。(*ため息*) ムカツクことに、まったく同じエラーメッセージが表示される。
“The iPhone “iPhone” could not be restored. An unknown error occured (1015).”.
これもまた、想定される振る舞いだ。
また、興味のある方向けの話だが、何が起きているかというと、デバイスがオンになったとき、次に何を実行するか決定する必要がある: ブートプロセスを継続するか、USB経由で指示を待つか。これは、NVRAMの変数、auto-bootによって判断されるが、この時点で”false”に設定されている。
通常、復元プロセスの最後でこの変数はセットされるのだが、技術的には我々は復元を終了できない: 私見だが、3.1のインストールにより、3.1ベースバンド(現在はまだアンロックできない) にアップグレードされる。3.0とマッチしないベースバンドのために復元に失敗していると思う。
ともかく、これが復元の最後の手順になる。技術的には我々の勝利だが、3.0へのダウングレードには、この1015エラーが付き物となる。
Jailbreak with redsn0w or purplera1n
この時点で、あなたには3つのオプションがある。1つめはiRecoveryを利用して、手作業でfsbootを実行する方法。2つめは、iRecoveryでauto-bootを”true”に設定する方法。3番目は、デバイスをすぐにjailbreakする方法だ。
まっすぐ3番目のオプションに向かってくれ。(jailbreak)。iRecoveryをコンピュータ上で動作させる方法を、ここで紹介する気はない。;P (実際のところ、まだ私のWindowsマシンでは動いてない)
この時点で、好きなjailbreakツールを使って、デバイスをjailbreakして構わない。
おめでとう。あなたはオーウェルの支配者を打ち倒し、自分のデバイスへのコントロールを取り戻した。
今日はここまでだ。我々は勝利する!
Copyright © 2008–2009 — Jay Freeman (saurik)