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