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, 协议分析, 变异测试, 工控协议, 工控安全, 恶意代码分类, 报文生成, 无后门, 权限提升, 渗透测试工具, 网络安全, 语法测试, 边界值分析, 隐私保护