ruchithh/Controller-Area-Network-Intrusion-Detection-System

GitHub: ruchithh/Controller-Area-Network-Intrusion-Detection-System

基于ESP32的车载CAN总线实时入侵检测系统,通过物理层电压指纹和白名单机制识别恶意节点注入。

Stars: 0 | Forks: 0

# 🚗 CAN Bus 入侵检测系统 [![Platform](https://img.shields.io/badge/Platform-ESP32-blue)](https://www.espressif.com/en/products/socs/esp32) [![Protocol](https://img.shields.io/badge/Protocol-CAN%20Bus-orange)](https://en.wikipedia.org/wiki/CAN_bus) [![IDE](https://img.shields.io/badge/IDE-Arduino-teal)](https://www.arduino.cc/) [![License](https://img.shields.io/badge/License-MIT-green)](LICENSE) ## 📖 概述 现代车辆依赖 **控制器局域网 (CAN) 总线** 来实现 ECU 之间的通信——控制速度、制动、安全气囊等。然而,CAN 的设计初衷是 **可靠性而非安全性**。总线上的任何节点都可以使用任何 ID 发送任何消息,且毫无身份验证。 本项目实现了一个 **实时入侵检测系统 (IDS)**,具备以下功能: - 🔍 监控 CAN 总线中未知或伪造的节点 ID - 📡 使用基于 ADC 的 **物理层指纹识别** 技术来区分合法 ECU 与恶意节点 - 🚨 检测到入侵时触发 **蜂鸣器和 LCD 警报** ## 🏗️ 系统架构 ![Architecture Diagram](https://raw.githubusercontent.com/ruchithh/Controller-Area-Network-Intrusion-Detection-System/main/ARCHITECTURE_IMAGE_.png) ## 📁 项目文件 | File | Description | |------|-------------| | `surviellance_final_demo_code.ino` | IDS Monitor — 主监控节点 | | `speed_demo_code.ino` | Speed ECU (CAN ID: `0x101`) | | `brake_demo_code.ino` | Brake ECU (CAN ID: `0x102`) | | `attacker_code.ino` | Attacker Node (CAN ID: `0x666`) | | `ARCHITECTURE_IMAGE_.png` | 系统图 | | `demo_video.mp4` | 项目演示视频 | ## 🔌 节点摘要 | Node | CAN ID | Role | |------|--------|------| | Surveillance IDS | — | 监控总线,检测入侵 | | Speed ECU | `0x101` | 发送速度数据 (payload = 60) | | Brake ECU | `0x102` | 发送制动状态 (payload = 1) | | Attacker Node | `0x666` | 注入恶意帧 (`0xFF`) | ## 🧠 检测原理 ### 1. CAN ID 白名单 仅 `0x101` 和 `0x102` 为合法 ID。任何其他 ID 会立即被标记。 ### 2. 物理层模拟指纹识别 - ADC 引脚 **GPIO 34** 采样 CAN 总线电压 —— 以 12 位分辨率采集 **50 个样本** - 对每一帧计算 `DIFF = MAX sample − MIN sample` - 将其与训练好的阈值 **350 个 ADC 单位** 进行比较 - ✅ 合法 ECU → 低且稳定的 DIFF - ❌ 恶意节点 → 高方差的 DIFF ### 3. 确认窗口 *(防止误报)* | Condition | Action | |-----------|--------| | 已知 ID + DIFF ≤ 350 | ✅ 正常 — 重置计数器,关闭蜂鸣器 | | 检测到未知 ID | `abnormalCount += 1` | | DIFF > 350 | `abnormalCount += 1` | | `abnormalCount >= 3` | 🚨 **入侵警报** — 开启蜂鸣器 + LCD 警报 | ## 🛠️ 所需硬件 | Component | Qty | |-----------|-----| | ESP32 Dev Board | 4 | | MCP2551 CAN Transceiver | 4 | | 16x2 I2C LCD (地址 `0x27`) | 1 | | Active Buzzer | 1 | | 120 Ohm Resistors | 2 | | Push Buttons | 3 | ## 📌 引脚配置 | GPIO | Function | Used By | |------|----------|---------| | GPIO 5 | CAN TX | 所有节点 | | GPIO 4 | CAN RX | 所有节点 | | GPIO 18 | Button input | ECU + Attacker 节点 | | GPIO 34 | ADC 总线采样 | 仅 Surveillance | | GPIO 27 | Buzzer output | 仅 Surveillance | | SDA / SCL | I2C LCD | 仅 Surveillance | ## ⚙️ 软件设置 ### 1. 在 Arduino IDE 中安装 ESP32 进入 `File → Preferences` 并添加开发板管理器 URL: ``` https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json ``` 然后执行:`Tools → Board → Boards Manager → 搜索 "esp32" → Install` ### 2. 安装库 `Tools → Manage Libraries → 搜索 "LiquidCrystal_I2C" → Install` ### 3. 烧录各节点 1. 打开各节点对应的 `.ino` 文件 2. 选择 **Board:** `ESP32 Dev Module` 3. 选择正确的 **COM Port** 4. 点击 **Upload** ## 🖥️ 串口监视器输出 *(波特率设置为 115200)* ``` === CAN IDS SURVEILLANCE READY === [OK] SPEED ECU | STATUS: UPDATED | DIFF=210 [OK] BRAKE ECU | STATUS: UPDATED | DIFF=195 [ALERT] UNKNOWN NODE | CAN ID=0x666 | DIFF=520 [ALERT] UNKNOWN NODE | CAN ID=0x666 | DIFF=515 ``` ## ✅ 测试结果 | Node | CAN ID | Avg DIFF | Threshold | Result | |------|--------|----------|-----------|--------| | Speed ECU | `0x101` | ~210 | 350 | ✅ 正常 | | Brake ECU | `0x102` | ~195 | 350 | ✅ 正常 | | Attacker | `0x666` | ~520 | 350 | 🚨 **已检测到** | ## 🎬 演示 ▶️ 观看本仓库中包含的 `OUTPUT_VIDEO.mp4`,查看 IDS 实时检测活动 CAN 总线攻击的现场演示。 ## 🔭 未来展望 - 🤖 基于 **机器学习** 的异常检测 - 🚀 支持 **CAN FD** 以适配下一代 ECU - 🔐 **加密消息身份验证** (AES / CMAC) - 🔌 **OBD-II 端口部署** 用于实车环境 - ☁️ 用于车队监控的 **云端仪表盘** ## 📄 许可证 本项目基于 [MIT License](LICENSE) 授权。 👨‍💻 作者 Kairamkonda Ruchith 🤝 合作 作为学术团队项目的一部分开发。 本仓库代表我的实现及维护版本。 *为汽车网络安全研究而用 ❤️ 构建。*
标签:Arduino, CAN总线, CAN总线监控, ECU, ESP32, MIT ATT&CK, TGT, 信号注入, 入侵检测系统, 安全数据湖, 嵌入式系统, 工业控制安全, 异常检测, 攻防演练, 欺骗检测, 汽车安全, 物理层指纹, 物联网, 硬件安全, 网络安全, 车载网络, 隐私保护