车联网安全入门一:了解CAN总线及环境模拟
字数 1808 2025-08-22 12:23:13

车联网安全入门:CAN总线及环境模拟教学文档

1. CAN总线基础知识

1.1 CAN总线概述

CAN(Controller Area Network)是一种广泛应用于汽车电子系统的总线标准,具有以下特点:

  • 拓扑结构:分为高速CAN总线(用于发动机控制、传感器数据传输、车载娱乐系统等)和低速CAN总线(用于车窗控制、座椅控制、空调控制等)
  • 轻量低成本:提供廉价、耐用的网络,ECU只需单个CAN接口而非多个输入接口
  • 广播通信:所有设备都能看到所有传输消息,可决定是否过滤
  • 优先级机制:消息有优先级,高优先级消息可优先传输
  • 纠错能力:包含CRC校验,可检测并处理错误

1.2 CAN协议帧结构

CAN总线报文类型主要有五种:

  1. 数据帧
  2. 远程帧
  3. 错误帧
  4. 过载帧
  5. 帧间隔

数据帧结构包含七个段:

  1. 帧起始
  2. 仲裁段
  3. 控制段
  4. 数据段
  5. CRC段
  6. ACK段
  7. 帧结束

1.3 CAN工作原理

  • 点对点网络:无主设备控制,节点自行决定读写时机
  • 仲裁机制:当总线空闲时,节点可传输CAN帧
  • 无地址概念:使用仲裁ID标记帧,所有节点接收后决定是否接受
  • 优先级仲裁:多个节点同时传输时,最高优先级(最低仲裁ID)的节点获得总线访问权

2. CAN环境模拟工具

2.1 ICSim仪表盘模拟器

ICSim是一个汽车网络模拟器,包含:

  • 车速表
  • 门锁指示灯
  • 转向信号灯
  • 控制面板

安装与使用

  1. 安装依赖库(包括can-utils)
  2. 使用sudo make编译(替代Meson)
  3. 初始化:./setup_vcan.sh
  4. 启动模拟器:./icsim vcan0
  5. 启动控制器:./controls vcan0

2.2 can-utils工具集

Linux下CAN调试工具,主要功能:

工具 功能
candump 显示、过滤CAN数据并记录到文件
canplayer 重放CAN日志文件
cansend 发送单帧
cangen 生成随机CAN流量
cansequence 发送并检查递增有效负载的CAN帧序列
cansniffer 显示CAN数据内容差异

使用方法

  • 抓包:candump -l vcan0
  • 报文分析:输出格式为时间戳 接口 报文内容#号分割ID和Data字段
  • 功能帧定位:使用二分法结合canplayer重放定位关键帧

2.3 SavvyCAN分析工具

基于Qt5的跨平台CAN总线分析工具,功能包括:

  • 加载、保存和捕获canbus帧
  • 可视化、逆向工程和调试
  • CAN帧模糊测试

安装注意事项

  1. 注意Qt版本要求
  2. 安装时确保包含所有必要库
  3. 解决qmake缺少库的问题

使用方法

  1. 启动:./savvyCAN
  2. 连接vcan0:
    • 点击"Connection" → "open Connection Window"
    • 添加新连接
  3. 模糊测试:
    • 打开"RE Tools" → "fuzz Windows"
    • 选择要模糊测试的位和字节
    • 点击"start fuzzing"观察ICSim仪表变化

3. 实践操作指南

3.1 基础环境搭建

  1. 安装Ubuntu虚拟机
  2. 安装ICSim和can-utils
  3. 安装SavvyCAN及其依赖

3.2 CAN通信分析流程

  1. 初始化vcan接口:./setup_vcan.sh
  2. 启动ICSim模拟器:./icsim vcan0
  3. 启动控制器:./controls vcan0
  4. 使用candump捕获通信数据
  5. 使用SavvyCAN进行高级分析

3.3 功能帧逆向工程

  1. 使用candump记录所有通信
  2. 通过二分法缩小关键帧范围
    • 将dump文件分为两部分
    • 使用canplayer重放测试
    • 确定包含关键帧的部分
    • 重复二分过程直至定位单个帧
  3. 使用cansend发送单帧验证功能

3.4 模糊测试方法

  1. 在SavvyCAN中打开模糊测试窗口
  2. 选择要测试的字节范围
  3. 启动模糊测试观察系统反应
  4. 记录异常行为对应的报文

