色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

CAN總線協議和ICSim模擬器的使用

蛇矛實驗室 ? 來源:蛇矛實驗室 ? 作者:c4se ? 2022-10-10 10:17 ? 次閱讀

本環境是蛇矛實驗室基于"火天網演攻防演訓靶場"進行搭建,通過火天網演中的環境構建模塊,可以靈活的對目標網絡進行設計和配置,并且可以快速進行場景搭建和復現驗證工作。

關于CAN總線協議

CAN 是Controller Area Network 的縮寫(以下稱為CAN),是ISO國際標準化的串行通信協議。在汽車產業中,出于對安全性、舒適性、方便性、低功耗、低成本的要求,各種各樣的電子控制系統被開發了出來。由于這些系統之間通信所用的數據類型及對可靠性的要求不盡相同,由多條總線構成的情況很多,線束的數量也隨之增加。為適應“減少線束的數量”、“通過多個LAN,進行大量數據的高速通信”的需要,1986 年德國電氣商博世公司開發出面向汽車的CAN 通信協議。此后,CAN 通過ISO11898 及ISO11519 進行了標準化,在歐洲已是汽車網絡的標準協議。CAN 的高性能和可靠性已被認同,并被廣泛地應用于工業自動化、船舶、醫療設備、工業設備等方面。現場總線是當今自動化領域技術發展的熱點之一,被譽為自動化領域的計算機局域網。它的出現為分布式控制系統實現各節點之間實時、可靠的數據通信提供了強有力的技術支持。

ICSim模擬分析

在了解CAN之前,我們先來理解一下什么是ECU(Electronic Control Unit),早期分布式的電子電氣架構下,每個 ECU 通常只負責控制一個單一的功能單元,彼此獨立,分別控制著發動機、剎車、車 門等部件。雖然現在ECU變得越來越復雜,但其基本部件不會改變,ECU 控制車輛的不同功能,現代汽車中有多達 70 個 ECU。如果這些ECU需要通信,那么就用到了CAN。在CAN總線出現之前,汽車制造商使用點對點布線,因此大多數部件都需要互相連接才能實現通信。如果汽車布線時出現故障,診斷會變得非常困難。CAN的出現使這種狀況變得簡單,CAN是一種總線協議,它允許微控制器(MCU)和ECU相互通信,并且它是一種基于消息的協議。通過單個 CAN 接口,ECU 可以通過集中式系統與每個之間進行通信,涉及更少的布線,并且數據通過數字信號而不是模擬信號傳輸,它使信號在傳輸過程中發生錯誤的概率減小。要訪問汽車的CAN總線進行調試,我們需要連接汽車的OBD接口(現在汽車都使用OBD-II接口),一般情況下,這個接口位于駕駛員座位的前方附近。下圖中為汽車的調試接口

想要通過OBD-II接口連接電腦進行操作,就需要用到USB轉CAN的工具,淘寶一般有賣。

我們學習vehicle安全的最便宜簡單的方法是使用汽車模擬器。我們可以使用 ICSim工具,很方便的了解和學習 CAN 的內容。由于本小節只是簡單介紹CAN和ICSim模擬器的使用,使初學者對CAN有初步了解,對CAN的詳細內容并不會進行講解,如果大家有興趣可以去看<<智能汽車安全攻防大揭秘>>這本書。ICSim(Instrument Cluster Simulator),是由Open Garages推出的工具。它可以產生多個CAN信號,同時會產生許多背景噪聲,讓我們可以在沒有汽車或不改造汽車的情況下即可練習CAN總線的逆向技術。ICSim 包括一個帶有車速表、門鎖指示燈、轉向信號燈和控制面板的儀表板。模擬控制器允許用戶與模擬汽車網絡進行交互,應用加速、剎車、控制門鎖和轉向信號。

安裝ICSim環境,需要首先安裝ICSim所需依賴庫:

sudo apt installlibsdl2-dev libsdl2-image-dev

要發送、接收和分析 CAN 包,我們需要 CAN 分析工具。Can-utils 是一組 Linux 實用程序,允許 Linux 與車載 CAN 網絡進行通信。Can-utils 包含 4個我們經常使用的主要工具:

