日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

汽车安全测试学习

發布時間:2024/3/12 编程问答 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汽车安全测试学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

汽車安全測試

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 -y

Can-utils主要由5個工具組成:

  • cansniffer:用于嗅探數據包
  • cansend:用于編寫數據包
  • candump:轉儲所有下載的數據包
  • canplayer:用于重放CAN數據包
  • cangen:用于創建隨機的CAN數據包
  • 下載表盤模擬器

    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 vcan0

    Vcan0是虛擬的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 vcan0

    Vcan0是我們之前創建的虛擬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/

    總結

    以上是生活随笔為你收集整理的汽车安全测试学习的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。