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