sudo apt install can-utils
#candump : 顯示、過濾和記錄CAN數據到文件。candump并不會解碼數據。
#canplayer : 對記錄的CAN數據進行重放。
#cansend : 發送CAN數據。
#cansniffer : 顯示CAN數據并高亮顯示變化的字節。

然后將ICSim下載下來

b6cc2020-47a1-11ed-a3b6-dac502259ad0.png

切換到ICSim目錄,執行"make"命令,就可以編譯成功。編譯成功后,就可以使用"icsim van0"來模擬車輛,我們另起一個終端,使用"controls vcan0",這時出現儀表盤的窗口是模擬控制器,并且控制器中的速度表一直忽上忽下的跳到在0mph以上的位置,說明ICSim工作正常。

下面,我們可以使用如下鍵位來操作控制器

上方向鍵加速
向左方向鍵左轉
向右方向鍵右轉
右shift+A/X開左車門(前/后)
右shift+B/Y開右前車門(前/后)
左shift+A/X關左車門(前/后)
左shift+B/Y關右前車門(前/后)

b75d1a58-47a1-11ed-a3b6-dac502259ad0.png

運行后,我們可以使用ifconfig來查看網絡接口,發現會多出來一個vcan0的網絡接口。

b7816a2a-47a1-11ed-a3b6-dac502259ad0.png

我們可以使用"candump vcan0"來抓取CAN包裹流量,這時我們對控制器進行操作就會抓取相應命令的流量。如下圖,左側可以看到抓取的流量直接打印到屏幕上,顯示流量時還是比較亂的。

b7c38626-47a1-11ed-a3b6-dac502259ad0.png

這時我們可以使用"candump -l vcan0",candump會自動將抓取的流量包放入candump-xxx.log文件中。

b811ceda-47a1-11ed-a3b6-dac502259ad0.png

想要停止抓取可以按"ctrl+c"。查看一下抓取流量包,第一列,括號內的是時間戳,第二列中vcan0為我們的虛擬can接口。后面的是ID和數據,ID和數據以#號分割。

b894fcec-47a1-11ed-a3b6-dac502259ad0.png

candump可以監聽并記錄原始數據,會有很多對我們無用的數據。can-utils工具包中還有一款可以根據仲裁ID進行分組顯示,并對變化的數據以紅色顯示,使我們比較容易分辨,它就是cansniffer。我們使用"cansniffer -c vcan0"命令來對vcan0進行監聽。

b9b31a3c-47a1-11ed-a3b6-dac502259ad0.png

我們可以測試一下,當我按下左方向鍵時,儀表盤開始出現左轉向的燈。同時左側的流量包開始變動,但是我不太好觀察到哪里出現了變化。

bd441d04-47a1-11ed-a3b6-dac502259ad0.png

這時,我們可以將ID這一列截圖固定在左側,因為cansniffer已經對ID做了分類,當進行左轉向的操作,就可以觀察出哪里出現了變化。如下圖所示,當我按下左轉向時,發現左側多出了一行,這一行為"188#01000000",那么這一條流量包大概率是對轉向進行操作的包裹。

bebbd564-47a1-11ed-a3b6-dac502259ad0.png

同理,我們繼續測試一下右轉向,發現左側多出一行,即為"188#02000000"。發現和左轉向僅僅相差1字節,說明id為188很有可能是對轉向的控制命令。接下來,我們驗證一下。

bf164ca6-47a1-11ed-a3b6-dac502259ad0.png

cansend可以模擬發送包裹,cansend命令的使用為"cansend vcan0 ID#XXXXXXXX"。上面我們已經觀察到188為轉向控制ID,我們發送一下sniffer的左轉包裹,發現確實儀表盤出現了左轉,證明了我們188確實是左轉控制ID。

c003f26c-47a1-11ed-a3b6-dac502259ad0.png

同理,我們測試一下右轉。

c02313ae-47a1-11ed-a3b6-dac502259ad0.png

按照前面的思路,我們測試一下開車門的操作,步驟和上面相同。當我按下"右shift+A"時,左前車門開啟,同時我們發現開左前車門的ID為19B,并且數據為"00000E000000"。

