Je1al/car-security-simulator

GitHub: Je1al/car-security-simulator

一个汽车CAN总线安全研究与教学平台,通过仿真攻击与防御对照演示来研究车载网络脆弱性及标准防护对策。

Stars: 0 | Forks: 0

# 🚗🔐 汽车安全模拟器 [![CI](https://github.com/Je1al/car-security-simulator/actions/workflows/ci.yml/badge.svg)](https://github.com/Je1al/car-security-simulator/actions/workflows/ci.yml) [![Python](https://img.shields.io/badge/python-3.9%E2%80%933.12-blue.svg)](https://www.python.org/) [![Lint: ruff](https://img.shields.io/badge/lint-ruff-261230.svg)](https://github.com/astral-sh/ruff) [![Types: mypy](https://img.shields.io/badge/types-mypy-blue.svg)](https://mypy-lang.org/) [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE) 传统的 CAN —— 几乎存在于每辆量产车中的总线 —— **没有身份验证**: 任何连接到线路的节点都会被无条件信任。这一单一设计缺陷是过去十年间 众多汽车攻击的根源,从 2015 年针对 Jeep Cherokee 的远程黑客攻击 开始。本项目将这一缺陷以及针对它的现代防御手段变得**可运行且可衡量**。 每次攻击都会被演示两次 —— 一次在**不安全**的总线上(攻击成功), 另一次在**安全**的总线上(攻击被拒绝*且*被独立检测到)—— 这样你就能 清楚地看到每种对策带来的实际效果。 ``` ECU_Engine ──┐ ┌── Attacker (sniff / replay / ECU_Brake ──┤ ┌───────────┐ │ tamper / inject / DoS / fuzz) ECU_Gateway ─┼──────┤ CAN bus ├──────┤ │ └───────────┘ └── IDS (rule + frequency + entropy, SecOC: HMAC + Freshness Value precision / recall / F1) + timestamp on every frame ``` ## 为什么选择这个项目 它的构建旨在反映工业界实际的汽车安全运作方式,并 与相关标准相对应: | 功能 | 标准 / 来源 | | --- | --- | | CAN 上的消息身份验证 | **AUTOSAR SecOC**, **ISO/SAE 21434** | | 诊断与安全访问 | **ISO 14229 (UDS)** service `0x27` | | 大型 UDS 消息的传输 | **ISO 15765-2 (ISO-TP)** | | 信号数据库 | **DBC** (通过 `cantools`) | | 真实 CAN I/O | **SocketCAN** / `python-can` | | 入侵检测 | 时序/频率 + 规范 + 熵检测器 | ## 功能特点 - **车载网络仿真** —— Engine、Brake (ABS) 和 Gateway ECU 通过线程安全的 广播总线交换 CAN 帧,每个 ECU 都在其独立的 TX/RX 线程上运行。 - **AUTOSAR SecOC 层** —— HMAC-SHA256 认证器(64 位截断 MAC)、 基于计数器的 **Freshness Value 管理器**、基于时间的新鲜度、常数时间验证, 以及每条消息的 Data-ID 绑定。 - **攻击工具包** —— 重放、篡改、注入、**总线泛洪 DoS**,以及 **CAN 模糊测试器**(随机 + 变异)。 - **入侵检测系统** —— 三个可组合的检测器(规范/规则、 到达间隔**频率**、payload **熵**),通过真实的混淆矩阵进行评分 → **精确率 / 召回率 / F1 分数**。 - **UDS 诊断** —— ISO-TP 分段、带有尝试计数器和时间延迟锁定的 安全访问状态机,以及一个能从*单次*嗅探交换中恢复弱 16 位密钥的 **seed-key 暴力破解攻击**(耗时约几毫秒)—— 该攻击可被 HMAC seed-key 挫败。 - **真实 CAN 网桥** —— 可选的 `python-can` 后端可将仿真镜像到 真实的/虚拟的 CAN 接口上(使用 `candump` 监控,使用 `cansend` 注入), 并支持 **DBC** 信号解码。 - **像生产级代码一样工程设计** —— 可安装的包,52 个测试,支持 Python 3.9–3.12 的 CI,`ruff` 检查纯净且 `mypy` 检查纯净。 ## 快速开始 ``` git clone https://github.com/Je1al/car-security-simulator cd car-security-simulator # 零依赖 — 核心运行于 Python standard library: python main.py # interactive menu python main.py -s all # run every scenario with a comparison table python main.py -s replay-secure # a single scenario python main.py --list # list all scenarios ``` 可选的附加组件可解锁图表以及真实 CAN/DBC 后端: ``` pip install -e ".[all]" # matplotlib + python-can + cantools + dev tools carsec -s ids-benchmark # console entry point after install ``` ## 结果 运行完整演示(`python main.py -s all`): ``` Scenario Mode Accept Reject Alerts ──────────────────── ────────── ─────── ─────── ─────── normal-secure SECURE 50 0 0 normal-insecure INSECURE 48 0 0 replay-insecure INSECURE 84 0 1 replay-secure SECURE 79 5 1 tamper-insecure INSECURE 84 0 3 tamper-secure SECURE 80 6 3 inject-insecure INSECURE 69 0 1 inject-secure SECURE 58 9 1 ``` **IDS 基准测试**基于一个确定性的、已标注的 trace(`-s ids-benchmark`): ``` frames analysed : 470 confusion : TP=48 FP=3 TN=417 FN=2 precision=0.941 recall=0.960 f1=0.950 accuracy=0.989 ``` **UDS 安全访问**(`-s uds-weak`):弱的 16 位 seed-key 密钥会在几十 毫秒内通过离线方式从单次嗅探到的 `(seed, key)` 对中恢复,然后用于 解锁 ECU 并读取受保护的标定数据。针对 HMAC seed-key 的 相同攻击(`-s uds-secure`)则会失败。

