coding, photo, plant and demo

*PS3: Hacked

tech 20100127 201815
全メモリにアクセス可能になったとのことです。
iPhoneのjailbreakで有名なgeohotによる犯行。

彼のページによると、添付のカーネルモジュール *0 を足した後、
特定の配線に40nsのパルスを与えるとたまにexploitに成功するらしい。
失敗するとkernel panicになります。

パルスを与える場所はここ。

そりゃpanicになるしw


昔のPSPやiPhoneのように誰でもお手軽にというわけでもないから、
このままなら一般には影響にはないですね。

たったこれだけやるにも、CとlinuxのkernelとFPGAと簡単な電子工作の知識は最低限要ります。ちょっとコードが読める程度のにわかには最初の一歩すら踏み出せません。
それにこれだけ頑張ってもgame osがhackできたわけじゃないから、直接ゲームのコピーやgame os上のアプリ開発に繋がるわけではないです。

ただ、メモリの読み書きができている上でgame osを動かすところまで辿りつく可能性はあります。そうなれば最早何でもありでしょう。新たな脆弱性を見つけて一般のPS3も簡単にexploitする方法へ繋がる可能性も出てきます。鍵とかも手に入るだろうし。

なんとなくですが、現段階で外堀の半分くらいは埋まった印象です。


うーん、しかしexploit.cは読んでもサッパリ分からんね。
と思ったら解説があるじゃないの。

1. メモリ片 *1 を確保する
2 .そこを指すように大量 *2 のhtab *3 のエントリーに書き込む
3. 1で確保したメモリを開放する(この間は割り込み禁止)
4. この瞬間にメモリ制御バスにパルスを与える!
5. 上手くいけば、キャッシュからメモリへのライトバックが失敗し、hypervisorは開放したと思っているけど、r/wが許可されたメモリ片が手に入る(ここが最大のポイント)
6. そのメモリ片と重なるように仮想セグメントを作る
7. その仮想セグメントのhtabにメインセグメントのhtabに対するr/w許可を与える
8. 仮想セグメントに切り替えて、メインセグメントのhtabを自己書換えできるように変更する
9. セグメントを戻す
10. 制圧完了!!

この解説と、
Cell Broadband Engine アーキテクチャ
PowerPC Architecture Book
psDevWiki ps3:hypervisor
を参考にしながら読めばなんとかある程度は理解できそうです。
とはいえ、後半はキツイなあ。正直コードを読み切れてないです。


しかし、今までのtiff等ソフトの脆弱性を利用したhackとは根本的に違いますね。 *4
ハードウェアの物理的な脆弱性を突いてますからね。
こりゃどうしようもない気もします。
敢えて言うならlinux環境を出したのが失敗だったのか…
*0 : exploitが成功するまでひたすらループして上記の手順を実行するモジュール。成功すると全メモリにpeek,pokeできるhypervisor-callを提供する
*1 : 0x100000バイト
*2 : 書き込めるだけ最大0x10000個
*3 : htabはhashed page tableのことだと思われ
*4 : PSPのパンドラバッテリーはあれだけど