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 楽天市場の最安値リスト
[自動更新]
表示された価格より安くなる価格で入札しましょう


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



PSP-3000 スーパーオークション落札情報

ベル・コンシェルジュ
『★2月7日終了★PSP-3000 PW★パールホワイト★本体★プレゼントに最適★1円スタート★新品★送料無料★』
16,000円で落札されていました。(入札件数:99)

税抜き価格なので税込みにすると16,800円で、つまりは定価です。この価格なら落札できるに決まっています。落札した方の、入札時に付けるコメント欄に「わくわく♪」と書いてあるのを見ると気が抜けそうです。

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

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


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



PS3のGeohot exploitの使い方(主にLinux)チュートリアル

xorlosers blogで、Geohot氏のPS3 exploitをPS3の全ファームウェアに対応させる改良をしたexploitをリリースしていました。【情報源:xorlosers blog

Geohot氏のexploitを利用するにはLinuxをPS3にインストールしターミナルでコマンド入力をする必要があります。ちょうど修正版exploitと共にチュートリアルも記載してくれていますので翻訳してみました。文字数制限のため翻訳のみでお伝えします。


PS3 Exploit: ソフトウェア

皆さん御承知の通りPS3 hypervisorでメモリーアクセスするexploitが最近Geohotz氏からリリースされました。私も彼のハックを試してみましたが、Linux初心者のためうまくいかず色々苦労しました。私のように苦労している方の為に何をどうすればいいのか書いてみようと思いました。今回はこのexploitをソフトウェア面からお話ししてみようと思います。

Geohotz氏のexploitはv2.42のファームウェア用に作られています。そこでちょっと修正を加え全ファームウェア対応バージョンにしてみました。ただし私自身テストはv3.15のファームウェアだけでしかしていません。

修正版PS3 Exploitファイル 注:リンクは元記事にありますのでそちらからどうぞ。以下の記事内リンクも同様

まず最初のステップはPS3にLinuxをインストールすることです。この時点でPS3 Slimは非対応です。私自身何種類かのLinuxを試してみましたが、それぞれに問題が出ることが多く、結局Geohotz氏と同じUbuntu v8.10に落ち着くことになりました。今回は”サーバー”バージョンにはないGUIを持つ”alternate(代替)”バージョンを利用することをお勧めします。下記の636MBあるイメージファイルをダウンロードして下さい。Ubuntuサーバーの帯域を圧迫しないために合法的にtorrentを利用しています。合法ですよ。

Ubuntu for PS3 v8.10 alternate : Torrent

Ubuntu for PS3 v8.10 alternate : ダイレクトダウンロード

ダウンロード後イメージファイルをCD-Rに焼いて他のOSをインストールする方法と同じ方法でインストールして下さい。Ubuntuをインストールする方法などはあちこちにあるのでここでは割愛します。

Linuxインストールが終了したら起動させて、インストール中に入力したユーザー名でログインして下さい。そしてターミナルを開きます。(場所はApplications->Accessories->Terminalです).。ルートアカウントを有効にするために”sudo passwd”と打ってパスワードを作成してください。そこでカレントユーザーのパスワードを入力し、新しいルートパスワードを決めて2回入力します。これでルートアカウントが利用できるようになります。

次に”su”と入力します。ここで先ほど入れたルートパスワードを入力するとルート権限のアクセスができるようになります。まず全てのファイルを入れておくためのディレクトリを作成してください。ホームディレクトリに作成することも出来ますが、私はファイルシステムのルートに作成しました。そうすることで自分のPCからsamba(UnixをWindows互換のファイルサーバ/プリンタサーバにするフリーウェア)経由でアクセスしたりルートアカウントとユーザーアカウントの両方からアクセスしたりできるようになります。新規ディレクトリを作成するコマンドは”mkdir /ps3share”です。今回はps3shareにしましたが、自分の好きな名称でかまいません。 私がps3shareにしたのはsamba経由でPCからアクセスするために分かりやすくしたかったからです。次に全ユーザーに読み書きの許可を与えるために”chmod a+rw /ps3share”とコマンド入力します。最後にps3shareの所有者をノーマルユーザーアカウントにするために “chown username:username /ps3share”と入力します。chownはファイルやディレクトリの所有者を変更するコマンドで、usernameの所には自分のユーザーネームを入力します。

さて次はPS3に”修正版”exploitをコピーします。USBフラッシュドライブを使うのが簡単な方法です。解凍したファイルをPCでUSBフラッシュドライブにコピーしPS3のUSBに差してコピーして下さい。USBポートに差し込めばデスクトップに自動でマウントされます。デスクトップにマウントされたアイコンをダブルクリックすればファイルブラウザが開きます。ファイルブラウザでUSBドライブを右クリックし”Open in New Window”を選びます。ファイルブラウザの左側で “File System”、”ps3share”と選んでください。ここでUSBドライブのファイルを”ps3share”ディレクトリにドラッグしてコピーします。

今回やり方が分からないなど自分でビルドしたくない方向けにexploitのバイナリファイルも用意しました。初めにカーネルヘッダーの場所を修正する必要がありますのでbuild scriptsを見て下さい。コマンドは”mv /usr/src/linux-ports-headers-2.6.25-2/ /usr/src/linux-headers-2.6.25-2/”です。次にexploitソースのあるディレクトリにパスを変更します。コマンドは”cd /ps3share/ps3_exploit_fixed/src”です。 そこで”make”とコマンドを打ちビルドします。警告が多数出ますが”exploit.ko”というファイルが作成されます。

この段階でようやくexploitのソフトウェアを起動させることができます。GUIを使っているときには絶対にターミナルから起動しないでください。必ずコンソールモードからのみ起動してください。起動すると何も起こらないように見えますがPS3が突然遅くなり電源が落ちます。起動したらどうなるかについては今度記事を書こうと思います。

ターミナルで入力するコマンド まとめ:
sudo password
(コマンド入力後ユーザーパスワードを1回、ルート用の新パスワードを2回入力)
su
(コマンド入力後ルート用パスワードを入力)
mkdir /ps3share
chmod a+rw /ps3share
chown username:username /ps3share
(usernameのところは自分のユーザーネームに置き換える)
exploitファイルを/ps3shareにコピーする
mv /usr/src/linux-ports-headers-2.6.25-2/ /usr/src/linux-headers-2.6.25-2/
cd /ps3share/ps3_exploit_fixed/src
make

これで終了!


Linuxと聞いただけで確かに尻込みすることは多いでしょう。
ターミナルの扱いに慣れている方には大したことない話だと思いますが、こういったLinuxの知識がない方でもexploitを扱えるよう親切にチュートリアルを作成してくれたことは評価に値すると思います。

とはいってもPS3を分解してハンダ付けは必要ですから依然としてハードルは低くありません。しかも結果として得られるのはメモリーアクセスだけですから先はまだ長いのです。
PS3 Fatをお持ちの方で興味のある方は試してみてはいかがでしょうか。ただし、自己責任で(笑)