工具推荐: 汽车CAN总线分析框架CANToolz
aka YACHT (又一个汽车黑客工具)
CANToolz 是一个分析控制局域网络CAN(Controller Area Network) 和设备的框架。该工具基于不同的模块组装在一起,可以被安全研究人员和 汽车业/OEM 的安全测试人员使用进行黑盒分析等,你可以使用本软件发现电子控制单元ECU,中间人攻击测试,模糊测试,暴力破解,扫描或 R&D测试和验证。
该平台试图将所有需要的 技巧/工具 和其他你可以对CAN总线做的事情结合在一起。我发现,有许多可用的工具,从 Charlie Miller 和 Chris Valasek 工具 到Craig Smith 开发的 UDS/CAN。
它们都有很出色并且有效,但它们仍然很难在每一天的工作中使用(至少对我来说),并且你需要 修改/编写 代码才能得到你想要的东西(MITM,有逻辑的扫描仪)。
如果有更多的人可以提供模块,这会使其更有价值。它提供了一个简单的方法来添加模块并根据你的需要使用“扩展”版本(比如选择ECU自定义暴力破解等)。没有任何其他目的,这里仅仅想推荐给大家一个好的工具被更多的人使用。
还有一点:这是基于模块的引擎,所以你可以使用它作为您的测试过程的一部分,或者当你需要和CAN总线工作时,添加更复杂的 场景/软件。
“我不明白为什么大家始终在发布新的“汽车黑客工具”。我和 @nudehaberdasher 在 2013 年发布的工具仍然运作的很好。” (c) Charlie Miller (@0xcharlie)
使用硬件
CANToolz 可以利用以下硬件与 CAN 网络协同工作:
- USBtin
- CANBus Triple
依赖项
python 3.4
pip install pyserial
pip install numpy
for MIDI_to_CAN
pip install mido
安装
python setup.py install
快速启动
sudo python cantoolz.py -g w -c examples/can_sniff.py
然后在浏览器中访问 http://localhost:4444
模块
- hw_CANBusTriple - CANBus Triple HW 的 IO 模块
- hw_USBtin - USBtin 的 IO 模块
- mod_firewall - 通过 ID 阻塞 CAN 报文模块
- mod_fuzz1 - 简单‘代理’模糊(1字节)可以与 gen_ping/gen_replay结合使用
- mod_printMessage - 打印 CAN 报文
- mod_stat - CAN 报文统计 (使用 .csv 文件 输出)分析选项(c mod_stat a)试图找到 UDS/ISO TP 报文
- gen_ping - 使用选择 IDs (ECU/Service discovery) 生成 CAN 报文
- gen_replay - 保存重发数据包
附言:我们致力于支持其他类型的I/O硬件和模块。欢迎加入我们!主要想法是希望产生不同的模块对以上8个模块提供帮助。
监看和UDS检测实例,如下图所示:
Python 2.7最终稳定版本: https://github.com/eik00d/CANToolz/tree/Python_2.7_last_release
使用示例
在示例文件夹中可以查看更多的用例:
- CAN 开关过滤器扫描检测哪个 CAN 帧可以通过诊断接口到 HU 并返回
- 中间人与防火墙 (ECU ID 检测),检测哪些包对应选定的“行为”
- 重放发现,检测哪些包对应选定的“行为”
- Ping 发现( 使用 ISO TP 和 UDS 支持), 检测 UDS 等
有许多其他可能的选择,你只要根据需要选择模块。例如 使用 DIFF 模式,找到开锁命令。
备注:目前的版本是 uber-beta。缺乏充分的测试,代码不够整洁和美观,可能还有一些尚未发现的 bug。很抱歉,有很多不需要的 IF,糟糕的代码,奇怪的 RPINTs 等,请随意修正或直接忽略。
*原文:CANToolz,小番番编译,转自须注明来自FreeBuf黑客与极客(FreeBuf.COM)
- 干货|用python抓取摩拜单车API数据并做可视化分析(源码)
- 干货|机器学习:Python实现聚类算法之K-Means
- 美团点餐—listview内部按钮点击事件
- C4C和CRM里获取当前登录用户分配的Organization Unit信息
- 使用Excel调用ABAP系统的函数
- 如何计算并测量ABAP及Java代码的环复杂度Cyclomatic complexity
- 漫谈版本控制系统
- 带你零基础入门express
- 动态控制C4C UI元素的显示和隐藏
- 深度学习(deep learning)发展史
- 遗传算法简述
- Spark详解03Job 物理执行图Job 物理执行图
- 干货|Kotlin入门第一课:从对比Java开始
- Spark详解04Shuffle 过程Shuffle 过程
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 数据库技术:JDBC,预处理对象,事务控制
- elasticsearch-DSL高级查询语法
- 数据库技术:XML
- 利用logstash将mysql多表数据增量同步到es
- 纯CSS实现自定义单选框和复选框
- 基于Linux安装Mysql5.7
- 纯CSS实现iOS风格打开关闭选择框
- 算法基础:递归
- ELK日志收集原理+es集群+elk搭建+本地目录文件读取,搭建分布式日志收集系统
- 什么是JavaScript 的闭包???
- es集群+elk搭建+kafka搭建分布式日志收集系统
- 设计模式(2)[JS版]---JavaScript如何实现单例模式?
- 算法基础:分治
- 黑客帝国中代码雨如何实现?用 canvas 轻松实现代码雨炫酷效果!
- 设计模式(3)[JS版]-JavaScript中的构造函数模式是什么?