2010年02月一覧

PS3のGeohot exploitの使い方(ハードウェア編)チュートリアル

xorloser’s blogで、Gehotz氏のPS3 exploitチュートリアル:ソフトウェア編に続きハードウェア編が公開されていました。【情報源:xorloser’s blog

ブログの文字数制限につき翻訳のみでお伝えします。


PS3 Exploit: ハードウェア

この記事はPS3 hypervisorのメモリアクセスexploitに必要なハードウェアに関する記事です。ハードウェアの目的は変わってほしくない値をPS3が保存しないようにすることです。PS3は値に変化があるとその値をRAMに書き込みます。そのため変化した値の書き込みを止めるために書き込みすることを止めてやる必要があります。

PS3はコントロールライン経由でRAMに対し書き込みコマンドを送ります。ですのでコマンドが送られた時にコントロールラインでそれを阻止しなければなりません。必要なのはPS3に正常にRAMへ書き込めたと思わせることですが、RAMはコマンド受信を阻止されているので実際にはコマンドを受け取っていません。そのため書き込み動作は行わないことになります。

コントロールラインでコマンドを阻止する最も簡単な(比較的安全でもある)方法はグランドに落としてしまうことです。これはコントロールラインとグランドとを配線してしまえば済んでしまいます。厄介なのはタイミングを正確にとることで、そのタイミングさえ間違わなければ書き込みを任意に阻止でき、その前後では何も起こらず通常動作していることになります。本来これは高額な機器を投入して膨大な時間をかけないとできないはずですが、Geohotz氏は”幸運”という最も簡単な方法でこれをやってのけたようです。正確な書き込みコマンドのタイミングが現れる状況を幾度となく再現し、書き込みが行われないタイミングで起こるクラッシュが発生するまでコントロールラインをグランドに落とす作業を幾度となく繰り返さないとなりません。exploitはそれを確実に実行するためのトリガーとして機能します。

どうやって動作するかはもうお分かりですね。繋いだらグランドに落ちるようなコントロールラインの配線と、グランドに繋がった配線が必要です。更にこの2本の配線が瞬間的に接続されるようにしてやる必要があります。ただ、接続を手動でいくらがんばったところでどんなに速くてもミリセカンド単位です。しかしRAMコントロールラインの速度は非常に速く、1msの間にかなり大量のコマンドを阻止してしまいます。そのため手動ではなく、1回が非常に短い時間だけ繋がるようななんらかの機器を使ってやる必要があります。Geohotz氏は接続時間を40ns(ナノ秒)としています。

このようなごく短時間というのを実現できる機器は実は沢山あります。Geohotz氏の場合はFPGA基板を自作しています。555タイマーを使えばいいという人もいますが、それで成功したと言う話は聞いたことがありません。私の場合は以前あるプロジェクトで使っていた小さなsx28 microcontrollerを使いました。20nsの命令サイクルが50MHzで動作します。40nsで接続するだけなら十分な速度が出せます。

最初のステップは、マザーボードの表面にアクセスできるようにするためにPS3を分解するところからはじめます。PS3のバージョンごとに異なりますが、マザーボード上にある後述する場所を探します。

最初の写真は初期型60GBのHDDを搭載したPS3で、USBポートが4つありカードリーダーがついているバージョンです。レジスタのサイドにワイヤーをハンダ付けしているのが分かると思います。これがハンダ付けで配線が必要なPS3のRAMコントロールラインです。2本の電源プラグの出っぱりが左側にくるこの配線ルートの通りにワイアーを配置すると良いでしょう。写真ではワイヤーは下に伸びていますが、実はそうすることで偶然RAMが改変してしまう悪影響があることが分かりました。そうならないために配線ルートを電源プラグの裏の左側を通すようにし、PS3ケースの左側がらワイヤーを取り出すようにしてください。インストール時に長めのワイヤーを使っても構いませんが、最終的には設置完了後に短くしてください。ワイヤーはハンダ付けポイントが引っ張られることがないようホットボンドを使って配線を固定してあります。
old_ps3
2番目の写真は80GBのHDDを搭載したPS3で、USBポートが2つありカードリーダーがついていないバージョンです。このモデルはPS3″Slim”モデルが出る直前の”Fat”モデルです。それ以前のマザーボードのように片面に4つのRAMチップが載っているのとは異なり2つのRAMチップがマザーボードの両面に搭載されています。写真ではRAMコントロールライン接続のためのハンダ付けポイントに印をつけてあります。ここにハンダ付けするためにはクラフトナイフを使い注意して配線パターン表面を削りワイヤーがハンダ付けできるよう銅線をむき出しにしておく必要があります。ハンダでワイヤーを取り付けたらPS3の他のパーツに一番干渉しない直線ルートでケースの正面から取り出してください。初期型同様最終的にはワイヤーは短くなるよう処理してください。
new_ps3
次にグランド接続の作業をします。新旧どちらのマザーボードも同じ方法で簡単にできます。単にワイヤーを、マザーボード表面にあるメタルシールドにねじを切ってあるところに入っている金属ねじへ巻き付けて共締めするだけです。ハンダ付けは必要ありません。ねじの頭の裏側に巻き付けてねじと一緒に締めるだけです?そのワイアーはコントロールラインのワイヤーと一緒のルートでケースの外へ取り出してください。

