光子放出を利用したレーザー故障注入によるRP2350セキュアデバッグの突破
TL;DR
- 光子放出顕微鏡(PEM)により、RP2350のデバッグアクセスを制御する
DEBUGENレジスタを特定。 - 980 nmの集光レーザーパルスを照射し、
PROC1およびPROC1_SECUREビットをセットすることで、永続的なデバッグ無効化設定をバイパスしてセキュアワールドのデバッグを再有効化。 - レスキューリセット後、ファームウェアが実行時にロックしたOTPメモリから128ビットの秘密情報を読み出し。
- この攻撃にはチップの破壊的な準備、精密なレーザー装置、および約25万ドル相当の実験機材が必要。
RP2350のセキュリティアーキテクチャとデバッグ無効化チェーン
RP2350マイクロコントローラは以下を実装している:
- OTP(One-Time-Programmable)メモリに格納された公開鍵検証によるセキュアブート。
- セキュア状態と非セキュア状態を分離するArmv8‑M TrustZone。
- 両コアのMem‑APを無効化し、すべてのSW‑DPおよびデバッグAPバスアクセスを遮断する永続的な
CRIT1.DEBUG_DISABLEフラグ。 - データシートに記載されている通り、すべてのビットがセットされた場合に
DEBUG_DISABLEを上書きできるDEBUGENレジスタ。 DEBUGENへのソフトウェア書き込みをロックするが、ハードウェア的な冗長性を持たないDEBUGEN_LOCKビット。
OTPサブシステムは永続的なロック行(PAGEn_LOCK0/1)を保持し、重要なフラグに対して8ビット中3ビットの多数決投票を使用することで、永続的なデバッグ無効化フラグを単一ビットの故障に対して堅牢にしている。しかし、DEBUGEN レジスタ自体には冗長性、パリティ、多数決投票がなく、潜在的な弱点となっている。
ハッキングチャレンジのための実験構成
著者らはリビジョンA4のデバイスでRaspberry Pi RP2350ハッキングチャレンジを再現した:
- SHA‑256公開鍵フィンガープリントを
BOOTKEY0にプログラムし、セキュアブートを有効化。 CRIT1.DEBUG_DISABLE = 1を設定し、グリッチ検出器の感度を最大化。- OTPページ48を
PAGE48_LOCK1 = 0x3c3c3cで構成し、セキュアな読み書きを許可しつつ非セキュアアクセスを拒否。 - チャレンジ用ファームウェアはブート後、実行時にページ48をロック(
sw_lock[48] = 0b1111)し、それ以降の読み出しを防止。
光子放出顕微鏡(PEM)による DEBUGEN ビット活動の分離
個々の DEBUGEN ビットの微小な記憶セルを特定するため、チームはPEMを使用した:
- セキュアなソフトウェアが特定の
DEBUGENビットを高速ループでトグルさせた。 - 2つの補完的なビットマスクに対して数千枚の赤外線フレームをキャプチャした。
- スタックの平均化と減算により静的な背景を除去し、トグルされたビットと相関する局所的な光子放出を明らかにした。
- 得られたマップにより、ビット0~3の活動を含む3マイクロメートルスケールの領域が強調された。
「異なるビットマスク間での繰り返し比較により、カメラ視野の3つの領域にわたって
DEBUGENビット0~3に関連するコンパクトなサイトが露出した。」 – Ledger Donjonブログ
これらのホットスポットにより、レーザーのスキャン範囲はダイ全体から数ミクロンのウィンドウまで絞り込まれた。
レーザー故障注入(LFI)による DEBUGEN ビットの反転
980 nmのパルスレーザー(約1.2 W、100 nsパルス、50倍対物レンズ)を使用し、研究チームはSW‑DPの応答を監視しながらPEMで特定した領域をスキャンした:
- ある位置では一貫して
PROC1がセットされた(コア1のMem‑APを有効化)。 - 別の位置では
PROC1_SECUREがセットされた(そのMem‑APを通じたセキュアアクセスを許可)。 - 2つの位置はわずか数マイクロメートルしか離れておらず、20倍の対物レンズではスポットが大きすぎてセット領域とクリア領域の両方に当たってしまうため分離できなかった。
- 反復スクリプトにより、両方のビットがセットされたままになるまで各スポットにパルスを照射し、永続的な
DEBUGEN = 0xc値を達成した。
重要なのは、レーザーが対応する DEBUGEN_LOCK ビットも1に反転させたことで、後のソフトウェア書き込みによってデバッグ有効化が解除されるのを防いだ点である。
レスキューリセットを利用したOTP秘密情報の読み出し
セキュアデバッグが復元された状態で、攻撃者は常時稼働のRP‑AP(CTRL.RESCUE_RESTART)を介して レスキューリセット を実行した。このリセットにより:
- ユーザーファームウェアが実行される前にブートROMが停止するため、ページ48の実行時ロックは適用されない。
- 永続的なOTPロック(
LOCK_S = READ_WRITE)は維持され、セキュアな読み出しが可能になる。
攻撃手順は以下の通り:
- レスキューリセットをトリガーする。
- コアがブートROMの待機ループにある間に
DEBUGENを0xcに故障させる。 - セキュアな
DHCSRを介してコア1を停止させる。 - ガード付き読み出しインターフェースを通じてOTP行
0xc08~0xc0fを読み出し、128ビットの秘密情報を抽出する。
秘密情報は1回の実行で回収され、セキュアデバッグとレスキューリセットを組み合わせることで、実行時のOTPロックをバイパスできることが実証された。
なぜ DEBUGEN_LOCK は攻撃を阻止できないのか
DEBUGEN_LOCK はソフトウェアによる書き込みをブロックすることを意図しているが、レーザー故障は DEBUGEN ビット と そのロックビットの両方を同時にセットする可能性がある。ロックが1になると、ソフトウェアは対応する DEBUGEN ビットをクリアできなくなり、別の物理的な故障が発生するまでその故障は永続化する。
緩和策の評価と広範な影響
- ハードウェアレベル: OTPの冗長性は永続的なデバッグ無効化フラグを保護するが、チェックされない
DEBUGENレジスタがバイパスを生んでいる。 - ソフトウェアレベル: 実行時の
ACCESSCTRL制限によりMem‑APへの直接アクセスを制限できるが、セキュアな属性を持つデバッガは依然としてコアを制御しレジスタを読み取れるため、機密性が損なわれる。 - リセットレベル: RP‑APのレスキューリセットは、ファームウェアが再ロックする前にOTPの実行時ロックを永続的な状態に戻すため、セキュアな読み書きを許可するすべてのOTPページが露出する。
- 実用性: この攻撃には破壊的なデキャップ(開封)、高精度レーザーシステム、および専門的なハードウェアセキュリティの知識が必要であり、約 25万ドル のコストがかかる。コメントでは、機能的なレプリカは2万5千ドル以下で構築できる可能性があると指摘されているが、カジュアルな攻撃者にとっての障壁は依然として高い。
「この攻撃には物理的なアクセス、破壊的な準備、および約25万ドルの実験機材が必要である。」 – Ledger Donjonブログ
コミュニティの反応
- コストの観点: BitBangingBytes は、ChipShouterのような安価なコンポーネントを使用すれば、1万ドル以下でセットアップを構築できると主張している。
- 広範な関連性: byb は、この発見がYubikeyのような製品を含む、セキュアエンクレイブを持つあらゆるデバイスにとって重要であると指摘している。
- 技術的な好奇心: akoboldfrying は、チャレンジの秘密情報がどのように初期プログラムされるのかを問い、公開リポジトリにはプレースホルダー値しか書かれておらず、実際の秘密情報はコンテスト主催者がプロビジョニングする必要があることを強調している。
- 手法への批判: nullc は、デキャップを回避するためにX線などの代替的な故障刺激を提案しているが、証拠は示されていない。
結論
- RP2350のセキュリティチェーンは、その最も弱い強制ポイントと同程度の強度しか持たない。
DEBUGENはレーザー故障注入によって悪用可能な保護されていない上書き機能を提供している。 - 光子放出顕微鏡は効果的な事前ターゲティングステップであり、干し草の中の針を探す問題を、扱いやすいマイクロメートルスケールの探索に変える。
- レスキューリセットの挙動は、故障した
DEBUGENと組み合わせることで、ファームウェアが実行時に意図的に隠しているOTPの秘密情報を読み出すことを可能にする。 - 緩和策は、各メカニズムを個別に扱うのではなく、不変のOTPビットから可変の制御レジスタ、リセットロジックに至るまで、強制パス全体を考慮しなければならない。
開示: この脆弱性は2026年7月28日にRaspberry Piに報告された。著者らはRaspberry Piチームの建設的な対応に感謝する。
Sources
関連
- Dispatch
- Dispatch
- Dispatch
- Dispatch
- Dispatch