セキュリティ
Photon-Emission-Guided Laser Fault Injection Enables RP2350 Secure Debug
Photon-Emission-Guided Laser Fault Injection Enables RP2350 Secure Debug (donjon.ledger.com)
要約
本記事は、Raspberry PiのRP2350マイクロコントローラーにおいて、フォトンエミッション顕微鏡法を用いてデバッグ機能を有効にするレジスタを発見し、レーザーパルス攻撃によって永続的に無効化されていたデバッグアクセスを復旧した手法について解説しています。この手法により、チップのセキュアワールドへのアクセスが可能になり、ワンタイムプログラマブルメモリに保存されていた秘密情報を抽出することに成功しました。ただし、この攻撃には物理アクセスと高価な実験装置が必要です。
全文翻訳
TL;DR — フォトンエミッション顕微鏡法により、Raspberry Piマイクロコントローラーのデバッグ機能を有効にするレジスタの位置を特定できました。 — 2つの近接した位置へのレーザーパルスにより、デバッグがチップのセキュアワールドで永続的に無効化されていたにもかかわらず、デバッガへのアクセスが復旧しました。 — レスキューリセット後のそのアクセスを利用して、ワンタイムプログラマブルメモリから秘密情報を回収しました。リセットにより、ファームウェアが実行時のロックを適用する前にチップが停止したため、ページはセキュア読み取り可能なままでした。 — この攻撃には物理アクセス、破壊的な準備、および約250,000ドルの実験装置が必要です。
RP2350のセキュリティモデル
RP2350はRaspberry Piのデュアルコアマイクロコントローラーです。各プロセッサソケットは、ブート時にArm Cortex-M33またはRISC-V Hazard3コアのいずれかを選択できます。そのハードウェアセキュリティ機能には以下が含まれます。
セキュアブート:ワンタイムプログラマブルメモリ(OTP)にプロビジョニングされた公開鍵フィンガープリントに対して署名済みファームウェアを認証します。
Armv8-M TrustZone:セキュアおよびノンセキュア実行状態を分離します。
永続的なデバッグ無効設定。
クロックまたは電源操作によるタイミングの乱れを検出するためのグリッチ検出器。
Raspberry Piは、RP2350ハッキングチャレンジを通じて、研究者にこれらの保護を評価するよう積極的に招待してきました。最初のチャレンジは、オリジナルのチップに対して2024年8月から12月にかけて実施されました。いくつかの発見に対処した後、Raspberry PiはA4リビジョン(我々がテストしたバージョン)をリリースしました。
永続的なセキュリティ設定とブート公開鍵フィンガープリントは、ワンタイムプログラマブル(OTP)メモリに保存されます。各ビットは一度だけ0から1に反転でき、元に戻すことはできないため、そこに書き込まれたものはチップの寿命まで持続します。OTPは、2つの永続的またはハードロック行によって保護された128バイトのページに編成されています。ページnの場合、PAGEn_LOCK0はオプションの読み書きキーと、キーが入力されない場合の動作を設定し、PAGEn_LOCK1にはハードウェアで強制されるLOCK_SおよびLOCK_NS権限が含まれています。これらの状態は、読み書きから読み取り専用またはアクセス不能に進むことはできますが、より寛容になることはできません。OTPサブシステムは、セキュリティ関連フィールドに冗長なエンコーディングを使用しています。クリティカルフラグは「8つの連続するOTP行にわたる3分の8の投票でエンコード」され、OTPロックビットは「データシートによると、トリプル冗長で多数決」です。
OTPリセット時、永続的なLOCK_SおよびLOCK_NS値は、ソフトロックとも呼ばれるページごとの実行時ロックを初期化します。ファームウェアはこのロックを次のOTPリセットまで強化できますが、緩めることはできません。実行時の変更は、そのリセットを生き残りません。
外部デバッガは、Armのシリアルワイヤデバッグ(SWD)インターフェースを介してRP2350と通信します。リクエストはまずシリアルワイヤデバッグポート(SW-DP)に到達し、その後アクセスポートにルーティングされます。ここで使用されるCortex-M33構成では、各コアはメモリポート(Mem-AP)に接続されており、有効なMem-APはデバッガが許可されたメモリとペリフェラルを読み書きできるようにします。別の常時オンのアクセスポートであるRP-APは、一連のリセットおよびリカバリ制御を公開します。セキュアデバッグとは、セキュア属性を持つMem-APアクセスを指します。デバッガは、アクセス制御ロジックが許可するセキュアメモリマップリソースとトランザクションを実行し、セキュア状態で実行中のコアを停止または検査できます。永続的なCRIT1.DEBUG_DISABLEフラグは、このパスを閉じることを目的としています。設定されると、両コアのMem-APのイネーブル信号をゼロに駆動し、「APsがいかなるバスアクセスも実行できないようにする」とともに、工場テストJTAGインターフェースとRISC-Vデバッグモジュールのアクセスポートを無効にします。SW-DPとRP-APは応答しますが、どちらのコアのMem-APもシステムバスにアクセスできません。ただし、オーバーライドがあります。メモリマップされたDEBUGENレジスタにより、セキュアソフトウェアは各コアのMem-APを個別に再有効化し、それを通じてセキュアアクセスを許可できます。データシートには、DEBUG_DISABLEは「このレジスタのすべてのビットを設定することで完全にオーバーライドできる」と記載されています。エンフォースメントチェーンにおけるこのクリティカルなオーバーライドが、デバッグインターフェースを私たちのターゲットにしたのです。
Mem-APへのセキュアデバッグへのアクセスは、セキュアメモリの読み書き、コアの停止とシングルステップ、レジスタの検査のための汎用プリミティブです。そのレジスタがフォールトによって設定できるかどうかは、この投稿の残りの部分が答える質問です。
実験セットアップ
ターゲット構成
Raspberry PiのRP2350ハッキングチャレンジでは、参加者にOTP1に保存されている128ビットの秘密情報を抽出することが求められました。起動時に、署名されたチャレンジファームウェアは、ページ48が期待される永続ロックを持っていることを確認し、次のOTPリセットまで秘密情報へのセキュアおよびノンセキュアアクセスを拒否する実行時ロックを適用します。私たちは、このベンダー定義構成を、独自のA4リビジョンデバイスで再現しました。
公開鍵のSHA-256フィンガープリントをBOOTKEY0にプログラムしました。
BOOT_FLAGS1.KEY_VALIDを0x1、BOOT_FLAGS1.KEY_INVALIDを0xeに設定しました。
セキュアブートを有効にしました(CRIT1.SECURE_BOOT_ENABLE = 1)。
デバッグを永続的に無効にしました(CRIT1.DEBUG_DISABLE = 1)。
グリッチ検出器を最大感度で有効にしました(CRIT1.GLITCH_DETECTOR_ENABLE = 1、CRIT1.GLITCH_DETECTOR_SENS = 3)。
ページ1と2の永続ロックをチャレンジ構成に従って設定しました。
ページ48の永続ロックをPAGE48_LOCK1 = 0x3c3c3cに設定しました。これにより、ノンセキュアアクセス(LOCK_NS = INACCESSIBLE)は拒否されましたが、セキュア読み書きアクセス(LOCK_S = READ_WRITE)は維持されました。
セキュアブートを有効にするとCortex-M33コアのみが許可されるため、これらの実験では両方のプロセッサソケットでArmを使用しました。
サンプル準備とベンチ
デバイスは裏面からデカプス化され、赤外線光が金属層にブロックされることなくシリコン基板を通過してトランジスタに到達できるようにしました。その後、チップをテスト中のデバイスの駆動と監視のためのLedger DonjonのオープンソースプラットフォームであるScaffoldに接続されたドーターボードにハンダ付けしました。チップの裏面のリードフレームを取り外すとGND接続が切断されるため、銅線で復旧させました。
DEBUGEN:永続的なデバッグ無効のオーバーライド
DEBUGENには5つの機能ビットがあります。
ビット名
効果
0
PROC0
コア0のメモリポートへのアクセスを有効にします。
1
PROC0_SECURE
コア0のメモリポートを介したセキュアアクセスを許可します。
2
PROC1
コア1のメモリポートへのアクセスを有効にします。
3
PROC1_SECURE
コア1のメモリポートを介したセキュアアクセスを許可します。
8
MISC
クロス・トリガー・インターフェイスやRISC-Vデバッグ・アクセス・ポートなど、追加のデバッグ・コンポーネントを有効にします。
コアのセキュアデバッグには、Mem-APを有効にするビットと、それを通じたセキュアアクセスを許可するビットの両方が必要です。OTPセキュリティフィールドに使用される冗長エンコーディングとは異なり、データシートにはDEBUGENのビット冗長性、パリティ、または多数決に関する記載はありません。そのため、セキュアデバイスでレーザーパルスがDEBUGENビットを設定できるかどうかをテストしました。
フォトンエミッション誘導ローカライゼーション
そのテストには、まずどこを狙うべきかを知る必要があります。個々のDEBUGENビットを設定することは、単一のレジスタビットのストレージにヒットすることであり、それは干し草の中の針です。これは、命令スキップフォールトに比べて、より困難なターゲティング問題です。命令スキップフォールトでは、コアパイプラインの多くのフリップフロップのいずれかを妨害するだけで同じスキップを生成できるため、感度領域が広がり、ランダムスキャンで見つけることができます。単一のDEBUGENビットのブラインドスキャンは非現実的です。
トランジスタのスイッチングは、その活動と相関する微弱な近赤外光子を放出するため、その放出を繰り返し実行で収集することで、選択された制御が状態を変更する場所を明らかにできます。これにより、フォトンエミッション顕微鏡法(PEM)がDEBUGENに適していることがわかりました。メモリマップされたレジスタであるため、セキュアソフトウェアはループ内で正確なビットをトグルでき、測定に必要な繰り返し状態変化を駆動できます。これを最初のローカライゼーションステージとして使用し、結果のマッピングにより、後続のレーザー走査を数マイクロメートルの領域に限定しました。選択されたDEBUGENビットをオンオフするループを繰り返しトグルするループを比較しました。それらは、わずかに異なるだけでした。