AlixAbbasi/Modbus-Fuzzer
GitHub: AlixAbbasi/Modbus-Fuzzer
一款基于语法的Modbus协议模糊测试工具,通过协议感知的测试用例生成替代传统暴力枚举,用于发现工控设备的安全漏洞。
Stars: 50 | Forks: 24
# Modbus Fuzzer v1.0 - 基于语法的 Modbus 模糊测试工具
这是一款重写的 Modbus 模糊测试工具,它利用协议语法进行测试,而非暴力破解。
## v1.0 的主要改进
### **基于语法的模糊测试**
- **旧版**: 通过 6 层嵌套循环暴力枚举 255^6 = 281,474,976,710,656 种组合
- **新版**: 基于功能码规范的协议感知测试用例生成
### **测试生成**
- 覆盖 15+ 种功能码的完整 Modbus 协议语法
- 边界值测试与边缘情况检测
- 基于变异的有效数据包模糊测试
- 状态感知的序列测试
### **现代架构**
- 兼容 Python 3.7+(从 Python 2 迁移)
- 面向对象设计,组件模块化
- 错误处理与重试逻辑
- 结构化日志记录与详细报告
### **分析功能**
- 响应模式识别与分类
- 行为覆盖率追踪
- 发现检测与标记
- 包含完整会话分析的 JSON 报告
### **灵活配置**
- YAML 配置文件
- 多种模糊测试策略
- 可配置的时序与重试参数
- 采用子命令模式的现代 CLI
## 快速开始
### 安装
```
# 克隆 repository
git clone https://github.com/AlixAbbasi/Modbus-Fuzzer.git
cd Modbus-Fuzzer
# 安装 dependencies (Python 3.7+)
pip3 install -r requirements.txt
# 可选:安装 PyYAML 以支持配置
pip3 install PyYAML
```
### 基本用法
```
# 基于 Grammar 的 fuzzing
python3 modFuzzer.py --grammar 192.168.1.100
# 测试特定 function codes
python3 modFuzzer.py --grammar 192.168.1.100 --functions 3,6,16
# 多种策略
python3 modFuzzer.py --grammar 192.168.1.100 --strategies grammar_based,boundary_values,mutation
# 发送自定义 packet
python3 modFuzzer.py --packet 192.168.1.100 0000000000060103000A0001
# 扫描网络以发现设备
python3 modFuzzer.py --scan 192.168.1.0/24
# 自定义配置
python3 modFuzzer.py --grammar 192.168.1.100 --config my_config.yaml
```
## 模糊测试策略
1. **基于语法**: 利用协议语法生成有效数据包
2. **边界值**: 测试边缘情况与边界条件
3. **变异**: 对有效数据包进行变异以发现边缘情况
4. **压力测试**: 高并发量测试,用于检测竞态条件
5. **基于状态**: 测试操作序列
## 支持的功能码
| Code | Name | Description |
|------|------|-------------|
| 01 | Read Coils | 读取 1-2000 个线圈状态 |
| 02 | Read Discrete Inputs | 读取 1-2000 个离散输入状态 |
| 03 | Read Holding Registers | 读取 1-125 个保持寄存器 |
| 04 | Read Input Registers | 读取 1-125 个输入寄存器 |
| 05 | Write Single Coil | 写入单个线圈 |
| 06 | Write Single Register | 写入单个寄存器 |
| 08 | Diagnostics | 诊断功能 |
| 15 | Write Multiple Coils | 写入多个线圈 |
| 16 | Write Multiple Registers | 写入多个寄存器 |
| 20 | Read File Record | 文件记录读取操作 |
| 21 | Write File Record | 文件记录写入操作 |
| 23 | Read/Write Multiple Registers | 组合读写操作 |
## 配置
示例 `config.yaml`:
```
target:
host: "192.168.1.100"
port: 502
timeout: 0.5
fuzzing:
strategies:
- "grammar_based"
- "boundary_values"
max_tests_per_function: 1000
delay_between_tests: 0.01
logging:
level: "INFO"
file_output: true
log_file: "fuzzer.log"
```
## 输出与报告
- **控制台**: 实时进度与摘要
- **日志文件**: 详细的执行日志
- **JSON 报告**: 包含发现结果的完整会话分析
- **统计数据**: 覆盖率指标与性能数据
## 可用命令
```
# 基于 Grammar 的 fuzzing
python3 modFuzzer.py --grammar
# 发送自定义 hex packet
python3 modFuzzer.py --packet
# 扫描网络以发现 Modbus 设备
python3 modFuzzer.py --scan
# 显示帮助和受支持的 function codes
python3 modFuzzer.py --help
```
## 架构
```
modFuzzer.py # Main CLI interface
config.yaml # Default configuration
config_manager.py # Configuration handling
fuzzer_core.py # Fuzzing engine
modbus_connection.py # Connection management
modbus_grammar.py # Protocol grammar definitions
modbus_packet.py # Packet construction/parsing
requirements.txt # Python dependencies
```
## 版本历史
- **v1.0** (2025): 完全重写,引入基于语法的模糊测试
- **v0.5** (2014): 增加特定功能码的模糊测试
- **v0.2** (2013): 增加扫描功能
- **v0.1** (2013): 初始发布
## 性能对比
| Metric | Old (v0.5) | New (v1.0) | Improvement |
|--------|------------|------------|-------------|
| 方式 | 暴力循环 | 基于语法的生成 | 针对性测试 |
| 数据包有效性 | 大部分数据包无效 | 所有数据包有效 | 100% 有效数据包 |
| 测试覆盖率 | 随机数据模式 | 协议感知的测试用例 | 系统化覆盖 |
| 配置复杂度 | 手动配置 | 配置文件自动化 | 简化配置 |
| 分析能力 | 基础日志 | 结构化报告 | 详细分析 |
| Python 版本 | 2.x (已弃用) | 3.7+ | 现代兼容性 |
## 贡献
这是一个用于安全测试的研究工具。请负责任地使用,且仅限于您拥有或经授权测试的系统。
## 许可证
仅供教育和研究使用。
## 致谢
- 原作者: Ali, TJ
- v1.0 重写: 基于语法的架构与现代 Python 实现
欲了解更多信息,请访问: http://sigint.ir/blog/?p=14
标签:ICS安全, Modbus协议, OT安全, PKINIT, Python, SCADA安全, 代码生成, 关键基础设施, 协议Fuzzer, 协议分析, 变异测试, 工控协议, 工控安全, 恶意代码分类, 报文生成, 无后门, 权限提升, 渗透测试工具, 网络安全, 语法测试, 边界值分析, 隐私保护