點(diǎn)擊上方藍(lán)字談思實(shí)驗(yàn)室
獲取更多汽車網(wǎng)絡(luò)安全資訊

01
服務(wù)ID匯總
首先總體看一下刷寫涉及的服務(wù)ID以及在刷寫過程的用途。

02
會(huì)話
診斷會(huì)話關(guān)聯(lián)了一系列的診斷服務(wù)或診斷功能。只有當(dāng)前激活的診斷會(huì)話支持的診斷服務(wù)才能被響應(yīng)。ECU通常有兩個(gè)以上的診斷會(huì)話,包括:一個(gè)默認(rèn)會(huì)話(Default Session)和若干非默認(rèn)會(huì)話(Non Default Session)。其中非默認(rèn)會(huì)話又包括編程會(huì)話和擴(kuò)展會(huì)話等。其他非默認(rèn)會(huì)話由廠商自行定義。常見的ECU診斷會(huì)話定義如下:

診斷會(huì)話控制服務(wù)(0x10)是用于激活控制器各種不同的會(huì)話模式 。在固件刷寫中會(huì)使用0x10服務(wù)在默認(rèn)會(huì)話、編程會(huì)話、拓展會(huì)話來回切換。
03
會(huì)話保持(3E 00)
此服務(wù)用于向單(或多)個(gè)服務(wù)端指示客戶端仍然與車輛連接,并且維持先前已激活的某些診斷服務(wù)和/或通信將保持活動(dòng)狀態(tài)。此服務(wù)用于將一個(gè)或多個(gè)服務(wù)端保留在默認(rèn)會(huì)話之外的診斷會(huì)話中,通過周期性的發(fā)送 3E 實(shí)現(xiàn)。
整個(gè)刷寫過程中, 刷寫工具要周期性的發(fā)送鏈路保持請(qǐng)求, ECU 不需要響應(yīng)請(qǐng)求信息。如果沒有開啟會(huì)話保持,幾秒后ECU就會(huì)切回默認(rèn)會(huì)話。
刷寫前需要保持在拓展會(huì)話下。
刷寫中需要保持在編程模式下。
04
27 服務(wù)-安全訪問認(rèn)證流程
安全訪問服務(wù)的目的是為保密和排放、安全相關(guān)的一些服務(wù)和數(shù)據(jù)提供訪問權(quán)限來保護(hù)數(shù)據(jù)。2E(通過DID寫入數(shù)據(jù))、2F(通過DID進(jìn)行輸入輸出控制)、31服務(wù)(例程控制)、34服務(wù)(請(qǐng)求下載)、36服務(wù)(請(qǐng)求上傳)、37服務(wù)(數(shù)據(jù)傳輸)等服務(wù)需要經(jīng)過身份認(rèn)證。身份認(rèn)證利用了種子和密鑰之間的關(guān)系。 服務(wù)的示例如下圖所示:

Request Seed:Tester 使用27服務(wù),并攜帶需要解鎖的安全等級(jí) 0X 發(fā)送給特定的 ECU。
Request Seed Reply : 對(duì)應(yīng)的ECU收到之后,生成4個(gè)字節(jié)的隨機(jī)數(shù) Seed,返回給 Teseter。
Send Key: Tester 拿到Seed后,使用自定義實(shí)現(xiàn)的 Seed2Key 算法計(jì)算出Key,發(fā)送給ECU。Send Key 中的安全訪問級(jí)別 0Y 為Request Seed的安全訪問級(jí)別的值 +1。例如當(dāng)請(qǐng)求種子為 27 01 時(shí),發(fā)送秘鑰則為 27 02(01+1)。
Send Key Reply : ECU 將收到的 Key 和 自己拿 Seed 作為輸入的 Seed2Key 計(jì)算出結(jié)果進(jìn)行對(duì)比,然后返回驗(yàn)證的結(jié)果。
05
Seed2Key 算法
安全訪問中最重要的就是Seed2Key算法,算法通常是一些比較簡(jiǎn)單的移位算法,例如下列的算法。
#defineSECURITYCONSTANT 0x464c4147
WORD seedToKey (WORD wSeed, DWORD constData)
{
DWORD wLastSeed ;
WORD wLastKey;
wLastSeed= wSeed;
wLastSeed = (wLastSeed>>5) | (wLastSeed<<23);
wLastSeed *= 7;
wLastSeed ^= SECURITYCONSTANT;
wLastKey = (WORD)wLastSeed;
return wLastKey;
}seed2key 接受2個(gè)輸入?yún)?shù) 種子 和 安全常量,種子由 ECU 隨機(jī)產(chǎn)生;安全常量?jī)?nèi)置在ECU和診斷儀中,在某種意義上來說安全常量就是密碼。采用同一算法的不同用途的 ECU,通常使用不相同的安全常量。
06
診斷連接方式
診斷設(shè)備與ECU連接有兩種方式,如下圖。
診斷設(shè)備連接網(wǎng)關(guān),由網(wǎng)關(guān)將消息轉(zhuǎn)發(fā)給ECU;
診斷設(shè)備與ECU直連。

