汽車黑客攻擊:CAN總線協議的訪問與利用
摘要
隨著聯網技術和駕駛輔助技術的快速普及,以及半自動駕駛汽車到全自動駕駛汽車在全球道路上的廣泛應用,智能汽車的網絡安全成為一個亟待關注的問題,無論在課堂教學還是現實世界中都值得深入探索。針對量產汽車的多起高關注度黑客攻擊事件,以及少數涉及自動駕駛汽車的碰撞事故,使得智能汽車的安全保障問題成為關乎公眾與個人安全的核心議題,這些 “車輪上的數據中心” 的網絡安全從未像現在這樣備受重視。
然而,迄今為止,將網絡安全研究應用于汽車黑客攻擊領域仍存在較高的學習門檻。本文旨在提供一套清晰、分步的汽車黑客攻擊研究工作站搭建流程,使教師、學生和研究人員能夠在自身的課程教學和實驗室環境中開展汽車黑客攻擊相關實踐。文章詳細介紹了如何將汽車黑客攻擊模塊整合到一學期制的道德黑客網絡安全課程中,包括實施類似課程中的實操實驗所需的所有開源工具的完整安裝與配置步驟。研究通過結合開源工具和成本低于 100 美元(美元)的商用 CAN 總線轉 USB 電纜或無線連接器,展示了如何測試汽車的重放攻擊漏洞,以及如何逆向工程解析 CAN 總線消息。此外,本文還介紹了現代汽車中的控制器局域網(CAN 總線)相關知識,并簡述了汽車黑客攻擊的發展歷程。
一、引言
盡管在高速公路正常行駛場景下,針對量產汽車的成功概念驗證黑客攻擊案例相對較少,但汽車黑客攻擊在主流媒體中仍被描繪為一種現實威脅。同樣,自動駕駛汽車(或稱自動駕駛車輛)已累計行駛超過百萬英里,其事故率低于人類平均駕駛水平,但少數涉及自動駕駛汽車的碰撞事故卻受到了廣泛關注,即便這些事故是由人為干預導致的。隨著聯網技術和駕駛輔助技術的快速普及,以及半自動駕駛汽車到全自動駕駛汽車在全球道路上的廣泛應用,智能汽車的網絡安全成為一個亟待關注的問題,無論在課堂教學還是現實世界中都值得深入探索。
汽車網絡的復雜性日益提升,運行著數千萬行代碼,但卻采用了數十年前的協議,幾乎沒有任何安全保障。此外,訪問這些網絡所需的工具極易獲取,且大多免費或成本極低。遺憾的是,迄今為止,使用這些工具的學習門檻依然較高,這使得學生甚至經驗豐富的網絡安全研究人員都難以將其技能應用于汽車網絡領域。本文的目的是提供一套清晰、分步的汽車黑客攻擊研究工作站搭建流程。通過使用開源軟件和一根 70 美元的電纜,我們可以演示新型物聯網(IoT)設備普遍存在的一種漏洞 —— 重放攻擊,將其作為針對汽車網絡系統的一種易于理解的入門級攻擊方式。
本文詳細闡述了作者開發的實操性汽車黑客攻擊模塊在道德黑客網絡安全課程中的實施過程,包括開源汽車黑客攻擊工具的配置、在模擬控制器局域網(CAN)上的重放攻擊演示,以及測試現代汽車中類似漏洞所需的低成本工具。所有軟件均可安裝在筆記本電腦、樹莓派(Raspberry Pi)或 Linux 虛擬機上,類似于道德黑客課程中常用的搭載卡利 Linux(Kali Linux)和 Metasploit 工具的虛擬機環境。而將軟件與現代汽車連接所需的唯一物理設備 ——USB 轉 OBD-II(車載診斷系統第二代)電纜或無線連接器,可在網上輕松購買,價格低于 100 美元。
二、背景
汽車的技術復雜程度不斷提升,但作為底層通信系統的控制器局域網(CAN 總線),要么基本保持不變,要么與 1991 年的標準保持向后兼容。一輛 “典型” 的新車,包括固件、操作系統和應用軟件在內,可能包含 1 億行代碼。2016 款福特 F-150 皮卡甚至沒有在車展上亮相,而是選擇在消費電子展上發布,其宣傳代碼量高達 1.5 億行,而這還是數年前的數據。
除了自動駕駛和駕駛輔助技術等自主軟件與硬件的進步,新型汽車通常還具備藍牙和標準 Wi-Fi 網絡連接功能,許多車型甚至支持 4G LTE 持續無線連接。包括新款特斯拉在內的部分汽車,還能通過 4G LTE 網絡自動更新自身軟件和固件。這些網絡連接極大地擴大了攻擊面,為日益復雜的汽車系統帶來了新的攻擊途徑。
科舍等人指出,攻擊者若能訪問現代汽車中數十個電子控制單元(ECU,負責傳感和控制的微處理器芯片)中的任意一個,就 “能夠完全繞過一系列安全關鍵系統”。
與此同時,隨著網絡連接和系統復雜性帶來的攻擊面呈指數級增長,攻擊汽車所需的資源卻幾乎降至零。黑客僅需使用免費的開源軟件,配合樹莓派、安卓手機,或在現有筆記本電腦上運行的免費卡利 Linux 虛擬機,就能通過藍牙和 Wi-Fi 測試汽車漏洞并實施潛在攻擊。只需花費不到 20 美元,即可購買有線或無線 OBD-II 連接器,將其連接到目標車輛的車載診斷端口(OBD-II),通過上述任意設備直接訪問汽車的內部運行系統。
汽車黑客攻擊本身與其他聯網設備的黑客攻擊驚人地相似。我們可以使用網絡嗅探器查看數據包在汽車控制器局域網(CAN 總線)中的傳輸過程。首先,我們將簡要介紹現代 CAN 總線的相關知識,然后回顧汽車黑客攻擊發展歷程中的關鍵事件,最后介紹我們將使用的來自http://OpenGarages.org的開源汽車黑客攻擊工具。
(一)CAN 總線簡介
汽車中的控制器局域網(CAN 總線)是實現車輛傳感器與各類電子控制單元(ECU)之間通信的網絡。現代量產汽車最多可配備 70 個或更多的 ECU,分別控制發動機、安全氣囊、防抱死制動系統、尾燈、娛樂系統等。CAN 總線本身是一種基于消息的協議,1991 年由跨國電子與工程公司博世集團標準化為 CAN 2.0 規范。
汽車中的 CAN 總線可被視為傳統以太網局域網(LAN)的一種嘈雜、擁擠且速度較慢的版本,不同之處在于,總線上的通信數據主要基于用戶數據報協議(UDP,一種無連接傳輸協議),而非在大多數網絡和客戶端 - 服務器網絡中占主導地位的傳輸控制協議(TCP)。
值得注意的是,并非所有汽車控制系統都通過 CAN 總線運行。除了用于傳感和控制自動化的多種總線架構(包括本地互聯網絡(LIN)、FlexRay 總線和面向媒體的系統傳輸總線(MOST))外,現代汽車中還存在其他多種網絡。這些網絡連接可能包括藍牙、全球移動通信系統(GSM)/ 長期演進(LTE)蜂窩網絡連接、全球定位系統(GPS)導航、衛星廣播,以及通用汽車的安吉星(OnStar)等廠商專有系統。目前已有關于更安全的網絡消息系統的提案,旨在保護關鍵功能。例如,施曼特、謝爾曼和班納吉(2017)提出了一種改進的消息認證協議,以解決 CAN 總線等網絡中的安全漏洞,但汽車制造商在采用這些技術方面進展緩慢。
CAN 總線汽車通信采用 UDP 協議具有一定優勢。一方面,由于 UDP 不需要像 TCP 那樣要求接收方提供反饋,因此通信延遲更少,通信時序的變化也更小。另一方面,其能夠向控制器局域網中的所有控制器和傳感器廣播消息,因此,當執行器(如轉向燈撥桿)發生狀態變化時,該變化可在儀表盤上顯示,并通過照明電路執行,而無需多條直接布線電路。CAN 總線架構允許所有這些設備通過僅一對共享線路進行通信,該線路連接到每個傳感器、執行器或 ECU。
CAN 總線協議消息體積小(每次最多 8 字節),消息中沒有明確的地址,僅包含優先級值(來自發動機或制動系統的消息優先級高于空調或音頻播放器的消息)。盡管該協議通過校驗和提供了一定的完整性保護,并通過錯誤處理和丟失消息重傳機制提供了可用性保護,但 CAN 總線協議在設計時并未考慮現代安全控制需求。
(二)汽車黑客攻擊簡史
2011 年,加州大學圣地亞哥分校的一組研究人員首次成功實現了對量產汽車的廣泛認可的遠程入侵(即黑客攻擊),攻擊目標是 2011 款雪佛蘭邁銳寶。研究人員通過兩種不同的遠程攻擊途徑,能夠在汽車行駛過程中導致剎車鎖死。
2015 年,研究人員查理?米勒和克里斯?瓦拉塞克遠程控制了 2015 款吉普切諾基的轉向、制動、加速及其他控制功能。他們指出,汽車控制消息應采用傳輸層安全協議(TLS)等現代加密機制,以確保真實性和完整性。研究人員表示,當得知制造商稱需先找到在汽車網絡中實現 TCP 的方法,才能處理 SSL(安全套接層協議)或 TLS 加密(兩者均需建立 TCP 會話)時,感到震驚。
騰訊科恩安全實驗室還展示了針對電動汽車的多起高關注度黑客攻擊,包括 2016 款特斯拉 Model S 和 2018 款寶馬 i3。盡管制造商迅速修復了這些網絡物理攻擊途徑中的大部分,但根本性的安全問題依然存在,尤其是在攻擊者可能物理接觸車輛的情況下。許多研究人員將聯網汽車歸入快速發展的物聯網(IoT)范疇,并指出,隨著原本孤立的設備和機器通過有線和無線 IP 網絡相互連接,網絡安全問題日益突出。
(三)汽車黑客攻擊開源工具包
我們在汽車黑客攻擊模塊中使用的軟件均為免費開源軟件,可從http://OpenGarages.org獲取,主要包括儀表組模擬器(ICSim 軟件包)。ICSim 由汽車黑客攻擊研究員克雷格?史密斯開發,他同時也是《汽車黑客手冊》的作者(史密斯,2016)。史密斯的手冊是我們開展汽車黑客攻擊原始研究的基礎。ICSim 既包含帶有車速表、門鎖指示燈和轉向燈指示燈的儀表盤模擬器,也提供了一個控制面板,用戶可通過該面板與模擬汽車網絡交互,實現加速、控制門鎖和轉向燈等操作。ICSim 依賴其他免費的 Linux 工具,包括 CAN 工具集(can-utils),該工具集可在大多數 Linux 發行版的軟件包安裝倉庫中獲取。
在下一節中,我們將詳細介紹 ICSim 軟件及相關工具的分步安裝和配置流程,適用于課堂、計算機實驗室、汽車研究工作站,也可在搭載 Windows、Mac 或 Linux 系統的普通筆記本電腦的虛擬機中運行。
三、實施過程
在課堂環境中開始本課程或模塊教學時,是討論汽車黑客攻擊以及更廣泛的物聯網(IoT)領域倫理問題的絕佳時機。隨著我們在日常生活中對聯網技術的依賴程度不斷加深,安全所扮演的角色變得愈發重要。隨著自動駕駛汽車和駕駛輔助技術的持續推廣和改進,討論倫理和安全問題(尤其是與人類安全相關的問題),為網絡安全課程提供了額外的討論空間。車主是否有權測試自己車輛的安全性?安全研究人員的倫理界限是什么?與其他物聯網設備制造商相比,汽車制造商在確保其產品系統和網絡安全方面是否承擔更大的責任?此類問題有助于在網絡安全課程中明確汽車黑客攻擊的重要性和相關性。
熟悉 Linux(尤其是用于道德黑客攻擊和滲透測試的卡利 Linux)的教師和學生,會發現這些工具的配置和使用相對直觀。而經驗較少(尤其是缺乏 Linux 命令行操作經驗)的使用者,也可在虛擬機中安裝和運行這些工具,類似于大多數道德黑客實操課程中使用的虛擬機環境。
在我們的道德黑客課程中,我們已經在使用卡利 Linux 虛擬機,因此將http://OpenGarages.org的汽車黑客攻擊工具部署在了卡利 Linux 上。卡利 Linux 是基于 Debian 的 Linux 發行版,深受眾多道德黑客、紅隊和攻擊性安全從業者的青睞。我們的實施環境是在甲骨文公司免費提供的 VirtualBox 平臺上運行的卡利 Linux 虛擬機。
VirtualBox 可在 Windows、Linux 和 Mac 計算機上運行,能夠在獨立的虛擬機中托管數十種不同的操作系統。盡管該技術已被甲骨文公司收購,但 VirtualBox 仍根據 GNU 通用公共許可證第 2 版保持免費開源。
(一)安裝步驟
本安裝流程假設用戶已擁有運行卡利 Linux 的工作站,或在 VMware、VirtualBox 等平臺上運行卡利 Linux 的虛擬機。對于汽車黑客攻擊模塊,我們將使用克雷格?史密斯開發的來自http://OpenGarages.org的開源工具。
1. 安裝依賴項
搭建http://OpenGarages.org汽車黑客攻擊軟件的第一步是安裝被稱為依賴項的必備軟件。首先,在新的終端(命令行)窗口中輸入更新命令,更新卡利 Linux:

