2
本文作者: 李勤 | 2016-11-29 10:14 |
在 SyScan 360 的上海會(huì)場(chǎng)上,破解特斯拉的第一人,360 車(chē)聯(lián)網(wǎng)安全中心工程師劉健皓開(kāi)玩笑說(shuō),在北京吃了三年烤鴨后(之前的 Syscan 360 在北京舉辦),終于可以來(lái)黃浦江的游艇上喝啤酒了。
看上去,一切都很土豪、輕松、有趣對(duì)吧?事實(shí)上,他下面要解密的事情會(huì)讓你豎起汗毛——正兒八經(jīng)買(mǎi)的一輛新車(chē),可以輕而易舉地被他開(kāi)走?!
其實(shí),在11月,劉健皓就展示了這一酷炫的技術(shù)。那是一個(gè)天空都飄著幾個(gè)字:“不要惹黑客”的一天,360 公司大樓下列陣了二十幾臺(tái)豪車(chē),利用神秘的技術(shù),劉健皓和團(tuán)隊(duì)輕松逐一破解了這些車(chē)。
這次,他就是來(lái)詳細(xì)解密——他是如何做到的。
一切危險(xiǎn)的源頭是因?yàn)槠?chē)的CAN總線設(shè)計(jì)。
CAN 是控制器局域網(wǎng)絡(luò) ( Controller Area Network ) 的簡(jiǎn)稱,是在1986 年,由以研發(fā)和生產(chǎn)汽車(chē)電子產(chǎn)品著稱的德國(guó) BOSCH 公司開(kāi)發(fā)的,并最終成為國(guó)際標(biāo)準(zhǔn)(ISO 11898),是國(guó)際上應(yīng)用最廣泛的現(xiàn)場(chǎng)總線之一。
對(duì)于汽車(chē),有很多種攻擊途徑:OBD 盒子、WI-FI、藍(lán)牙、車(chē)機(jī) APP、車(chē)聯(lián)網(wǎng)平臺(tái)……它們都要經(jīng)由 CAN 總線進(jìn)行控制。如果 CAN 總線安全,那么即使黑客利用上述途徑,對(duì)車(chē)?;ㄕ?,汽車(chē)整體安全還是可以被保證,這些花招都僅僅是“娛樂(lè)”而已。但是,如果 CAN 總線不安全,這樣的汽車(chē)就可以受到“狗帶”般的攻擊——你拿著車(chē)鑰匙也沒(méi)用,這車(chē)現(xiàn)在屬于控制了 CAN 總線的黑客。
如何守衛(wèi) CAN 總線的安全,要從 CAN 總線的結(jié)構(gòu)說(shuō)起。
故事是這樣開(kāi)始的,很久很久以前……
傳統(tǒng)的汽車(chē)線束結(jié)構(gòu)是這樣:很多控制器鏈接在一個(gè)東西上,控制器之間可能還會(huì)互相干擾……
直到有一天,人們?nèi)滩涣肆?,設(shè)計(jì)出一個(gè)總線架構(gòu),就像交換機(jī)一樣,所有 ECU (電子控制單元)都要經(jīng)過(guò)這個(gè)“交換機(jī)”:交換信息,協(xié)調(diào)指令。
但是,現(xiàn)在看來(lái),CAN 總線還有幾個(gè)致命的攻擊點(diǎn):
1.它遵從 CSMA/CD 的交流方式,在任何一個(gè)節(jié)點(diǎn)搭上總線,都可以看到總線的數(shù)據(jù),所以黑客只要找到一個(gè)點(diǎn)攻破,就可以看到車(chē)內(nèi)所有數(shù)據(jù);
2.它支持多路訪問(wèn),網(wǎng)絡(luò)上所有節(jié)點(diǎn)接收數(shù)據(jù)都經(jīng)過(guò)一條總線,所有數(shù)據(jù)都在一條線上,發(fā)的數(shù)據(jù)是廣播的,所以可以看到很多控制器發(fā)的控制指令,如果控制指令是明文,那么就可以通過(guò)重放的方式控制汽車(chē)的一些設(shè)備;
3.它有一個(gè)沖突檢測(cè)機(jī)制,所有節(jié)點(diǎn)在發(fā)送數(shù)據(jù)的過(guò)程中,會(huì)不斷檢測(cè)所發(fā)送的數(shù)據(jù),預(yù)防與其它節(jié)點(diǎn)產(chǎn)生沖突,由于這樣的機(jī)制,只要一直在傳統(tǒng)線中發(fā)送數(shù)據(jù),就可以導(dǎo)致 CAN 總線拒絕服務(wù),車(chē)上任何控制器都沒(méi)有反應(yīng)。
劉健皓介紹,只要知道 CAN 總線的數(shù)據(jù)、ID、發(fā)送周期,那么黑客就可以通過(guò)重放來(lái)判斷某個(gè)控制功能。
所以,對(duì) CAN 總線的攻擊其實(shí)十分危險(xiǎn),可以竊聽(tīng)總線數(shù)據(jù)、偽造協(xié)議,實(shí)施重放攻擊和拒絕服務(wù)攻擊。這意味著,如果做了這些動(dòng)作,車(chē)處于極度危險(xiǎn)中。
是的,只要車(chē)有 CAN 總線設(shè)計(jì)。
先看一下理論分析——汽車(chē) CAN 網(wǎng)絡(luò)逆向過(guò)程主要分為4個(gè)步驟:篩選、定位、破解信號(hào)、驗(yàn)證和保存。
第一步:篩選
使用市面上一些 USB-CAN 的工具與汽車(chē)的 CAN 總線相連,可以獲取 CAN 總線上廣播的 CAN 數(shù)據(jù)包,從大量數(shù)據(jù)包中進(jìn)行逆向分析,找到想要的 CAN 數(shù)據(jù)包。
第二步:定位 CAN_ID
對(duì)于車(chē)身的某一項(xiàng)功能的控制,只需要一個(gè) CAN ID 的數(shù)據(jù)包即可,這時(shí)只需要單純地重放即可達(dá)到攻擊的目的,還有一些功能需要多個(gè) CAN ID 的數(shù)據(jù)包聯(lián)合才可以,還有一些 CAN ID 數(shù)據(jù)包上帶有計(jì)數(shù)器,在攻擊時(shí)必須加上計(jì)數(shù)器才能繞過(guò)預(yù)碰撞系統(tǒng)的阻礙。
第三步:破解信號(hào)
CAN_ID 的數(shù)據(jù)包里一共有8個(gè)字節(jié),每一個(gè)字節(jié)代表什么以及這些字節(jié)上的數(shù)字都是不固定的,比如速度表上的數(shù)值是根據(jù)公式計(jì)算出來(lái)的,如果改變成想要的數(shù)值(就是電影里那樣改變速度置人于死地),需要帶入公式才能得到正確的結(jié)果。
在測(cè)試的過(guò)程中需要觸發(fā)汽車(chē)動(dòng)作,再確定 CAN_ID 的變化,然后找到對(duì)應(yīng)的值,這樣就可以把信號(hào)和汽車(chē)動(dòng)作破解出來(lái)了。
第四步:驗(yàn)證和保存
結(jié)合上述結(jié)果,做成 FUZZ 工具,進(jìn)而發(fā)現(xiàn)更多的汽車(chē)漏洞,如果需要修復(fù)的話,當(dāng)然也是可以的。
實(shí)際操作起來(lái),要不斷解決一些困難。
劉健皓說(shuō):“我們拿一些傳統(tǒng) USB 工具接到車(chē)上面,發(fā)現(xiàn)刷屏非常快,分析 CAN 協(xié)議時(shí),看執(zhí)行動(dòng)作,眼睛都要花掉?!?/strong>
為了能清晰地分析數(shù)據(jù),沒(méi)有工具,那就自己造一個(gè)。因此,劉健皓及他的團(tuán)隊(duì)造出了一個(gè)“CAN—Pick”。這個(gè)“CAN—Pick”就是他們口中的“汽車(chē)安全總線測(cè)試平臺(tái)”——測(cè)試汽車(chē)總線是否安全。
其實(shí),它也是一個(gè)萬(wàn)能車(chē)破解器。
雖然,它的外表看上去沒(méi)有那么酷炫狂拽,僅是一個(gè)可以連接車(chē)的小黑盒和一個(gè)軟件平臺(tái)。
那么,究竟如何操作,這輛車(chē)就會(huì)被黑掉呢?
拿著電腦和小黑盒連接到車(chē)身,車(chē)身在靜止?fàn)顟B(tài)時(shí)也會(huì)產(chǎn)生一些數(shù)據(jù),這些數(shù)據(jù)被稱為干擾數(shù)據(jù),第一步就是獲得這些干擾數(shù)據(jù)。小黑盒連接上的時(shí)候,軟件平臺(tái)上就會(huì)出現(xiàn)可視化的干擾數(shù)據(jù);然后,操作車(chē)燈,獲得車(chē)燈操作時(shí)的數(shù)據(jù)包,與干擾數(shù)據(jù)進(jìn)行比對(duì),從而發(fā)現(xiàn)真正能夠下達(dá)操作車(chē)燈的指令數(shù)據(jù)包。把這個(gè)新獲得的數(shù)據(jù)包進(jìn)行重放,那么就可以操作車(chē)燈。
其它操作同理。
360 車(chē)聯(lián)網(wǎng)安全中心另一工程師嚴(yán)敏睿介紹:
這款軟件支持全平臺(tái),有多種硬件可以進(jìn)行試配,不管是市面上的,還是自己開(kāi)發(fā)出來(lái)的,都會(huì)提供 SDK,讓你自己自行進(jìn)行試配。同時(shí)可以在線編寫(xiě)一些插件,這些插件可以共享到服務(wù)端,也可以從服務(wù)端下載一些別人編寫(xiě)的插件進(jìn)行共享,多個(gè)人可以同時(shí)對(duì)這款軟件進(jìn)行操作。
這意味著,“全民”可以加入到“黑車(chē)”——哦,不,是測(cè)試車(chē)是否安全的平臺(tái)中來(lái)。
目前“CAN—Pick”有哪些插件功能?據(jù)劉健皓和嚴(yán)敏睿介紹:
主要包括 CAN-BUS 總線協(xié)議的 Fuzzing、 UDS 探測(cè),數(shù)據(jù)報(bào)文分析,總線數(shù)據(jù)加密強(qiáng)度檢測(cè),數(shù)據(jù)通過(guò)可視化可以看到可視化的圖,操作車(chē)身的一些控制,開(kāi)車(chē)門(mén)、關(guān)燈、開(kāi)引擎,可以實(shí)時(shí)看到數(shù)據(jù)中哪些變化,非常容易發(fā)現(xiàn)哪個(gè) ID ,哪個(gè)數(shù)據(jù)再控制哪一項(xiàng)車(chē)身的東西,最后還有定制化功能的在線編寫(xiě)。
不過(guò),這一切看上去好像很簡(jiǎn)單,其實(shí)還有多種因素的干擾,比如,時(shí)間間隔、數(shù)據(jù)包中有效數(shù)據(jù)的提取分析……,這些都是包括劉健皓在內(nèi)的各個(gè)安全工程師正不斷完善與探索的領(lǐng)域。
當(dāng)然,作為安全研究人員,總是要挖出一個(gè)坑,然后試著填上。
既然 CAN 總線可以被攻擊,這個(gè)工具也可以檢測(cè)出一輛車(chē)是否安全,那么有沒(méi)有什么方法可以阻止這一切發(fā)生?
劉健皓告訴雷鋒網(wǎng)宅客頻道,汽車(chē)總線設(shè)計(jì)之初是在封閉網(wǎng)絡(luò)環(huán)境中使用,并沒(méi)有考慮安全問(wèn)題,對(duì)于總線網(wǎng)絡(luò)結(jié)構(gòu)及控制指令的設(shè)計(jì),要增強(qiáng)各 ECU 之間的驗(yàn)證措施,包括使用時(shí)間戳和校驗(yàn)的方式防止重放破解攻擊,提高控制協(xié)議被逆向的成本,同時(shí)要控制好聯(lián)網(wǎng)部件的安全性。
他們現(xiàn)在的思路是,對(duì) CAN 總線進(jìn)行安全加密,比如,在數(shù)據(jù)包中是否可以插入一些加密算法。劉健皓透露,目前,清華大學(xué)的研究團(tuán)隊(duì)也正在對(duì)這一領(lǐng)域進(jìn)行研究。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。