![[レポート]Raspberry Pi Picoであらゆるマイクロコントローラーをハックする方法:トラフィック・モッキングによる簡易フォールト・インジェクション - CODE BLUE 2025 #codeblue_jp #codeblue2025](https://devio2024-media.developers.io/image/upload/f_auto,q_auto,w_3840/v1763382832/user-gen-eyecatch/p6pszynqcpicdb0iauum.jpg)
[レポート]Raspberry Pi Picoであらゆるマイクロコントローラーをハックする方法:トラフィック・モッキングによる簡易フォールト・インジェクション - CODE BLUE 2025 #codeblue_jp #codeblue2025
こんにちは、臼田です。
みなさん、セキュリティ対策してますか?(挨拶
今回はCODE BLUE 2025で行われた以下のセッションのレポートです。
Raspberry Pi Picoであらゆるマイクロコントローラーをハックする方法:トラフィック・モッキングによる簡易フォールト・インジェクション
あらゆるマイクロコントローラに対応可能な、新しい汎用的な高精度故障注入手法を提案する。
この新しい手法は、攻撃前にカスタムのアプリケーションレベル通信ドライバを実装する必要性を排除することで、高精度故障注入攻撃を大幅に容易にする。通常、このようなドライバは、デジタル・トリガと成功信号の両方を捕捉するために必要であり、また、グリッチの成功後にさらなるコマンドを発行するためにも使用される。このようなドライバはベンダー/チップに依存しており、通常、実装には膨大な調査/リバース/デバッグの労力を要する。
新しい方法は、すべてを正規の通信を再生することによって行った。この通信は、新しいチップと公式のデバッガ間の通信を捕捉することで容易に入手できる。
PoC:PS4や自動車に使用されているマイクロコントローラであるRL78からファームウェアをダンプし、未公開コマンドを使用し、オンチップデバッグセキュリティIDをバイパスするなどした。攻撃は安定している。
「Pico」マイクロコントローラで実装された。すべてのコードは著者のgithubにある。
Speakers
Tongren Chen トンレン・チェン
レポート
- ハードウェアハッキングについて
- 目的
- micro-controllerに攻撃する
- ターゲットに依存しない
- 完全にカスタム可能
- 背景
- Fault-Injectionとは
- 集積回路に対する攻撃
- 電子的なエラーを回路に注入する
- 挙動を悪用する
- データの破壊はいくつかの処理をスキップする
- 色んな方法がある
- 今回は電圧グリッジ
- どうやるのか
- 集積回路をGroundにショートする
- 集積回路が使えるようになるための時間が必要
- すべて準備できていないとエラーとなる
- タイミングを細かくコントロールする
- 高精度なFault-Injectionする場合
- どこをターゲットにするか決める
- デジタルトリガーを特定する
- シグナル
- 自動的にハードウェアを認識できるもの
- 自動でグリッジを送る
- ストップシグナルも必要になる
- すぐに止めなければならない
- 最後にエクスプロイトを送る
- 例の紹介
- Researchとチュートリアル
- perfect trigger
- これはアナログ
- GPIO pinのオンオフに使われる
- 実世界では複雑
- PS4とPS Vitaのハック
- デバイスが何であろうと脆弱なモメントをピンポイントすること
- どうやってわかるか?
- 一つの方法はチップがタスクをやっているときに何を言っているかに注目する
- 通常は解放されたポートが有る
- デバッガラインがある
- communication line
- 外部のチップ
- そしてコミュニケーションを理解する
- 通常はドライバがやっているのでこれを実装する
- 4つのプロセスを取る
- 簡単ではない
- もっとシンプルにできるか?
- なぜドライバが必要か
- アナログシグナルを理解するため
- チップが送っていることを理解しなければならない
- ドライバは何をやっているか
- 3つのステップ
- 最初は電圧をビットに変換
- 次はビットをバイトにする
- 3つめのフレームにする
- これが難しい
- 文章のようなもの
- 実装が簡単ではありません
- 問題
- ドキュメントがなかったりリバースも必要
- 順番にキャプチャしなければいけなくて重要でないものもある
- Fault-Injectionとは
- 新しいアプローチ
- 目標はチップと話して理解すること
- 先程の難しかったところ
- 記録とリプレイ
- テストが可能なデバッガがある
- トラフィックは2相ある
- どうやってデコードするか
- ソリューションを見てみる
- SWDのもの
- 繰り返される
- 小さすぎる
- GPIOPのは以後に何があるか
- 電圧を3.3Vまで上げたり下げたりできる
- シンプルなソリューション
- 激しいことになった
- Ground寄りになっているため
- 両方0にしたら?
- 方向性を分離できた
- アナログのシグナルを記録してリプレイ
- ADCを利用
- 特定のタイミングで施工する
- 無万のデータをスキャンする
- どれを構造解析すればいいか
- PoC
- どうやったか
- 良いコミュニケーションを捕捉する
- 記録する
- リプレイする
- データ収集部分だけをリプレイしたらうまく行かなかった
- どこからこちらでいいか確認
- どこをグリッジするかを確認
- どのデータがあるか把握
- デジタルトリガー
- ストップシグナル
- 実装
- 攻撃を実装する
- 詳しくは図を参照
- チップが話しているのを頻繁に聞く
- picoの電力を自分たちで消すことはできない
- チップでリセットする
- Raspberry PiPico 2 W
- マイクロコントローラー
- 9つのインストラクションがある
- やすい
- アセンブリを同時に走らせることができる
- スパイクを使ってグリッジを作る
- 他のコンポーネントが関わる
- ロジック
- REGCを使う
- Logical Analyzerは少し形が違う
- トリッキーだったのはどのようにキャプチャをするか
- トラフィックを常にモニタリングする必要がある
- 結論
- 精密なテクニックを紹介した
- ドライバを実装したくないのでこのアプローチにした
- メモ
- 低速モードをリクエストするとかも検討できる
感想
物理デバイスの脅威も考えていかないとですね。