c04702dc-47a1-11ed-a3b6-dac502259ad0.png

同時,測試一下關閉左前車門時的命令包裹。發現為"19B#00000F000000"。

c185f7de-47a1-11ed-a3b6-dac502259ad0.png

使用"cansend vcan0 19B#00000E000000"命令發送開啟左前車門的包裹,發送完畢后發現儀表盤左前車門打開。

c2f4143e-47a1-11ed-a3b6-dac502259ad0.png

使用"cansend vcan0 19B#00000F000000"命令發送關閉左前車門指令,發送完畢后,車門關閉。證實了我們分析的車門開啟和關閉的指令。

c32d63f6-47a1-11ed-a3b6-dac502259ad0.png

測試加油的指令時,上面的操作也可以比較方便的分析出加油指令ID和數據。這里不在重復講解,上面的方法固然好用,但是也有不適用的時候,比如情況比較復雜,出現的ID變化或者較多。我們還有一種方法可以分析出對車輛的指令。我們首先使用"candump -l vcan0"進行流量抓取,抓取過程中進行加油門操作,然后松開油門,使其速度將為最低,最后停止抓取流量。

這樣一來,整個的過程就可以抓取到log文件中。我們使用重放的發送,發送這個log文件中的所有內容。

c367111e-47a1-11ed-a3b6-dac502259ad0.png

命令如下,使用"canplayer -I candump-xxx.log"命令就會將抓取到的流量重新發送一邊。發送后可以觀察到我們上面加速和減速的整個過程,接下里我們就要使用二分法截取加速的部分。

c3847362-47a1-11ed-a3b6-dac502259ad0.png

使用二分法截取加速過程,例如這里我抓取的log文件有200000條數據,我們先截取前1000000條數據進行重放。觀察是否只是加速過程,這里我發現有減速過程就繼續使用二分法。一直當我截取到20000-40000條時,我發現只為加速過程。然后我們就可以進行下一步了。

c4952f62-47a1-11ed-a3b6-dac502259ad0.png

我們將log文件的時間戳去掉后,使用"cat xxx.log | sort | uniq -c | sort -n"命令來分類我們的流量包日志文件。這條命令的結果是去重后,按照ID出現的次數進行排序。一般情況下,一直加油時發出的指令都是單次的,并不會重復。按照這一現象,我們分類后,發現出現1次,并且ID相同并且遞增的命令就是加速指令。

如下圖所示,"244#0000001xxx"即為加速指令。我們重放后,可以觀察到加速現象。

c501205a-47a1-11ed-a3b6-dac502259ad0.png

同理,我們也可以測試開關車門的指令,比如我這里開了4次左前車門,關了3次左前車門(開門和關門次數不同時容易比較分析)。然后使用"cat xxx.log | sort | uniq -c | sort -n"命令進行分類,分類后可以簡單方便的查找車開關車門的指令。

c5537512-47a1-11ed-a3b6-dac502259ad0.png

Fuzzing

我們可以使用savvyCAN工具對can協議進行fuzz測試。

savvyCAN安裝過程如下,

