【dSPACE dissecto HydraVision 測試精解】
UDS SecurityAccess 安全存取測試
從 Seed & Key 機制、常見弱點,到 HydraVision 的 SecurityAccess 測試案例家族:深入解析存取層級探索、懲罰時間、金鑰序列、嘗試次數限制與 Seed 隨機性分析,以及如何對應 UNECE R155、GB 44495 與 ISO/SAE 21434 的驗證要求。
在 UDS(Unified Diagnostic Services, ISO 14229)診斷協定中,SecurityAccess(服務 0x27)是保護 ECU 特權功能的關鍵閘門——記憶體讀寫、RoutineControl、參數校正與軟體刷寫等高風險服務,通常都必須先通過 Seed & Key 驗證才能使用。也因此,SecurityAccess 被視為診斷介面上最主要的攻擊面:只要 Seed 可預測、錯誤嘗試沒有上限,或金鑰序列檢查不嚴謹,攻擊者僅透過 OBD 連接埠就可能取得特權存取。dSPACE dissecto HydraVision 針對這個閘門提供了一整組自動化測試案例,本文將說明 SecurityAccess 的運作原理、常見弱點,以及 HydraVision 如何系統化地驗證它。
1. SecurityAccess(0x27)運作原理
SecurityAccess 採用挑戰—回應(Challenge-Response)機制。每個安全層級(Security Level)由一對子功能組成:奇數子功能用來請求 Seed(requestSeed),緊接著的偶數子功能用來送出 Key(sendKey)。ECU 產生隨機 Seed,測試儀以雙方共享的秘密演算法計算出 Key 回傳,ECU 驗證通過後才解鎖該層級。
# 典型 SecurityAccess 交換流程(以 Level 0x01 / 0x02 為例) Tester → ECU : 10 03 # 進入 Extended Session ECU → Tester : 50 03 ... Tester → ECU : 27 01 # requestSeed(奇數子功能) ECU → Tester : 67 01 [Seed] # 回傳 Seed Tester → ECU : 27 02 [Key] # sendKey(偶數子功能) ECU → Tester : 67 02 # 驗證成功,層級解鎖
驗證失敗時,ECU 會回覆 0x7F 加上負面回應碼(NRC)。以下是 SecurityAccess 測試中最重要的幾個 NRC:
| NRC | 名稱 | 在測試中的意義 |
|---|---|---|
0x13 | incorrectMessageLengthOrInvalidFormat | 請求長度不符,測試會逐位元組調整長度以探出 ECU 預期的格式 |
0x24 | requestSequenceError | 未先請求 Seed 就送 Key——這是 ECU 應有的正確拒絕 |
0x35 | invalidKey | 金鑰錯誤;若無限次回覆此碼而不鎖定,表示缺乏嘗試次數限制 |
0x36 | exceededNumberOfAttempts | 超過嘗試次數上限——代表 ECU 有實作暴力破解防護 |
0x37 | requiredTimeDelayNotExpired | 懲罰延遲時間尚未結束;也證明該安全層級確實存在 |
2. SecurityAccess 的常見弱點
Seed & Key 機制的安全性取決於實作細節。HydraVision 的測試案例針對以下五類弱點設計,並在每個測試案例的中繼資料中標註對應的 CWE 與 UNECE R155 威脅編號:
| 弱點類型 | 說明 | 對應 CWE / R155 威脅 |
|---|---|---|
| Seed 可預測 | Seed 重複、長度過短、熵值不足,或每次開機後都回傳同一組 Seed | CWE-330 / CWE-338 / CWE-326;R155 威脅 26、9 |
| 缺乏嘗試次數限制 | 錯誤金鑰可無限次嘗試,未進入鎖定或懲罰延遲 | CWE-307;R155 威脅 9、18 |
| 金鑰序列檢查不嚴 | 未請求 Seed 就送出的 Key 被評估甚至接受 | CWE-306 / CWE-287;R155 威脅 9 |
| 重放風險 | 重開機後 Seed 重複,先前截獲的 Key 可再次使用 | CWE-294;R155 威脅 6 |
| 可用性問題 | 懲罰時間永不結束,少量錯誤嘗試即可讓維修端永久無法進行診斷 | CWE-400 / CWE-799;R155 威脅 24 |
3. HydraVision 的 SecurityAccess 測試流程
HydraVision 的 SecurityAccess 測試不是單一腳本,而是建立在 ECU 狀態圖(State Graph)之上的分層流程。前一個測試案例的輸出會自動寫入目標的 Context,成為下一個測試案例的輸入:
端點探索
IsotpScan 找出 CAN 上的診斷端點,UdsProtocolTest 確認端點支援 UDS,產生 UdsEndpoint。
狀態掃描
UdsStateScan 走訪 ECU 可達的診斷 Session 與狀態轉換路徑,產生 UdsSystemStates。
安全層級探索
UdsSecurityAccessScan 在每個狀態中盤點提供的安全層級,產生 UdsSecurityAccessSystemStates。
安全性驗證
各 SecurityAccess 測試案例針對每個「狀態 × 安全層級」組合,執行懲罰時間、金鑰序列、嘗試限制與 Seed 分析。
結果判讀與報告
結果寫入 CSV 與時序資料庫,分析師標註嚴重度與留言後,一鍵產出含法規對應的測試報告。
設計重點:HydraCore 中的 UdsEndpoint 是與傳輸層無關的抽象介面,同一個測試案例可以不經修改地在 UDS over CAN(ISO-TP)、UDS over DoIP 與 BMW HSFZ 上執行。UdsSecurityAccessSystemStates 則記錄了「如何從預設 Session 走到某個狀態、在該狀態下有哪些安全層級」,讓每個測試案例都能自動將 ECU 驅動到正確的位置再開始檢查。
4. SecurityAccess 測試案例家族總覽
HydraVision 測試案例庫中的 SecurityAccess 測試可分為六大類:
| 類別 | 測試案例 | 驗證目的 |
|---|---|---|
| 層級探索 | UdsSecurityAccessScanUdsSecurityAccessScanFast | 盤點每個診斷狀態提供哪些安全層級(攻擊面清冊) |
| 可用性 | UdsSecurityAccessPenaltyTimeCheck…PenaltyTimeCheckNoTps | 確認安全層級可達,且懲罰延遲會正常結束 |
| 金鑰序列 | UdsSecurityAccessImmediateKeyTry | 未請求 Seed 就送 Key 時,ECU 是否正確拒絕 |
| 嘗試次數限制 | UdsSecurityAccessInvalidKeyTryUdsSecurityAccessRandomKeyTry(各含 NoTps 變體) | 錯誤金鑰是否被拒絕,並在數次失敗後鎖定 |
| Seed 品質 | UdsSecurityAccessSeedAnalysis…SeedAnalysisReset…SeedAnalysisExtended(含 NoTps 與組合變體共 8 個) | Seed 的唯一性、長度、熵值,以及重開機後是否重複 |
| 整合套件 | UdsSecurityAccess | 依固定順序一次執行上述六項子檢查 |
5. 各項檢查詳解
5.1 安全層級探索:UdsSecurityAccessScan
在狀態圖的每個尚未持有安全層級的狀態中,對所有奇數子功能送出 Seed 請求。ECU 回覆正面回應,或回覆 NRC 0x37(懲罰延遲同樣證明該層級存在)時,就記錄為「存在」。
- 輸出:
UdsSecurityAccessSystemStatesContext 項目,供後續所有 SecurityAccess 測試使用。 - 不送出任何 Key:這個測試只確認「閘門在哪裡」,不解鎖也不評估密碼強度;結果是攻擊面清冊,而非合格判定。
- 慢速與快速版本:標準版每次狀態造訪只送一次請求、回應等待 30 秒,適合回應緩慢的 ECU;
ScanFast使用 0.2 秒回應視窗,速度快但可能漏判。 - 法規價值:狀態與安全層級對照表可作為 ISO/SAE 21434 Clause 15 TARA 的資產與攻擊路徑輸入(WP-15-02、WP-15-04)。
5.2 懲罰時間檢查:PenaltyTimeCheck
對每個安全層級重複送出 Seed 請求(最多 100 次),直到取得正面回應。遇到 NRC 0x37 時,以 2 秒起跳、倍增至上限 60 秒的退避策略等待懲罰時間結束。這個檢查同時是後續檢查的前置閘門:只有通過,才會進入金鑰與 Seed 相關的測試。
- 合格:安全層級可達,ECU 施加的懲罰延遲會自然結束。
- 發現:100 次嘗試皆無法取得 Seed——懲罰時間永不結束,等同少量錯誤嘗試即可造成診斷服務阻斷(R155 威脅 24.1)。
5.3 金鑰序列檢查:ImmediateKeyTry
在沒有先請求 Seed 的情況下,直接送出 sendKey 請求。依 ISO 14229-1 規定,ECU 應回覆 NRC 0x24 requestSequenceError。
- 合格:回覆
0x24。 - 嚴重發現:回覆正面回應
0x67——代表不需完成挑戰—回應即可解鎖安全層級(CWE-306)。 - 需人工複核:回覆
0x35 invalidKey,表示 Key 在錯誤的序列下仍被評估;由於前置的懲罰時間檢查在同一 Session 中取過 Seed,此回應可能仍符合協定,應由分析師確認。
5.4 嘗試次數限制:InvalidKeyTry 與 RandomKeyTry
取得 Seed 後刻意送出錯誤的 Key,觀察 ECU 是否在數次失敗後啟動防護。InvalidKeyTry 使用固定的無效金鑰;RandomKeyTry 則每次使用隨機產生的金鑰,額外檢查是否有隨機金鑰「意外」被接受。
| ECU 行為 | 判定 | 意義 |
|---|---|---|
約 3 次失敗後回覆 0x36 或進入 0x37 懲罰時間 | 合格 | 具備暴力破解防護 |
超過 10 次仍持續回覆 0x35 | 發現 | 缺乏嘗試次數限制(CWE-307) |
過早或過晚鎖定、回覆 0x24 | 發現 | 鎖定邏輯或序列管理實作異常 |
錯誤或隨機金鑰獲得 0x67 正面回應 | 嚴重發現 | 金鑰驗證失效,或金鑰空間過小而可被猜中 |
5.5 Seed 品質分析:SeedAnalysis
在同一個診斷 Session 中(不重置 ECU)收集最多 40 個 Seed,並以四項準則評估 Seed 產生器的品質:
數量
至少取得一個以上的 Seed,確認 Seed 產生功能正常。
唯一性
每次請求的 Seed 必須不同,不可固定回傳同一值。
長度
所有 Seed 長度一致,且至少 4 位元組,避免挑戰空間過小。
熵值
彙整所有 Seed 的位元組,Shannon 熵至少每位元組 1 bit。
SeedAnalysisExtended 是高樣本量版本:每個安全層級最多發出 20,000 次 Seed 請求、執行時間預算 10 小時,適合在實驗室對 Seed 產生器做深度統計驗證。收集到的 Seed 與時間戳記會寫入 SeedAnalysis_seed_times.log,方便進一步離線分析。
5.6 重開機後的 Seed 分析:SeedAnalysisReset
這是最容易被忽略、卻影響最大的檢查。測試在每一次 Seed 請求前都重置 ECU(有設定電源控制時為實際斷電重啟,否則使用 UDS ECUReset),最多 100 個循環。
為什麼需要這個變體?許多 ECU 的亂數產生器在開機時從固定狀態起始。若只在同一 Session 內連續請求,Seed 看起來各不相同、完全正常;但每次重開機後的第一個 Seed 卻永遠一樣。如此一來,對應的 Key 只要算一次就能在每次重開機後重複使用,等同閘門完全失效,也讓先前截獲的 Seed/Key 組合可被重放(CWE-294、R155 威脅 6.3)。不重置的 SeedAnalysis 無法發現這個弱點。
5.7 整合套件:UdsSecurityAccess
對每個「狀態 × 安全層級」組合,依固定順序執行六項子檢查,並以相依關係控制執行條件:
# UdsSecurityAccess 子檢查順序與相依關係 1. Penalty Time Check # 前置閘門 A 2. Immediate Key Try # 需通過 A 3. Seed Analysis (during Operation) # 需通過 A 4. Seed Analysis (after Reset) # 需通過 A 5. Penalty Time Check # 前置閘門 B 6. Invalid Key Try # 需通過 B
相依條件未滿足或無法進入目標狀態的子檢查會記錄為「未執行」。任一子檢查失敗,整體結果即為 EXECUTED_WITH_WARNING;全部通過為 EXECUTED_SUCCESSFUL;發生未處理錯誤則為 EXECUTED_WITH_ERROR。
5.8 TesterPresent 與 NoTps 變體
多數 SecurityAccess 測試案例都有一個 NoTps 變體,差別在於是否保留週期性的 TesterPresent(0x3E):
- 標準版本:持續每 3 秒送出 TesterPresent 維持 Session。若測試過程中 Session 掉回預設,代表這是 ECU 的安全反應,而非一般的 S3 逾時,屬於有意義的發現。
- NoTps 版本:在每次請求前後暫停 TesterPresent,用於驗證 ECU 在沒有保活訊號時的行為,或排除 TesterPresent 對測試結果的干擾。
6. 法規與標準對應
HydraVision 的每個 SecurityAccess 測試案例都附有完整的法規對應說明,可直接作為型式認證與合規文件的佐證:
| 法規 / 標準 | 條款 | 對應測試 |
|---|---|---|
| UNECE R155 | 7.3.6 型式認證前的安全措施有效性測試 | 全部 SecurityAccess 測試案例 |
| UNECE R155 | 7.3.8 密碼模組須符合共識標準 | SeedAnalysis 系列、UdsSecurityAccess |
| GB 44495-2024 | 6.6 以測試驗證資安措施有效性 | 全部 SecurityAccess 測試案例 |
| GB 44495-2024 | 6.8 / 6.9 密碼演算法與密碼模組要求 | SeedAnalysis 系列 |
| GB 44495-2024 | 7.1.4.1 外部介面存取控制;7.1.4.4 診斷寫入操作須身分驗證 | Scan、PenaltyTimeCheck、InvalidKeyTry、RandomKeyTry |
| ISO/SAE 21434 | Clause 10 元件層級驗證(WP-10-05 弱點、WP-10-07 驗證報告) | PenaltyTime、Key 系列、SeedAnalysis 系列 |
| ISO/SAE 21434 | Clause 15 TARA(WP-15-02、WP-15-04) | UdsSecurityAccessScan |
| AIS 189(印度) | 7.3.6 / 7.3.8、Annexure D | 與 R155 相同的威脅與緩解編號,可直接沿用 |
7. 實務應用:以測試計畫一次完成評估
HydraVision 內建的 UdsBasicCAN 與 UdsBasicDoIP 測試計畫,已將 UDS 協定確認、狀態掃描、服務列舉、DID 讀取與快速 SecurityAccess 探測串成一條完整流程,適合作為 GB 44495 導向的外部介面存取控制初步檢查。典型的執行步驟如下:
- 設定目標 Context:CAN 介面需要
CanBus、CanSocket與PowerSupply;DoIP 則需要EthInterface與PowerSupply。電源控制讓 ECU 在被限速或狀態不穩時能可靠地重置與恢復。 - 執行基礎測試計畫:取得狀態圖與安全層級清冊。
- 針對重點層級深入驗證:對保護刷寫或校正寫入的安全層級,加跑
UdsSecurityAccess整合套件與SeedAnalysisReset。 - 判讀與報告:在結果頁檢視每個「狀態 × 層級」的子檢查結果,標註分析師嚴重度與留言後產出報告。
搭配 AI 代理:透過 HydraVision MCP,工程師可以用自然語言要求 AI 助理啟動上述測試計畫、彙整各安全層級的檢查結果、標註發現並草擬報告,全程由工程師審閱確認。詳細做法請參考本站《dSPACE dissecto HydraVision MCP》技術文章。
8. 執行注意事項
-
可能觸發鎖定:嘗試次數限制類測試會刻意送出錯誤金鑰,可能讓安全層級進入懲罰時間或 exceededNumberOfAttempts 鎖定;若 ECU 以非揮發性記憶體保存嘗試計數,鎖定狀態可能在斷電後仍持續。
-
大量重置與斷電:SeedAnalysisReset 每個安全層級最多執行 100 次重置;有設定 PowerSupply 時每次都是實際斷電重啟。
-
不會自動回到預設 Session:測試結束後 ECU 會停留在最後進入的診斷狀態,後續測試或實車使用前需自行確認狀態。
-
僅在授權環境執行:請勿在行駛中的車輛,或其他節點依賴受測 ECU 的匯流排上執行;建議在台架或 Virtual ECU 上先行驗證流程。
-
「全部通過」不等於沒有問題:無法進入的狀態,其子檢查會記錄為「未執行」而不計為失敗,請檢視逐項結果,而非只看總體判定。
9. 開發端防護建議
根據測試案例中對應的 R155 緩解措施,ECU 開發團隊在實作 SecurityAccess 時應注意:
強健的 Seed 產生器(M23)
使用經審查的密碼學亂數產生器,確保每次開機後狀態不同,並採用足夠長度的 Seed。
嘗試限制與偵測(M9)
限制錯誤嘗試次數並施加延遲,同時記錄與偵測重複的解鎖嘗試,而非只是減速。
嚴格的序列控制(M9)
任何未先經過有效 requestSeed 的 sendKey 一律以 0x24 拒絕。
可恢復的懲罰機制(M13)
懲罰延遲必須能自然結束,避免少量惡意嘗試就讓維修端永久無法診斷。
最小暴露原則(M8 / M22)
每個安全層級只在真正需要的 Session 中開放,並對診斷介面套用存取控制。
防重放設計(M10)
讓 Seed/Key 交換綁定不可重複使用的值,確保重開機前截獲的金鑰在之後失效。
10. 捷策動能技術支援
Jotactic 捷策動能提供 dSPACE dissecto HydraVision 相關的全方位技術服務:
測試規劃
依 UNECE R155、GB 44495、ISO/SAE 21434 需求規劃 UDS 與 SecurityAccess 測試範圍。
技術諮詢與結果判讀
協助判讀 SecurityAccess 測試結果、釐清發現項目並提出改善建議。
教育訓練與 Demo
HydraVision 操作教育訓練與客製化 Demo 專案驗證。
歡迎來電 03-6109669 或來信 info@jotactic.com 洽詢。