然后,安裝 LibSDL(SDL 即簡單 DirectMedia 層,是一個用于計算機圖形和音頻的跨平臺開發庫)開發庫。OpenGarages 的儀表組模擬器軟件使用 LibSDL 繪制和模擬虛擬儀表盤(或儀表組),并訪問各種游戲控制器(如該軟件原生支持的 PlayStation PS3 控制器,可用于在 ICSim 控制應用程序中操控虛擬汽車)。
通過以下命令安裝 libsdl2-dev 和 libsdl2-image-dev 庫:

安裝完 LibSDL 庫后,添加 CAN 工具集。CAN 是控制器局域網的縮寫,是現代汽車中的主要網絡。部分 Linux 發行版已包含 CAN 工具集,但截至本文撰寫時,卡利 Linux 尚未預裝該工具集。可通過以下命令安裝 CAN 工具集:

如圖 1 所示,一旦 LibSDL 和 CAN 工具集軟件依賴項安裝完成,我們就可以繼續下載并安裝 ICSim 汽車黑客攻擊工具。

圖 1、安裝完 LibSDL 和 CAN 工具集軟件依賴項后,即可從OpenGarages.org下載并安裝 ICSim 軟件
2. 下載并安裝 ICSim
我們將使用 Git 下載http://OpenGarages.org的 ICSim 軟件(ICSim 是儀表組模擬器的縮寫)。Git 是目前使用最廣泛的版本控制系統,免費開源(由 Linux 的創建者林納斯?托瓦茲開發)。卡利 Linux 以及大多數 Linux 發行版均預裝了 Git。
Git 將直接把 ICSim 項目文件克隆(即復制)到本地計算機。通過以下命令將目錄設置為用戶主目錄:

