2016年9月14日水曜日

PS VIta をハックしよう

インロダクション

ずっとまえにこんな記事を書いた私がこのネタを逃すはずがなかった.
そもそも低レイヤに興味をもつ切っ掛けのひとつが PSP のハックシーンだったので,
そのハックシーンの人達がおおきく影響している PS Vita に興味がないわけがなかった.

その PS Vita だが,今年 2016 年の 7 月終わりになりにわかに動きを見せはじめている.

背景と経緯

以前は,PS Vita に内蔵されている PSP エミュレータについて,PSP のファームウェアのバグをつつく形で PSP の Homebrew を起動させることが主流だった.Homebrew はビールの自家醸造を指す単語だが,転じてハックシーンでは自作アプリケーションをコンソールゲーム機で動作させることをいう.PS Vita は PSP の反省からなのかゲームメディアもセーブデータなどを格納するメモリーカードも独自規格かつ暗号化されており,バッテリーを自分で取り外すことも不可能になっていた.
OS には *BSD ベースのものが採用されており(未確認.一部のソフトウェアスタックだけという話も.FreeBSD と NetBSD のふたつについてライセンスされている),ASLR も有効化されてるという.

だが,実はこの PS Vita に搭載されているブラウザのレンダリングエンジン,WebKit の改造版に exploit が存在しており,PS Vita でネイティヴに Homebrew が動作させられるらしい.

そんなこんなで去年登場したのが,Rejuvenate,若返りを意味するハックである.
Yifan Lu 氏によるハックで,PlayStation®Mobile 向けに作った Homebrew が未署名でも動作する.しかし,この PlayStation®Mobile のサービスは去年終了してしまい,Yifan Lu 氏もこの Rejuvenate の開発を停止した.なにより,導入が煩雑であった.

今回の手法

今回登場したのは,またもや Yifan Lu 氏による WebKit exploit で,その名前も
HENkaku(変革)である.
これはとても簡単で,ファームウェアバージョン 3.60 の PS Vita のブラウザで,
上記サイトにアクセスし install ボタンをタップすれば良い.
すると,PS Vita のホーム画面に,molecularShell というバブルが追加され,
VitaShell という PSPFiler を彷彿とさせるファイラーアプリが起動できる.
このファイラーアプリは FTP サーバを兼ねており,FTP を通して自作アプリを送りつければ何でもあそべる.
ちなみに,HEN (Homebrew ENabler) は PSP のハックシーンから使われている用語である.

実装

このハックの詳細は実は開発者が自らブログで詳解しており,PoC も載ってる.
JSArray というコレクションのソートをするメソッド内で toString() が使われており,
これにバグがあって任意コードを配置することが可能だったため,
任意コード実行脆弱性が発生したらしい.
しかも,どうやらカーネル exploit らしいという噂もある.

ちなみにこの穴はファームウェア 3.61 で即座に塞がれた.

バックアップゲーム

また,関連して,案の定というかゲームのバックアップとそれの起動手段が出現した.
これについてはゲームの海賊版を推進し,なおかつ PS Vita のハックシーンをあやうくし,
PSP のときのいたちごっこの再現になるので微妙なところである.
バックアップツールは Vitamin,Vitamin でバックアップしたゲームで使える,PSP のときのようなプラグインのサンプルが Amphetamine,ゲームをバックアップするときに Vitamin がアプリデータベースに注入するデータのコードネームが Morphine とまあ,
ネーミングセンスはあるけどクロい.
試してみた.
我が故郷島根を舞台にした角川ミステリーゲームのゲーム,「√Letter ルートレター」である.というかゲームこれしかまだもってない.
ちなみに,結果は起動に失敗.何かのモジュールが足りないようだ.libc.suprx など差し替えたりしてみると動くかもしれないらしいけどすくなくとも手元では失敗している.

なお,このツールは eboot.bin を復号する処理があるっぽいので少なくとも日本では限りなくクロである.試したものが動かなくてよかった.きっともう使わない気がする,使わないほうが良さそうだ.

開発ツール

Rejuvenate は PlayStation®Mobile を利用するため,Unity とか用意したりちょっと面倒だったらしい(試してない)べつに VitaShell なども動作してた模様. いまは開発停止してるが,https://github.com/psp2sdk といった SDK が当時からあったようだ.
が,今回については PSPSDK のときみたく VITASDK が出てきた.
https://github.com/vitasdk
GNU Toolchain でサクサクっと使えるようだ.
https://vitadev.github.io/
こちらの成果をつかえば,上記 SDK がビルド済みバイナリで簡単に入るみたい.
追加情報:

関連項目

PSP のハックシーンでは有名で,氏のサイトは重要な情報の集積地と議論の場になっている,wololo 氏によって PS Vita の Homebrew コンテストが今日から開催される模様.
コンテスト名,GekiHEN(激変).合計 $800 の賞金が準備されているそうです.
http://wololo.net/2016/09/13/announcing-gekihen-homebrew-contest-ps-vita/
コンテストのレギュレーションや詳細はこちら

本記事執筆時点では早速最初のエントリーがあらわれていた.名前は luaIrc で,
PS Vita が IRC クライアントになるものだ.Lua Player により実装されている.
PSP の Homebrew の初期も Lua Player でいろいろ実装がされていた.

まとめ

色々手を尽くしセキュリティを強化したコンソールゲーム機であっても,バグは無くならないので思いもよらないところから突破される.これはなかなか教訓的だなあと感じるとともに,しかしこういった盛り上がりに興奮を隠せない悪い自分がいるのも見つけてしまうのでした.いやしかし,またなんでもありな感じになってきてしまいましたね……
既に ゲームボーイアドバンスやニンテンドー DS のエミュレータ,DOOM などが移植されています.