07
固件格式
S-record、Intel Hex、BIN、VBF 是汽車中MCU固件常用的格式,下面簡(jiǎn)單介紹一下這幾種格式。了解數(shù)據(jù)格式有助于固件分析、刷寫安全測(cè)試等。
S-record
S-record 是摩托羅拉設(shè)計(jì)的一種常于MCU內(nèi)存、EPROM、EEPROM 寫入的文檔格式,S-record 將二進(jìn)制數(shù)據(jù)以ASCII字符表示。常用文件后綴名有 SRECORD、SREC、S19、mot。文件格式如下圖。

Header Record 文件頭信息,其中記錄有模塊名稱、版本號(hào)等;
Data Record 數(shù)據(jù)記錄,有 S1、S2、S3 三種類型;
Count Record(可選) 包含了先前傳輸?shù)腟1、S2、S3記錄的計(jì)數(shù);
Termination Record,結(jié)束記錄,有 S7、S8、S9 三種類型。

S0 Record(頭記錄):記錄類型是“S0”。地址場(chǎng)沒有被用,用零(0x0000)填充。數(shù)據(jù)場(chǎng)中的信息使用HEX轉(zhuǎn)換成字符串是:JKE_X1_APP_SOC.s19。此行表示程序的開始,不需燒入內(nèi)存,用來表述文件的相關(guān)信息,可能包含文件名、版本號(hào)等。
S3 Record(數(shù)據(jù)記錄):記錄類型是“S3” 。地址場(chǎng)由4個(gè)字節(jié)地址,數(shù)據(jù)場(chǎng)由可載入的數(shù)據(jù)組成。
S7 Record(結(jié)束記錄):記錄類型是“S7”。地址場(chǎng)由4字節(jié)的地址,包含了開始執(zhí)行地址。沒有數(shù)據(jù)場(chǎng)。此行表示程序的結(jié)束,不需燒入內(nèi)存。
注: S-Record 中記錄有固件的起始地址,逆向分析時(shí)直接從中獲取,然后設(shè)置為起始地址即可。
Intel HEX
在嵌入式MCU程序開發(fā)中,經(jīng)常編譯鏈接后生成的 HEX 就是采用的 Intel Hex 格式。也是一種將二進(jìn)制文件轉(zhuǎn)換成了ASCII碼形式存儲(chǔ)的文本文件。

BIN
二進(jìn)制文件,只有固件數(shù)據(jù),沒有起始地址、描述信息等。

自定義格式
車企自定義格式如,VBF(Volvo Binary File)。VBF 使用在 volvo、mazda、Ford、吉利等品牌的汽車中。
文件頭記錄有文件的VBF版本號(hào)、軟件版本信息、ECU物理地址、數(shù)據(jù)起始地址等。

分析工具
srecord
命令行工具 srecord
sudo apt-get install srecord
查看S-record文件信息
fans@fans:~$ srec_info JKE_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
文件轉(zhuǎn)換
S-record 轉(zhuǎn) hex
srec_cat JKE_X1_APP_SOC.s19 -Motorola -o JKE_X1_APP_SOC.hex -Intel
Intel hex 轉(zhuǎn) S-record
srec_cat JKE_X1_APP_SOC.hex -Intel -o JKE_X1_APP_SOC.s19 -Motorola
S-record 轉(zhuǎn) bin
srec_cat JKE_X1_APP_SOC.s19 -Motorola -o JKE_X1_APP_SOC.bin -bin
HexView
S-record、Intel Hex、BIN 文件之間的轉(zhuǎn)換可以采用 Vector 的圖形化文件編輯軟件 HexView。