上記2本のワイヤーはハードウェアトリガーとなる機器へ一緒に接続します。以下は私が使ったハードウェアトリガーでの説明になりますが自分の好きな機器を使ってもらって構いません。最初私がワイヤー配線の近くで5V電圧をかけたところ、コントロールラインに予期せぬ妨害が発生し起動時にPS3がクラッシュしたので注意してください。

私が使用したハードウェアトリガーはSX28 microcontrollerで、何年か前に購入したプログライングキットに付属していたものです。このSX28を使うにはSX28チップとチップにプログラミングするためのもの(通常はSX-KEYSX-Blitz)、SX28チップを50MHzで動作させるためのオシュレーターが必要です。これら必要なものは上記プログラミングキットに同梱されています。大勢の人が買ってくれたら私xorloserのおかげですから、SX-keyのUSB版をくれると言ってくれないだろうかと期待してます。何しろ私のは古いシリアル版なので?

以下はWindowsのペイントで作成したため安っぽいですが私の作った回路図面です。私は先に述べたプログラミングキットを使いSX-Key programmerをSC-Keyを取り付けてオシュレーターとして利用しました。外部オシュレーターは使っていませんのでそれについては分かりません。いずれにせよチップを動作させるためにはオシュレーターかSX-Key付きのいずれかが必要です。
SX28Processor
このSX28のソースコード(注:元記事への単なるリンクにしてあります)はパズルで言うところの最後の1ピースです。ParallaxにあるフリーのSX-Keyエディタソフトウェアを使ってSX28チップをプログラムします。PS3の準備ができたらスイッチを押して”パルス”(コントロールラインをグランドに落とす)を送り込むことが出来ます。ボタンを押してしまえばスイッチが繋がっている限り100msごとにパルスを送り続けます。回路図面の右側にあるLEDが動作の様子を示してくれます。パルスが送られている時LEDが光り、回路がきちんと動作しているのが分かると思います。私が作ったSX28のソースコードを見れば360ns長のパルスを送っていることは分かるでしょう。パルス長を測定する機器を(今は)持っていないので正確にどのくらいのパルスが送られているのかは分かりません。ポートの向きが変わる時にハードウェアがディレイを誘発させている可能性がありますが、360nsの待ち時間があってもおおよそ40nsのパルスは送っていることになります。360nsという値はトリガーできないようになる短い値を可能な限りいろいろ試してみて、そこから少し増やしていき一番短いパルスになった時の値です。

ふーっ、ようやくこれで記事は終わりです。次に記事を書くときは自分でダンプするためのソフトウェアやらとかの話になるでしょう。では。


あまり詳しくない分野の記事を翻訳する時にはだいたい事前に調べてから書くようにしています。が、ハードウェアはちょっとハードル高いです。100msごとに360nsで40ns?親切なチュートリアルだと思いますがPS3 exploitチュートリアル:ソフトウェア編の時に感じた「いっちょやってみるか!」的前向き意思を自分の中に感じませんでした。
あー、このことか、40nsのパルスって!とひらめいた方は是非試してみてください。もちろん自己責任で。
ふーっ、長文は疲れる。

誰か試してGameGazにトピック作りませんか?←人任せ



PS3 Slim スーパーオークション落札情報

ゴザール
『【ゴザール】1円スタート!PlayStation3/プレイステーション3『HDD 120GB CECH-2000A』【同梱不可】』
30,000円で落札されていました。(入札件数:39)

ゴザールはゲーム機スーパーオークション初登場で知名度が低いため入札件数が非常に少なく、近年まれに見る瞬間最大風速最安値が飛び出す条件が揃っているように見えました。正直に言うと20,000円前後の価格もあり得ると思っていました。
…定価オーバーでぶち壊されましたが。

過去のゲーム機スーパーオークションの落札相場情報はゲーム機ごとにカテゴリ分けしてあります。落札するためには過去の相場を知る事が重要です。

Playstation3入札のための価格参考情報
PS3リンク小Playstation3 楽天市場の最安値リスト
[自動更新]
表示された価格より安くなる価格で入札しましょう


現在開催中のクローズドオークション
楽天懸賞市場でゲーム機多数出品中



DSi スーパーオークション落札情報

ベル・コンシェルジュ
『★2月7日終了★ニンテンドー Nintendo DSi 本体★新色レッド★RED★赤★新タイプ★即出荷可★任天堂★プレゼントに最適★1円スタート★新品★送料無料★』
16,918円で落札されていました。(入札件数:71)

過去のゲーム機スーパーオークションの落札相場情報はゲーム機ごとにカテゴリ分けしてあります。落札するためには過去の相場を知る事が重要です。

DSi入札のための価格参考情報
DSリンク小DSi 楽天市場の最安値リスト
[自動更新]
表示された価格より安くなる価格で入札しましょう


現在開催中のクローズドオークション
楽天懸賞市場でゲーム機多数出品中