Je1al/car-security-simulator
GitHub: Je1al/car-security-simulator
一个汽车CAN总线安全研究与教学平台,通过仿真攻击与防御对照演示来研究车载网络脆弱性及标准防护对策。
Stars: 0 | Forks: 0
# 🚗🔐 汽车安全模拟器
[](https://github.com/Je1al/car-security-simulator/actions/workflows/ci.yml)
[](https://www.python.org/)
[](https://github.com/astral-sh/ruff)
[](https://mypy-lang.org/)
[](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`)则会失败。
标签:AUTOSAR SecOC, CAN总线, 安全规则引擎, 攻击模拟, 模拟器, 汽车安全, 车联网安全, 逆向工具, 配置错误, 驱动签名利用