汽车安全测试学习
汽車安全測試
CAN
controller area network - 汽車所有/某些 部件之間進行通信的中樞
CAN流量是通過UDP而不是TCP進行傳輸的
OBD
要訪問汽車的CAN總線,您必須能夠訪問駕駛室診斷端口。雖然當前的診斷標準和端口有數百種之多,但如今OBD-II已經成為了事實標準,幾乎所有汽車都使用這種診斷端口。實際上,汽車修理工診斷汽車故障時,使用的就是它。通過OBD可以直接訪問CAN,并且是最直接的方式。另外,OBD-II也很容易找到:通常位于前排乘客或駕駛員座位附近的某個地方,而且不需要螺絲刀就能連接使用。
安裝SDL庫
sudo apt-get install libsdl2-dev libsdl2-image-dev -y環境安裝
安裝Can-utils
sudo apt-get install can-utils -yCan-utils主要由5個工具組成:
下載表盤模擬器
git clone https://github.com/zombieCraig/ICSim準備虛擬CAN網絡
通過瀏覽ICSim目錄,可以找到有一個叫setup_vcan.sh的shell腳本:
我們可以運行下面的命令,來設置一個虛擬接口:
./setup_vcan.sh要驗證vcan0接口是否能夠正常工作
ifconfig vcan0模擬器運行
現在,終于可以運行模擬器了。不過,要想運行ICSim模擬器,至少需要兩個組件:一個儀表盤和一個控制器,這樣才能模擬加速、剎車、門控、轉向燈等。另外,操作過程中,我們至少需要3個終端窗口,其中兩個窗口分析顯示儀表盤、控制器,另一個窗口執行其他命令。
首先編譯剛剛git下載的項目
make控制面板的執行
要運行控制面板,你必須運行一個名為icsim的文件,參數為vcan0(我們之前創建的接口):
./icsim vcan0到目前為止,儀表板將不會有任何動作,包括速度表、燈光、剎車或車門。這是因為vcan0接口還沒有動作,為了模擬它,我們必須啟動控制器。
控制面板可以通過以下命令啟動:
./controls vcan0Vcan0是虛擬的CAN接口,ICSim將通過它發送和接收CAN幀。一旦啟動控制面板,速度表會出現一些波動。這是由于控制面板所模擬的噪音而造成的。
啟動控制面板后,我們就可以使用鍵盤上的按鍵來模擬各種運動。
使用以下組合鍵,可以對ICSim控制面板進行相應的修改:
一旦按下向上箭頭和向左箭頭鍵,就會看到左轉向燈閃爍
CAN報文
上圖展示的是我們記錄下來的CAN報文。如果按列看的話,第一列是接口,第二列是仲裁ID,第三列是CAN報文的大小,它不能大于8(如果你考察一下CAN幀的話,就明白為什么不能大于8了),第四列是CAN數據本身。
一旦我們理解了CAN報文,我們就可以進一步通過ODB-II向CAN總線注入修改過的數據包,以篡改速度表或其他東西。
在我們開始展示ICSim之前,讓我們看看其他工具是如何工作的。為此,我們首先要配置一下虛擬接口。
設置虛擬CAN接口
sudo modprobe can上述命令將為CAN加載內核單元。此外,我們還需要為虛擬機加載內核單元。
sudo modprobe vcan我們可以通過下面的命令,來驗證是否加載了所需的內核單元:
lsmod | grep can該命令將顯示是否加載了CAN和VCAN。
現在,我們來配置虛擬接口:
sudo ip link add dev vcan0 type vcan sudo ip link setup vcan0我們可以通過以下命令,來驗證虛擬CAN接口是否已經配置成功:
ifconfig vcan0一旦配置好了虛擬CAN接口,就可以通過該接口發送/接收CAN數據包了。現在,讓我們使用一個名為CANEN的can-utils實用程序來創建虛擬CAN數據包。
cangen-創建can幀
實際上,cangen可以為教育用途而創建各種CAN幀。 要使用cangen,你必須指定用于創建CAN幀的接口。
cangen vcan0Vcan0是我們之前創建的虛擬CAN接口。
既然已經創建了CAN幀,接下來,我們不妨看看這個幀到底長啥樣。實際上,有很多工具可以用來查看幀,其中之一就是Wireshark。為此,我們可以在創建完CAN幀后,啟動Wireshark。
其中,vcan0是用來創建CAN幀的接口。一旦點擊了數據包對應的接口,就會顯示CAN幀的內容。此外,我們還可以查看關于CAN幀的詳細信息。
查看can幀
wireshark
在vcan0里面還有其他的實用工具,比如cansniffer和candump,它們的作用和Wireshark差不多
candump
candump vcan0對于各列,簡單介紹如下:第一列是CAN接口,第二列是ID,第三列是CAN報文的大小,第四列是報文本身。
此外,candump還可以用來記錄幀。在進行重放攻擊時,需要先記錄相應的幀,然后,用canplayer這樣的小工具來重放這些幀。為了記錄CAN幀,可以添加命令選項-l。
candump -l vcan0當記錄CAN幀時,將創建一個前綴為candump的文件,后跟創建日期。
如果想查看文件的內容,可以在Linux上使用cat命令
我們使用candump記錄的數據可以使用canplayer之類的實用程序進行播放。
canplayer-播放can數據
顧名思義,canplayer可以用來播放CAN幀;當您需要進行重放攻擊時,該工具就會派上用場了。首先,需要記錄CAN幀,然后,使用canplayer播放這些CAN幀。
假設我們想要篡改轉速表,但是,我們不知道轉速表讀數對應于哪個ID,也不知道對應的CAN報文中含有哪些內容。理想情況下,您應該首先使用帶有標志-l的candump命令來丟棄和記錄幀,然后使用canplayer播放記錄的幀。
使用輸入文件時,需要為Canplayer命令提供-i選項:
canplayer -I canfile.log除此之外,canplayer還有其他幾個非常有用的選項,大家可以通過man canplayer命令來學習它們。
cansniffer-過濾can數據
使用CAN嗅探器來查看CAN數據的變化。這對于查看特定字節的變化是非常有用的。Cansniffer有一個-c選項,能夠通過顏色來展示字節的變化。這個工具的工作方式為:比較字節當前值和之前的值,如果存在差異,就用字節的顏色變化來加以表示。當你想知道當對汽車進行的操作是否導致CAN數據發生變化時,這個功能會非常有用。
cansniffer -c vcan0我發現cansniffer非常有用,因為它還可以進行ID過濾。因此,如果只想查看來自某個特定ID的幀,比如說0x011,你可以根據ID進行過濾。
在開始嗅探時,我們可以先按-,后跟00000000,這將清除所有的幀;然后,使用+添加要過濾的ID,按回車。這樣你就可以過濾相應ID的幀了。
cansend-發送can數據
Cansend用于將CAN幀發送到一個特定的CAN接口。
cansend interface frame我們將在ICSim中用到所有這些工具。
ICSim實戰
我們已經在第一篇文章中介紹了如何安裝ICSim。現在,讓我們啟動ICSim并嗅探CAN幀。
./icsim vcan0 ./controls vcan0如果您已經嚴格執行了上一篇文章中介紹的步驟,現在就應該能夠看到上面的輸出內容。你可能還注意到,速度表指針會來回抖動,這是由于噪音造成的,是很正常的現象。
嗅探由ICSim創建的CAN幀
我們將使用can-utils提供的cansniffer工具來捕獲數據包。下面,我們可以打開一個新的終端,用以下命令來啟動cansniffer:
cansniffer -c vcan0命令選項-c的作用,是用顏色指示幀字節的變化情況。
CAN幀的變化非常快,這是因為有大量數據高速傳輸。在一輛真正的汽車中,這是非常常見的。
為此,我們可以使用ID進行過濾。如果你想只考察ID為40C的幀,你可以先按-,然后按00000000,再按回車鍵,以從cansniffer中刪除所有的ID對應的數據;然后,按+,然后按要過濾的ID,再按回車鍵即可。
這里,我用上面提到方法過濾了ID為40c的幀。我們可以試著按向上的方向鍵來加油門,然后觀察CAN幀的變化速度。在這里,變化是通過顏色來指示的。大家可以多嘗試一下。
重放攻擊
理解如此龐大的數據將是相當困難的。另外,從這個大量的數據中找到所需幀的ID也是不可能的。
因此,你需要捕獲數據包,然后執行一些操作,比如打開閃光燈或在連接后踩油門,然后分割數據包,進行重放攻擊,看看是否有效。
現在,我們要用ICSim執行重放攻擊,前提是已經啟動了ICSim,并且能夠用cansniffer查看幀。現在,我們將使用帶有-l選項的candump命令來記錄和保存幀,與此同時,我們將通過按左、右方向鍵來加油門,以激活閃光燈。
candump -l vcan0現在,停止candump,我們將看到一個candump-XXXXX.log文件被創建。
重放CAN幀
為了重放這些數據包,我們將使用canplayer工具。由于我們要使用一個文件作為canplayer工具的輸入,所以,我們需要啟用-I選項。
canplayer -I candump-2019XXXXXX.log你可以看到,重放攻擊已經發生了,閃光燈以及速度表應該像我們之前那樣工作。
在真實的汽車中,CAN總線可能會復雜得多,而且CAN幀的出現速度也會快得多,所以定位ID可能相當困難。因此,為了方便識別ID,你可以按照下面的步驟進行操作
分割CAN幀并執行重放攻擊
如果你想把CAN幀分成兩份,并分別進行重放攻擊,最好的方法是使用candump捕獲CAN幀,并使用工具wc來計算CAN幀的數量,然后使用split把它平均分成兩份。
現在,你可以使用canplayer來單獨重放這些CAN幀。
好了,本系列的第二篇文章到此就要結束了。我們已經表明,一旦我們能夠進入車輛并執行一些動作,如加油門、打開轉向燈和打開車門,我們就可以進行進一步的安全測試。因此,通過一些程序和低成本的組件,我們能夠獲得一輛車的全部訪問權限。
SavvyCAN
如今,已經有很多種軟件都可以用于監控和過濾CAN通信。其中,有昂貴的專有工具,也有免費的開源工具。
這篇文章的目的,是向大家介紹如何免費對汽車進行安全測試,所以,昂貴的工具不在我們的介紹范圍之內。
在前面的文章中,我已經詳細介紹了這些昂貴的CAN通信工具的廉價和免費的替代品。實際上,像can-utils、Wireshark這樣的工具就非常好用。
但是,SavvyCAN為我們提供了更多的功能。對于初學者來說,它提供了一個很好的GUI,可以幫助你輕松地瀏覽、過濾數據包、ID等。對于那些已經進入汽車安全測試領域的人來說,SavvyCAN提供了真正偉大的功能——我個人最喜歡的功能包括以腳本方式來處理CAN幀。
下面,讓我們來看看官方網站對SavvyCAN的定義:
“SavvyCAN是一個基于多個QT平臺的C++程序,主要用于CAN數據的逆向分析和捕獲。它最初是為了介紹EVTVDue和CANDUE等EVTV硬件的用法而編寫的。此后,它被擴展到適用于任何socketCAN兼容設備,以及Macchina M2和Teensy 3.x板。它可以同時捕獲并發送至多個總線和CAN攝像機。”與can-utils相比,SavvyCAN非常容易上手。還是那句話,爭論哪個工具最好,哪個工具不好是沒有意義的,主要看是否適合自己。
在Ubuntu上安裝和運行SavvyCAN
wget https://github.com/collin80/SavvyCAN/releases/download/V199.1/SavvyCAN-305dafd-x86_64.AppImage下載appimage時,無需安裝,直接運行相應的可執行文件即可!
chmod 744 SavvyCAN-305dafd-x86_64.AppImage ./SavvyCAN-305dafd-x86_64.AppImage我們建議大家不妨花點時間來熟悉SavvyCAN的界面。如果您想在Macchina M2或其他兼容的硬件上使用SavvyCAN,無需額外安裝任何東西。
我們打算將SavvyCAN與ICSim搭配使用,所以,我們還需要安裝qtserialbus。
打開SavvyCAN窗口后,導航到Connection -> Open Connection Window -> Add New Connection選項,會發現qtserialbus是處于關閉狀態的。
為了在SavvyCAN中使用qtserialbus,首先需要完成相應的安裝工作。
安裝qt5
wget https://download.qt.io/archive/qt/5.14/5.14.2/qt-opensource-linux-x64-5.14.2.run下載qt5后,我們需要安裝/運行它,具體命令如下所示:
chmod a+x ./qt-opensource-linux-x64-5.14.2.run ./qt-opensource-linux-x64-5.14.2.run這里需要注冊或者登錄,記下路由名稱,因為后面會用到的。
一旦安裝了qt5,接下來就得安裝qtserialbus了,因為該軟件沒有包含在官方的Ubuntu存儲庫中,所以,我們還得自己動手,才能豐衣足食。
安裝qtserialbus
sudo apt install qtdeclarative5-dev qttools5-dev g++ git clone https://github.com/qt/qtserialbus cd qtserialbus /home/y0g3sh/Qt5.14.2/5.14.2/gcc_64/bin/qmake . make sudo make install編譯SavvyCAN
為了使用qtserialbus,我們還需要通過qmake編譯之前下載的SavvyCAN的AppImage文件,具體命令如下所示:
git clone https://github.com/collin80/SavvyCAN cd SavvyCAN /home/y0g3sh/Qt5.14.2/5.14.2/gcc_64/bin/qmake CONFIG += debug make注意,安裝過程可能需要一些時間,請耐心等待。
安裝就緒后,請啟動ICSim模擬器,以及除can-utils以外的所有工具——在這里,我們不會借助于can-utils來記錄CAN通信,而是使用SocketCAN。
原理和can-utils一樣,只不過圖形界面更加直觀以及方便
總結
- CAN操作
- 創建
- 重放
- 過濾
- 發送
- 通過OBD-II獲得對CAN的訪問權限
- 真實環境操作
- 嗅探CAN流量
- ICsim模擬
- wireshark/candump嗅探
- CAN流量的分析與逆向工程
- 數據包分析
- 第一列是接口
- 第二列是仲裁ID
- 第三列是CAN報文的大小
- 第四列是CAN數據本身。
- 數據包分析
- 重放攻擊
- candump記錄can包
- canplayer重放can包
參考
- https://en.iguru.gr/car-hacking-apolytos-odigos-part/
- https://en.iguru.gr/car-hacking-apolytos-odigos-part-2/
- https://en.iguru.gr/car-hacking-apolytos-odigos-part-iii/
總結
- 上一篇: 桥梁防撞智能预警系统方案
- 下一篇: 图案设计灵感怎么写_设计的灵感来源