最近越来越多的人开始关注车联网安全(可能是传统安全实在太卷),在各种会议中也能看到不少车联网安全相关的议题。其中很重要的一部分就是车载通信安全,而在各种车载通信协议中,使用的最多的就是CAN总线,本章介绍CAN模拟器ICSim的安装和使用。
控制器局域网总线(CAN,Controller Area Network)是一种用于实时应用的串行通讯协议总线,它可以使用双绞线来传输信号,是世界上应用最广泛的现场总线之一。CAN协议用于汽车中各种不同元件之间的通信,以此取代昂贵而笨重的配电线束。该协议的健壮性使其用途延伸到其他自动化和工业应用。CAN协议的特性包括完整性的串行数据通讯、提供实时支持、传输速率高达1Mb/s、同时具有11位的寻址以及检错能力。
说的简单一些就是车上很多模块之间通过CAN总线连接,通过这些CAN总线,可以在汽车的各个ECU之间传递数据,比如当我们解锁车辆时,BCM(车身控制模块)收到解锁信号就会向CAN总线上发送解锁报文以解锁车辆,打开车门;我们打开车门后,对应的ECU也会向总线上发送车门的状态,告诉总线上的其他ECU,车门被打开了。
# 安装依赖
sudo apt-get install libsdl2-dev libsdl2-image-dev can-utils
# 下载ICSim
git clone https://github.com/zombieCraig/ICSim.git
# 编译
cd ICSim
sudo make
can-utils是一款基于SocketCAN(Linux CAN协议栈)实现的工具集
启动仪表盘模拟器
./icsim vcan0
启动仪表盘控制器
./controls vcan0
仪表盘控制器,操作说明
功能 | 按键 |
转向 | 键盘左右 |
速度 | 键盘上下 |
开/关左前车门 | 右shift/左shit+A |
开/关右前车门 | 右shift/左shit+B |
开/关左后车门 | 右shift/左shit+X |
开/关右后车门 | 右shift/左shit+Y |
开启全部车门 | 左shift+右shift |
关闭全部车门 | 右shift+左shift |
通过操作键盘,我们可以看到仪表盘模拟器随着我们的控制变化
使用candump命令抓取CAN报文,第一列是CAN通道,第二列是CAN ID,第三列是报文长度,最后面是CAN报文,最长不超过8个字节(CANFD最长64个字节)
编辑
加上-l参数,会把抓到的CAN报文保存到log文件中
使用canplayer命令重放抓到的文件
重放我们之前抓到的包含打开所有车门报文的文件,可以看到仪表盘模拟器显示车门全部打开了
在接下来的文章中会更详细的介绍CAN总线相关的知识,以及基于CAN实现的UDS、XCP等协议的安全测试。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。