alosafuzz/icsFuzzer
GitHub: alosafuzz/icsFuzzer
一款支持十种工业控制系统网络协议的模块化模糊测试工具,附带软件响应器用于校准预期行为,帮助研究者在真实硬件上可靠地发现 ICS 设备漏洞。
Stars: 0 | Forks: 0
# icsFuzzer
一个针对工业控制系统 (ICS/OT) 网络协议的模块化 fuzzer。icsFuzzer
生成针对十种协议的畸形和违规流量,对响应进行
分类,并为每个协议提供了一个严格遵循规范的软件响应器,
以便您在接触真实硬件之前就能校准预期行为。
一篇关于此工具在真实硬件(ESP32 和 OpenPLC v3/v4)上发现的漏洞——以及五位
维护者的回应——的详细报告发布在博客上:
[**在真实硬件上 fuzzing 十种 ICS 协议**](https://alosafuzz.github.io/2026/07/30/fuzzing-ten-ics-protocols-on-real-hardware.html)。
## 支持的协议
| 协议 | 默认端口 | 传输协议 |
|---|---|---|
| Modbus | 502 | TCP |
| DNP3 | 20000 | TCP |
| OPC-UA | 4840 | TCP |
| EtherNet/IP | 44818 | TCP |
| IEC 61850 / MMS | 102 | TCP |
| BACnet | 47808 | UDP |
| IEC 104 | 2404 | TCP |
| PROFINET | 34964 | UDP |
| S7comm | 102 | TCP |
| FINS | 9600 | UDP |
## 为什么软件响应器很重要
在实时设备上,连接断开的原因是不明确的——设备可能崩溃了,也可能
是正确地拒绝了一个坏帧。每个协议都附带一个软件响应器,
它将处理的每一个请求记录到 sidecar 文件中,
并记录它是否是有意关闭连接(例如,因为协议 ID 错误)。首先针对
响应器进行校准,每个崩溃指标都会被明确为要么是预期的关闭,要么是一个真正的
漏洞。然后,您就可以相信在真实硬件上看到的差异。
## 安装
需要 Python 3.10+。大多数模块仅依赖标准库。
```
git clone https://github.com/alosafuzz/icsFuzzer
cd icsFuzzer
pip install -r requirements.txt
```
## 快速开始
在任何实时目标之前,先针对软件响应器进行校准:
```
# terminal 1 — 启动 Modbus responder(无需 root;端口 5020)
python3 scripts/modbus_responder.py --output output/
# terminal 2 — fuzz responder
python3 icsFuzzer.py --protocol modbus --target 127.0.0.1:5020 --yes
```
然后将其指向已授权的目标:
```
python3 icsFuzzer.py --protocol s7comm --target 192.168.1.10:102 --yes
python3 icsFuzzer.py --protocol modbus --target 192.168.1.10:502 --delay 0.1
```
有用的标志:`--categories a,b,c`(运行子集),`--dry-run`(生成用例但不
发送),`--rate-limit PPS`,`--replay ` / `--replay-all-crashes`(从之前
运行的日志中重新发送)。
## 输出
运行记录以 JSONL 格式记录在 `output/` 目录下,每个用例一条记录,
包含异常分类和原始请求/响应字节。重新运行报告程序以总结或重放
之前的会话。
## 测试
```
pip install pytest
pytest
```
测试套件涵盖了按协议进行的用例生成,以及直接驱动每个
软件响应器的集成测试。
## 概念验证脚本
[`poc/`](poc/) 目录包含了一小部分用于复现
使用 icsFuzzer 发现的问题的独立脚本。**此处仅包含针对已修复或已公开问题的 PoC。**
针对未修补或未披露问题的复现脚本将暂缓公布,等待协调
披露——请参阅 [poc/README.md](poc/README.md)。
## 扩展它
添加协议模块的端到端文档在
[docs/adding-a-protocol-module.md](docs/adding-a-protocol-module.md) 中,包括那些只在
首次真实运行中才会出现的陷阱(多 ADU 排空、序列号处理、
异常与崩溃的分类、异常后重连)。
## 安全与负责任的使用
使用前请阅读 [SECURITY.md](SECURITY.md)。如果您使用此工具在供应商的产品中发现漏洞,
请在发布前与供应商协调披露事宜。
## 许可证
[MIT](LICENSE) © 2026 Shad Malloy (alosafuzz)。
## 作者
由 Shad Malloy (**alosafuzz**) 构建,独立的 ICS/OT 安全研究。
联系方式:alosafuzz@proton.me
标签:ICS/OT协议, PKINIT, Python, 协议分析, 实时处理, 工控安全, 无后门, 时序数据库, 权限提升, 逆向工具