Xperia X10 miniのrootが取れた!…という話題から派生して、どうやらau IS01でもroot権限が取れたらしいという話を耳にしましたので、さっそく私も試してみることにしました。結果から言うと「root権限でシェルまでは入れたけど、いまのところはまだそれだけ」なのですが…。
※この穴はIS01の2010年8月24日付ケータイアップデート(01.00.05)で塞がれました
→その後別の穴を使ってまたrootが取れるようになりました
今回使われている権限奪取用のツール(exploid)は各機種用にカスタマイズされていますので、Xperia X10用のものをベースにバイナリエディタでIS01用に加工したものを用意します。
→IS01向けexploid(ダウンロード)
また、IS01のデバッグ接続とadbが使えるようにしておいてください。
準備が出来ましたら、
adb push C:\exploid_is01\exploid /sqlite_stmt_journals/exploidのようにして(C:\exploid_is01\の部分はexploidを置いたフォルダにあわせて変更してください)exploidを/sqlite_stmt_journalsに転送し、実行許可を与えます。
adb shell chmod 755 /sqlite_stmt_journals/exploid
adb shell /sqlite_stmt_journals/exploidそして、exploidを実行。
この段階では何もおこりませんが、ここでIS01本体側を操作し、無線LAN(WiFi)を一度OFFにし、再びONにします。exploidを実行した後にWiFiをON/OFFすると、その操作に潜む脆弱性を利用しroot権限のファイルが作成される仕掛けです。今回は /sh_tmp/ に rootshellというファイルが生成されているはず。
最後に、生成されたrootshellを起動します。
adb shellそして /sh_tmp/rootshell 、rootshellの起動パスワード「rootnow」を入力。
コマンドプロンプトが「#」になったら成功です。この時点でrootユーザとしてシェルが操作可能になっています。あとは以前インストールしたbusyboxを使うなどしていろいろ遊んでみましょう。
このときIS01は
- /sqlite_stmt_journals に脆弱性関連のファイルがいくつか書き込まれています(リセットで消えます)
- /sh_tmp にrootshellが入っています(tmpfsなのでリセットで消えます)
- /system のマウントがroからrwになっています(リセットで元に戻ります)
- exploidのプロセスが起動しています(リセットで消えますし、この時点でkillしても問題ありません)
ここまで出来たら、あとはSuperuser.apkといったパッケージを/system に配置していくなどすればいろいろと便利なのですが、IS01はここで大きな問題があります。/system がまた別の仕組みでさらに保護されているようで、Read/Writeでマウントしなおしたにもかかわらずまともに書き込むことができないのです。逆に、書き込みに失敗してファイルを壊してしまった…!と思ってもリセットすることで復活するのですが。rootになれても安心、とはよく言ったものというか…。
ともあれ、現段階で私が試したことと結果は以下のような感じ。
- /system にファイルを書き込もうとする
→空き容量が無いと言われ書き込めない - 大量にある /system/padding*.pad ファイルを削除しようとする
→削除時にエラーとなるがファイル一覧からはいったん消える。が、空き容量は復活せずリセットすると元に戻る - /system/usr/keylayout/SH_qwerty_key.kl を上書きで書き換えようとする
→すでにあるファイルの同サイズ上書きならどうかと思ったら、空き容量不足のエラーとなり当該ファイルのファイルサイズが0に。真っ青になったがリセットで元に戻る - 無線LANをアクセスポイントモードにしたりアドホック接続モードにしたりしてみる
→アクセスポイントモード(iwconfig wlan0 mode master)はどうしても切り替わってくれなかった。アドホックモード(iwconfig wlan0 mode ad-hoc)は、まれにうまく切り替わることがありきちんと起動すると他のPCとアドホックモードで通信できる。ただしルーティングは未テストのためあくまでもPtoP接続のみ。他のプロセスで常時無線の状態を監視・設定しているようで何度設定してもだいたいすぐに元に戻されてしまう模様。 - IS01でよくハングアップするsynergy_serviceプロセスをkillしてみる
→無線LANも使えなくなっちゃた!(もちろんリセットで復帰)
私がIS01でroot権限を使ってやりたいのは「キーボードのALTとSHIFTを入れ替える」のと「無線LANアドホックモードを使い、別途アクセスポイント無しでEye-FiとIS01を接続する」の2点。ざっと触った感触では、前者はまだまだ前途多難そう、後者はひょっとするといけるんじゃないかという感じ。
なにぶん私の知識と経験が不足していてまだまだ(私自身は)手探りの状態ですが、このexploidは「ここまで突破できれば…!」と期待をふくらませられる偉業であることは間違いないと思います。世界のハッカーほんとすげえ!