光子發射引導雷射故障注入破解 RP2350 安全除錯
TL;DR
- 光子發射顯微鏡 (PEM) 精確定位了 RP2350 上控制除錯存取的
DEBUGEN暫存器。 - 聚焦的 980 nm 雷射脈衝設定了
PROC1和PROC1_SECURE位元,即使已設定永久除錯停用,仍重新啟用了安全世界 (Secure-world) 除錯。 - 在救援重置 (rescue reset) 後,攻擊者從 OTP 記憶體中讀取了韌體在執行時期鎖定的 128 位元機密。
- 此攻擊需要破壞性的晶片準備、精密的雷射設備,以及價值約 $250,000 的實驗室器材。
RP2350 安全架構與除錯停用鏈
RP2350 微控制器實作了:
- 儲存於一次性可程式化 (OTP) 記憶體中的公開金鑰驗證安全開機。
- 分隔安全與非安全狀態的 Armv8‑M TrustZone。
- 一個永久的
CRIT1.DEBUG_DISABLE旗標,可停用兩個核心的 Mem‑AP,切斷所有 SW‑DP 和除錯 AP 匯流排存取。 - 一個
DEBUGEN暫存器,根據資料手冊記載,當其所有位元皆被設定時,可以覆寫DEBUG_DISABLE。 DEBUGEN_LOCK位元,用於鎖定軟體對DEBUGEN的寫入,但缺乏硬體冗餘。
OTP 子系統儲存持久鎖定列 (PAGEn_LOCK0/1) 並對關鍵旗標使用三選二投票機制,使永久除錯停用旗標能抵抗單一位元故障。然而,DEBUGEN 暫存器本身缺乏冗餘、同位檢查或多數決投票,使其成為潛在的弱點。
駭客挑戰的實驗配置
作者在 revision 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位元。 - 針對兩個互補的位元遮罩擷取了數千張紅外線影像。
- 對堆疊進行平均與相減處理,消除了靜態背景,並揭示了與切換位元相關的局部光子發射。
- 產生的映射圖突顯了三個微米級區域,其中包含位元 0‑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 進行安全存取)。 - 這兩個位置僅相距幾微米;20× 物鏡無法將其隔離,因為較大的光點同時擊中了設定與清除區域。
- 一個迭代腳本對每個點進行脈衝照射,直到兩個位元都保持設定狀態,從而實現了持久的
DEBUGEN = 0xc值。
關鍵在於,雷射同時將對應的 DEBUGEN_LOCK 位元翻轉為 1,防止任何後續的軟體寫入清除除錯啟用狀態。
利用救援重置讀取 OTP 機密
在恢復安全除錯後,攻擊者透過常駐的 RP‑AP (CTRL.RESCUE_RESTART) 執行了救援重置。此重置:
- 在使用者韌體執行前暫停開機 ROM,因此第 48 頁的執行時期鎖定從未被套用。
- 保留了持久的 OTP 鎖定 (
LOCK_S = READ_WRITE),允許安全讀取。
攻擊順序如下:
- 觸發救援重置。
- 當核心處於開機 ROM 等待迴圈時,將
DEBUGEN故障注入為0xc。 - 透過核心 1 的安全
DHCSR暫停核心 1。 - 透過受保護的讀取介面讀取 OTP 列
0xc08–0xc0f,提取 128 位元機密。
機密在單次執行中被恢復,證明了當結合救援重置時,安全除錯可以繞過執行時期的 OTP 鎖定。
為什麼 DEBUGEN_LOCK 無法阻止攻擊
DEBUGEN_LOCK 旨在阻止軟體寫入,但雷射故障可以同時設定 DEBUGEN 位元以及其鎖定位元。一旦鎖定為 1,軟體就無法清除對應的 DEBUGEN 位元,使得故障在發生另一次物理故障前保持永久狀態。
緩解措施評估與更廣泛的影響
- 硬體層級:OTP 冗餘保護了永久除錯停用旗標,但未經檢查的
DEBUGEN暫存器造成了繞過漏洞。 - 軟體層級:執行時期的
ACCESSCTRL限制可以限制直接的 Mem‑AP 存取,然而具有安全屬性的除錯器仍然可以控制核心並讀取暫存器,從而破壞機密性。 - 重置層級:RP‑AP 救援重置在韌體重新鎖定前,將 OTP 執行時期鎖定恢復為其持久狀態,暴露了任何允許安全讀寫的 OTP 頁面。
- 實用性:此攻擊需要破壞性去封裝、高精度雷射系統以及專業的硬體安全知識,成本約為 $250,000。評論者指出,功能性複製品的建造成本可能低於 $25,000,但對於普通攻擊者而言,門檻仍然很高。
"此攻擊需要物理存取、破壞性準備以及約 25 萬美元的實驗室設備。" – Ledger Donjon 部落格
社群反應
- 成本觀點:BitBangingBytes 認為,使用 ChipShouter 等更便宜的組件,可以在 1 萬美元以下組裝出該裝置。
- 更廣泛的相關性:byb 指出,這些發現對於任何安全隔離區 (secure-enclave) 裝置(如 Yubikey 類產品)都很重要。
- 技術好奇心:akoboldfrying 詢問挑戰機密最初是如何編程的,強調公開儲存庫僅寫入預留位置值,真實機密必須由競賽組織者提供。
- 方法論批評:nullc 建議可以使用替代的故障刺激(例如 X 光)來避免去封裝,儘管目前沒有提供證據。
結論
- RP2350 的安全鏈強度取決於其最薄弱的執行點;
DEBUGEN提供了一個未受保護的覆寫機制,雷射故障注入可以利用這一點。 - 光子發射顯微鏡是一種有效的預先定位步驟,將大海撈針的問題轉變為可處理的微米級搜尋。
- 救援重置行為結合故障的
DEBUGEN,使得讀取韌體在執行時期刻意隱藏的 OTP 機密成為可能。 - 緩解措施必須考慮完整的執行路徑——從不可變的 OTP 位元到可變的控制暫存器與重置邏輯——而不是孤立地處理每個機制。
揭露:該漏洞已於 2026 年 7 月 28 日回報給 Raspberry Pi。作者感謝 Raspberry Pi 團隊的建設性回應。
Sources
相關
- Dispatch
- Dispatch
- Dispatch
- Dispatch
- Dispatch