CAN模拟环境搭建到重放攻击

汽车安全 2年前 (2023) admin
548 0 0

环境搭建

  • ICSim(仪表盘模拟器)
  • Socketcand(CAN网络)
  • Kayak(一款基于SocketCAN的CAN总线分析工具)

ICSim安装

  1. # 安装依赖
  2. sudo apt install libsdl2-dev libsdl2-image-dev can-utils maven autoconf -y
  3. # 下载ICSim
  4. git clone https://github.com/zombieCraig/ICSim.git
  5. # 编译安装
  6. cd ICSim/
  7. sudo make
CAN模拟环境搭建到重放攻击

socketcand安装

  1. # 下载socketcand
  2. git clone https://github.com/linux-can/socketcand.git
  3. cd socketcand# 获取缺少的文件
  4. wget https://raw.githubusercontent.com/dschanoeh/socketcand/master/config.h.in# 编译安装
  5. autoconf
  6. ./configure
  7. make clean
  8. make
  9. sudo make install
CAN模拟环境搭建到重放攻击

Kayak安装

  1. # 下载
  2. git clone https://github.com/dschanoeh/Kayak.git
  3. # 安装jdk
  4. sudo apt-get install openjdk-8-jdk
  5. # 安装
  6. cd Kayak
  7. mvn clean package
CAN模拟环境搭建到重放攻击

Kayak安装时间会很久,等待许久之后,终于安装成功:

CAN模拟环境搭建到重放攻击

启动模拟器

  1. # 设置vcan(虚拟CAN)接口
  2. sudo modprobe can
  3. sudo modprobe vcan
  4. # ip link 命令启动 can 接口
  5. sudo ip link add dev vcan0 type vcan
  6. sudo ip link set up vcan0
CAN模拟环境搭建到重放攻击
  1. cd Icsim/
  2. # 打开仪表盘模拟器
  3. ./icsim vcan0
  4. # 打开仪表盘控制器
  5. ./controls vcan0
CAN模拟环境搭建到重放攻击

光标放在控制器界面上,就可以对模拟器进行操作:

功能 控制按钮
转向 键盘左右
速度 键盘上下
开/关左前车门 右shift/左shit+A
开/关右前车门 右shift/左shit+B
开/关左后车门 右shift/左shit+X
开/关右后车门 右shift/左shit+Y
开启全部车门 左shift+右shift
关闭全部车门 右shift+左shift

canplayer重放攻击

原理就是利用candump监听模拟器操作的数据包,再利用canplayer集合数据包重新回放一遍监听到的操作。

首先candump vcan0 -l开启监听:

  1. root@ubuntu:~# candump vcan0 -l
  2. Disabled standard output while logging.
  3. Enabling Logfile 'candump-2023-03-20_135818.log'

candump运行之后一直监听数据。

这时在模拟器模拟操作右Shift+A开启左前侧车门:

CAN模拟环境搭建到重放攻击

然后终端退出candump监听,查看candump-2023-03-20_135818.log,会发现有很多数据:

CAN模拟环境搭建到重放攻击

将车门闭合后,运行canplayer -I candump-2023-03-20_135818.log,观察模拟器状态,会发现模拟器自动将车门开启:

CAN模拟环境搭建到重放攻击

接着使用二分法对数据包进行分析,找出具体哪个包可以使车门打开:

  1. # 读取test.log文件行数
  2. with open('candump.log', 'r') as f:
  3. lines = f.readlines()
  4. num_lines = len(lines)
  5. # 使用二分法将内容分别输出到两个新文件
  6. midpoint = num_lines // 2
  7. with open('file1.log', 'w') as f1, open('file2.log', 'w') as f2:
  8. for i, line in enumerate(lines):
  9. if i < midpoint:
  10. f1.write(line)
  11. else:
  12. f2.write(line)

二分法就是将数据分成两半,分别对数据进行测试,然后对模拟器有反应的一半再继续进行分裂,循环往复。

最终能确定使车门打开的数据包为:(1679293970.363015) vcan0 19B#00000E000000
CAN模拟环境搭建到重放攻击

参考

 

 

 

原文始发于IOTsec-Zone(zebra):CAN模拟环境搭建到重放攻击

版权声明:admin 发表于 2023年4月1日 下午2:46。
转载请注明:CAN模拟环境搭建到重放攻击 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...