
2026/09/19 1:54
光子放出誘導レーザーフォルトインジェクションが RP2350 のセキュリティ強化デバッグを可能にします
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
研究者らは、Raspberry Pi RP2350 マイコンコントローラーのハードウェア欠陥を特定した。この欠陥は、攻撃者が安全に無効化(OTP メモリによる)された後に、デバッグアクセスを恒久的に再有効化するのを可能にするものである。この攻撃は、980 nm レーザーの故障注入と光子放射マイクロscopy(PEM)を組み合わせて、「レスキューリセット」ウィンドウ中に DEBUGEN レジスタ内のビットを精密に操作するものであり、ファームウェアが OTP ページ 48 にランタイムロックを適用する前に実行される。不完全な強制パスを悪用することにより、攻撃者は Secure Boot、TrustZone、グリッチ検知器、ロックビットなどの保護措置にもかかわらず、永続的なデバッグ無効フラグを上書きし、Secure-world デバッガー機能へのアクセスを復元できる。RP2350 は、Cortex-M33 または Hazard3 を搭載したデュアルコア MCU であり、パブリックキーのフィンガープリントや冗長符号化(例:8 のうち 3 の投票)など、セキュリティ構成を OTP に格納している。攻撃には、チップの背面をデキャプスルするための直接的な物理的アクセスと、約 25 万ドル分の実験室設備、洗練された PEM 分析が必要であり、主に国家レベルのアクターに限定されるが、堅牢なセキュリティは、OTP ストレージから変更可能なレジスタ、そしてリセット動作に至るまで、全体としての強制チェーンの整合性を必要付けると示している。この発見は 2026 年 7 月 28 日に Raspberry Pi に開示され、物理的にハードニングされたデバイスでも、特定の執行パスが厳格に保護されていない限り脆弱性を持つことを強調するものである。
本文
RP2350 マイコプロセッサにおけるデバッグ機能の回復と機密情報回収攻撃
TL;DR(要約)
- 光子放射顕微鏡 (PEM) を用いることで、Raspberry Pi マイコプロセッサ (RP2350) のデバッグ制御レジスタ
の物理的位置を特定しました。DEBUGEN - 近接した領域に レーザーパルス を照射することで、永久無効化されていたデバッグ機能に対し、「セキュア領域 (Secure world)」へのアクセス権限を回復させました。
- 回復されたアクセス権限と レスキューリセット を組み合わせることで、ワンタイム・プログラム可能メモリ (OTP) に格納されていた機密情報を回収しました。
- この攻撃には、物理的なアクセス権限、破壊的な事前準備、および約 25 万ドル分の実験室設備 が必要です。
RP2350 のセキュリティモデル
RP2350 は Raspberry Pi の採用するデュアルコアマイコプロセッサで、起動時に Arm Cortex-M33 コアまたは RISC-V Hazard3 コアを選択可能です。主なハードウェアセキュリティ機能は以下の通りです:
- セキュアブート (Secure boot)
- OTP にプロビジョニングされたパブリックキー指紋に基づき、署名されたファームウェアの認証を行います。
- Armv8-M TrustZone
- 実行状態を「セキュア」と「非セキュア」に分離します。
- 永続的なデバッグ無効設定
- デバッグインターフェースを初期状態でブロックします。
- グリッチ検出器
- クロックや供給電圧の操作によるタイミング乱れを検出します。
Raspberry Pi 社はこれらの機能を検証するため、「RP2350 ハッキングチャレンジ」を開催しています。これにより、研究者は OTP メモリに格納された機密情報(鍵など)を抽出する課題が提示されました。
OTP メモリの仕組みと保護
- 永続的なロック: 各ビットは「0→1」と一旦だけ書き換えられ、復旧不能です。
- ページ構造: 128 バイトのページが 2 つのハードロックにより保護されています。
: オプションキーとデフォルト挙動の設定。PAGEn_LOCK0
: ハードウェア強制によるPAGEn_LOCK1
(セキュア許可)とLOCK_S
(非セキュア許可)の定義。LOCK_NS
- アクセス制限: 「読み書き」→「読み専用」→「アクセス不可」としか進まない单向フローです。
- 冗長化: 重要なフラグは「8 のうち 3 つ」投票方式、ロックビットはトリプル冗長多数決方式で保護されています。
- ランタイムロック: OTP リセット時に初期化されますが、ファームウェアはこのロックを締め付けることはできても緩めることはできません(リセットによって失われます)。
デバッグ経路と脆弱性の狙い目
外部デバッガーは SWD インターフェースを通じて通信し、Cortex-M33 構成において Mem-AP(メモリアクセスポート)を利用します。
フラグが設定されると、両コアの Mem-AP がシステムバスにアクセスできなくなります。CRIT1.DEBUG_DISABLE- しかし、DEBUGEN レジスタ をセキュアソフトウェアが書き込むことで、この無効化をオーバーライドし、再度セキュアデバッグへのアクセスを許可できます。
- データシートには「
を完全にオーバーライドできる」と記載されています。DEBUG_DISABLE - 狙い目:
レジスタの誤設定により、Mem-AP を介したセキュアメモリへの読み書きやコア停止が可能になり、TrustZone のランタイム分離を侵害できます。DEBUGEN
実験環境と設定
ターゲット構成 (ベンダー定義の再現)
研究機関向けの A レビジョンデバイスを用い、以下の設定を行いました:
- 公開鍵: SHA-256 指紋を
にプログラム。BOOTKEY0 - ブートフラグ:
,BOOT_FLAGS1.KEY_VALID = 0x1
。KEY_INVALID = 0xe - セキュアブート有効化:
(Cortex-M33 コアのみ実行)。CRIT1.SECURE_BOOT_ENABLE = 1 - 永続デバッグ無効化:
。CRIT1.DEBUG_DISABLE = 1 - グリッチ検出器: 最大感度 (
) で有効化。SENS = 3 - ページロック設定:
- ページ 48 の永続ロックを
に設定。PAGE48_LOCK1 = 0x3c3c3c - 非セキュアアクセス拒否 (
)。LOCK_NS = INACCESSIBLE - セキュア読み書きアクセス維持 (
)。LOCK_S = READ_WRITE
- ページ 48 の永続ロックを
サンプル準備および実験台
- カプセル開封: デバイス背面のカプセルを破損し、シリコン基板を直接露出させます(金属層による遮断を防ぐため)。
- 接続: 銅線を用いて切断された GND 接続を回復し、Scaffold プラットフォーム (Ledger Donjon) にハンダ付けします。
DEBUGEN: 永続的なデバッグ無効のオーバーライド
レジスタ構成
DEBUGEN は 5 つの機能ビットを持ちます:
- Bit 0/2 (PROC0/1): コア 0/1 の Mem-AP 有効化。
- Bit 1/3 (PROC0_SECURE/1_SECURE): コア 0/1 の Mem-AP を通じたセキュアアクセス許可。
- Bit 8 (MISC): クロストリガおよび RISC-V デバッグアクセスポート有効化。
位置特定:光子放射顕微鏡 (PEM) の使用
DEBUGEN ビットの個別設定は極めて困難な「干し草の山の中の針探し」に相当します。そこで PEM を用いて以下の手順で位置特定を行いました。
- 原理: トランジスターを切り替える際に微弱な近赤外線光子が発生するため、その放射を集めることで状態変化を検出します。
- 手法:
- セキュアソフトウェアがループ内でビットを反転させ、測定可能な状態変化を発生させます。
- 単一フレームではなく、多数のフレームを平均化してノイズ除去。
- 比較対象となる 2 つのループ(異なるビットマスク)の差分を取って静的背景や熱放射を相殺。
- 結果:
ビット 0〜3 と関連するコンパクトなサイトが、カメラフィールドの 3 つの領域に特定されました。DEBUGEN
レーザーフォルトインジェクション (LFI)によるアクセス権限回復
- 環境: 980 nm パルスレーザ (最大出力 2.97 W)、50x オブジェクトレンズ、100 ns パルス幅。
- 位置の較正: PEM で特定した領域内でスキャンし、SWD を介して
(バスアクセス有効)とPROC1
(セキュア状態有効)を検出する 2 つの反応性位置を特定。SDeviceEn = 1 - シーケンス:
をオンにするパルス。PROC1
をオンにするパルス。PROC1_SECURE- (重要)広焦点レンズ(20x)では、オンとオフの領域が重なり合い失敗するため、高倍率での精密操作が必要でした。
- 結果: このシーケンスにより数秒で
が設定され、セキュアデバッグが有効化されました。この状態はパルス停止後も維持されます。DEBUGEN = 0xc
攻撃手順と機密情報回収
ハッキングチャレンジ構成への応用
ページ 48 に格納されたランタイムロック (
sw_lock[48]) は通常ファームウェア起動時に 0b1111 (アクセス不可) に設定されます。しかし、以下の手順で回避可能です。
ステップ 1: レスキューリセット
- 目的: ファームウェアによるランタイムロックの適用を阻止する。
- 手法:
を設定し RP-AP(外部アクセスポート)経由でクリア。CTRL.RESCUE_RESTART = 1- ブート ROM が停止しますが、ユーザーファームウェアの実行はスキップされ、OTP ロック状態 (
) は維持されます。LOCK_S = READ_WRITE
ステップ 2: DEBUGEN
のフォルト設定
DEBUGEN- レスキューリセット直後(ブート ROM 待機経路中に)、上述の LFI シーケンスを実行し
を設定します。DEBUGEN = 0xc - この時、ロックビット (
) が 1 であっても、レーザーパルスでビット値は書き換え可能であることが確認されました。DEBUGEN_LOCK
ステップ 3: コア停止と読み取り
- セキュア化された Mem-AP を介して DHCSR を設定し、コア 1 を停止(シングルステップ実行モード)。
- ガーディードリードインターフェースを通じて OTP ページ (0xc08〜0xc0f) から機密情報を直接読み取る。
結果
- 完全な機密情報回収: チャレンジの指定された秘密鍵情報を成功裏に抽出しました。
- 脆弱性:
ビットが 1 であっても、レーザーパルスによりDEBUGEN_LOCK
を変化させられ、ロックは回避可能でした。DEBUGEN
緩和策の限界とインパクト
ソフトウェアベース緩和策の有効期限
Mem-AP へのアクセス権限取得後、以下の制限が存在しますが、それらも攻撃の手前で克服されます:
- ACCESSCTRL: 特定のターゲットへのアクセスをブロックできますが、デバッガーによるコア制御を完全には防ぎません。レスキューリセット直後はオールオープン状態です。
- ランタイムチェック: ファームウェアが
を周期的にチェックして失敗安全リセットを実行しますが、これは「プリファームウェア時(レスキューリセット後)」の情報漏洩を防ぐことはできません。DEBUGEN
結論:システムレベルの教訓
- RP2350 は OTP で冗長化されたデバッグフラグ (
) を持っていますが、DEBUG_DISABLE
レジスタをレーザーでオーバーライドできます。DEBUGEN
は物理的なフォルトには耐えず、ファームウェアによる無効化も阻めません。DEBUGEN_LOCK- レスキューリセットは OTP ロックを初期状態に戻し、ランタイムロックの適用を防ぎます。
- これらの独立したセキュリティメカニズム(OTP、ランタイムロック、デバッグ管理)が相互作用することで、システム全体のセキュリティ境界が破られました。
攻撃要件
この攻撃を実現するには以下のリソースが必要です:
- 破壊的な物理的アクセス: カプセル開封によるパッケージ改変とダイへの直接照射。
- 専門的な実験室設備: 高出力レーザシステム、ステージ制御など、約 25 万ドル のコストがかかります。
- 高度な専門知識: ダイナビゲーション、レーザーパラメータ最適化、PEM 測定、SWD デバッグ技術のすべてが必要です。
謝辞
- このフォルトについて 2026 年 7 月 28 日に Raspberry Pi 社へ開示しました。
- Raspberry Pi チームは、議論への関与とセキュリティ研究に対する透明性あるアプローチに対して感謝申し上げます。
著者: Antoine Plin (Ledger Donjon ハードウェアセキュリティインターン)
関連リポジトリ: RP2350 Hacking Challenge