這次特斯拉的自動駕駛事故導(dǎo)致駕駛員死亡。事件已經(jīng)過去近兩個月了,但是在媒體上大規(guī)模發(fā)布是這幾天的事情。按照官方分析,事件發(fā)生的原因是自動駕駛傳感器將底盤很高的大貨車誤判為橋梁等建筑物。我們可以看出,計算機的錯誤,已經(jīng)不再局限于虛擬世界,而是可以導(dǎo)致人類生命的損失。作為計算機安全研究人員,我們不僅要問,車載計算機可能會有哪些情況會被攻擊,導(dǎo)致嚴重的事故呢?
我們先從美國的車載診斷系統(tǒng)OBD II說起。OBD II是On-Board Diagnositics Version II的意思,正巧今年是OBD II在美國實施20周年。美國規(guī)定,從1996款開始,在美國銷售的汽車必須有OBD II系統(tǒng)。OBD II是連接汽車控制器網(wǎng)絡(luò)的接口,一般在司機左膝蓋前方。
比如特斯拉Model S的OBD II接口長這樣:
(圖1:特斯拉Model S的OBD II接口)
大多數(shù)美國跑的車子,不管是美國造的、日本造的還是歐洲造的,都是用這樣的接口。
連上這個接口,就能連上車的控制機網(wǎng)絡(luò)總線CAN Bus,然后和車里面的各種計算機聊天,比如讓引擎控制器告訴你今天喝了幾壺啊,問問機油是不是太燙啊,告訴剎車ABS控制器該放手了啊之類的。
問題來了。當年在建立OBD II標準的時候,車子上面還沒有什么無線的接口。需要指出的是,有線網(wǎng)絡(luò)和無線網(wǎng)絡(luò)完全是不一樣的安全玩法。因為有線網(wǎng)絡(luò)的信號連接,通過線纜構(gòu)建了一個隱含的信任架構(gòu)。只有被信任的計算機才能連接到網(wǎng)絡(luò)中。這就像一群在重點學(xué)校長大的孩子,大家彼此都規(guī)規(guī)矩矩,客客氣氣,完全不知道外面世界的險惡。
而無線網(wǎng)絡(luò),則是一片叢林,誰都可以偷聽,誰都可以說話,誰都可以模仿別人。把有線網(wǎng)絡(luò)里的設(shè)備接入無線網(wǎng)絡(luò),就等于把一群乖孩子直接扔到菜市場,被騙走幾個是肯定的。不信?你不妨靜心聽一下2.4G赫茲的頻段,那里有藍牙,BLE和Zigbee的淺吟,有WiFi的低唱,有無線鼠標的咕噥,有遙控玩具的喧鬧,有無繩電話的碎碎念,忽然大家都安靜下來了,耳邊只有微波爐的咆哮。
而車載的那些計算機,在20年以后,發(fā)現(xiàn)身邊的各種器件都能通過無線接口,不論是車載電話,還是車載WiFi或者藍牙,連到CAN bus上面,告訴那個引擎控制器該休息了,或者ABS控制器該放手了。而黑客們也能通過這些無線接口,和一輛正在行駛的車上面的控制器聊天,細思極恐。
對于這種可能有嚴重后果的攻擊方式,我們還是有分寸的,這里就講一個不那么嚴重的例子。
前一段國內(nèi)創(chuàng)新熱潮里面,有不少人搞車聯(lián)網(wǎng)。所謂車聯(lián)網(wǎng),很多方案其實就是買個這種小盒子插到車的OBD II接口上,然后用手機和小盒子里面的藍牙配對,手機上的APP就可以通過OBD II的接口讀取CAN bus上面的各種信息,包括耗氧量,發(fā)動機轉(zhuǎn)速等等。
OBD II plug
問題是,無論是這個小盒子還是CAN bus,都沒有足夠的防范措施來阻擋黑客的攻擊。我們做的第一個攻擊,就是開著車子在路上跑,用手機來掃描這種小盒子的無線信號。一旦發(fā)現(xiàn),就破解去配對(《疑犯追蹤》里面宅總上身,強制配對的既視感)。然后就可以讀取車的某些敏感信息了。我們其實也不拿別的什么敏感信息,就是找ECU問問車的VIN號(相當于車的身份證)啊,問問車子熱不熱啊之類的。這些都可以在等紅燈的半分鐘里面,從旁邊的車子里面問來。還有一次是在開車的過程中讓旁邊的車告訴我們它的車速是多少。
在讓OBD II和車載控制機隔離方面,特斯拉其實是做的很不錯的。特斯拉的OBD II接口只是按照法律規(guī)定,提供了電壓和接地,但是并沒有和車載控制器有數(shù)據(jù)連接。相反,特斯拉的控制計算機是有wifi和以太網(wǎng)接口的。這些接口,也能成為黑客攻擊的界面。
前面講了傳統(tǒng)車載控制器可以被黑客攻擊的方法。在自動駕駛方面,汽車又增加了傳統(tǒng)汽車所沒有的新的傳感器和計算機。比如計算機視覺用的攝像頭,用來檢測是否在車道內(nèi)部以及周圍的物體;比如以前不和駕駛控制器連接的GPS現(xiàn)在也作為數(shù)據(jù)輸入連入了駕駛控制網(wǎng)絡(luò);還有激光雷達等。所有這些新的傳感器,都會將數(shù)據(jù)源源不斷的輸入控制計算機。當輸入數(shù)據(jù)被干擾,就有可能擾亂駕駛控制網(wǎng)絡(luò)中的計算機正常工作,造成事故。
第三種會造成車載系統(tǒng)故障的是第三方程序。
大家或許還記得,在iPhone快發(fā)布的時候,喬布斯仍然不希望有App Store。原因其實很簡單,一個開放式計算機系統(tǒng)中,大約有四分之三以上的系統(tǒng)崩潰來自第三方程序。我讀書時候有位教授曾經(jīng)給我們看過一篇paper,統(tǒng)計表明微軟的Windows系統(tǒng)中,第三方的驅(qū)動程序造成了80%左右的系統(tǒng)崩潰。喬布斯對第三方程序的威脅也是領(lǐng)會的非常清楚?,F(xiàn)在,很多車載系統(tǒng)需要第三方程序來進行娛樂操作,比如播放網(wǎng)絡(luò)音樂,展示目的地天氣等等,這些第三方程序往往不能保證和系統(tǒng)的其他部分一樣安全。
作為國際Web標準化組織W3C車聯(lián)網(wǎng)工作組的特邀安全專家,我在車聯(lián)網(wǎng)工作組的會議中也對第三方程序的安全性提出了一些建議,并得到了重視。參與標準建立的業(yè)界人士,對車載系統(tǒng)的安全性還是相當重視的,我們會有專門的安全會議來探討車載系統(tǒng)的安全性。[!--empirenews.page--]