該命令中,cd(change directory 的縮寫,意為切換目錄)后緊跟波浪號(~),表示用戶主目錄。在卡利 Linux 上,該目錄通常為 /root/,對應 root 用戶。
通過以下 Git 命令下載并解壓 ICSim 項目文件:
Git 將把 ICSim 的項目文件下載到用戶主目錄下一個名為 ICSim 的文件夾中。切換到 ICSim 文件夾并列出其中的內容:

如圖 2 所示,ICSim 文件夾中應包含多個文件,包括兩個名為 controls 和 icsim 的可執行文件。

圖 2、克隆 ICSim.git 后,切換到 ICSim 文件夾,即可查看儀表組模擬器文件
3. 配置虛擬 CAN 網絡
通過輸入 more 命令查看 shell 腳本 setup_vcan.sh 的內容:

該腳本應包含以下四行 shell 命令:

modprobe 命令用于加載內核模塊(如 CAN 工具集庫中的 CAN 和 vCAN 網絡模塊),腳本的前兩行將加載這兩個模塊,以便在用于汽車黑客攻擊模擬器的虛擬控制器局域網(vCAN)上使用 CAN 協議進行通信。最后兩行將創建一個名為 vcan0 的新 vCAN 類型網絡設備,并啟用該鏈接。
可手動輸入并運行上述四行命令,或通過以下命令運行該 shell 腳本:

通過輸入 ifconfig 命令可驗證 vcan0 網絡鏈接是否激活。除常規網絡接口外,此時應列出 vcan0。隨著 vcan0 網絡鏈接的激活,我們可以運行儀表組模擬器和控制面板,模擬現代汽車中的實時控制器局域網和儀表組。
4. 運行 ICSim 軟件
運行 ICSim 的標準配置至少包含兩個組件:icsim 儀表組模擬器程序文件(用于模擬汽車的儀表盤),以及 controls 可執行文件(為用戶提供對虛擬汽車的控制權限,包括加速、轉向、門鎖和轉向燈等)。對于汽車黑客攻擊初學者而言,打開第三個終端窗口運行網絡嗅探器,查看這個新虛擬 CAN 網絡上的數據包,也具有重要的指導意義。
打開三個終端窗口。在第一個窗口中,在我們創建的 vcan0 虛擬 CAN 網絡接口上打開儀表組模擬器應用程序 icsim:

其中,vcan0 中的 “0” 表示通過運行上述 setup_vcan.sh 腳本創建的虛擬 CAN 網絡。儀表盤模擬器將如圖 3 所示。

圖 3、icsim 儀表組模擬器模擬虛擬汽車的儀表盤,包含車速、轉向燈和門鎖指示燈
由于 vcan0 網絡上尚未有任何通信數據,儀表盤上的所有指示燈都不會亮起,車速表也將保持靜止。我們將通過啟動 ICSim 的控制功能來解決這一問題。在第二個終端窗口中,打開 controls 應用程序:

CAN 總線控制面板應用程序將顯示在屏幕上,其圖形用戶界面(GUI)模仿 PlayStation 3 的 PS3 控制器(該控制器受 controls 應用程序支持)。控制器圖形用戶界面上標注了鍵盤控制方式:上箭頭鍵控制加速,左右箭頭鍵控制轉向燈,依此類推。
右鍵單擊(或按住 Control 鍵單擊)窗口頂部的標題欄,選擇 “始終置頂”,使控制面板應用程序保持可見,如圖 4 所示。

圖 4、通過運行 ICSim/controls 在虛擬 CAN 網絡 vcan0 上啟動 CAN 總線控制面板應用程序。選擇 “始終置頂” 使其保持可見,然后調整大小,以便同時查看儀表盤和控制器
調整控制器窗口的大小,使其與儀表盤模擬器同時顯示在屏幕上。此時,你會注意到車速表正在 “怠速”(即輕微抖動),保持在 0 英里 / 小時。這是因為控制器應用程序正在通過虛擬 CAN 總線網絡 vcan0 發送輕微的噪聲信號,以模擬真實汽車的 CAN 總線。
表 1 列出的鍵盤控制功能僅在 CAN 總線控制面板應用程序處于選中狀態時生效。如果儀表盤似乎沒有響應,請先單擊 CAN 總線控制面板窗口,然后使用以下按鍵查看 IC 模擬器儀表盤的變化:

表 1、CAN 總線控制面板應用程序的鍵盤控制方式及其在 IC 模擬器儀表盤應用程序中對應的功能
單擊 CAN 總線控制面板窗口,按下表 1 中的部分按鍵和組合鍵,觀察虛擬汽車加速、左右轉向、鎖定和解鎖車門等操作。
最后,通過運行 CAN 工具集中包含的 CAN 網絡嗅探器 cansniffer,查看控制面板應用程序通過 vcan0 網絡發送到儀表盤模擬器的網絡數據包。在第三個終端窗口中運行以下命令:

cansniffer 可執行文件并非 ICSim 軟件包的一部分,而是包含在下載 ICSim 軟件之前安裝的 can-utils 軟件依賴項中。如圖 5 所示,網絡流量類似于 tcpdump 原始數據或 Wireshark 中捕獲的數據包數據。

圖 5、cansniffer 與 IC 模擬器和 CAN 總線控制面板同時運行,提供虛擬 CAN 總線上數據包的網絡層面視圖
cansniffer -c 選項用于對變化的字節進行彩色標記,這有助于我們識別在通過控制面板應用程序與 CAN 總線交互時發生變化的字節。
打開這三個窗口(icsim 儀表盤、controls 控制面板和 cansniffer 網絡嗅探器)后,我們可以觀察傳感器、執行器和 ECU 如何通過簡單的 CAN 總線進行交互。嘗試將車速加速至控制器設定的最高速度 90 英里 / 小時,然后鎖定和解鎖所有車門,并在加速過程中開啟左右轉向燈。無論這些操作組合在真實車輛中是否安全,儀表盤都會如實反映你的按鍵操作。
在下一節中,我們將展示如何結合使用這些工具執行常見的網絡安全測試,即捕獲數據包并在 CAN 網絡上重放這些數據包,無需駕駛員操作即可觸發傳感器和控制功能。
(二)演示重放攻擊
雖然解讀虛擬 CAN 網絡中的數據包超出了本文的范圍,但我們可以通過嘗試重放攻擊來展示這些數據包的實際應用。在重放攻擊中,黑客捕獲特定網絡流量中的數據包,然后嘗試在后續將其重新注入網絡,以重復實現特定功能,或通過觀察受影響設備中的錯誤或其他異常行為,進一步了解數據包的相關信息。
遺憾的是,許多新型(以及部分舊型)物聯網設備都存在重放攻擊漏洞,例如藍牙智能鎖(本喬夫,2016),甚至工業控制系統(科瓦奇,2017)。在新的或未知的網絡(如我們的虛擬 CAN 網絡)中,重放攻擊可能是安全測試人員或攻擊者試圖逆向工程解析設備功能的第一步。
幸運的是,正如 cansniffer 軟件允許我們查看虛擬 CAN 網絡接口上的數據包一樣,can-utils 庫中還包含其他工具,可用于捕獲和重放這些數據包。在本實驗模塊中,我們將通過兩個步驟演示重放攻擊:從虛擬 CAN 網絡流量中捕獲包含已知命令的數據包,以及在虛擬 CAN 總線上重放這些數據包。
1. 捕獲 CAN 總線數據包
如果上一節中的 icsim、controls 和 cansniffer 窗口仍處于活躍狀態,請在 cansniffer 窗口中按下 Ctrl+C(控制鍵 + C)停止網絡嗅探。
如果已關閉汽車黑客攻擊相關窗口,或已重啟卡利虛擬機,請運行以下命令重新創建 vcan0 網絡,并在 vcan0 上打開 icsim 儀表盤和 controls 控制面板:

注意,在最后兩個命令末尾添加 & 符號后,可在同一個終端窗口中同時運行 IC 模擬器和 CAN 總線控制面板。& 符號將每個命令置于 “后臺” 運行,允許用戶在進程執行期間繼續在命令行 shell 中操作。
在另一個終端窗口中,運行 candump 工具,將 vcan0 上的所有流量記錄到文件中:

注意,-l 是小寫字母 L(并非數字 1)。candump -l 選項表示日志記錄(即捕獲 CAN 流量并將其保存到文件中)。我們仍使用 vcan0 網絡接口,因為儀表盤和控制器正在該接口上模擬 CAN 流量。
啟動 candump 后,立即返回 CAN 總線控制面板窗口,開始按下按鍵以實現加速、激活轉向燈以及鎖定和解鎖車門等操作。“駕駛” 幾秒鐘后,返回 candump 終端窗口,按下 Ctrl+C(控制鍵 + C)停止數據包捕獲。
通過 ls 命令列出當前目錄的內容,將看到一個新的日志文件,格式為 candump - 年 - 月 - 日_時間.log,例如:

該日志文件包含我們剛剛捕獲的所有數據包。現在,關閉控制器窗口,嘗試對虛擬 CAN 總線實施重放攻擊。
2. 重放 CAN 總線數據包
關閉 CAN 總線控制面板窗口。你會注意到虛擬車速表的指針停止 “怠速”,因為控制器不再發送噪聲和抖動信號。此時,CAN 總線完全處于靜默狀態。但是,我們可以重新注入之前捕獲的數據包,觀察這些數據包是否會對儀表盤產生與真實控制器相同的效果。這是一種簡單、安全的重放攻擊,但我們將學習如何將其擴展到真實汽車上。
在用于運行 candump 工具的終端窗口中,輸入以下命令:

