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, 安全测试, 攻击性安全, 无后门, 汽车安全, 逆向工具