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, 留一车辆, 监督学习, 直方图梯度提升, 车载网络, 逆向工具, 重放攻击, 随机森林