首先需要安裝qt環境,這里我使用5.14.2版本(https://download.qt.io/archive/qt/5.14/5.14.2/)(savvyCAN環境要求>=5.14.0版本),下載".run"的在線安裝程序,然后其賦予執行權限(chmod 755 qt-xxx.run),使用"./qt-xxx.run"進行安裝,這里我安裝完畢后的目錄為"~/Qt5.14.2/5.14.2"。

git clone https://github.com/collin80/SavvyCAN.git
sudo apt install libqt5serialbus5-dev libqt5serialport5-dev qtdeclarative5-dev qttools5-dev
cdSavvyCAN
~/Qt5.14.2/5.14.2/gcc_64/bin/qmake
make

c688d4ae-47a1-11ed-a3b6-dac502259ad0.png

安裝完畢后就可以使用"./savvyCAN"啟動工具,啟動后的頁面如下。我們需要先連接vcan0才能進行下一步操作。點擊Connection然后點擊"open Connection Window"。

c7385974-47a1-11ed-a3b6-dac502259ad0.png

點擊"Add New Device Connection - QT SerialBus Device-socketcan-vcan0",然后點擊"Create New Connections",最后"Save Bus Settings"就創建好連接了。

c783fe6a-47a1-11ed-a3b6-dac502259ad0.png

savvyCAN工具部分功能與我們上面使用的can-utils工具相同,下圖為RE tools中的sniffer功能,與我們上面操作使用的cansniffer功能相同,但是savvyCAN中變化的數據使用了顏色進行標記,更便于我們辨識數據。

c7ef1cea-47a1-11ed-a3b6-dac502259ad0.png

savvyCAN工具的重點即為fuzz功能,點擊"Send Frames-fuzzing"就會出現下圖中的fuzzing window,這個窗口中的功能適用于我們想要fuzz否個ID范圍,并且可以自定義fuzz的數據。

下圖中為我測試0x244 ID的fuzz效果,綠框部分為我們想要fuzz數據的位數,這里我設置只fuzz最后倆個bytes的數據,并且數據范圍為00-FF。ID Scanning為Random模式,這里可以設置seqential,效果更為明顯。

c8c564bc-47a1-11ed-a3b6-dac502259ad0.png

fuzzing功能對我們測試某個范圍的ID功能極有幫助,可以幫助我們快速辨別出id的功能。

總結

這一小節,我們學習了使用ICSim模擬器模擬車輛,并且通過can-utils和savvyCAN工具對CAN總線進行抓包和分析,初步了解了CAN的內容。

蛇矛實驗室成立于2020年,致力于安全研究、攻防解決方案、靶場對標場景仿真復現及技戰法設計與輸出等相關方向。團隊核心成員均由從事安全行業10余年經驗的安全專家組成,團隊目前成員涉及紅藍對抗、滲透測試、逆向破解、病毒分析、工控安全以及免殺等相關領域。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    8650

    瀏覽量

    151409
  • CAN
    CAN
    +關注

    關注

    57

    文章

    2757

    瀏覽量

    463931
  • 總線協議
    +關注

    關注

    0

    文章

    116

    瀏覽量

    14861

原文標題:物聯網安全實戰從零開始-CAN總線協議初探

文章出處:【微信號:蛇矛實驗室,微信公眾號:蛇矛實驗室】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    基于FPGA的飛行模擬器通信接口設計

    文章根據飛行模擬器的結構特點,分析了現場總線技術和FPGA技術的發展,根據飛行模擬器的實際需要和總線自身特點,選用了CAN
    發表于 05-15 11:12 ?2753次閱讀

    CAN總線協議知識科普

    本文說的CAN即是一種總線,也是一種協議。因此,我們常聽見CAN總線,也常聽見CAN
    發表于 09-15 12:47 ?3322次閱讀

    基于SAE J1939協議的發動機總線數據模擬器開發設計

    在車載網絡的開發過程中,需要發動機節點向總線網絡發送報文,為了降低成本,提高開發效率,模擬發動機。基于SAE J1939協議巾車輛應用層子標準及應用層診斷子標準,通過軟件編程進行發動機總線
    發表于 07-12 06:33

    怎么設計多通道實時CAN總線模擬器

    及實時響應的場合,單通道CAN總線不能滿足實際通信的要求。那么,我們究竟該如何設計多通道實時CAN總線模擬器呢?
    發表于 08-13 07:44

    CAN 的較高層協議和協議

    CAN 的較高層協議和協議 本文主要介紹了幾個基于CAN 的較高層協議CAL/CANopen DeviceNet SDS 并且對這幾個較
    發表于 03-22 15:31 ?34次下載

    基于CAN的較高層協議和協議

    基于CAN的較高層協議和協議
    發表于 10-18 16:38 ?21次下載
    基于<b class='flag-5'>CAN</b>的較高層<b class='flag-5'>協議和</b>子<b class='flag-5'>協議</b>

    基于PC104總線的車載深度模擬器設計

    深度模擬器根據設定指令產生期望的壓力輸出,用來模擬水下航行在不同深度所承受的水壓。利用PC104 總線產品體積小、嵌入式的特點,研制基于PC104
    發表于 06-17 17:30 ?30次下載
    基于PC104<b class='flag-5'>總線</b>的車載深度<b class='flag-5'>模擬器</b>設計

    多通道實時CAN模擬器設計方案

    在大量數據通信處理中,高可靠性及實時響應的場合,單通道CAN總線不能滿足實際通信的要求。為此,介紹一種基于多通道實時CAN模擬器的設計方案。
    發表于 09-08 15:25 ?2246次閱讀

    基于CAN的較高層協議和協議

    基于CAN的較高層協議和協議
    發表于 12-14 16:39 ?13次下載

    基于FPGA的多協議隔離總線信號模擬器設計

    基于FPGA的多協議隔離總線信號模擬器設計
    發表于 01-07 19:08 ?0次下載

    基于CAN總線的分布式飛機客艙模擬器控制系統_郭潔

    基于CAN總線的分布式飛機客艙模擬器控制系統_郭潔
    發表于 01-16 13:45 ?1次下載

    多通道實時CAN總線模擬器設計方案解析

    及實時響應的場合,單通道CAN總線不能滿足實際通信的要求。為此,介紹一種基于多通道實時CAN模擬器的設計方案。 1 CAN
    發表于 11-30 11:05 ?22次下載
    多通道實時<b class='flag-5'>CAN</b><b class='flag-5'>總線</b><b class='flag-5'>模擬器</b>設計方案解析

    CAN總線協議是什么?CAN總線協議有哪些?CAN總線協議知識分析

    本文說的CAN即是一種總線,也是一種協議。因此,我們常聽見CAN總線,也常聽見CAN
    的頭像 發表于 10-03 19:53 ?7.5w次閱讀
    <b class='flag-5'>CAN</b><b class='flag-5'>總線</b><b class='flag-5'>協議</b>是什么?<b class='flag-5'>CAN</b><b class='flag-5'>總線</b><b class='flag-5'>協議</b>有哪些?<b class='flag-5'>CAN</b><b class='flag-5'>總線</b><b class='flag-5'>協議</b>知識分析

    認識CAN總線錯誤 CAN總線錯誤分析與解決

    認識CAN 總線錯誤的第一步就是了解認識CAN 總線協議和它的具體功能,這樣才能更容易地理解CAN
    發表于 08-14 15:18 ?6418次閱讀
    認識<b class='flag-5'>CAN</b><b class='flag-5'>總線</b>錯誤 <b class='flag-5'>CAN</b><b class='flag-5'>總線</b>錯誤分析與解決

    CAN總線模擬器的使用指南 CAN總線網絡的安全性分析

    CAN總線模擬器的使用指南 CAN總線模擬器(如ICSim
    的頭像 發表于 12-23 09:16 ?338次閱讀
    主站蜘蛛池模板: 強姧伦久久久久久久久| 国产精品久久久久成人免费| 末成年美女黄网站色大片连接| 国产99精品视频一区二区三区| 在线国内自拍精品视频| 色偷偷爱偷偷要| 男男h开荤粗肉h文1v1| 狠狠躁天天躁小说| 国产AV果冻传奇麻豆| 99久久国产露脸精品竹菊传煤| 亚洲免费无码av线观看| 日本无码毛片一区二区手机看 | 日本漂亮妈妈7观整有限中| 久久精品无码成人国产毛| 国产精品久久人妻拍拍水牛影视 | 在线观看精品视频看看播放| 午夜噜噜噜私人影院在线播放 | 亚洲第一成年网站视频| 色一情一乱一伦一区二区三区| 麻豆产精品一二三产区区| 娇喘高潮教室h| 国产中文视频| 国产精品嫩草影视在线观看| 哒哒哒高清视频在线观看| 97在线超碰免费视频| 在线日韩欧美一区二区三区| 亚洲激情一区| 性生交片免费无码看人| 帅哥男男GV在线1080P| 日韩欧美精品有码在线播放免费 | 精品水蜜桃久久久久久久| 国产乱人偷精品视频A人人澡| 高中生被C到爽哭视频免费| 纯肉高H啪短文合集| 被黑人掹躁10次高潮| my pico未删减在线观看| 99久久99| qq快播电影网| 啊轻点灬大JI巴又大又粗| yellow在线观看免费观看大全 | 99久热精品免费观看|