CaringCaribou/caringcaribou
GitHub: CaringCaribou/caringcaribou
一款用于汽车 CAN 总线安全探索的工具,支持对 ECU 诊断协议进行扫描、模糊测试和漏洞分析。
Stars: 921 | Forks: 224
# Caring Caribou
一个友好的汽车安全探索工具。
## 动机
这项工作最初是作为研究项目 HEAVENS(HEAling Vulnerabilities to ENhance Software Security and Safety,修复漏洞以增强软件安全性和安全性)的一部分启动的,但现在作为一个独立项目继续存在。
我们缺乏用于汽车领域的安全测试工具;一个零知识工具,可以接入任何 CAN 网络并收集有关存在哪些服务和漏洞的信息。本项目正是为此迈出的第一步。
## 文档
- [如何安装](documentation/howtoinstall.md)
- [如何使用](documentation/howtouse.md)
- [疑难解答](documentation/troubleshooting.md)、常见错误及解决方案
## 快速入门
安装工具:
```
python setup.py install
```
了解如何使用 Caring Caribou 的最佳方式是查看帮助屏幕:
```
caringcaribou --help
```
这将在输出的底部列出所有可用的模块。特定模块的帮助工作方式相同。例如,通过运行以下命令可以显示 `send` 模块的帮助屏幕:
```
caringcaribou send --help
```
模块帮助始终包含一些用法示例。如果该模块具有多个子功能,它们也会有类似的帮助屏幕:
```
caringcaribou send message -h
caringcaribou send file -h
```
更详细的用法信息可在[用法文档](documentation/howtouse.md)中找到。
## 功能与架构
Caring Caribou 以 `caringcaribou.py` 中的主入口点为核心来运行整体程序。这为新模块实现了一种简单的插入式架构,这些模块位于 `caringcaribou/modules` 文件夹中。
`caringcaribou/utils` 文件夹包含各种更高层级的 CAN 协议实现和共享函数,供模块使用。
`caringcaribou/tests` 文件夹包含自动化测试套件,而 `/documentation` 用于存储文档文件(模块也在此处进行记录)。
## 模块列表
全新安装的 Caring Caribou 包含以下模块:
### dump - 转储 CAN 流量
将传入的流量转储到 stdout(终端输出)或文件
详情请见:[dump 模块](documentation/dump.md)
### send - 发送 CAN 数据包
原始消息发送模块,用于从命令行手动发送消息或重放转储文件
详情请见:[send 模块](documentation/send.md)
### listener - 监听器
列出 CAN 总线上正在使用的所有不同仲裁 ID
详情请见:[listener 模块](documentation/listener.md)
### fuzzer - CAN 模糊测试器
- random - 发送随机 CAN 消息
- brute - 对匹配给定位掩码的所有可能消息进行暴力破解
- mutate - 变异给定消息中选定的半字节
- replay - 重放先前模糊测试会话的日志文件
- identify - 重放日志文件并识别导致特定事件的消息
详情请见:[fuzzer 模块](documentation/fuzzer.md)
### uds - 通用诊断服务
发现并使用各种 ISO 14229-1 服务。
- discovery - 扫描支持诊断服务的 ECU
- services - 扫描 ECU 支持的诊断服务
- subservices - 对 ECU 支持的诊断服务进行子服务枚举
- ecu_reset - 重置 ECU
- testerpresent - 强制针对 ECU 建立的高权限会话保持活动状态
- security_seed - 一种自动化方式,用于在特定诊断会话中收集特定安全访问级别的种子
- dump_dids - 转储动态数据标识符 (DID) 的值
- read_mem - 从 ECU 读取内存
- auto - 通过使用现有的 UDS 子模块进行完全自动化的诊断扫描
详情请见:[uds 模块](documentation/uds.md)
### uds_fuzz - 通用诊断服务模糊测试器
用于 UDS 安全种子随机性评估和测试的模糊测试模块。
- seed_randomness_fuzzer - 对 ECUReset 方法进行模糊测试以评估种子随机性
- delay_fuzzer - 对实现了弱随机性的目标进行延迟模糊测试,以将获取的种子/密钥对与请求种子的延迟时间相匹配
详情请见:[uds_fuzz 模块](documentation/uds_fuzz.md)
### doip - 互联网协议诊断通信
发现并使用各种 ISO 13400-2 服务。
- discovery - 扫描支持诊断服务的 ECU
- services - 扫描 ECU 支持的诊断服务
- ecu_reset - 重置 ECU
- security_seed - 向 ECU 请求安全种子
- testerpresent - 强制针对 ECU 建立的高权限会话保持活动状态
- dump_dids - 转储动态数据标识符 (DID) 的值
- seed_randomness_fuzzer - 对 ECUReset 方法进行模糊测试以评估种子随机性
详情请见:[doip 模块](documentation/doip.md)
### xcp - 通用测量与校准协议 (XCP)
- discovery - 扫描支持 XCP 的 ECU
- info - XCP 获取基本信息。检索有关 ECU 的 XCP 功能的信息
- dump - XCP 上传。用于将 ECU 内存(如 SRAM、flash 和 bootloader)转储到文件中
详情请见:[xcp 模块](documentation/xcp.md)
### dcm - [已弃用] 诊断控制模块
**注意**:此模块已被 [UDS](documentation/uds.md) 模块取代。由于遗留原因,CC 仍然支持它。
详情请见:[dcm 模块](documentation/dcm.md)
### test - 运行测试套件
运行自动化的 Caring Caribou 测试套件
## 库/实用程序列表
`caringcaribou/utils` 文件夹包含以下内容:
### can_actions.py
提供对 CAN 总线访问、暴力测试引擎等的抽象。
### common.py
包含各种通用函数、类型转换器等。
### constants.py
常量定义
### iso14229_1.py
统一诊断服务 (UDS) 的 ISO-14229-1 标准实现。
### iso15765_2.py
ISO-15765-2 标准 (ISO-TP) 的实现。这是一种传输协议,通过将长消息拆分为多个数据帧,允许通过 CAN 发送超过 8 字节的消息。
## 硬件要求
某种 CAN 总线接口 (http://elinux.org/CAN_Bus#CAN_Support_in_Linux)
## 软件要求
- Python 3.7 或更高版本
- python-can
- 相对较新的 linux 内核
## 使用新模块扩展项目
- 新模块的模板可在 `caringcaribou/modules/module_template.py` 中找到
- 在 `caringcaribou/modules` 目录中创建一个包含 `module_main(args)` 函数的 Python 文件(或直接复制模板)。
- 在 `setup.py` 中,在 `caringcaribou.modules` 下添加一个条目,引用您的新模块,例如:`my_module = caringcaribou.modules.my_module`
- 运行 `python setup.py install`
- 验证该模块是否可用,它应该被列在 `caringcaribou -h` 的输出中
如果您的新模块位于 `caringcaribou/modules/foo.py`,您可以使用命令 `caringcaribou foo` 来运行它。
附加参数(如果有)将作为参数传递给 `module_main` 函数。
## 测试目标
用于开发设置的测试目标 ECU 是 ArcCore 推出的基于 STM32F107 的开发板 Arctic EVK-M3,但该工具可用于任何通过 CAN 总线通信的 ECU。
## 贡献者
* [HEAVENS](https://www.vinnova.se/en/p/heavens-healing-vulnerabilities-to-enhance-software-security-and-safety/) 项目,由 VINNOVA 资助
* Christian Sandberg
* Kasper Karlsson
* Tobias Lans
* Mattias Jidhage
* Johannes Weschke
* Filip Hesslund
* Craig Smith (OpenGarages.org)
* internot
* Roos Hubrechtsen
* Lear Corporation
* sigttou
* FearfulSpoon
* Alex DeTrano
* Thomas Sermpinis
* Alexander Alasjö
* Vincent de Chefdebien
标签:CAN总线, Python, 安全测试, 攻击性安全, 无后门, 汽车安全, 逆向工具