OBD_Test_ToolKit — 车载 UDS / OBD-II 渗透测试工具箱:12 阶段覆盖 + 自动判定 HTML 报告(Web UI + TSMaster)

📅 2026/7/22 10:25:01 👁️ 阅读次数 📝 编程学习
OBD_Test_ToolKit — 车载 UDS / OBD-II 渗透测试工具箱:12 阶段覆盖 + 自动判定 HTML 报告(Web UI + TSMaster)

[AI 整理声明]本文基于作者的项目文档与开发实践,由 AI 辅助整理输出,核心内容与数据均来自作者本人。


目录

    • 设计取舍
    • 安装
    • 12 个阶段
    • 情报库
    • 报告
    • 红线
    • 注意

做车辆诊断安全评估的时候,测试流程往往是分散的——ECU 扫描用一个脚本,SecAccess 枚举用另一个,日志各存各的,最后拼报告又是一套工序。OBD_Test_ToolKit 是把这套流程系统化的工具箱:12 个渗透阶段对应 12 张 Web 页面,每阶段的输出以 JSON 落进"情报库",最终一键出可交付的 HTML 审计报告。

  • GitHub:https://github.com/cstriker1407/OBD_Test_ToolKit

设计取舍

Python 侧零总线 I/O——不依赖python-can,不开 PCAN / Vector / Kvaser 设备,不发一个 CAN 帧。总线 I/O 全部交给TSMaster IDE及其 C++ MiniProgram 完成:

Web UI (Flask) ↓ 生成 phase_inputs.h TSMaster MiniProgram (12 × .cpp) ↓ 输出 .blf + .txt 日志 Web UI ↓ 上传 .txt → 解析 → intel/*.json Verdict 引擎 + Jinja2 ↓ HTML 报告

好处:换硬件不改 Python 代码;日志文件本身是取证证据,随时可回放重新解析;误 kill Web 进程不会让攻击流量卡在总线上。

代价是需要一份TSMaster IDE(TOSUN 官方免费下载)作为运行时。


安装

gitclone https://github.com/cstriker1407/OBD_Test_ToolKit.gitcdOBD_Test_ToolKit python-mvenv .venv .venv\Scripts\activate# Windows# source .venv/bin/activate # Linux/macOSpipinstall-rrequirements.txt python web/app.py# http://localhost:8081

TSMaster 侧首次配置:

# 用 TSMaster IDE 打开tsmaster\.TSProj# 修改共享头后同步 12 个 .cpppython tsmaster\inline_common.py

新项目直接复制整个目录——intel/*.json是全部状态,天然是"项目文件夹"。


12 个阶段

首页 12 张阶段卡片,每张显示完成度与快捷入口:

阶段关键动作输出
01 接入与拓扑发现11-bit / 29-bit / J1939 全段 ECU 扫描ecus.json
02 协议合规性扫描OBD-II Mode 1-10 + UDS SID 全量探测sid_matrix.json
03 会话状态机分析Session 0x01-0x7F 枚举 + S3 timer 实测sessions.json
04 SecAccess 安全访问Level 枚举 / seed 熵分析 / lockout 检测secaccess.json
05 DID 读取防护广播 vs 直接寻址暴露面对比did_exposure.json
06 DID 写入防护Read-then-write-same 探测did_write.json
07 内存读写防护SID 0x23/0x3D 可达性、ALFID 边界memory.json
08 DTC 故障诊断SID 0x19 多 sub 覆盖 + ClearDTCdtc.json
09 例程控制SID 0x31 危险 routine 黑名单枚举routines.json
10 固件刷写攻击面Programming Session 门槛 + 0x34/35/36 可达性flash.json
11 网关与跨子网网关识别 + 广播 / 直连过滤差异gateway.json
12 Fuzz(可选)SID 参数 / 多帧序列 / 时序 fuzzfuzz.json

单个阶段页的操作流程:说明 → 生成 TSMaster 输入 → 上传日志 → 解析后回显结构化数据:


情报库

每个阶段的结果以 JSON 写入intel/目录,Web UI 提供两个汇总视图。

ECU 清单(Phase 01 自动写入,可手工微调 identity / 寻址方式 / 填充字节)和诊断服务矩阵(按 ECU × SID 展示每个服务的可达性):


报告

12 阶段跑完后POST /report,verdict 引擎对intel/*.json应用内置规则(ISO 14229 / GB 44495-2024 / ISO 21434 常见基线),输出 finding + verdict(通过 / 不通过 / 严重不通过),Jinja2 渲染成单文件 HTML,全部内联样式,可离线归档 / 邮件转发:

报告页提供在线预览、下载、归档、清空测试数据(保留项目信息 / ECU 清单 / 红线)几个操作,各自独立互不影响。


红线

intel/red_lines.json是安全护栏——绝对不测的 SID、不写的 DID、不启动的 routine、危险内存段,UI 直接编辑,有"恢复默认"按钮:

跑真车前一定要检查这个文件,特别是 OEM 私有的危险 routine ID 需要手工补进去。


注意

本工具是主动式渗透测试工具,会向 ECU 发送变形 / 不合规 / 高频诊断请求。

  • 严禁对上路 / 载人 / 行驶中的车辆运行任何阶段
  • Phase 04(SecAccess 枚举)可能触发 ECU 永久 lockout,部分 ECU 要拆下来重刷 boot 才能恢复
  • Phase 07(内存读写)任何操作都可能砖 ECU,红线覆盖不了所有 MCU 特殊寄存器
  • Phase 10 / 12(固件刷写 / Fuzz)在任何非授权车辆上运行都可能构成犯罪
  • 仅限持有测试对象合法所有权或 OEM 明确书面授权的场景使用

当前版本 beta,MIT 开源。