專用工具
主機(jī)廠或供應(yīng)商自己開發(fā)的專用軟件,如VBF文件查看工具 VBF Tool.

腳本
根據(jù)文件格式定義,編寫腳本解析、提供固件,部分可以在 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: 1234 type: APP
Network: 0x00000000
Data Format Identifier: 0x00000000
ECU address: 0x000007C6
Frame_format:
Erase frames:
Data blobs:
0x00018000 0x000B256C e301
Saving:
18000.bin end

談思汽車媒體門戶

精品活動(dòng)推薦



AutoSec系列沙龍

專業(yè)社群
部分入群專家來自:
新勢(shì)力車企:
特斯拉、理想、極氪、小米、零跑汽車、阿維塔汽車、智己汽車、小鵬、嵐圖汽車、蔚來汽車、吉祥汽車、賽力斯......
外資傳統(tǒng)主流車企代表:
大眾中國(guó)、大眾酷翼、奧迪汽車、寶馬、福特、戴姆勒-奔馳、通用、保時(shí)捷、沃爾沃、現(xiàn)代汽車、日產(chǎn)汽車、捷豹路虎、斯堪尼亞......
內(nèi)資傳統(tǒng)主流車企:
吉利汽車、上汽乘用車、長(zhǎng)城汽車、上汽大眾、長(zhǎng)安汽車、北京汽車、東風(fēng)汽車、廣汽、比亞迪、一汽集團(tuán)、一汽解放、東風(fēng)商用、上汽商用......
全球領(lǐng)先一級(jí)供應(yīng)商:
博世、大陸集團(tuán)、聯(lián)合汽車電子、安波福、采埃孚、科世達(dá)、舍弗勒、霍尼韋爾、大疆、日立、哈曼、華為、百度、聯(lián)想、聯(lián)發(fā)科、普瑞均勝、德賽西威、蜂巢轉(zhuǎn)向、均聯(lián)智行、武漢光庭、星紀(jì)魅族、中車集團(tuán)、濰柴集團(tuán)、地平線、紫光同芯、字節(jié)跳動(dòng)、......
二級(jí)供應(yīng)商(500+以上):
中科數(shù)測(cè)、ETAS、BlackDuck、NXP、上海軟件中心、Deloitte、奇安信、為辰信安、云馳未來、信長(zhǎng)城、澤鹿安全、紐創(chuàng)信安、復(fù)旦微電子、天融信、奇虎360、中汽中心、中國(guó)汽研、上海汽檢、加特蘭微電子、浙江大學(xué)......
人員占比

公司類型占比

文章
關(guān)于涉嫌仿冒AutoSec會(huì)議品牌的律師聲明
一文帶你了解智能汽車車載網(wǎng)絡(luò)通信安全架構(gòu)
網(wǎng)絡(luò)安全:TARA方法、工具與案例
汽車數(shù)據(jù)安全合規(guī)重點(diǎn)分析
淺析汽車芯片信息安全之安全啟動(dòng)
域集中式架構(gòu)的汽車車載通信安全方案探究
系統(tǒng)安全架構(gòu)之車輛網(wǎng)絡(luò)安全架構(gòu)
車聯(lián)網(wǎng)中的隱私保護(hù)問題
智能網(wǎng)聯(lián)汽車網(wǎng)絡(luò)安全技術(shù)研究
AUTOSAR 信息安全框架和關(guān)鍵技術(shù)分析
AUTOSAR 信息安全機(jī)制有哪些?
信息安全的底層機(jī)制
汽車網(wǎng)絡(luò)安全
Autosar硬件安全模塊HSM的使用
首發(fā)!小米雷軍兩會(huì)上就汽車數(shù)據(jù)安全問題建言:關(guān)于構(gòu)建完善汽車數(shù)據(jù)安全管理體系的建議