abhishek3673/CAN_IDS_FreeRTOS

GitHub: abhishek3673/CAN_IDS_FreeRTOS

一个基于ESP32的双节点CAN总线记录器和入侵检测系统,用于模拟攻击并实时检测汽车CAN网络威胁。

Stars: 0 | Forks: 0

# 汽车CAN总线记录器与入侵检测系统 基于ESP32的双节点硬件项目,模拟汽车CAN总线通信,集成实时入侵检测、FreeRTOS多任务调度及OLED警报功能。 ## 硬件 | 组件 | 功能 | |---|---| | ESP32 DevKit v1 (×2) | 节点A:发送器/故障注入器 · 节点B:记录器/IDS | | MCP2515 + TJA1050 (×2) | CAN控制器 + 收发器 | | SSD1306 OLED 128×64 | 节点B实时显示模块 | | 120Ω电阻 (×2) | CAN总线终端电阻 | ## 架构 — 节点B(FreeRTOS) MCP2515硬件 │ [task_can_rx] 优先级=高 ──xQueue──► [task_ids] 优先级=高 │ ┌───────────┘ ▼ [task_display] 优先级=低 (oledMutex) [task_serial] 优先级=低 | 任务 | 优先级 | 功能 | |---|---|---| | `task_can_rx` | 高 | 读取MCP2515,将帧数据推入队列 | | `task_ids` | 高 | 白名单/洪泛/重放攻击检测 | | `task_display` | 低 | 通过互斥锁更新SSD1306 OLED | | `task_serial` | 低 | 串口日志供Python监控 | ## 入侵检测功能 ### 1. 伪造ID检测 有效OBD-II CAN ID白名单:`0x0C0` `0x0D0` `0x110` `0x130` 任何未知ID → 立即触发OLED警报。 ### 2. CAN洪泛检测 每秒跟踪数据包速率。 超过阈值(30包/秒)→ 触发洪泛警报。 ### 3. 重放攻击检测 按ID追踪器存储最后帧数据。 相同数据重复5次以上 → 触发重放警报。 ## 攻击模拟 — 节点A串口菜单 1 - 正常OBD-II通信(转速、车速、油门、冷却液温度) 2 - 伪造ID注入(0xDEAD) 3 - 重放攻击(相同帧重复10次) 4 - CAN洪泛(100个数据包,间隔5ms) 5 - 持续正常模式 ## 模拟的OBD-II帧 | CAN ID | 信号 | 示例值 | |---|---|---| | `0x0C0` | 发动机转速 | 2000转/分钟 | | `0x0D0` | 车速 | 60公里/小时 | | `0x110` | 油门位置 | 30% | | `0x130` | 冷却液温度 | 90°C | ## 接线 ### SPI(双节点通用) | ESP32 GPIO | MCP2515引脚 | |---|---| | GPIO 23 | SI (MOSI) | | GPIO 19 | SO (MISO) | | GPIO 18 | SCK | | GPIO 5 | CS | | GPIO 4 | INT | ### I2C — OLED(仅节点B) | ESP32 GPIO | OLED引脚 | |---|---| | GPIO 21 | SDA | | GPIO 22 | SCL | ### CAN总线 节点A CANH ══双绞线══ 节点B CANH 节点A CANL ══双绞线══ 节点B CANL 节点A GND ─────────── 节点B GND CANH/CANL两端接120Ω电阻(硬件HW-184的J1跳线) ## 依赖库 mcp_can 作者:coryjfowler — CAN控制器驱动 Adafruit SSD1306 — OLED显示驱动 Adafruit GFX — 图形基础库 FreeRTOS 内置 — ESP32 Arduino核心库,无需安装 ## Python串口监控 `python_logger/can_logger.py` — 将节点B所有串口输出记录到带时间戳的CSV文件。 ``` pip install pyserial python python_logger/can_logger.py --port COM3 --baud 115200 # Linux/Mac:--port /dev/ttyUSB0 ``` 输出文件:`can_log_YYYYMMDD_HHMMSS.csv` ## 文件结构 CAN_IDS_FreeRTOS/ ├── NodeA_FaultInjector/ │ └── NodeA_FaultInjector.ino ├── NodeB_IDS/ │ ├── NodeB_IDS.ino │ ├── shared.h │ ├── can_rx_task.h │ ├── ids_task.h │ ├── display_task.h │ └── serial_task.h ├── python_logger/ │ └── can_logger.py └── README.md ## 技术能力展示 - 基于FreeRTOS的嵌入式C++固件开发(任务、队列、互斥锁) - SPI外设驱动集成(MCP2515) - CAN总线协议实现 - 汽车网络安全 — 支持3种攻击向量的入侵检测系统 - 通过互斥锁保证安全的实时OLED显示 - Python串口数据采集管道
标签:CAN总线安全, CAN总线记录器, CSV数据记录, ESP32, FreeRTOS, MCP2515, OBD-II模拟, Python, SPI通信, SSD1306, TJA1050, 串口通信, 假ID检测, 入侵检测系统, 命令控制, 多任务处理, 安全数据湖, 客户端加密, 嵌入式系统, 攻击模拟, 数据记录, 数据采集, 无后门, 汽车电子, 汽车网络安全, 洪水攻击检测, 物联网安全, 硬件安全, 逆向工具, 重放攻击检测, 驱动签名利用