網(wǎng)絡(luò)安全 (cyber security) - 數(shù)據(jù)安全
掃描二維碼
隨時(shí)隨地手機(jī)看文章
相信在德國(guó)工作和學(xué)習(xí)的小伙伴對(duì)于買賣二手車一點(diǎn)都不陌生,不管是買車還是賣車,甚至是修車,土耳其兄弟的身影都無(wú)處不在。為了對(duì)土耳其兄弟的表示我崇高的敬意,以下簡(jiǎn)稱土耳兄。
土耳兄可以變腐朽為神奇,明明一臺(tái)快報(bào)廢的車,整吧整吧就能賣個(gè)好價(jià)錢。
修改里程表是土耳兄眾多技能包中最簡(jiǎn)單的一個(gè),也是各大主機(jī)廠深惡痛絕的眼中釘,每年因?yàn)槔锍虇栴}的保養(yǎng)糾紛不計(jì)其數(shù)。很多按公里數(shù)leasing的汽車,也時(shí)常在被歸還4S店以后發(fā)現(xiàn)曾經(jīng)修改過里程數(shù)。因此,汽車如何保護(hù)自身數(shù)據(jù)不被篡改,在新的車聯(lián)網(wǎng)大潮下,是對(duì)皮糙肉厚主機(jī)廠新的考驗(yàn),更是對(duì)我土耳兄的傲慢挑釁。
汽車數(shù)據(jù)保護(hù),當(dāng)然不止為了保護(hù)里程數(shù),往高了講,也是對(duì)專利技術(shù),用戶隱私的保護(hù)。今天我們就從嵌入式底層好好的扒一扒,到底數(shù)據(jù)保護(hù)是怎么搞得。
首先需要基礎(chǔ)知識(shí)鋪墊一下:
數(shù)據(jù)儲(chǔ)存在汽車控制器里,最基本要求是掉電(熄火)的時(shí)候不會(huì)丟失,通常的兩種儲(chǔ)存方式是單片機(jī)內(nèi)部的Flash和外接的EEPROM芯片。
EEPROM的歷史比較悠久,利用范圍也廣,上一個(gè)世紀(jì)的汽車控制器,基本上都會(huì)在板子上通過SPI通訊協(xié)議掛一個(gè)EEPROM的外接芯片。由于外接芯片耗錢又費(fèi)力,新一代的處理器在單片機(jī)內(nèi)部集成了Flash模塊。Flash相比EEPROM的主要缺點(diǎn)是同一個(gè)地址讀寫次數(shù)有限,導(dǎo)致生命周期變短,所以要通過軟件來(lái)實(shí)現(xiàn)用Flash模擬EEPROM。也就是我們常說(shuō)的模擬EEPROM技術(shù)。此處不展開了,對(duì)儲(chǔ)存技術(shù)感興趣的小伙伴可以自行谷歌或者留言找我要代碼。簡(jiǎn)單來(lái)說(shuō),對(duì)當(dāng)代汽車數(shù)據(jù)的保護(hù)就是對(duì)控制器Flash儲(chǔ)存結(jié)構(gòu)的保護(hù)和對(duì)讀寫Flash操作的保護(hù)。
這篇主要講儲(chǔ)存數(shù)據(jù)的幾種保護(hù)方式吧(Data flash),還是拿我土耳哥最關(guān)心的里程表數(shù)據(jù)舉例。
首先第一層防護(hù),對(duì)flash讀寫操作設(shè)置密碼,就好像你登錄銀行賬號(hào)一樣,輸對(duì)了密碼才讓你讀和寫。這是一層簡(jiǎn)單的防護(hù)。需要注意的是,密碼要放好,不要寫手上。
第二層可以通過加密對(duì)讀寫內(nèi)容進(jìn)行保護(hù):把當(dāng)前的里程數(shù)加密,以密文的形式儲(chǔ)存到flash里,例如汽車領(lǐng)域常用的通過AES128 ECB加密,顯示的時(shí)候再反加密。比如:
在現(xiàn)在市場(chǎng)上的單片機(jī)里,基本都有一個(gè)HSM的模塊,這個(gè)外設(shè)就是為了security 而生的。不僅可以用硬件單元幫你快速進(jìn)行加密算法的運(yùn)算,還可以幫你儲(chǔ)存好你的密鑰等其他功能??梢岳斫鉃閱纹瑱C(jī)的保險(xiǎn)柜。
下面先簡(jiǎn)單的說(shuō)一下保險(xiǎn)柜HSM關(guān)于密鑰的儲(chǔ)存
用戶可以把自己的密鑰存到保險(xiǎn)箱里,這個(gè)保險(xiǎn)箱還有一個(gè)或者多個(gè)自己的私鑰,是在單片機(jī)生產(chǎn)時(shí)隨機(jī)自動(dòng)分配的。用戶看不到,單片機(jī)廠商說(shuō)他們也看不到。在用戶儲(chǔ)存自己密鑰的時(shí)候,保險(xiǎn)柜會(huì)自動(dòng)用自己的密鑰再加一層鎖。另外私鑰的儲(chǔ)存根據(jù)單片機(jī)廠商自己的設(shè)置還可以有不同的屬性。比如,私鑰更新的計(jì)數(shù)器,讀寫私鑰的權(quán)限設(shè)置,私鑰用途的設(shè)置,阻止debugger讀寫等操作。
通過對(duì)主單片機(jī)不同功能模塊代碼的權(quán)限設(shè)置以及debugger訪問權(quán)限的設(shè)置,想要從HSM拿到密鑰的可能性是非常低的。
當(dāng)然了,當(dāng)土耳哥認(rèn)識(shí)到困難重重之后,發(fā)現(xiàn)HSM如此神奇,決定親自提刀上陣,不用軟件的辦法了,直接來(lái)硬的,通過酸蝕,刻蝕等化學(xué)方法,找到存儲(chǔ)結(jié)構(gòu)接口,上電,外接控制器發(fā)fetch指令....等一系列操作,最終還是把密鑰找到了,自此過上了無(wú)憂無(wú)慮多兒多女的生活。硬件手段就不在本文的討論范疇之中了。如果你對(duì)暴力硬件感興趣,可以參考
https://duo.com/labs/research/microcontroller-firmware-recovery-using-invasive-analysis#section12
PS: 當(dāng)然了,市面上廣泛流行修改里程表的方法可能跟上述保護(hù)措施無(wú)關(guān),有可能只是違規(guī)利用了汽車通訊和診斷協(xié)議UDS的某些服務(wù)。比如:
0x3D | 0x7D | Write Memory By Address |