Rockstarr06/CAN-bus-security---Intrusion-
GitHub: Rockstarr06/CAN-bus-security---Intrusion-
基于 XGBoost 与 TensorFlow 1D-CNN 混合集成学习的 CAN 总线网络入侵检测系统,提供从数据处理、模型训练到 FastAPI 实时推理服务的完整流水线。
Stars: 0 | Forks: 0
# 面向自动驾驶网络的基于 AI 的 CAN 总线入侵检测
一个可复现的机器学习项目,使用**特征工程**、**XGBoost**、**TensorFlow 1D-CNN** 以及概率级别的**混合集成**来检测恶意控制器局域网(CAN)流量。
## 本项目演示的内容
- 解析常见的 CAN CSV 格式并标准化十六进制 CAN 标识符
- Payload 和时间特征工程
- 分层训练/验证/测试集划分
- XGBoost 多分类攻击分类
- TensorFlow 1D-CNN 分类
- 验证集加权的混合概率融合
- 准确率、平衡准确率、宏/加权 F1、分类别报告和混淆矩阵
- 保存的预处理和模型 artifacts
- 有状态的近实时 CAN 帧推理
- 带有单条和批量预测 endpoint 的 FastAPI 服务
- Docker 打包、测试和 GitHub Actions CI
- 用于完全可运行演示的合成 CAN 流量生成器
## 架构
```
flowchart LR
A[CAN frames / CSV] --> B[Schema validation]
B --> C[CAN ID + payload normalisation]
C --> D[Temporal and payload feature engineering]
D --> E[Train / validation / test split]
E --> F[StandardScaler]
F --> G[XGBoost]
F --> H[1D CNN]
G --> I[Probability fusion]
H --> I
I --> J[Attack class + confidence]
J --> K[FastAPI / real-time stream]
```
## 演示数据集中的攻击类别
内置的合成生成器会创建五个类别:
- `normal`
- `dos`
- `fuzzy`
- `gear_spoof`
- `rpm_spoof`
该 pipeline 并不局限于这些标签。它会学习已配置 CSV 中存在的标签。
## 仓库结构
```
.
├── artifacts/demo/ # Ready-to-use XGBoost demo model
├── configs/ # Quick and full hybrid experiment configs
├── data/sample/ # Synthetic, non-sensitive demonstration data
├── docs/ # Architecture, report, model/data cards and interview notes
├── notebooks/ # End-to-end notebook
├── reports/ # Reproducible metrics and figures
├── scripts/ # Convenience entry points
├── src/can_ids/ # Production-style Python package
├── tests/ # Unit and API tests
├── .github/workflows/ci.yml # Continuous integration
├── Dockerfile
├── docker-compose.yml
├── Makefile
├── pyproject.toml
└── requirements*.txt
```
## 快速开始:使用内置的演示模型
推荐:Python 3.11。
```
python -m venv .venv
source .venv/bin/activate # Windows: .venv\\Scripts\\activate
python -m pip install --upgrade pip
pip install -r requirements-lite.txt
pip install -e .
uvicorn can_ids.api:app --host 0.0.0.0 --port 8000
```
验证:
```
curl http://localhost:8000/health
```
打开交互式 API 文档:
```
http://localhost:8000/docs
```
示例请求:
```
curl -X POST http://localhost:8000/predict \
-H "Content-Type: application/json" \
-d '{
"timestamp": 0.001,
"can_id": "0x000",
"dlc": 8,
"data": [0,0,0,0,0,0,0,0]
}'
```
## 训练一个快速的 XGBoost 实验
```
python -m can_ids.cli generate-data --output data/sample/can_sample.csv --rows 6000
python -m can_ids.cli train --config configs/quick.yaml
```
输出将写入 `artifacts/quick/` 和 `reports/quick/`。
## 训练完整的 CNN + XGBoost 混合模型
TensorFlow 是可选的,因为其安装过程较为繁琐。
```
pip install -e ".[full]"
python -m can_ids.cli train --config configs/hybrid.yaml
```
混合训练器将执行以下操作:
1. 仅在训练集上拟合预处理。
2. 独立训练 XGBoost 和 CNN。
3. 测量两个模型的验证集宏 F1。
4. 将这些分数转换为集成权重。
5. 在测试集上对固定的集成模型进行一次评估。
## 使用真实的 CAN 数据集
将数据集放置在 `data/raw/` 下,并确保其可以映射为:
```
timestamp, can_id, dlc, byte_0, byte_1, ..., byte_7, label
```
支持诸如 `0x316` 和 `316` 之类的十六进制 ID。缺失的 Payload 字节将用零填充。请在 YAML 中配置路径和列别名。请参阅 [`docs/DATA_CARD.md`](docs/DATA_CARD.md)。
## 运行测试
```
pip install -e ".[dev]"
pytest -q
```
## Docker
```
docker compose up --build
```
该服务可在 `http://localhost:8000` 访问。
## 面试总结
更多详细信息请参阅 [`docs/INTERVIEW_NOTES.md`](docs/INTERVIEW_NOTES.md)。
## 学术诚信与保密须知
在将本仓库作为您的大学作业上传之前:
1. 仅在您的大学允许公开共享的情况下,添加您原创的论文 PDF。
2. 将合成数据集替换为合法的公共数据集链接,或替换为获取原始数据集的说明。
3. 请勿上传机密、受许可许可或包含个人身份信息的数据。
4. 将重构的文本替换为您实际的方法论和确切的实验设置。
5. 在声明任何数值结果之前,请重新运行实验并提交生成的指标。
## 许可证
代码在 MIT 许可证下提供。数据集许可独立存在,在重新分发前必须进行检查。
标签:Apex, CAN总线, 人工智能, 机器学习, 用户模式Hook绕过, 自动驾驶, 请求拦截, 车联网, 逆向工具