Fusée Gelée Launcherとペイロードいろいろ

fusée gelée(fail0verflowのShofEL2も同じです)とはSwitchに用意されたリカバリーモード(RCMモード)に存在する脆弱性で、USB接続したSwitchで使用できます。本来ならbrickしたSwitchのリカバリーのために用意されているものですが、ここに脆弱性が存在していました。本来ならリカバリーモードといえど署名チェックが入りユーザーが任意のコードを流し込むことはできないのですが、USB接続した際の脆弱性のおかげでこれが可能になりました。

Fusée Geléeの解説PDFによると、Team ReSwitchedとしてはFusée Geléeの公開日は遅くとも2018年6月15日または他のグループが同じ脆弱性を公開したときのいずれか早い方という想定だったようです。結果としてTeam ReSwitchedもfail0verflowチームもほぼ同時に動いたため突然Switchシーンが大きく動き出した形になりました。

Team ReSwitchedはPoC(Proof of Concept:検証工程)としての公開でしたが、Switchシーンはこれに触発されてペイロードランチャーやペイロードそのものなどがリリースされるようになってきました。今日はその一部をご紹介します。

RCMモード

まずはSwitchのリカバリーモード、RCMモードへの入り方についてです。

Nvidia Tegraにはもともと起動しなくなった時に備えてリカバリーモードが用意されていました。デバイスによってその起動方法は異なりますが、通常は起動時のボタンコンボ(複数ボタンの同時押し)で使われます。Switchの場合は起動時にボリューム+ボタンと電源ボタンとHOMEボタンの同時押しでした。SwitchはeMMC Flashメモリが別基板になっているようですが、そのeMMCが取り外されていても起動時にRCMモードで立ち上がるようです。

Switchの場合、電源ボタンとボリュームボタンはディスプレイのある本体上部に並んで付いていますが、HOMEボタンは右側Joy-conに付いています。ボタンコンボはプロセッサのある基板側でのみ有効なためJoy-conのHOMEボタンでは機能しません。右側Joy-conの本体取り付け部にあるピンをショートすることでHOMEボタンを押したことになります。いわゆる隠しHOMEボタンが用意されていたのです。このボタンコンボを簡単にできないようにするためにJoy-con側にHOMEボタンを付ける設計をした可能性もあります。

隠しHOMEボタンは写真のJoy-con取り付け部の下側奥にあります。ディスプレイ側から1番ピンで全部で10本あり、このうち10番ピン(一番背面側に近いピン)をGNDに落とせばいいらしく、10番と7番(または1番)の短絡でも良いそうです。
Switch_HOME_pin

SwitchX PROの写真を見ると、10番ピンと7番ピンを短絡しているように見えます。もし自作するなら1番10番の両端短絡の方が楽な気がします。
switchx pro

Fusée Geléeの詳細が未公表の段階では隠しHOMEボタンを押したことにする治具を「MODチップ」とお伝えしていましたが、実際にはチップにプログラムを書き込むのが一般的なMODチップなどではなく端子短絡する単なるジャンパーです。

海外の掲示板redditでは、このピン短絡ジャンパーを自作する動きが出ています。これは1番10番ショートですね。
Handmade pinshort
Handmade with Switch

また、eBayではすでにジャンパーが販売されているのも見つけました。Switchのロゴをあしらっているところがいい感じです。これも1番10番ショートです。
eBay

簡単な作業だと言われていた「ハンダ付けありバージョン」は、単にこの端子を外に出すだけだと思います。

USB exploitによるペイロードランチャー

SoCとしてSwitchに採用されているNvidia Tegraの脆弱性を利用したfusée geléeでは、SwitchとPCをUSB接続して非署名のペイロードを実行させることができます。

ReSwitchedチームのTegra X1 bootROM exploitを使ったペイロードランチャーfusee-launcherがリリースされ、これを改良する形でいくつかランチャーが公開されました。

●rajkosto氏のWindowsでSwitchをRCMモード(リカバリーモード)でUSB接続しfuseeペイロードを起動するTegraRcmSmash
TegraRcmSmashを利用するにあたり、まずUSBドライバーのインストールが必要です。

1) SwitchをRCMモードで起動しWindows PCにUSB接続する。Windowsのデバイスマネージャーには”APX”と表示される。
2) https://zadig.akeo.ie/からドライバーをインストールするためのアプリケーションZadigをダウンロード
3) ZadigのデバイスリストからAPXを選択する。APXが出てこない場合はOptionsのList All Devicesにチェック入れる
4) DriverのテキストボックスでlibusbK (v3.0.7.0)を探して選択する
5) ドライバーインストールボタンを押してインストールするとWindowsのデバイスマネージャーでibusbK USB DevicesツリーのアイテムにAPXが表示される

