服務ID匯總
首先總體看一下刷寫涉及的服務ID以及在刷寫過程的用途。
診斷服務標識 Service ID |
診斷服務 Diagnostic Service |
在刷寫過程中的用途 |
---|---|---|
0x10 | 診斷會話控制 DiagnosticSessionControl | 切換到拓展會話檢查刷寫條件、停止一些功能切換到編程會話執行刷寫 |
0x11 | ECU復位 ECUReset | 用于刷寫完成后重啟服務,使新固件生效 |
0x27 | 安全訪問 SecurityAccess | 校驗刷寫者身份,采用seed-key |
0x28 | 通信控制 CommunicationControl | 關閉和啟用一般通訊報文 |
0x29 | 認證服務 Authentication Service | 基于PKI的身份認證 |
0x31 | 例程控制 RoutineControl | 指定特定的例程,前置條件檢查、檢查編程依賴等 |
0x34 | 請求下載 RequestDownload | 設置下載的參數(起始地址、長度) |
0x36 | 數據傳輸 TransferData | 固件傳輸 |
0x37 | 請求結束傳輸 RequestTransferExit | 終止數據傳輸 |
0x3E | 測試設備在線 TesterPresent | 用于將會話保持在當前會話中 |
0x85 | 控制故障碼設置 ControlDTCSetting | 設置啟停故障碼存儲功能 |
會話
診斷會話關聯了一系列的診斷服務或診斷功能。只有當前激活的診斷會話支持的診斷服務才能被響應。ECU通常有兩個以上的診斷會話,包括:一個默認會話(Default Session)和若干非默認會話(Non Default Session)。其中非默認會話又包括編程會話和擴展會話等。其他非默認會話由廠商自行定義。常見的ECU診斷會話定義如下:
診斷會話 | 會話ID | 描述 |
---|---|---|
默認會話 | 0x01 | ECU啟動后默認進入此會話。只提供基本的診斷服務。 |
編程會話 | 0x02 | ECU更新應用程序或標定數據時進入此會話。支持與程序更新相關的診斷服務。如0x34、0x36、0x37等。 |
擴展會話 | 0x03 | 除支持默認會話下的診斷服務和功能外,還支持額外的診斷服務。 |
... | ... | ... |
診斷會話控制服務(0x10)是用于激活控制器各種不同的會話模式 。在固件刷寫中會使用0x10服務在默認會話、編程會話、拓展會話來回切換。
會話保持(3E 00)
此服務用于向單(或多)個服務端指示客戶端仍然與車輛連接,并且維持先前已激活的某些診斷服務和/或通信將保持活動狀態。此服務用于將一個或多個服務端保留在默認會話之外的診斷會話中,通過周期性的發送 3E 實現。
整個刷寫過程中, 刷寫工具要周期性的發送鏈路保持請求, ECU 不需要響應請求信息。如果沒有開啟會話保持,幾秒后ECU就會切回默認會話。
刷寫前需要保持在拓展會話下。
刷寫中需要保持在編程模式下。
27 服務-安全訪問認證流程
安全訪問服務的目的是為保密和排放、安全相關的一些服務和數據提供訪問權限來保護數據。2E(通過DID寫入數據)、2F(通過DID進行輸入輸出控制)、31服務(例程控制)、34服務(請求下載)、36服務(請求上傳)、37服務(數據傳輸)等服務需要經過身份認證。身份認證利用了種子和密鑰之間的關系。服務的示例如下圖所示:
Request Seed:Tester 使用27服務,并攜帶需要解鎖的安全等級 0X 發送給特定的 ECU。
Request Seed Reply : 對應的ECU收到之后,生成4個字節的隨機數 Seed,返回給 Teseter。
Send Key: Tester 拿到Seed后,使用自定義實現的 Seed2Key 算法計算出Key,發送給ECU。Send Key 中的安全訪問級別 0Y 為Request Seed的安全訪問級別的值 +1。例如當請求種子為 27 01 時,發送秘鑰則為 27 02(01+1)。
Send Key Reply : ECU 將收到的 Key 和 自己拿 Seed 作為輸入的 Seed2Key 計算出結果進行對比,然后返回驗證的結果。
Seed2Key 算法
安全訪問中最重要的就是Seed2Key算法,算法通常是一些比較簡單的移位算法,例如下列的算法。
#defineSECURITYCONSTANT 0x464c4147 WORDseedToKey(WORDwSeed,DWORDconstData) { DWORDwLastSeed; WORDwLastKey; wLastSeed=wSeed; wLastSeed=(wLastSeed>>5)|(wLastSeed<<23); ?wLastSeed?*=?7; ?wLastSeed?^=?SECURITYCONSTANT; ?wLastKey?=?(WORD)wLastSeed; ?return?wLastKey; ?}
seed2key 接受2個輸入參數 種子 和 安全常量,種子由 ECU 隨機產生;安全常量內置在ECU和診斷儀中,在某種意義上來說安全常量就是密碼。采用同一算法的不同用途的 ECU,通常使用不相同的安全常量。
診斷連接方式
診斷設備與ECU連接有兩種方式,如下圖。
診斷設備連接網關,由網關將消息轉發給ECU;
診斷設備與ECU直連。
固件格式
S-record、Intel Hex、BIN、VBF 是汽車中MCU固件常用的格式,下面簡單介紹一下這幾種格式。了解數據格式有助于固件分析、刷寫安全測試等。
S-record
S-record 是摩托羅拉設計的一種常于MCU內存、EPROM、EEPROM 寫入的文檔格式,S-record 將二進制數據以ASCII字符表示。常用文件后綴名有 SRECORD、SREC、S19、mot。文件格式如下圖。
Header Record 文件頭信息,其中記錄有模塊名稱、版本號等;
Data Record 數據記錄,有 S1、S2、S3 三種類型;
Count Record(可選) 包含了先前傳輸的S1、S2、S3記錄的計數;
Termination Record,結束記錄,有 S7、S8、S9 三種類型。
S0 Record(頭記錄):記錄類型是“S0”。地址場沒有被用,用零(0x0000)填充。數據場中的信息使用HEX轉換成字符串是:JKE_X1_APP_SOC.s19。此行表示程序的開始,不需燒入內存,用來表述文件的相關信息,可能包含文件名、版本號等。
S3 Record(數據記錄):記錄類型是“S3” 。地址場由4個字節地址,數據場由可載入的數據組成。
S7 Record(結束記錄):記錄類型是“S7”。地址場由4字節的地址,包含了開始執行地址。沒有數據場。此行表示程序的結束,不需燒入內存。
注: S-Record 中記錄有固件的起始地址,逆向分析時直接從中獲取,然后設置為起始地址即可。
Intel HEX
在嵌入式MCU程序開發中,經常編譯鏈接后生成的 HEX 就是采用的 Intel Hex 格式。也是一種將二進制文件轉換成了ASCII碼形式存儲的文本文件。
BIN
二進制文件,只有固件數據,沒有起始地址、描述信息等。
自定義格式
車企自定義格式如,VBF(Volvo Binary File)。VBF 使用在 volvo、mazda、Ford、吉利等品牌的汽車中。
文件頭記錄有文件的VBF版本號、軟件版本信息、ECU物理地址、數據起始地址等。
分析工具
srecord
命令行工具 srecord
sudoapt-get install srecord
查看S-record文件信息
fans@fans:~$ srec_infoJKE_X1_APP_SOC.s19 Format: Motorola S-Record Header:"JKE_X1_APP_SOC.s19" Execution Start Address: 00FC0000 Data: 01000000-01089C5F 01180000-011800FF 0127FB80-0127FBDF 0127FF80-0127FFFF
文件轉換
S-record 轉 hex
srec_cat JKE_X1_APP_SOC.s19 -Motorola -o JKE_X1_APP_SOC.hex -Intel
Intel hex 轉 S-record
srec_cat JKE_X1_APP_SOC.hex -Intel -o JKE_X1_APP_SOC.s19 -Motorola
S-record 轉 bin
srec_cat JKE_X1_APP_SOC.s19 -Motorola -o JKE_X1_APP_SOC.bin -bin
HexView
S-record、Intel Hex、BIN 文件之間的轉換可以采用 Vector 的圖形化文件編輯軟件 HexView。
專用工具
主機廠或供應商自己開發的專用軟件,如VBF文件查看工具 VBF Tool.
腳本
根據文件格式定義,編寫腳本解析、提供固件,部分可以在 Github 上找。
# wget https://raw.githubusercontent.com/consp/vbfdecode/master/vbfdecode.py # python vbfdecode.py -b firmware.vbf Offset: 0x359, Location: 0x18000, Size: 0xB256C, Data Offset: 0x361 VBF v2.1 Description: Software part:1234type: APP Network: 0x00000000 Data Format Identifier: 0x00000000 ECU address: 0x000007C6 Frame_format: Erase frames: Data blobs: 0x00018000 0x000B256C e301 Saving: 18000.bin
?
碼上報名
AES 2023 第四屆中國國際汽車以太網峰會,6月8-9日,上海
更多文章
智能網聯汽車信息安全綜述
華為蔡建永:智能網聯汽車的數字安全和功能安全挑戰與思考
汽車數據合規要點
車載以太網技術發展與測試方法
車載以太網防火墻設計
SOA:整車架構下一代的升級方向
軟件如何「吞噬」汽車?
汽車信息安全 TARA 分析方法實例簡介
汽車FOTA信息安全規范及方法研究
聯合國WP.29車輛網絡安全法規正式發布
滴滴下架,我卻看到數據安全的曙光
從特斯拉被約談到車輛遠程升級(OTA)技術的合規
如何通過CAN破解汽
會員權益:(點擊可進入)談思實驗室VIP會員
END
微信入群
談思實驗室專注智能汽車信息安全、預期功能安全、自動駕駛、以太網等汽車創新技術,為汽車行業提供最優質的學習交流服務,并依托強大的產業及專家資源,致力于打造汽車產業一流高效的商務平臺。
每年談思實驗室舉辦數十場線上線下品牌活動,擁有數十個智能汽車創新技術的精品專題社群,覆蓋BMW、Daimler、PSA、Audi、Volvo、Nissan、廣汽、一汽、上汽、蔚來等近百家國內國際領先的汽車廠商專家,已經服務上萬名智能汽車行業上下游產業鏈從業者。專屬社群有:信息安全、功能安全、自動駕駛、TARA、滲透測試、SOTIF、WP.29、以太網、物聯網安全等,現專題社群仍然開放,入滿即止。
掃描二維碼添加微信,根據提示,可以進入有意向的專題交流群,享受最新資訊及與業內專家互動機會。
談思實驗室,為汽車科技賦能,推動產業創新發展!
原文標題:車聯網安全基礎知識之UDS刷寫前置基礎知識
文章出處:【微信公眾號:談思實驗室】歡迎添加關注!文章轉載請注明出處。
-
控制器
+關注
關注
112文章
16416瀏覽量
178762 -
EEPROM
+關注
關注
9文章
1027瀏覽量
81771 -
ASCII
+關注
關注
5文章
172瀏覽量
35141 -
ecu
+關注
關注
14文章
890瀏覽量
54603
原文標題:車聯網安全基礎知識之UDS刷寫前置基礎知識
文章出處:【微信號:談思實驗室,微信公眾號:談思實驗室】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論