event summary event timeline

## 在真实 CAN 总线上运行 ``` pip install -e ".[hardware]" # 跨平台 (macOS/Windows/Linux),无需 kernel module: python examples/run_on_vcan.py --interface virtual # Linux 对接 SocketCAN;在另一个终端中使用 `candump vcan0` 查看: sudo scripts/setup_vcan.sh python examples/run_on_vcan.py --interface socketcan --channel vcan0 ``` ECU 发送的帧会被镜像到线路上(CAN-FD 携带完整的受保护 PDU,正如 SecOC 依赖 FD 更大的 payload 来容纳 MAC),每一帧 接收到的数据都会根据内置的 `vehicle.dbc` 进行解码,而外部帧则 会被注入回仿真中。 ## 架构 ``` src/carsec/ ├── can/ frame model, broadcast bus, SocketCAN backend, DBC decoding ├── security/ SecOC: crypto · freshness manager · layered verifier ├── ecu/ Engine · Brake · Gateway ECUs (threaded TX/RX) ├── attacks/ replay · tamper · injection · DoS · fuzzing ├── ids/ rule · frequency · entropy detectors + metrics ├── uds/ ISO-TP · services · server · client · security access · attack ├── telemetry/ logging (console/JSON/CSV) · charts └── scenarios/ runner + scenario library + CLI ``` 深入了解: - [docs/architecture.md](docs/architecture.md) — 组件与数据流 - [docs/secoc.md](docs/secoc.md) — SecOC 设计与 ISO 21434 / AUTOSAR 映射 - [docs/threat-model.md](docs/threat-model.md) — STRIDE 威胁模型 ## 测试 ``` pip install -e ".[dev]" pytest --cov=carsec # 52 tests ruff check src tests # lint mypy # static types ``` ## 现实背景 - **Miller & Valasek (2015)** —— 他们通过远程信息处理单元的 CAN 注入, 远程杀死了 Jeep Cherokee 的发动机并禁用了 刹车;这也是业界采用 SecOC 的原因。 - **AUTOSAR SecOC** 与 **ISO/SAE 21434 (Road vehicles — Cybersecurity engineering)** 定义了经过身份验证的车载通信以及网络安全生命周期。 - **ISO 14229 (UDS)** 与 **ISO 15765-2 (ISO-TP)** 定义了车辆诊断及其 传输方式 —— 此外还有此处遭到攻击的 安全访问机制。 ## 免责声明 这是一个**教育性/防御性**的研究工具。它不包含针对真实车辆的 漏洞利用 —— 它仅通过模拟网络来研究 CAN 安全及 标准防御对策。请使用它来进行学习并构建防御体系。 ## 许可证 [MIT](LICENSE) © Je1al
标签:AUTOSAR SecOC, CAN总线, 安全规则引擎, 攻击模拟, 模拟器, 汽车安全, 车联网安全, 逆向工具, 配置错误, 驱动签名利用