z4y-d3n/modbus-mirage-plc
GitHub: z4y-d3n/modbus-mirage-plc
一个交互式异步 Modbus TCP 虚拟 PLC 模拟器,通过生成实时遥测数据为 OT/ICS 安全学习提供高仿真靶标环境。
Stars: 0 | Forks: 0
# Modbus Mirage PLC




## 概述
**Modbus Mirage** 是一个交互式的异步 Modbus TCP 虚拟 PLC 模拟器,专为操作技术 (OT) 和工业控制系统 (ICS) 的安全学习而设计。
与静态蜜罐不同,Modbus Mirage 会主动生成实时遥测数据(例如波动的温度和系统脉冲),以提供更真实的攻击面。它模拟了 Siemens SIMATIC S7-1200 CPU 的身份(可在代码中自定义),为用户提供了一个可靠的靶标,用于练习使用深度包检测 (DPI) 进行安全审计、验证 IDS/IPS 规则,以及对 Modbus TCP 协议进行战术性漏洞利用。
## 法律免责声明和使用条款
本软件严格仅用于授权的安全审计、学术研究和防御性工程。作者不对滥用、未经授权的访问或在没有适当隔离的情况下在生产环境中部署承担任何责任。在没有明确授权的情况下,在运行的 OT 网络上部署蜜罐或诱饵系统会带来严重的操作风险。
## 预期使用场景
* **IDS/IPS 规则验证:** 通过向模拟器生成真实的流量,测试针对 Modbus TCP 功能(例如,读保持寄存器、写单个线圈)的 Snort/Suricata 规则。
* **OT 蜜罐:** 在企业网络中部署诱饵 PLC,以检测横向移动、未经授权的侦察(例如,Nmap 扫描)或漏洞利用尝试。
* **工具开发:** 作为可靠的本地测试端点,供创建自定义 ICS 漏洞扫描器或协议模糊测试器的开发人员使用。
## 核心功能
* **实时遥测引擎:** 使用实时的 Heartbeat 计数器和动态波动的温度值持续更新输入寄存器,以对抗基本的静态分析指纹识别。
* **严格的内存绑定:** 完全将块内存与基于 0 的索引对齐,以确保与外部审计工具和硬件扫描器的完美兼容性。
* **跨平台和无头支持:** 在 Windows、Linux 或 macOS 上无缝运行。包含带有“防闪烁”技术的交互式控制台 UI,以及用于后台守护进程执行的完全无头模式。
* **设备伪装:** 使用合法的供应商、产品代码和修订元数据响应 Modbus 设备标识请求 (Function 43/14)。
## OT 内存映射(攻击面)
安全审计员和攻击者可以与以下暴露的内存区域进行交互:
| 区域 | 功能码 (读/写) | 地址 | 数据类型 | 描述 / 用途 |
| :--- | :--- | :--- | :--- | :--- |
| **输入寄存器 (IR)** | `04` (只读) | `0` | INT16 | **系统心跳:** 持续递增。 |
| **输入寄存器 (IR)** | `04` (只读) | `1` | INT16 | **机器 1 温度:** 在 45.0 °C 上下波动。 |
| **线圈 (CO)** | `01` / `05` / `15` | `0` 到 `15` | BOOL | **执行器:** 交互式二进制输入(阀门、电机)。 |
| **保持寄存器 (HR)** | `03` / `06` / `16` | `0` 到 `4` | INT16 | **过程设定值:** 用于 DB 操作测试的读/写静态内存。 |
## 安装与部署
### 选项 A: Docker 部署(推荐用于实验室环境)
在隔离环境或虚拟网络中部署 Modbus Mirage 的最简单方法。
1. 克隆仓库并导航至该目录。
2. 在后台构建并启动容器:
docker-compose up -d
3. 虚拟 PLC 现在正在监听端口 `502`。要查看实时日志(如果在没有使用 `--quiet` 标志的情况下运行),请使用:`docker logs -f modbus_mirage_s7`。
### 选项 B: 原生 Python 执行
适用于本地开发或直接在 Raspberry Pi 等硬件上运行。
1. 安装所需的异步依赖项:
pip install -r requirements.txt
2. 执行脚本:
注意:在 Linux/macOS 上,绑定到端口 502 需要 root 权限。
sudo python modbus_mirage.py
## 界面与 CLI 使用
Modbus Mirage 具有双模式执行策略:
### 1. 交互模式
如果您在不带任何参数的情况下运行脚本(`sudo python modbus_mirage.py`),它将启动一个战术 CLI 界面。它会自动扫描您主机上可用的网络接口,提示您选择一个绑定 IP,并部署实时更新遥测数据的实时 UI。
### 2. 自动化 / 无头模式 (CLI 解析器)
要在 bash 脚本、启动例程或自动化实验室中部署,请使用内置的参数解析器以绕过交互式提示。
| 参数 | 短选项 | 描述 | 示例 |
| :--- | :---: | :--- | :--- |
| `--ip` | `-i` | 强制指定绑定 IP 地址。 | `-i 127.0.0.1` |
| `--port` | `-p` | 覆盖默认的 Modbus 端口。 | `-p 502` |
| `--quiet` | `-q` | 禁用控制台 UI,以进行静默后台执行。 | `-q` |
**示例(在自定义端口上的无头执行):**
sudo python modbus_mirage.py -i 0.0.0.0 -p 5020 --quiet
## 概念验证:发现扫描
部署完成后,模拟器会准确响应标准的 ICS 枚举策略。运行 Nmap Modbus 发现脚本将产生以下输出:
$ nmap -sV -p 502 --script modbus-discover 127.0.0.1
PORT STATE SERVICE VERSION
502/tcp open modbus
| modbus-discover:
| sid 0x1:
| Slave ID data: Siemens-SIMATIC S7-1200-V4.5\xFF
|_ Device identification: Siemens SIMATIC S7-1200 V4.5
## 许可证
本项目根据 GNU 通用公共许可证 v3.0 授权。有关完整详细信息,请参阅 `LICENSE` 文件。
## 作者
**z4y_d3n**
* GitHub: https://github.com/z4y-d3n
标签:AWS, Docker, DPI, ICS安全, IDS/IPS规则验证, Modbus TCP, Nmap扫描, OT安全, PKINIT, PLC仿真器, Python, Siemens S7-1200, Suricata, 交互式蜜罐, 协议分析, 安全防御评估, 工业控制系统, 工控协议模糊测试, 工控安全, 异步编程, 插件系统, 无后门, 权限提升, 横向移动检测, 深度包检测, 漏洞修复, 现代安全运营, 网络安全分析, 网络安全培训, 蓝队演练, 虚拟PLC, 蜜罐, 计算机取证, 证书利用, 请求拦截, 遥测数据生成