cjhosea/cps-modbus-lab

GitHub: cjhosea/cps-modbus-lab

基于树莓派的工控协议攻防实验室,用廉价硬件模拟Modbus/TCP攻击与Suricata入侵检测的完整杀伤链。

Stars: 0 | Forks: 0

# CPS Modbus 安全实验室 ![Status](https://img.shields.io/badge/status-active-brightgreen?style=flat-square) ![License](https://img.shields.io/badge/license-MIT-yellow?style=flat-square) [![Modbus 攻击](https://img.shields.io/badge/Modbus-Attacks-red)](docs/AttackMethodology.md) [![ICS IDS](https://img.shields.io/badge/ICS-IDS-blue)](docs/DetectionStrategy.md) ## 目录 1. [目的](#purpose) 2. [系统架构](#systemarchitecture) 3. [主要功能](#keyfeatures) 4. [快速开始](#quickstart) 5. [仓库结构](#repositorylayout) 6. [攻击场景](#attackscenarios) 7. [检测策略](#detectionstrategy) 8. [硬件接线](#hardwarewiring) 9. [MITRE ATT\&CK 映射](#mitreattckmapping) 10. [贡献](#contributing) 11. [免责声明](#disclaimer) 12. [许可证](#license) ## 目的 本项目提供了一个端到端的 **信息物理系统 (CPS)** 实验室,演示了以下内容: * **攻击技术** — 针对实时 Modbus 进程的重放、命令操纵、定时逻辑炸弹和隐蔽的摩尔斯电码信号传输。 * **防御对策** — 带有自定义限速规则的 Suricata 7 IDS,能够可靠地标记每种攻击类别,平均检测延迟 ≤10 秒。 所有内容均在廉价硬件(Raspberry Pi + LED)上运行,因此您无需 PLC 或 SCADA 设备即可在家中复现完整的杀伤链。 ## 系统架构 ``` +------------------------------+ | Attacker – MacBook Air | | (Wi‑Fi) | | Scapy attack scripts | +--------------+---------------+ | Wi‑Fi +--------------v---------------+ | Home / Lab Router / AP | +--------------+---------------+ | Ethernet +--------------v---------------+ | Raspberry Pi 4 (Target & IDS)| | (Ethernet) | | modbus_server.py | | Suricata 7 IDS | | LED on GPIO17 | +--------------+---------------+ | v [ LED ] ``` | 角色 | 主机 | 核心软件 | | -------- | -------------------- | ----------------------------------- | | 目标 | Raspberry Pi 4 (ETH) | `server/modbus_server.py` (sockets) | | 攻击者 | macOS laptop (Wi‑Fi) | `attack/*.py` (Scapy) | | IDS | Raspberry Pi 4 | Suricata 7 + 自定义规则 | ## 主要功能 * **纯套接字 Modbus 服务器**,用于透明的数据包深度检查。 * **四个专用攻击脚本**,展示了不同的 TTP(战术、技术和程序)。 * **自定义 Suricata 规则**,结合 `detection_filter` 来捕获重放、DoS 爆发、操纵闪烁和隐蔽通道。 * **自动化验证工具**(`defense/scripts/test_all_attacks.sh`),用于复现攻击并测量告警延迟。 ## 快速开始 ``` # 1 在 Pi 和 attacker 上 Clone repo $ git clone https://github.com/aerovvs/cps-modbus-lab.git # 2 在 Pi 上:启动 Modbus server 和 Suricata IDS $ cd cps-modbus-lab/server && sudo python3 modbus_server.py & $ cd ../defense/scripts && sudo ./start_ids.sh # 3 在 attacker 上:发起你选择的 attack $ cd cps-modbus-lab/attack && sudo python3 .py -i en0 -t ``` 日志保存在 `defense/logs/` 目录中,并由 `analyze_complete.py` 进行解析。 ## 仓库结构 ``` cps-modbus-lab/ ├── server/ # pure socket Modbus daemon (target) ├── attack/ # Scapy attack scripts (attacker) ├── defense/ │   ├── rules/ # Suricata rule set │   ├── scripts/ # IDS helpers + test harness │   └── logs/ # EVE‑JSON alerts ├── docs/ # write‑ups ├── README.md # this file ``` ## 攻击场景 | 脚本 | MITRE ID | 对 LED 的影响 | 检测规则 | | -------------------------- | -------- | ------------- | --------------- | | `continuous_attack.py` | T0855 | 保持 LED 常亮 | `SID 100001` | | `blinking_attack.py` | T0836 | 快速闪烁 | `SID 100002` | | `timed_attack.py` | T0858 | 延时爆发 | `SID 100003` | | `secret_message_attack.py` | T0820 | 摩尔斯电码 | `SID 100004` | ## 检测策略 Suricata 运行在 **AF‑Packet** 模式下,并使用专用的规则文件 `defense/rules/modbus-attacks.rules`。 每条规则利用 `detection_filter` 进行基于速率的异常检测 - 详细分析请参见 **docs/05\_Detection\_Strategy.md**。 ## 硬件接线 您通过 Pi 控制的 LED 代表了真实的工业过程执行器(阀门、水泵、继电器)。 | 数量 | 组件 | 备注 | | ---- | ------------------------- | ---------------------------------- | | 1 | 红色 LED | 作为 ICS 现场设备指示灯 | | 1 | 220 Ω 电阻 | 限制电流 | | 1 | 面包板 | 半块面包板即可 | | 1 | 公对公跳线 | 作为连接桥接 | | 2 | 公对母跳线 | 连接到 GPIO 引脚 | ## MITRE ATT\&CK 映射 | 攻击技术 | ID | | ----------------------- | ----- | | 未经授权的命令 | T0855 | | 更改操作模式 | T0858 | | 修改参数 | T0836 | | 规避利用 | T0820 | 完整映射请参见 **MITRE\_ATTACK\_MAPPING.md**。 ## 免责声明 攻击和服务器脚本的 Ctrl + C 可能无法正常停止。变通方法是先按 Ctrl + Z,然后手动终止进程。 ## 许可证 在 **MIT License** 下分发。详见 `LICENSE`。
标签:Cloudflare, CPS, IoT安全, MITRE ATT&CK, Modbus/TCP, OffSec, PFX证书, PKINIT, PLC, Raspberry Pi, SCADA, Scapy, Suricata, 中间人攻击, 信息物理系统, 入侵检测系统, 内存执行, 协议分析, 命令注入, 哈希传递, 安全实验靶场, 安全数据湖, 工控协议漏洞, 工控安全, 攻击检测, 数据展示, 权限提升, 物联网安全, 现代安全运营, 红队, 网络安全, 逆向工具, 逻辑炸弹, 重放攻击, 隐私保护