gautham-sai05/CAN-Bus-Communication-Security-Toolkit

GitHub: gautham-sai05/CAN-Bus-Communication-Security-Toolkit

基于 Arduino Nano 和 MCP2515 的低成本 CAN 总线安全实验平台,通过模拟 ECU 通信场景帮助研究者学习嗅探、拒绝服务和消息注入等汽车网络安全基础知识。

Stars: 0 | Forks: 0

# CAN 总线通信与安全工具包 基于 Arduino Nano + MCP2515 的实验项目,用于在受控环境中演示 CAN 通信、监控和基础安全测试。 ## 概述 本项目实现了一个三节点的 CAN 总线设置,模拟简单的汽车 ECU 网络: - **ECU A(发送方)** 根据电位器输入生成 RPM 样式的数据。 - **ECU B(接收方)** 监听 CAN 帧并打印接收到的 payload。 - **工具节点** 处于研究和演示目的,可以嗅探流量、向总线泛洪或注入帧。 目标是为学习 CAN 协议基础知识、消息流、仲裁行为以及汽车网络中常见的攻击场景提供一个实用的学习平台。 ## 系统架构 所有三个节点共享同一个 CAN 总线: - CANH ↔ CANH - CANL ↔ CANL - 建议所有节点之间共地 ### 节点角色 #### ECU A — 发送方 - 读取 A0 引脚上电位器的模拟输入 - 将读数转换为 `rpm=` 格式的文本 payload - 使用 CAN ID `0x12` 传输消息 #### ECU B — 接收方 - 从总线接收 CAN 帧 - 将 CAN ID、帧长度和 payload 打印到 Serial Monitor #### 工具节点 - 提供一个简单的串行菜单,包含三种模式: 1. 嗅探 2. 拒绝服务 3. 消息注入 ## 硬件需求 - Arduino Nano × 3 - MCP2515 CAN 模块 × 3(带 TJA1050 收发器) - 电位器 × 1 - 杜邦线 - USB 数据线 ## 图片 ### 接线 / 设置 ![接线图](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/7c26be31e6234731.png) ### 工具菜单 ![工具菜单](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/e2a467f3fa234733.png) ### 嗅探模式 ![嗅探输出](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/d89861efd1234734.png) ### 拒绝服务模式 ![DoS 输出](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/db1997bd86234735.png) ### 信号 / 流量视图 ![信号视图](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/8bed293f08234737.png) ## 数据流 1. 电位器位置由 ECU A 读取 2. 模拟值转换为 RPM 样式的文本 payload 3. ECU A 在总线上广播 CAN 帧 4. ECU B 接收并打印 payload 5. 工具节点可以根据所选模式观察或操纵流量 ## 固件文件 ### sender.ino ECU A 发送端程序。 - 以 500 kbps 初始化 CAN - 从 A0 读取电位器值 - 使用 CAN ID `0x12` 发送 payload ### reader.ino ECU B 接收端程序。 - 以 500 kbps 初始化 CAN - 解析传入的 CAN 帧 - 将数据包元数据和 payload 打印到 Serial Monitor ### tool.ino 控制与测试节点程序。 - 启动时显示一个串行菜单 - 嗅探模式持续打印 CAN 流量 - DoS 模式使用 CAN ID `0x1` 向总线泛洪帧 - 注入模式发送用户定义的 RPM payload,并传输一个高优先级帧 ## Serial Monitor 使用方法 所有开发板均以 **9600 baud** 打开 Serial Monitor。 ### 工具节点菜单 输入以下选项之一: - `1` — 嗅探 - `2` — 拒绝服务 - `3` — 消息注入 ### 示例输出 发送方: - `CAN Sender` - `Sending packet ... done` 接收方: - `Received packet with id 0x12 and length 7` - `rpm=805` 工具节点: - `Sniffing....` - `Denial of Service in process....` - `Injection in process....` ## 入门指南 1. 将所有三个 MCP2515 模块连接到同一个 CAN 总线。 2. 将电位器连接到 ECU A。 3. 上传程序: - `sender.ino` 到 ECU A - `reader.ino` 到 ECU B - `tool.ino` 到工具节点 4. 以 9600 baud 打开 Serial Monitor。 5. 在工具节点上选择一种模式并观察流量。 ## 项目结构 - `sender.ino` — ECU A 发送端 - `reader.ino` — ECU B 接收端 - `tool.ino` — 嗅探、DoS 和注入工具 - `circuit.png` — 接线 / 拓扑参考 - `menu.png` — 工具节点菜单截图 - `sniffer.png` — 嗅探输出截图 - `dos.png` — DoS 输出截图 - `signal.png` — 信号 / 流量可视化 ## 学习成果 - CAN 协议基础 - 多节点 ECU 通信 - 仲裁与总线共享 - 嵌入式系统集成 - 汽车网络安全入门概念 ## 安全须知 本仓库仅用于教育和研究目的。 请勿将此设置连接到真实车辆或生产环境中的汽车系统。 ## 未来改进 - 添加 CAN ID 过滤 - 实现异常检测 - 将日志存储到 SD 卡 - 在 Linux 上与 SocketCAN 集成 - 构建简单的 CAN 入侵检测系统
标签:Arduino, CAN Bus, CAN总线, CISA项目, DoS攻击, ECU仿真, MCP2515, 串口通信, 协议分析, 嗅探, 实验室环境, 报文注入, 拒绝服务, 攻击与防御, 权限提升, 汽车电子, 汽车网络安全, 物联网安全, 硬件黑客, 网络流量分析, 车载网络, 车载通信, 配置错误, 防御绕过