光子放出誘導レーザーフォルトインジェクションが RP2350 のセキュリティ強化デバッグを可能にします

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(メモリアクセスポート)を利用します。

  • CRIT1.DEBUG_DISABLE
    フラグが設定されると、両コアの Mem-AP がシステムバスにアクセスできなくなります。
  • しかし、DEBUGEN レジスタ をセキュアソフトウェアが書き込むことで、この無効化をオーバーライドし、再度セキュアデバッグへのアクセスを許可できます。
  • データシートには「
    DEBUG_DISABLE
    を完全にオーバーライドできる」と記載されています。
  • 狙い目:
    DEBUGEN
    レジスタの誤設定により、Mem-AP を介したセキュアメモリへの読み書きやコア停止が可能になり、TrustZone のランタイム分離を侵害できます。

実験環境と設定

ターゲット構成 (ベンダー定義の再現)

研究機関向けの A レビジョンデバイスを用い、以下の設定を行いました:

  • 公開鍵: SHA-256 指紋を
    BOOTKEY0
    にプログラム。
  • ブートフラグ:
    BOOT_FLAGS1.KEY_VALID = 0x1
    ,
    KEY_INVALID = 0xe
  • セキュアブート有効化:
    CRIT1.SECURE_BOOT_ENABLE = 1
    (Cortex-M33 コアのみ実行)。
  • 永続デバッグ無効化:
    CRIT1.DEBUG_DISABLE = 1
  • グリッチ検出器: 最大感度 (
    SENS = 3
    ) で有効化。
  • ページロック設定:
    • ページ 48 の永続ロックを
      PAGE48_LOCK1 = 0x3c3c3c
      に設定。
    • 非セキュアアクセス拒否 (
      LOCK_NS = INACCESSIBLE
      )。
    • セキュア読み書きアクセス維持 (
      LOCK_S = READ_WRITE
      )。

サンプル準備および実験台

  • カプセル開封: デバイス背面のカプセルを破損し、シリコン基板を直接露出させます(金属層による遮断を防ぐため)。
  • 接続: 銅線を用いて切断された 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 を用いて以下の手順で位置特定を行いました。

  1. 原理: トランジスターを切り替える際に微弱な近赤外線光子が発生するため、その放射を集めることで状態変化を検出します。
  2. 手法:
    • セキュアソフトウェアがループ内でビットを反転させ、測定可能な状態変化を発生させます。
    • 単一フレームではなく、多数のフレームを平均化してノイズ除去。
    • 比較対象となる 2 つのループ(異なるビットマスク)の差分を取って静的背景や熱放射を相殺。
  3. 結果:
    DEBUGEN
    ビット 0〜3 と関連するコンパクトなサイトが、カメラフィールドの 3 つの領域に特定されました。

レーザーフォルトインジェクション (LFI)によるアクセス権限回復

  • 環境: 980 nm パルスレーザ (最大出力 2.97 W)、50x オブジェクトレンズ、100 ns パルス幅。
  • 位置の較正: PEM で特定した領域内でスキャンし、SWD を介して
    PROC1
    (バスアクセス有効)と
    SDeviceEn = 1
    (セキュア状態有効)を検出する 2 つの反応性位置を特定。
  • シーケンス:
    1. PROC1
      をオンにするパルス。
    2. PROC1_SECURE
      をオンにするパルス。
    3. (重要)広焦点レンズ(20x)では、オンとオフの領域が重なり合い失敗するため、高倍率での精密操作が必要でした。
  • 結果: このシーケンスにより数秒で
    DEBUGEN = 0xc
    が設定され、セキュアデバッグが有効化されました。この状態はパルス停止後も維持されます。

攻撃手順と機密情報回収

ハッキングチャレンジ構成への応用

ページ 48 に格納されたランタイムロック (

sw_lock[48]
) は通常ファームウェア起動時に
0b1111
(アクセス不可) に設定されます。しかし、以下の手順で回避可能です。

ステップ 1: レスキューリセット

  • 目的: ファームウェアによるランタイムロックの適用を阻止する。
  • 手法:
    • CTRL.RESCUE_RESTART = 1
      を設定し RP-AP(外部アクセスポート)経由でクリア。
    • ブート ROM が停止しますが、ユーザーファームウェアの実行はスキップされ、OTP ロック状態 (
      LOCK_S = READ_WRITE
      ) は維持されます。

ステップ 2:
DEBUGEN
のフォルト設定

  • レスキューリセット直後(ブート ROM 待機経路中に)、上述の LFI シーケンスを実行し
    DEBUGEN = 0xc
    を設定します。
  • この時、ロックビット (
    DEBUGEN_LOCK
    ) が 1 であっても、レーザーパルスでビット値は書き換え可能であることが確認されました。

ステップ 3: コア停止と読み取り

  • セキュア化された Mem-AP を介して DHCSR を設定し、コア 1 を停止(シングルステップ実行モード)。
  • ガーディードリードインターフェースを通じて OTP ページ (0xc08〜0xc0f) から機密情報を直接読み取る。

結果

  • 完全な機密情報回収: チャレンジの指定された秘密鍵情報を成功裏に抽出しました。
  • 脆弱性:
    DEBUGEN_LOCK
    ビットが 1 であっても、レーザーパルスにより
    DEBUGEN
    を変化させられ、ロックは回避可能でした。

緩和策の限界とインパクト

ソフトウェアベース緩和策の有効期限

