Dalianul/can-ids
GitHub: Dalianul/can-ids
该项目基于机器学习对车载 CAN 总线流量进行入侵检测,评估多种分类器在 CloudIDS 数据集上的性能与跨车辆泛化能力。
Stars: 0 | Forks: 0
# CAN-IDS — 基于机器学习的车载CAN总线入侵检测
一项对三种监督分类器的比较研究——**逻辑回归**、**随机森林**和**基于直方图的梯度提升**——用于检测控制器局域网(CAN)总线的入侵行为,评估数据集为 [CloudIDS](https://github.com/andrtu2/CloudIDS)。
本项目在最小可行设置的基础上进行了扩展,包括:(i) 对 CloudIDS 的全部 22 个标记子集进行聚合评估,(ii) 留一车跨车辆泛化分析,以及 (iii) 每帧推理延迟测量以评估部署真实性。
## 关键结果
| | 分布内(车辆 A 合并) | 聚合均值(22 个子集) | 跨车辆(均值) |
|---|---|---|---|
| **逻辑回归** — F1 | 0.263 | 0.142 | 0.285 |
| **随机森林** — F1 | **0.825** | **0.842** | 0.737 |
| **随机森林** — ROC-AUC | **0.976** | **0.978** | **0.963** |
主要发现:
- **逻辑回归不适合作为 CAN-IDS** — 尽管准确率表面可接受(87%),但仍会漏掉约 85% 的攻击。
- **随机森林与 HGB 性能相当**(F1 相差不到 1 个百分点),排除了对集成方法的依赖。
- **重放攻击几乎可被完美检测**(F1 = 0.98),**模糊测试仍是较难的问题**(F1 = 0.81)。
- **跨车辆 F1 下降约 10 个百分点**,但 ROC-AUC 仍高于 0.96 —— 问题在于阈值校准,而非可分性。
- **批处理推理在消费级 CPU 上为 0.44 μs/帧** — 远低于 1 kHz CAN 总线所需的 1 毫秒/帧。
完整论文与方法说明:[`docs/CAN-IDS_paper_IEEE.docx`](docs/CAN-IDS_paper_IEEE.docx)
## 仓库结构
```
src/ Training and evaluation scripts
can_ids.py Main pipeline — LR + RF on one CSV
can_ids_v2.py Extended — adds HistGradientBoosting
cross_vehicle.py Leave-one-vehicle-out experiment (A+B → C, etc.)
latency_benchmark.py Per-frame inference timing
results/ Metrics, confusion matrices, ROC curves (pre-computed)
aggregated_results.csv 22-subset aggregate
latency_results.csv inference timing
single_dataset/ Vehicle A Combined figures
cross_vehicle/ cross-vehicle confusion matrices
three_models/ LR / RF / HGB comparison figures
docs/ Paper (IEEE format) and presentation deck
```
## 快速开始
### 1. 克隆并配置环境
```
git clone https://github.com/Dalianul/can-ids.git
cd can-ids
# 创建 Python 3.12 虚拟环境(3.14 存在 wheel 可用性问题)
python -m venv venv
venv\Scripts\activate # Windows
# source venv/bin/activate # Linux/macOS
python -m pip install --upgrade pip
pip install -r requirements.txt
```
### 2. 下载 CloudIDS 数据集
该数据集**不会随本仓库分发**。请从官方来源获取:
https://github.com/andrtu2/CloudIDS
将其克隆到本仓库同级目录,或将 `Datasets with attacks/` 文件夹复制到项目内的 `datasets/` 目录。
### 3. 复现主要结果
```
# 随机森林 + 逻辑回归 在车辆 A 组合
python src/can_ids.py `
--csv "..\datasets\Datasets with attacks\Combined\Vehicle A\Vehicle A - Replay 0x181, 0x161, 0x1a5, Fuzzing 0x244, 0x284, 0x354 - IDs_Datafield_Classification.csv" `
--out-dir results/single_dataset
```
预期输出:
```
Logistic Regression Acc 0.873 F1 0.263 AUC 0.764
Random Forest Acc 0.947 F1 0.825 AUC 0.976
```
### 4. 复现跨车辆实验
```
python src/cross_vehicle.py --base-dir "..\datasets\Datasets with attacks"
```
在留一车的两辆车合并子集上训练,在第三辆车进行测试,覆盖所有三种留一交叉验证折。
### 5. 复现延迟测量
```
python src/latency_benchmark.py --csv ""
```
## 数据集来源
所有实验均使用 Tudor 等人提供的 **CloudIDS** 数据集,地址为 https://github.com/andrtu2/CloudIDS。我们使用预处理后的 `*IDs_Datafield_Classification.csv` 文件,其中每个 CAN 帧标注了 14 个整数字段:当前 CAN 标识符、四个前置标识符、八个有效载荷字节,以及一个二值标签(0 = 正常,1 = 攻击)。
若你使用了本代码,请同时引用 CloudIDS 的作者。
## 局限性
本项目为一个本科课程项目,我们明确指出以下两点限制:
- **单一随机种子。** 所有结果均使用 `random_state=42`。更严谨的评估应使用 k 折交叉验证或多组种子以报告方差。
- **无对抗鲁棒性评估。** 我们未评估分类器是否可被了解 IDS 的攻击者精心构造的帧所欺骗。
论文中讨论了三个未来研究方向:每车辆阈值校准、领域适应技术,以及利用比当前四个前置标识符更长历史的深度序列模型(LSTM、Transformer)。
## 许可证
MIT — 参见 [LICENSE](LICENSE)。
标签:Apex, CAN总线, CloudIDS, F1分数, IEEE论文, Logistic回归, ROC-AUC, 交叉车辆泛化, 传感器安全, 分类器比较, 实时检测, 帧级推理延迟, 异常检测, 批量推理, 数据集分析, 机器学习, 模型评估, 汽车网络安全, 消费者CPU, 留一车辆, 监督学习, 直方图梯度提升, 车载网络, 逆向工具, 重放攻击, 随机森林