-I 選項表示 canplayer 使用提供的日志文件作為輸入。注意,你可以輸入日志文件名的前幾個字符,然后按下 Tab 鍵(例如輸入 can 并按下 Tab 鍵)自動補全日志文件名,而無需輸入完整的數字序列。此外,與之前所有的 CAN 工具不同,此處無需指定 vcan0 接口。這是因為 canplayer 將在捕獲數據包的原始接口上重放數據包。
按下回車鍵后,你會看到車速表和其他儀表盤組件的表現與捕獲數據包時完全一致,如圖 6 所示。注意,我們成功實現了在汽車時速超過 90 英里的同時,開啟左右轉向燈并解鎖所有車門!

圖 6、通過 canplayer 重放之前捕獲的數據包,無需使用 CAN 總線控制面板即可控制虛擬儀表盤
盡管汽車處于 “關閉” 狀態(沒有任何控制功能處于活躍狀態),但你仍能看到與之前相同的指示燈變化,仿佛汽車正在正常運行。
實際上,如果在 CAN 總線控制面板仍處于活躍狀態時運行 canplayer,車速表將在控制器應用程序確定的 “真實” 值和 canplayer 重新注入虛擬 CAN 總線的值之間跳轉。
(三)逆向工程解析 CAN 總線消息
對于高級學員而言,汽車黑客攻擊的下一步是逆向工程解析特定數據包或 CAN 總線消息,以實現特定功能,例如剎車、轉向燈控制、加速等。在本節中,我們將演示如何使用 candump、canplayer 和 cansend 逆向工程解析目標系統(如門鎖、加速器、轉向燈等)的 CAN ID 和消息值。一旦獲知特定系統的 CAN ID,并枚舉該 ID 對應的各種消息值,黑客就可以通過向 CAN 總線發送單一命令,分別控制每個功能。
1. 逆向工程解析轉向燈控制
轉向燈控制系統是一個相對容易上手的 CAN 系統攻擊目標。我們通常將其作為第一個示例,原因如下:成功攻擊的結果直觀可見(轉向燈亮起),且它是一個無害傳感器被惡意利用的典型案例。通常情況下,轉向燈具有積極作用,駕駛員可通過開啟轉向燈告知其他車輛自己即將減速左轉或右轉。然而,如果同時開啟左右轉向燈,其效果與剎車燈非常相似。在繁忙、擁擠且車速較快的州際公路上,剎車燈的突然亮起可能導致后車駕駛員緊急剎車,進而引發多車相撞事故。
要通過逆向工程解析實現對汽車轉向燈的控制,我們需要先捕獲轉向燈關閉狀態下的基準 CAN 數據包集。然后,捕獲右轉向燈激活狀態下的 CAN 數據包集。通過一種二分查找法,將每個數據包捕獲集分成兩半,并重放每一半,直到其中一半數據包能夠激活右轉向燈。之后,遞歸地將每個 “有效” 數據包集再分成兩半,直到分離出激活轉向燈的單一 CAN 消息。一旦獲得該數據包的 CAN ID,就可以修改消息中的數據值,以確定左轉、右轉、關閉轉向燈以及同時開啟左右轉向燈對應的數值。
2. 捕獲轉向燈關閉狀態下的基準 CAN 數據
按照上一節的操作,打開 IC 模擬器、CAN 總線控制面板和終端窗口,在終端中啟動 candump:

不要操作控制器,僅捕獲約一秒鐘的轉向燈關閉狀態下的數據包。(注意:如果試圖逆向工程解析具有切換功能的 CAN 控制(如門鎖),可能需要捕獲基準狀態下的數據包,在該基準狀態下,你需要重新鎖定車門,或執行與要重放的操作相反的操作。)按下 Ctrl+C 停止數據包捕獲。將生成的 candump 日志文件重命名為易于識別的名稱,例如 baseline:

捕獲完基準狀態(燈光關閉)的文件后,接下來捕獲右轉向燈激活狀態下的數據包,并逆向工程解析控制轉向燈的 CAN ID。
3. 逆向工程解析轉向燈的 CAN ID
接下來,捕獲約一兩秒鐘的右轉向燈激活狀態下的 candump 數據。操作方法如下:在終端窗口中啟動 candump,立即切換到 CAN 總線控制面板,按下鍵盤上的右箭頭鍵。約一秒鐘后,返回終端窗口,按下 Ctrl+C 停止 candump。
逆向工程解析轉向燈單一 CAN ID 的流程如下:遞歸地將 candump 文件分成兩半,直到獲得能夠激活右轉向燈的單一 CAN 數據包或消息。
首先,確定最新捕獲文件中的行數(candump 格式為純文本,每行對應一條 CAN 消息):

Linux 的 wc -l 命令(-l 為 lines 的縮寫,即行數)將統計文件中的行數。上述命令顯示,我們捕獲的幾秒鐘 candump 日志包含 9761 行數據。
重放日志文件,確認其確實能夠激活右轉向燈:

如果轉向燈未亮起,請重新捕獲轉向燈激活狀態下的數據包。一旦轉向燈成功亮起,關閉 CAN 總線控制面板,以免干擾后續的逆向工程解析步驟。
遞歸執行以下步驟:
1. 將之前的日志文件大致分成兩個相等的部分:

Linux 的 split -l 命令(同樣,-l 為 lines 的縮寫)將文件分割成多個包含指定行數的文件(我們最初的文件包含近 10000 行,因此首次分割時指定 5000 行)。命令末尾的 x1(x 和 1)指定生成文件的前綴;上述命令將生成兩個文件,分別命名為 x1aa 和 x1ab。
2. 重放每一半文件,直到儀表盤上的轉向燈亮起:

如果第一個命令能夠激活右轉向燈,則無需運行第二個命令。如果不能,則運行第二個命令。由于原始完整文件能夠激活轉向燈,因此這兩個部分中至少有一個能夠激活轉向燈。如果兩個部分都能激活轉向燈,則每次均任意選擇第一個文件進行進一步分析。
注意:轉向燈是簡單的開關值,因此易于識別。如果試圖逆向工程解析的 CAN 系統更為復雜或具有連續性(如加速、剎車、調節音響音量或空調溫度),可能需要將 canplayer 命令嵌入 for 循環中,以便識別更短暫或漸進式的效果:
![]()
3.重放基準文件重置儀表盤,關閉轉向燈:

轉向燈應恢復到關閉狀態。這一步至關重要,因為只有接收到關閉信號,儀表盤上的轉向燈才會熄滅。
4. 返回步驟 1,將 “有效” 數據包捕獲文件(上述 x1aa 或 x1ab 中能夠激活轉向燈的文件)的行數大致減半(2500、1250、640、320、160、80、40、20、10、5、3、2、1),并每次遞增前綴(x2、x3 等):

新生成的兩個文件將命名為 x2aa 和 x2ab。重復步驟 2-4,直到 “有效” 文件僅包含一行能夠激活右轉向燈的數據包。
熟悉二分查找法強大功能的學員會發現,這一過程所需的迭代次數少得驚人。即使初始數據包捕獲文件包含 100 萬行數據(約 2 的 20 次方),也僅需 20 次迭代即可識別出激活轉向燈的單一 CAN 消息。以下是一個示例的最后幾輪迭代:


在本示例中,x14ab 文件僅包含一行數據,且能夠激活右轉向燈。查看該文件的內容:

