点击上方蓝字谈思实验室
获取更多汽车网络安全资讯
关于Caring Caribou
Caring Caribou是一个友好的汽车安全探索工具。该项目最初作为HEAVENS(HEAling Vulnerabilities to ENhance Software Security and Safety)研究项目的一部分启动,但现在已经成为一个独立的项目。这是一个汽车安全测试工具,这是一个零知识工具,可以放置在任何CAN网络上,并收集有关存在的服务和漏洞的信息。
特点和架构
Caring Caribou基于主要入口点cc.py,它运行整个程序。这使得为新模块创建一个容易插入的架构成为可能,这些模块位于caringcaribou/modules文件夹中。caringcaribou/utils文件夹包含各种高级CAN协议实现和共享函数,用于模块的使用。
caringcaribou/tests文件夹包含自动化测试套件,/documentation存储文档文件(模块也在这里有文档)。
模块列表
Caring Caribou包括以下模块:
uds - 通用诊断服务
xcp - 通用测量和校准协议(XCP)
fuzzer - CAN模糊器
dump - 转储CAN流量
send - 发送CAN数据包
listener - 监听器
test - 运行测试套件
dcm - [已弃用]诊断控制模块
uds_fuzz - 通用诊断服务模糊器
doip - 互联网协议上的诊断通信
库/工具列表
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)。这是一种传输协议,可以通过将消息拆分成多个数据帧来实现超过8字节的消息在CAN上的发送。
硬件要求
需要某种CAN总线接口(http://elinux.org/CAN_Bus#CAN_Support_in_Linux)。
软件要求
Python 2.7或3.x
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
验证模块是否可用,应该在cc.py -h的输出中列出。
如果您的新模块位于caringcaribou/modules/foo.py,您可以使用命令cc.py foo
运行它。额外的参数(如果有的话)将作为参数传递给module_main函数。
工具安装
安装工具:
python setup.py install
工具使用
1.help
cc.py -h
查看帮助文档
cc.py [moudle] -h
查看对应moudle的帮助信息
2.UDS模块
2.1 UDS discovery
UDS服务扫描cc.py -i vcan0 uds discovery
2.2 UDS dump_did
发送数据包爆破地址读取did
cc.py -i vcan0 uds dump_dids min_did max_did
2.3 UDS services
探测支持的服务ID
cc.py uds services src dst
src arbitration ID to transmit to
dst arbitration ID to listen to
2.4 UDS subservices
探测支持的子服务ID
cc.py uds subservices [-h] [-t T] dtype stype src dst
positional arguments:
dtype Diagnostic Session Control Subsession Byte
stype Service ID
src arbitration ID to transmit to
dst arbitration ID to listen to
2.5 uds ecu_reset
发送重置ecu请求 0x11
cc.py uds ecu_reset [-t T] type src dst
type Reset type: 1=hard, 2=key off/on, 3=soft, 4=enable rapid
power shutdown, 5=disable rapid power shutdown
src arbitration ID to transmit to
dst arbitration ID to listen to
2.6 uds testerpresent
持续发送0x3e服务请求使服务端不要切换状态
cc.py uds testerpresent src
src arbitration ID to transmit to
-d D, --delay D send TesterPresent every D seconds (default: 0.5)
-dur S, --duration S automatically stop after S seconds
-spr suppress positive response
2.7 uds security_seed
对应0x27服务
cc.py uds security_seed [-h] [-r RTYPE] [-d D] [-n NUM] stype level src dst
stype Session Type: 1=defaultSession 2=programmingSession
3=extendedSession 4=safetySession [0x40-0x5F]=OEM
[0x60-0x7E]=Supplier [0x0, 0x5-0x3F,
0x7F]=ISOSAEReserved
level Security level: [0x1-0x41 (odd only)]=OEM
0x5F=EOLPyrotechnics [0x61-0x7E]=Supplier [0x0,
0x43-0x5E, 0x7F]=ISOSAEReserved
src arbitration ID to transmit to
dst arbitration ID to listen to
2.8 uds auto
顺序运行 uds
3.1 send message
发送can数据包
cc.py send message 0x7a0#c0.ff.ee.00.11.22.33.44
cc.py send message -d 0.5 123#de.ad.be.ef 124#01.23.45
cc.py send message -p 0x100#11 0x100#22.33
3.2 send file
cc.py send file path
4.linstener模块
创建一个lisener监听,接收数据
5.dump模块
转存can流量,类似candump
6.fuzz模块
6.1 random
随机发送数据包
6.2 brute
暴力破解
cc.py fuzzer brute 0x77a 1234.678
cc.py fuzzer brute [-h] [-file FILE] [-responses] [-index I] [-delay D]
arb_id data
arb_id 仲裁 ID
data 数据
data格式: "."标记需要爆破的数字,如1234.678,结果如下
6.3 mutate
6.4 replay
数据重放
cc.py fuzzer replay filename
filename input directive file to replay
6.5 identify
分段重放并得到导致特定事件的报文
1.1 candump抓取数据包并输出为日志
candump can0 -l
1.2 将日志格式进行整理
cat candump.log | awk '{print $3}' > res.txt
1.3 使用该模块分段重放数据包
cc.py fuzzer identify res.txt
1.4 根据汽车是否出现对应反应选择y/n
1.5 获取对应数据包
许可证协议
本项目的开发与发布遵循MIT开源许可证协议。
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...