Mem-AP へのアクセス権限取得後、以下の制限が存在しますが、それらも攻撃の手前で克服されます:

  1. ACCESSCTRL: 特定のターゲットへのアクセスをブロックできますが、デバッガーによるコア制御を完全には防ぎません。レスキューリセット直後はオールオープン状態です。
  2. ランタイムチェック: ファームウェアが
    DEBUGEN
    を周期的にチェックして失敗安全リセットを実行しますが、これは「プリファームウェア時(レスキューリセット後)」の情報漏洩を防ぐことはできません。

結論:システムレベルの教訓

  • RP2350 は OTP で冗長化されたデバッグフラグ (
    DEBUG_DISABLE
    ) を持っていますが、
    DEBUGEN
    レジスタをレーザーでオーバーライドできます。
  • DEBUGEN_LOCK
    は物理的なフォルトには耐えず、ファームウェアによる無効化も阻めません。
  • レスキューリセットは OTP ロックを初期状態に戻し、ランタイムロックの適用を防ぎます。
  • これらの独立したセキュリティメカニズム(OTP、ランタイムロック、デバッグ管理)が相互作用することで、システム全体のセキュリティ境界が破られました。

攻撃要件

この攻撃を実現するには以下のリソースが必要です:

  1. 破壊的な物理的アクセス: カプセル開封によるパッケージ改変とダイへの直接照射。
  2. 専門的な実験室設備: 高出力レーザシステム、ステージ制御など、約 25 万ドル のコストがかかります。
  3. 高度な専門知識: ダイナビゲーション、レーザーパラメータ最適化、PEM 測定、SWD デバッグ技術のすべてが必要です。

謝辞

  • このフォルトについて 2026 年 7 月 28 日に Raspberry Pi 社へ開示しました。
  • Raspberry Pi チームは、議論への関与とセキュリティ研究に対する透明性あるアプローチに対して感謝申し上げます。

著者: Antoine Plin (Ledger Donjon ハードウェアセキュリティインターン)
関連リポジトリ: RP2350 Hacking Challenge

同じ日のほかのニュース

一覧に戻る →

2026/09/19 6:00

これまでに Claude.md が存在しない場合、Claude Code は現在 AGENTS.md を読み取るようになりました。

2026/09/19 3:51

さらに 100TB のメモリーを節約

## Japanese Translation: Cloudflare は、トラフィックの分散に常時ハッシュリング(consistent hashing)を処理する Pingora バックエンドルーターの一部である `pingora-ketama` コンポーネントの最適化により、メモリ使用量を成功裡に削減しました。変更前に、システムはサーバーごとに過剰なハッシュエントリを格納しており、コンプライアンスとキャッシュの必要性により数十個の別々のハッシュリングが生じる場合があり、一部のケースでは 6GB に達することもありました。統計解析により、サーバーあたりに単一のハッシュのみを使用すると深刻な不均衡(変動係数約 99%)が発生し、業界標準デフォルトはハッシュ数を約 160 としていることが示されました。数学的な導出により、32 ビット値に対して 10,000~100,000 ハッシュを超えると追加容量が限界に達し衝突リスクが増大することが確認されました。エンジニアは、サーバーごとの生成されるハッシュ数を 90% 削減しても分布誤差が大きくならないことが安全に確認できました。構造レベルでは、完全な構体(struct)全体を 8 バイトのインデックス(`u32`)と、4 バイトのハッシュを圧縮された生バイト配列形式に置き換えることで、エントリあたりのメモリ使用量を 25% 削減しました。新コードは、非公開の機能フラグを通じて段階的に導入され、旧バージョン(大リング)と新バージョン(小リング)が共存可能となっています。ロールアウトは小規模な検証ロケーションから始まり、グローバルなキャッシュ churn を回避し安全な移行を確保するよう層状に行われました。これらの変更により、サーバーあたりのハッシュ生成数を 90% 削減し、グローバルメモリ消費量を 100TB 以上削減することで、コスト効率、信頼性、ロールバックの安全性を向上させました。

2026/09/18 23:18

クラウドフレイク・クイックトンネル

## Japanese Translation: 本テキストは、アカウント、DNS 設定、または開放ポートを必要とせず、開発環境向けに安全なパブリック URL を瞬時に生成する強力なコマンドラインツールを紹介しています。Cloudflare のグローバルインフラストラクチャを活用することで、このソリューションは 335 都市以上に対応し、構築済みの TLS と DDoS 保護を備えた即時のアウトバウンド専用暗号化接続を提供します。このアプローチは、`npm run dev` などのツールのエンドポイントを一貫して共有しながら既存のコードベースを変更しないようにすることで、開発者のワークフローを簡素化します。 処理は約 3 秒で完了し、構造化された JSON(ホスト名、エッジロケーション、ヘルスステータスを含む)として URL をコンソールに直接印刷して簡単なパースを可能にします。重要なのは、これらのトンネルは一時的で、ホスティングプロセスが停止すると自動的に終了し、手動での片付けを必要としないことです。この設計により、シンプルな JSON ホスト名を用いて、Webhook(例:Stripe、GitHub)、コーディングエージェント、および人間によるブラウザからローカルサービスへとの統合を容易にします。最終的に、これは内部マシンを公開する際の課題を解決し、Anycast ルーティングを介して最近のエッジノードへと接続することで不要なオーバーヘッドなしに、プライベートの localhost アプリケーションとパブリックインターネットの間で効率的な橋渡しを提供します。