CAN_Test_Toolkit:车载 CAN 总线渗透测试套件(OBD_Hacker + CAN_Bridge)

📅 2026/8/20 23:00:31
CAN_Test_Toolkit:车载 CAN 总线渗透测试套件(OBD_Hacker + CAN_Bridge)
目录1. 三个子项目2. 端口与架构3. 支持硬件4. OBD_Hacker12 阶段渗透测试4.1 硬件与安全边界配置4.2 依赖路线图 批量运行4.3 单 phase 运行 实时事件流4.4 12 个 Phase 一览4.5 生成中文渗透测试报告5. 上真车前必读6. 相关历史最近在做车载 CAN 总线安全测试整理出了一套工具箱 CAN_Test_Toolkit由 3 个解耦子项目组成——CAN_Bridge 统一硬件抽象、OBD_Hacker 做 12 阶段 UDS/OBD-II 渗透测试并出中文报告、CAN_Hacker 做 DBC 感知的故障注入开发中。备份下架构和用法。1. 三个子项目子项目版本一句话状态CAN_Bridgev0.1.0厂商无关的用户态 CAN 桥把 ZLG / TOSUN / Mock 三家硬件统一到 HTTP ZMQ 服务Mock 全绿ZLG TSDev 硬件收发 OKOBD_Hackerv2.3.012 阶段 UDS / OBD-II 渗透测试 Web 控制台出中文渗透测试报告Mock e2e 全绿60 项 review-pass fix 已落地CAN_Hackerv0.1.0DBC 感知的应用层 CAN 故障注入 / MITM / Fuzz Web 控制台开发中暂不建议在关键流程依赖三者只走localhost上的 HTTP ZMQ 端口交互可拆分部署。2. 端口与架构OBD_Hacker Web(:20010) ──HTTP──▶ CAN_Bridge(:20000 HTTP :20001 ZMQ REP :20002 ZMQ PUB) CAN_Hacker Web(:20020) ──HTTP──▶ └── ICanBus 适配器 ├── ZLG (libusbcanfd.so ctypes) ├── TOSUN (libTSDevBase.so TsdevRaw) └── Mock (纯 PythonCI/演示用)OBD_Hacker / CAN_Hacker不直接读硬件一律走 Bridge 的 HTTP / ZMQ换硬件只在 Bridge 里加一个ICanBus适配器上层零改动。启动bashCAN_Test_Toolkit/CAN_Bridge/install/kali/setup.sh# 一次性装机cdCAN_Test_Toolkit ./start.sh# 启动 CAN_Bridge OBD_Hacker后台日志写 logs/*.log./stop.sh3. 支持硬件厂商型号通道状态ZLG周立功USBCANFD-100U1× CAN FD已通TOSUN同星TC1016P4× CAN FD 2× LIN已通—Mock loopback / SimECU任意CI 演示用跨设备已验证ZLG CH0 ↔ TSDev CH0 CAN FD 500k2M 双向 OK。为什么不用 SocketCANKali 当前内核与 ZLG / TSDev 的.ko源码 API 不兼容vendor 不再维护。项目走用户态 libusb / ctypes 绕开内核 CAN 栈。4. OBD_Hacker12 阶段渗透测试4.1 硬件与安全边界配置进 Web 后先做两件事选硬件、配红线。硬件配置/config/hardware选 vendormock-ecu / zlg / tsdev、device_index、通道号、波特率、BTR 寄存器等无硬件时选 mock-ecu 全流程可跑。红线配置/config/red_linesSID / DID / Routine / 内存段黑名单 SecAccess 是否允许发 key。v2.3.0 起 phase runner 真的读红线命中直接跳过。4.2 依赖路线图 批量运行12 个 phase 之间有依赖p10 Flash 需先 p03 会话 p01 拓扑。总览页顶部弹窗按 5 列布局展示配置 / 拓扑 / 基础扫描 / 深度扫描 / 攻击面勾一个 phase 自动补齐必需依赖支持一次选多个按依赖顺序批量跑。4.3 单 phase 运行 实时事件流点单个 phase 卡片进详情页跑。Phase 跑起来后 SSE 实时把 info / verdict / 每条 CAN 帧上屏。一次运行产 1 个记录目录data/runs/pid/ts/含frames.blfVector 二进制frames.ascframes.jsonlevents.jsonlresult.json支持一键 zip 下载。Phase 1 — 接入与拓扑发现TesterPresent0x3E定向探测 0x7DF 广播扫收集 0x700-0x7FF 响应 ID输出 ECU 拓扑。Phase 5 — DID 读取防护17 个 ISO 14229 Annex F 标准 DID 可选 0xF000-0xFFFF 全范围扫输出敏感数据暴露报告。4.4 12 个 Phase 一览pid名称做什么p01接入与拓扑发现TesterPresent 定向 0x7DF 广播扫 0x700-0x7FF 响应p02协议 / SID 矩阵12 个常用 SID 用 benign 参数探测支持状态p03会话状态机0x10 尝试 7 种 sessiondefault/programming/extended/safety/OEMp04安全访问8 level 各请 seed × 3 次低熵分级p05DID 读取防护17 标准 DID 可选 F000-FFFF 全范围扫p06DID 写入审计5 候选 DID 直接写不发 SecAccess接受即高危漏洞p07内存读取防护ReadMemoryByAddress 探候选地址红线 unsafe_ranges 跳过p08DTC 故障诊断0x19 拿 DTC 数量 列表J2012 P/C/B/U 前缀p09例程枚举RoutineControl 8 个已知 routine ID 试 startp10Flash 入口探测切 programming session → SecAccess seed → RequestDownload不发 0x36p11网关分析每 ECU × 每 channel 试 TesterPresent映射跨子网可达性p12应用层 fuzz单 SID 4 种模式random/0xFF/0x00/XORfuzz N 次4.5 生成中文渗透测试报告12 阶段跑完后进/report页对 12 类试验项目自动出通过 / 不通过 / 严重不通过三档判定一键生成 HTML 报告归档到reports/。5. 上真车前必读默认不发 SecAccess key防真车 lockout 计数器锁死 ECU想发 key 需显式设secaccess_send_key_allowed truep10 Flash 探测最风险一般会让 ECU 停止对外服务禁止在行驶中跑部分 phase 之间会话状态可能污染上真车前先在离线台架跑一遍三个服务默认127.0.0.1--allow-lan后无鉴权只用于隔离实验网6. 相关历史早期用 TSMaster CAPL 生成脚本 → 收 BLF → 离线 parser 的 5 步链路OBD_Test_ToolKitv2.0 起被本项目替代历史 README 存档在OBD_Hacker/docs/OBD_Test_ToolKit_original_README.md。