cjhosea/cps-modbus-lab
GitHub: cjhosea/cps-modbus-lab
基于树莓派的工控协议攻防实验室,用廉价硬件模拟Modbus/TCP攻击与Suricata入侵检测的完整杀伤链。
Stars: 0 | Forks: 0
# CPS Modbus 安全实验室
  [](docs/AttackMethodology.md)
[](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, 中间人攻击, 信息物理系统, 入侵检测系统, 内存执行, 协议分析, 命令注入, 哈希传递, 安全实验靶场, 安全数据湖, 工控协议漏洞, 工控安全, 攻击检测, 数据展示, 权限提升, 物联网安全, 现代安全运营, 红队, 网络安全, 逆向工具, 逻辑炸弹, 重放攻击, 隐私保护