车联网安全入门一:了解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总线报文类型主要有五种:
- 数据帧
- 远程帧
- 错误帧
- 过载帧
- 帧间隔
数据帧结构包含七个段:
- 帧起始
- 仲裁段
- 控制段
- 数据段
- 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官方文档