行首為數據包的時間戳,接下來是 CAN 網絡 vcan0,然后是轉向燈的 CAN ID(188),緊隨其后的是井號(#),最后是激活右轉向燈的數據:02000000。
我們成功逆向工程解析出了轉向燈的 CAN ID!通過重放基準文件重置儀表盤,然后使用 cansend 命令發送正確的 CAN ID 和數據,即可驗證結果:

轉向燈亮起!既然已經獲得了轉向燈的 CAN ID,接下來就是最后一步:完全控制轉向燈系統。
4. 枚舉 CAN 數據值并完全控制 CAN 系統
獲得轉向燈的 CAN ID 后,修改消息中的數據值,以確定左轉、右轉、關閉轉向燈以及同時開啟左右轉向燈對應的數值。
首先,我們已知 CAN 消息 188#02000000 能夠激活右轉向燈。觀察數據值 02000000,邏輯上接下來可嘗試的值是 01000000。在 IC 模擬器仍運行的情況下,輸入以下命令:

左轉向燈亮起!接下來,嘗試數據值全為零:

左右轉向燈均熄滅。這意味著,如果我們能夠通過 CAN 總線重復注入 188#00000000 信號(例如,通過上一節提到的 for 循環),就可以有效抑制或屏蔽轉向燈功能。單獨來看,這一攻擊可能不會造成災難性后果,但可能會給駕駛員和后方車輛帶來困擾。
最后,也是最關鍵的一步:我們能否同時開啟左右轉向燈?具備一定的二進制算術知識將有助于實現這一目標:

CAN ID 188 對應的數據包數據值 03000000 能夠同時激活左右轉向燈!我們成功實現了應急燈或模擬剎車燈的效果,這可能足以干擾一名或多名駕駛員的正常駕駛。

圖 7、我們成功逆向工程解析出了控制轉向燈所需的 CAN ID 和數據值,實現了對 IC 模擬器中左右轉向燈的完全控制
通過幾個簡單的步驟,我們就實現了對模擬車輛轉向燈的完全控制。此時,非常適合與學生討論相關的倫理問題:這種黑客攻擊在何種情況下可以被視為倫理行為?如果被惡意使用,可能會產生哪些潛在后果?如果能夠同時針對多輛車輛實施此類攻擊,可能會造成多大范圍的影響?
這些工具的一個倫理應用領域是漏洞測試(賈法爾內賈德等人,2015)。正如我們可以使用道德黑客技術發現計算機漏洞并加強其安全性一樣,道德汽車黑客攻擊也有助于打造更安全的車輛。
盡管上述示例均在實驗室環境中通過模擬方式安全進行,但研究人員將卡利筆記本電腦連接到實體汽車所需的工具價格低廉且易于獲取。
(四)連接實體汽車
在實驗室計算機上,汽車黑客攻擊只是一項理論練習,但通過添加一根可在網上購買的 20 美元左右的 ODB-II 轉 USB 電纜(如圖 8 所示),你可以將電腦連接到汽車的車載診斷端口(OBD-II 端口,通常位于方向盤下方、駕駛員側腳踏板附近),并在 Windows、Linux 或 Mac 計算機上查看 CAN 消息的實際效果。

圖 8、你可以在網上以僅 20-30 美元的價格購買 USB 轉 OBD-II 適配器電纜,將計算機連接到幾乎所有 1996 年以后生產的汽車的車載診斷(OBD)端口。
OBDLink SX 是一款價格低廉、應用廣泛的硬件設備,適用于家庭機械師和汽車黑客。在本節中,我們將詳細介紹如何將此類 OBD 轉 USB 電纜連接到上一節中使用的卡利虛擬機
首次連接如圖所示的 OBDLink 電纜時,建議安裝來自http://ScanTool.net的 ScanTool 軟件(霍布斯,2015),該軟件可通過 apt-get 軟件包安裝:

然后,通過輸入以下命令運行 scantool 應用程序:

將 OBD-II 電纜的 USB 適配器端插入筆記本電腦或計算機,將 OBD-II 連接器插入汽車方向盤下方、駕駛員側腳踏板附近的 OBD 端口,然后啟動汽車點火開關。如果使用虛擬機,需在 VirtualBox 中通過選擇 “設備”>“USB”>“ScanTool OBDLink”(或類似選項)將 USB 設備連接到虛擬機,如圖 9 所示。

圖 9、在 VirtualBox 中,可通過虛擬機菜單選擇 “設備”>“USB”>“ScanTool OBDLink”(或你的 OBD 轉 USB 電纜名稱),將實體 OBD-II 轉 USB 電纜連接到虛擬機
ScanTool 軟件將連接到汽車的 CAN 網絡,執行以下操作:讀取診斷代碼(并像機械師更換機油時那樣重置診斷代碼等)、讀取傳感器數據(支持超過八頁的傳感器數據,以適應大多數現代車輛)等。Linux 版本的 ScanTool 圖形用戶界面如圖 10 所示。

圖 10、免費的 ScanTool 軟件適用于多種類型的 OBD-II 轉 USB 電纜,具有易于使用的圖形用戶界面,且包含讀取大多數現代車輛 CAN 總線數據所需的所有驅動程序
使用功能更強大的 CAN 轉 USB 轉換器(如 CANable、CANtact 或 Korlan USB2CAN,價格均低于 75 美元),你應該能夠讀取原始 CAN 數據包,并嘗試上述部分重放攻擊(捕獲幾秒鐘的左轉向燈數據,關閉轉向燈,然后通過 canplayer 重新注入數據包,觀察儀表盤指示燈是否閃爍,或汽車外部的實際轉向燈是否閃爍)。但請記住,數據包注入可能會導致不可預測的行為,僅應在安全環境中對自己擁有的、且有能力承擔維修費用的車輛進行此類操作。
四、結論與未來工作
本文提供了用于教學或研究目的的免費開源汽車黑客攻擊軟件的詳細搭建指南。我們還介紹了如何添加成本低于 100 美元的物理電纜或無線連接器,通過 OBD-II 車載診斷端口連接到現代量產汽車。
我們已在兩門道德黑客課程(一門本科課程和一門研究生課程)中實施了該模塊,發現學生對相關內容表現出濃厚興趣。此外,我們還將完整教程納入了一門擁有超過 5000 名注冊學生的在線道德黑客課程。除了成功指導大學生實施本文所述的重放攻擊外,我們還在美國國家安全局 GenCyber 資助項目支持下,將該汽車黑客攻擊模塊納入了兩個高中網絡安全夏令營。學生們能夠有效且準確地重現重放攻擊,這不僅幫助他們理解了汽車黑客攻擊相關知識,還提升了他們使用 Wireshark 和 tcpdump 等網絡嗅探器的能力。
在所有教學場景中,學生都能快速掌握相關知識,并表現出極高的興趣和學習積極性。事實上,該模塊的 “黑客攻擊汽車黑客攻擊軟件” 擴展內容就源自其中一個高中網絡安全夏令營,一名學生在課堂上向同伴演示了如何編輯源代碼并實現 “循環式” 車速表效果。
基于http://OpenGarages.org的開源 ICSim 軟件包和http://ScanTool.net的免費 ScanTool 軟件提供的基礎,學生和研究人員均可應用這些工具測試各種汽車黑客攻擊場景,甚至可以修改底層源代碼,根據自身需求定制工具。
短期內,我們計劃擴展該汽車黑客攻擊模塊,增加教師(和學生)不同品牌和型號汽車的實操測試內容,并鼓勵學生進一步修改軟件,以適應更多測試場景。長期來看,我們希望購置一輛支持 LTE 蜂窩網絡連接的電動汽車(如日產聆風、雪佛蘭博爾特或特斯拉 Model 3),將研究擴展到無線和遠程漏洞測試領域,無需直接連接 OBD-II 端口即可實施攻擊。我們還計劃開展正式的學生調查,收集相關數據,以確定汽車黑客攻擊模塊對道德黑客及相關課程學生學習成果的影響,作為未來的研究方向。

(添加微信號NewCarRen咨詢)
