Greivins21/can-bus-ids-fingerprinting
GitHub: Greivins21/can-bus-ids-fingerprinting
基于时钟偏斜指纹识别技术的CAN总线入侵检测系统仿真平台,通过分析消息到达时间间隔特征来检测伪装攻击。
Stars: 0 | Forks: 0
# can-bus-ids 指纹识别
一个 CAN 总线入侵检测系统的软件在环 (SITL) 仿真。它使用时钟偏斜 指纹识别技术,通过 SocketCAN、Python 和 Docker 检测伪装攻击。
视频演示在[这里](https://youtu.be/YIHwrnfzdUs)



## 项目概述
本项目为控制器局域网 (CAN) 实现了一个**时钟偏斜指纹识别入侵检测系统 (IDS)**。它在**软件在环 (SITL)** 仿真环境中运行,用于检测**伪装攻击**。
通过分析 CAN 消息的*到达时间间隔 (IAT)*,系统根据其独特的硬件时序特征(时钟漂移)识别冒充合法 ECU 的恶意节点。
**课程:** 信息物理与物联网安全
**主题:** CAN 总线安全与异常检测
## 前置条件
- 支持 `vcan` 内核模块的 Linux 环境
- 已安装 Docker Engine(由于 VM 网络限制,**不支持** Docker Desktop)
- 已安装 `can-utils` 软件包以使用 `candump` 等工具
## 系统架构 (C4 模型)
仿真使用 Docker 容器来代表不同的 ECU(受害者和攻击者),同时通过 network_mode: host 共享主机 Linux 内核的虚拟 CAN 总线 (vcan0)。
## 手动设置
### A 部分:仿真设置
目标:创建虚拟车载网络,发动伪装攻击,并生成用于分析的 CSV 数据集。

#### 1. 设置虚拟总线(基础设施)
加载内核模块,创建接口并进行验证。
```
sudo modprobe vcan
sudo ip link add dev vcan0 type vcan
sudo ip link set up vcan0
ip link show vcan0
```
#### 2. 运行仿真 (Docker Compose)
我们使用 Docker Compose 来编排受害者和攻击者。
启动仿真
```
docker compose up -d --build victim attacker
```
监控流量(实时):打开一个单独的终端以验证原始数据帧是否在主机内核上流动:
```
candump vcan0
```
你应该看到正常流量 (1.0s) 和攻击流量 (0.1s)。
查看容器日志:查看 Python 脚本输出
```
docker compose logs -f
```
停止仿真
```
docker compose down
```
#### 验证数据收集
仿真会自动将流量记录到 **logs/** 文件夹中。在继续 B 部分之前,请确保文件存在。
```
ls -l logs/
# 你应该看到:
# - normal_traffic.csv(合法基线)
# - attack_traffic.csv(攻击数据集)
```
### B 部分:IDS 实现
#### IDS 部署
IDS 被开发为作为 `docker-compose.yml` 文件中的附加服务运行。
有两种方式观察 IDS 的运行:
- 手动:
- 首先,必须通过停止所有剩余服务来确保没有容器服务正在运行:
sudo docker compose down
- 其次,用户可以使用以下命令初始化 'victim' 和 'ids' 容器服务:
sudo docker compose up -d --build victim ids
- 服务成功部署后,用户可以打开一个新终端并运行以下命令来观察 IDS 日志:
sudo docker compose logs -f ids
这将需要大约 60 秒来创建 IDS 的基线阶段。在此阶段之后,IDS 进入检测模式。用户可以故意在此阶段停留任意长时间,以观察 IDS 的行为。此时全是良性流量,不应生成任何警报。(在理想情况下,详情请参阅论文)
- 回到之前的终端,现在要发动伪装攻击,用户必须运行以下命令:
sudo docker compose stop victim
sudo docker compose up -d --build attacker
- 此时,IDS 监控窗口将开始触发警报。为了结束仿真,用户可以停止所有容器:
sudo docker compose down
## 自动仿真:
自动仿真执行手动运行中描述的相同步骤序列,但使用预定义的时间参数。所有阶段(基线学习、正常监控和攻击执行)均自动执行,整个仿真大约在两分钟内完成。此模式不允许超出预定义持续时间进行扩展观察。
要运行自动仿真,用户只需执行 ./run_simulation.sh 脚本,该脚本旨在适用于任何基于 Debian 或 Ubuntu 的发行版。
```bash
sudo chmod +x ./run_simulation
sudo ./run_simulation.sh
```
**注意:** 在运行自动仿真之前,请确保虚拟 can 已设置,因为脚本不负责此项工作。(参考手动设置)

标签:CAN总线, Docker, Docker Compose, ECU指纹, IAT, Linux内核模块, Python, SITL, SocketCAN, vcan, 伪装攻击检测, 信息物理系统, 入侵检测系统, 到达间隔时间, 安全数据湖, 安全防御评估, 异常检测, 无后门, 时钟偏移指纹识别, 版权保护, 物联网安全, 网络安全实验, 网络攻击模拟, 请求拦截, 车载网络, 车载网络安全, 软件在环, 逆向工具