ドライバーのインストールが完了したら、Windowsのコマンドプロンプトで
TegraRcmSmash.exe [-V 0x0955] [-P 0x7321] [–relocator=intermezzo.bin] [-w] inputFilename.bin
と入力し実行します。

ただし、SwitchがRCMモードの状態でWindows PCとUSB接続されている場合はTegraRcmSmash.exeにペイロードをドラッグ&ドロップするだけで良いようです。これらのツールは開発者間ではLinux向けで開発されていたようですが、一般的なWindowsに対応したことが大きな進歩です。

●DavidBuchanan314氏のFusée GeléeペイロードをAndroidにUSB接続したSwitchで起動するためのFusée GeléeランチャーNXLoader v0.1
NXLoaderの使い方は以下です。Android側にroot権限は不要です。
1) AndroidでNXLoaderを起動する
2) Configタブでペイロードファイルを選択する
3) USB HOST機能を使い、USB OTGケーブルで AndroidとSwitchを接続する。なおUSB HOSTが使えないAndroidでは利用不可。
4) SwitchをRCMモードで起動し、アプリにUSBデバイスへのアクセス権限を付与する。

●atlas44氏のfusee-launcherをJavaScriptに移植し、ウェブからPCに接続されたUSBデバイスに直接アクセスするWebUSBに対応させたweb-fusee-launcher
web-fusee-launcherの使い方は以下です。
1) SwitchをRCMモードにしてPCに接続する
2) ウェブサイトでペイロードを選択(またはアップロードするペイロードを選択)する
3) Do the thing!ボタンをクリックする
4) 画面が表示されたらAPXを選択してconfirmをクリックする
web-fusee-launcherのサンプルページがあり、WebUSBでのハックが体験できます。

Fusée geléeのペイロード

ペイロードは一言で言うと実行するデータです。usée geléeで実行するペイロードはどんな機能を持たせるのかによりそれぞれ異なります。

●rajkosto氏のfusée geléeで使用するeMMCのコンテンツを復号するSwitchの本体ごとに固有の値として保存されているBIS keyをダンプするbiskeydump
BIS keyとRawNand.binをHacDiskMount(後述)で閲覧またはモディファイが可能です。ダンプデータ自体暗号化されていますが、biskeydumpを使えば復号するためのBIS keyが入手できますので、HacDiskMountに設定しておけば自分のSwitchのダンプデータであれば復号することが可能です。HacDiskMountでSwitchのeMMC NANDダンプの個々のパーティションを操作することも可能で、Windowsに特定のドライブレターでマウントすることもできます。

HacDiskMountはSwitchのNANDダンプデータを開くために必要ですが、ソースコードは公開されておらずexeファイルのみが配布されています。
HacDiskMount

fusée geléeを使ってもSwitchのeMMCに直接アクセスすることはできませんが、biskeydumpでダンプすることはできます。

●moriczgergo氏の基本的な機能のみのベアボーンダンパーfusedump v1

●moriczgergo氏のfusedumpにGPIOダンプも追加したmoonflower v1

●DarkMelman氏のLinuxディストリビューションであるUbuntu MATE(Ubuntuの派生品)が起動したRaspberry Pi 3向けのfusée geléeを実行するpythonスクリプトudev_rule_fusee_gelee_raspberry
スクリプトコードはGitHubで公開されています。

Linuxを起動させたRaspberry Pi 3にUSB接続でRCMモードのSwitchを繋げてスクリプトを実行するだけですが、事前にpythonでUSBアクセスするためのライブラリpython libusbをインストールしてからfusee-launcherを実行する必要があります。
Raspberry Pi 3に対応していますが、Linuxのカーネルにパッチを当てれば(やり方は後日公開するそうです)raspberry pi zeroでも可能です。

TegraRcmSmash、biskeydump、HacDiskMount、
これらのツールはコンパイルしたものがhttps://switchtools.sshnuke.net/で配布されています。ツールの実行にはVisual Studio 2017 用 Microsoft Visual C++ 再頒布可能パッケージがインストールされている必要があります。

ペイロードについては今後いろいろとリリースされてくると思います。

今回一気にいろいろリリースされていたので、まとめてみようと思って構成を考えたのが間違いで、ものすごい長文になってしまいました。読みにくいかもしれません。

『Fusée Gelée Launcherとペイロードいろいろ』へのコメント

  1. 名前:KIRA 投稿日:2018/04/30(月) 18:04:21 ID:386ebe416 返信

    いつも記事投稿お疲れ様です。日本語でハックの技術面を書くブログは他に殆どないので、有難いの一言です。
    (ペイロードを実行させルことができます、か…)

    • 名前:mamosuke 投稿日:2018/04/30(月) 21:47:59 ID:ddc473e79

      ルルル〜♪

      技術面と言っても基本は単なる翻訳で、時間がなくてできない「やってみた」系には及ばないのが悲しいです。