ニンテンドースイッチ&ニンテンドースイッチ2 ゲームのセーブデータやバージョンに依存しない新たなユーザーexploitが発見された件

記事の方法を試す前や質問をするまえに必ず下記リンクを見てからにしてください!
このブログについて
http://yyoossk.blogspot.jp/1970/11/blog-post_24.html


PS4とPS5における数々の脆弱性の開発と発見で知られる有名な開発者Gezine氏が発見
実績を持つ解析者のため、フェイクの可能性は低いと思われる

追記
このエクスプロイトを使用するには、スイッチ2で20.0.0以上のバージョンで、初代スイッチの互換性を有効にする必要があります
バージョン20.0.0を搭載した物理的なカートリッジは、アップデートをを手動で行うために必要です
とのこと
これで初代スイッチの互換を利用するということが分かりました
この情報を追加でつぶやいたということは、もしかすると下の方で書いたように、報奨金のみが目当てではなく、exploitを将来的には公開するかもしれないという、期待は持てるかもしれません

バージョン20.0.0を搭載した物理的なカートリッジは、アップデートをを手動で行うために必要ですとあるように、バージョン20.0.0のアップデートが入っているスイッチ2用の物理カードがあれば手動で本体をアップデートできるみたいですが、SDカードを使用するためには一度オンラインでアップデートしないといけないような仕様だと思うので、改造用に本体を確保したい場合は下記リンクを参考に本体をアップデートし、改造の準備を行う事
とはいえオフラインでSDカードを使用できるようにする方法が見つかるかもしれないので、オンライン経由でアップデートするかどうかは各々の判断になると思います

発売後の最新バージョンは20.1.1
この記事を投稿した時点では22.5.0
もしゲームカートリッジで本体をアップデートするならば、できる限り古いバージョンで発売されたゲームを購入しておく必要がある
WebKitやセーブデータ関連のエクスプロイトではない、初代スイッチ&スイッチ2向けのユーザーランドエクスプロイトを作成しました。
「でも、発売当初からすでにユーザーランドエクスプロイトはあったじゃないか」
違いは、既存のユーザーランドエクスプロイトがセーブデータ関連のエクスプロイトに基づいており、Nintendo Online Serviceを利用したセーブデータの転送なしでは使用できない点です。
そのため、最新のファームウェアに更新せざるを得ません。
したがって、たとえKExploitやソフトウェアベースの権限昇格手法が見つかったとしても、99%の人はセーブデータ関連のエクスプロイトを利用できません。
しかし、このエクスプロイトは一切の制限なく動作し、すべてのファームウェアで有効です。
なぜWebKitをハッキングしないのか?
スイッチ2のWebKitには、ROPコードの実行を防ぐArm PAC(ポインタ認証コード)が実装されています。
そのため、より簡単にエクスプロイトできる方法があったので、今回はそれを回避しました。

スイッチ2本体発売時には既にROP実行チェーンを持つユーザーexploitが存在していたが、実行するには破損したセーブデータの復元が必要で、そのため常に最新のファームウェアバージョンを転送する必要があった
システム内でセーブデータを転送するには、オンラインサービスへのアクセスが必要となるため、ゲームのセーブデータからの改造は困難だと説明している

今回新たに発見されたexploitはブラウザのWebKitのexploitもNintendo Switch Onlineを必要とするセーブデータのexploitも必要としないという点から非常に期待が高まっている

Gezine氏が公開した動画には、exploitの実行手順を段階的に記録した複数の技術ログが映っている
表示されるメッセージの中には、「安定したrwプリミティブを取得しました」といった項目があり、これはプロセスが安定したメモリ読み書きプリミティブを達成したことを示しており、より複雑なexploitを開発する上で重要な要素となる
次に、 「ソケットを使用したROPのテスト」が実行される
このテストでは、セキュリティ研究で使用される手法であるROP(リターン指向プログラミング)チェーンが正しく機能していることを検証
ROPチェーンは、外部コードを直接実行することなく、システムメモリに既に存在するコードの一部を再利用するために使用される
ログには、メインプログラムとシステムライブラリのメモリアドレスも表示され、その後、ROPチェーンを介して正常に実行されたShowApplicationError関数の呼び出しが続く

このデモは実行中のプロセスを高いレベルで制御することに成功し、アプリケーションのメモリを読み取ったり変更したり、OSの関数を制御された方法で呼び出すことができたことを証明している
しかし、カーネルへのアクセスや本体の完全な制御を示すものではない
つまり、このデモは初代スイッチとスイッチ2を改造できたというものではない
現時点では、CFWのインストール、自作アソフトの起動、またはユーザーが完全に利用できる形でのシステムの変更は不可能

今回のexploitを発動するエントリーポイントとなる別のexploitが必要なのかも明白にはなっていない
そして、現状ではあまり役に立たないユーザーexploitの上、本体のアップデートにより容易に修正される可能性が高いということから、Gezine氏がこのexploitを公開する可能性は現段階では非常に低い
そのうえGezine氏が過去にバグ報奨金プログラムを通じてメーカーに直接脆弱性を開示していたことから、今回の新たなexploitが一般に公開されるのかどうか疑問視する声もあるため、過度に期待せずに見守る必要がある


初代スイッチのCFWであるAtmospherのDiscordサーバーでは、ハックシーンの主軸であったCFWの開発者SciresM氏の引退後に引き継がれた開発者のHexkyz氏が、今回のexploitの発見者である、Gezine氏に初代スイッチと、スイッチ2のセキュリティについて説明するやりとりがあった
NX互換アプリケーション/ゲーム: 緩和策(セキュリティ対策)はありません。
Ounceアプリケーション/ゲーム: バージョン19.0.0からPAC+CFIを導入。
XOMはオプション扱いです(おそらく近いうちにデフォルトで有効になるでしょう)。
アプレット: バージョン19.0.0からPAC+CFI、バージョン21.0.0からXOMを導入。
システムモジュール(Sysmodules): バージョン19.0.0からPAC+CFI+XOMを導入。
アプレットやアプリケーションは、(以前はそうで、今は変わったようですが)BTIを実現しようとした簡易的なCFIを採用していました。
一方で、システムモジュールはClangのようなCFIを採用しています。
PAC (Pointer Authentication Code): ポインタ改ざんを防ぐためのARMのセキュリティ機能
CFI (Control Flow Integrity): プログラムの実行フローが不正に変更されるのを防ぐ仕組み
XOM (Execute-Only Memory): コード領域を実行専用にし、読み取りを禁止することで解析や攻撃を難しくする保護機能
BTI (Branch Target Identification): ARMの分岐先保護機能で、ROP/JOPなどの攻撃を防ぐための仕組み

このやりとりで、初代スイッチはPACもCFIもXOMも使用されていないということで、エントリーポイントは初代スイッチから来ている可能性があると噂されている
今回のexploitによりユーザーランドの制御が可能になったが、今までとは異なり、カーネルによって制御されていないエラー処理アプレットを制御することで、さらに一歩進んだものとなっている

初代スイッチは未だ対策機はチップ以外では突破されていない
そういう意味ではこのexploitが今後どのように進展するかに注目が集まる

コメント