4. 参考资料

  1. Car Hacking 101: Practical Guide to Exploiting CAN Bus using Instrument Cluster Simulator
  2. CAN 2.0规范文档
  3. ICSim和SavvyCAN官方文档
车联网安全入门:CAN总线及环境模拟教学文档 1. CAN总线基础知识 1.1 CAN总线概述 CAN(Controller Area Network)是一种广泛应用于汽车电子系统的总线标准,具有以下特点: 拓扑结构 :分为高速CAN总线(用于发动机控制、传感器数据传输、车载娱乐系统等)和低速CAN总线(用于车窗控制、座椅控制、空调控制等) 轻量低成本 :提供廉价、耐用的网络,ECU只需单个CAN接口而非多个输入接口 广播通信 :所有设备都能看到所有传输消息,可决定是否过滤 优先级机制 :消息有优先级,高优先级消息可优先传输 纠错能力 :包含CRC校验,可检测并处理错误 1.2 CAN协议帧结构 CAN总线报文类型主要有五种: 数据帧 远程帧 错误帧 过载帧 帧间隔 数据帧结构 包含七个段: 帧起始 仲裁段 控制段 数据段 CRC段 ACK段 帧结束 1.3 CAN工作原理 点对点网络 :无主设备控制,节点自行决定读写时机 仲裁机制 :当总线空闲时,节点可传输CAN帧 无地址概念 :使用仲裁ID标记帧,所有节点接收后决定是否接受 优先级仲裁 :多个节点同时传输时,最高优先级(最低仲裁ID)的节点获得总线访问权 2. CAN环境模拟工具 2.1 ICSim仪表盘模拟器 ICSim是一个汽车网络模拟器,包含: 车速表 门锁指示灯 转向信号灯 控制面板 安装与使用 : 安装依赖库(包括can-utils) 使用 sudo make 编译(替代Meson) 初始化: ./setup_vcan.sh 启动模拟器: ./icsim vcan0 启动控制器: ./controls vcan0 2.2 can-utils工具集 Linux下CAN调试工具,主要功能: | 工具 | 功能 | |------|------| | candump | 显示、过滤CAN数据并记录到文件 | | canplayer | 重放CAN日志文件 | | cansend | 发送单帧 | | cangen | 生成随机CAN流量 | | cansequence | 发送并检查递增有效负载的CAN帧序列 | | cansniffer | 显示CAN数据内容差异 | 使用方法 : 抓包: candump -l vcan0 报文分析:输出格式为 时间戳 接口 报文内容 , # 号分割ID和Data字段 功能帧定位:使用二分法结合canplayer重放定位关键帧 2.3 SavvyCAN分析工具 基于Qt5的跨平台CAN总线分析工具,功能包括: 加载、保存和捕获canbus帧 可视化、逆向工程和调试 CAN帧模糊测试 安装注意事项 : 注意Qt版本要求 安装时确保包含所有必要库 解决qmake缺少库的问题 使用方法 : 启动: ./savvyCAN 连接vcan0: 点击"Connection" → "open Connection Window" 添加新连接 模糊测试: 打开"RE Tools" → "fuzz Windows" 选择要模糊测试的位和字节 点击"start fuzzing"观察ICSim仪表变化 3. 实践操作指南 3.1 基础环境搭建 安装Ubuntu虚拟机 安装ICSim和can-utils 安装SavvyCAN及其依赖 3.2 CAN通信分析流程 初始化vcan接口: ./setup_vcan.sh 启动ICSim模拟器: ./icsim vcan0 启动控制器: ./controls vcan0 使用candump捕获通信数据 使用SavvyCAN进行高级分析 3.3 功能帧逆向工程 使用candump记录所有通信 通过二分法缩小关键帧范围 将dump文件分为两部分 使用canplayer重放测试 确定包含关键帧的部分 重复二分过程直至定位单个帧 使用cansend发送单帧验证功能 3.4 模糊测试方法 在SavvyCAN中打开模糊测试窗口 选择要测试的字节范围 启动模糊测试观察系统反应 记录异常行为对应的报文 4. 参考资料 Car Hacking 101: Practical Guide to Exploiting CAN Bus using Instrument Cluster Simulator CAN 2.0规范文档 ICSim和SavvyCAN官方文档