车联网安全入门之从CAN模拟环境搭建到重放攻击
字数 1832 2025-08-11 08:35:50

车联网安全入门:从CAN模拟环境搭建到重放攻击

1. CAN总线基础

1.1 CAN总线简介

  • 全称:Controller Area Network(控制器局域网)
  • 应用:主要用于汽车内部不同元件间的通信,取代传统配电线束
  • 特点
    • 串行通讯协议总线
    • 使用双绞线传输信号
    • 世界上应用最广泛的现场总线之一
    • 自1991年起成为汽车标配

1.2 CAN总线特性

  • 安全性
    • 低级协议,无内置安全功能
    • 无加密机制,网络数据可被截取
    • 安全关键功能(如ABS控制)可能使用有限数量的密钥对
  • 通信机制:多主机架构,每个节点都可接入总线
  • 寻址机制:通过消息标志符区分消息,而非节点地址
  • 帧类型
    • 数据帧
    • 远程帧
    • 错误帧
    • 超载帧
    • 帧间隔

2. CAN总线攻击方式

  • 应用报文模糊攻击
  • DOS攻击测试
  • 重放攻击(本文重点)

3. 实验环境搭建

3.1 系统要求

  • Ubuntu 16.04

3.2 工具安装

3.2.1 安装依赖

sudo apt install libsdl2-dev libsdl2-image-dev can-utils maven autoconf -y

3.2.2 安装ICSim(仪表盘模拟器)

git clone https://github.com/zombieCraig/ICSim.git
cd ICSim/
sudo make

3.2.3 安装socketcand(CAN网络)

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

3.2.4 安装Kayak(CAN总线分析工具)

git clone https://github.com/dschanoeh/Kayak.git
sudo apt-get install openjdk-8-jdk
cd Kayak
mvn clean package

3.3 启动模拟环境

3.3.1 设置虚拟CAN接口

sudo modprobe can
sudo modprobe vcan
sudo ip link add dev vcan0 type vcan
sudo ip link set up vcan0

3.3.2 启动仪表盘模拟器

./icsim vcan0

3.3.3 启动仪表盘控制器

./controls vcan0

3.4 控制器操作说明

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

4. CAN数据抓取与分析

4.1 抓取CAN数据包

candump vcan0 -l

4.2 重放攻击演示

  1. 抓取数据包后,使用canplayer重放
  2. 观察车门状态变化

5. 车门控制报文分析

5.1 关键报文识别

  • 开启左前侧车门:19B#00000E000000
  • 关闭所有车门:19B#00000F000000

5.2 报文分解与解析

将十六进制转换为二进制,分析车门控制位:

二进制 十六进制 车门控制
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 关闭组合

5.3 转向控制报文

  • 左转向:188#01000000
  • 右转向:188#02000000

6. 安全建议

  1. 实施消息认证机制
  2. 对关键控制指令进行加密
  3. 部署入侵检测系统监控CAN总线异常
  4. 限制关键ECU的访问权限

7. 参考资源

车联网安全入门:从CAN模拟环境搭建到重放攻击 1. CAN总线基础 1.1 CAN总线简介 全称 :Controller Area Network(控制器局域网) 应用 :主要用于汽车内部不同元件间的通信,取代传统配电线束 特点 : 串行通讯协议总线 使用双绞线传输信号 世界上应用最广泛的现场总线之一 自1991年起成为汽车标配 1.2 CAN总线特性 安全性 : 低级协议,无内置安全功能 无加密机制,网络数据可被截取 安全关键功能(如ABS控制)可能使用有限数量的密钥对 通信机制 :多主机架构,每个节点都可接入总线 寻址机制 :通过消息标志符区分消息,而非节点地址 帧类型 : 数据帧 远程帧 错误帧 超载帧 帧间隔 2. CAN总线攻击方式 应用报文模糊攻击 DOS攻击测试 重放攻击(本文重点) 3. 实验环境搭建 3.1 系统要求 Ubuntu 16.04 3.2 工具安装 3.2.1 安装依赖 3.2.2 安装ICSim(仪表盘模拟器) 3.2.3 安装socketcand(CAN网络) 3.2.4 安装Kayak(CAN总线分析工具) 3.3 启动模拟环境 3.3.1 设置虚拟CAN接口 3.3.2 启动仪表盘模拟器 3.3.3 启动仪表盘控制器 3.4 控制器操作说明 | 功能 | 控制按钮 | |----------------|-------------------------| | 转向 | 键盘左右键 | | 速度 | 键盘上下键 | | 开/关左前车门 | 右shift/左shift + A | | 开/关右前车门 | 右shift/左shift + B | | 开/关左后车门 | 右shift/左shift + X | | 开/关右后车门 | 右shift/左shift + Y | | 开启全部车门 | 左shift + 右shift | | 关闭全部车门 | 右shift + 左shift | 4. CAN数据抓取与分析 4.1 抓取CAN数据包 4.2 重放攻击演示 抓取数据包后,使用 canplayer 重放 观察车门状态变化 5. 车门控制报文分析 5.1 关键报文识别 开启左前侧车门: 19B#00000E000000 关闭所有车门: 19B#00000F000000 5.2 报文分解与解析 将十六进制转换为二进制,分析车门控制位: | 二进制 | 十六进制 | 车门控制 | |--------|----------|----------| | 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 | 关闭组合 | 5.3 转向控制报文 左转向: 188#01000000 右转向: 188#02000000 6. 安全建议 实施消息认证机制 对关键控制指令进行加密 部署入侵检测系统监控CAN总线异常 限制关键ECU的访问权限 7. 参考资源 FreeBuf原文 IT学院文章 ICSim、socketcand、Kayak项目GitHub仓库