GarethMSheldon/IoT-Security-Audit-Tool

GitHub: GarethMSheldon/IoT-Security-Audit-Tool

一款面向 OT/ICS/SCADA 和 IoT 设备的 Python 安全审计工具包,通过深度工业协议探测和合规对标帮助识别工控网络资产风险。

Stars: 1 | Forks: 0

# OT/ICS Security Auditor – Python GUI 版本 一款全面的基于 Python 的安全评估工具包,用于 OT(操作技术)、ICS(工业控制系统)、SCADA 和 IoT 设备。通过现代深色琥珀色图形界面,对工业协议进行深度发现,检查默认凭据、不安全配置和缺失的加密。 ![License](https://img.shields.io/badge/license-MIT-blue.svg) ![Python](https://img.shields.io/badge/Python-3.7%2B-blue.svg) ![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20Linux%20%7C%20macOS-lightgrey.svg) ![Version](https://img.shields.io/badge/version-v1.2-green.svg) ## 概述 该工具为 OT 网络的主动侦察提供了一个直观的 GUI。它支持 20 多种工业协议、并发扫描、实时进度和风险评分。结果可以导出为 CSV、JSON、XML 和 PDF(可选)。 **支持的协议 (23+):** - Modbus TCP/UDP (端口 502) - S7comm / S7 Plus (Siemens, 端口 102) - DNP3 (端口 20000) - IEC 60870-5-104 (端口 2404) - OPC UA (端口 4840) - EtherNet/IP (CIP, 端口 44818) - BACnet/IP (UDP 47808) - Profinet DCP (UDP 34980) - MQTT (1883) / MQTTS (8883) - CoAP (UDP 5683) - FINS (Omron, UDP 9600) - Telnet, FTP, HTTP/HTTPS (80,443,8080,8443) - SRTP (GE Fanuc, 18245) - Crimson v3 (Red Lion, 789) - Melsec-Q (Mitsubishi, 5007) - 以及更多… **核心功能:** - 🖥️ **深色琥珀色 GUI** – 保护眼睛,工业主题 - ⚡ **并发扫描** – 可调整的线程池 (默认为 50) - 📡 **实时日志与发现表格** – 即时反馈 - 🔐 **默认凭据测试** – 检查 HTTP/HTTPS 接口上的 16+ 种常见密码 - 📊 **风险评分** – 针对单个设备和整体进行评分 (0–100, 4 个风险层级) - 📄 **多格式导出** – CSV, JSON, XML 和 PDF (需要 `reportlab`) - 🗺️ **灵活的目标输入** – 单个 IP, CIDR (例如, 192.168.1.0/24), 范围 (10.0.0.1-254) - 🔄 **取消按钮** – 优雅地停止长时间运行的扫描 - 📈 **内置建议** – 基于 IEC 62443 和 NIST SP 800-82 ## 安装说明 ### 克隆仓库 ``` git clone https://github.com/GarethMSheldon/IoT-Security-Audit-Tool.git cd IoT-Security-Audit-Tool ``` ### 依赖项 该工具仅使用 Python 标准库和 `tkinter` (随 Python 附带)。若要导出 PDF,请安装 `reportlab` (可选): ``` pip install reportlab ``` 在 **Linux** 上,您可能需要单独安装 `python3-tk`: ``` sudo apt-get install python3-tk # Debian/Ubuntu sudo dnf install python3-tkinter # Fedora ``` 在 **Windows** 和 **macOS** 上,tkinter 默认已包含。 ## 运行工具 ``` python IoTSecurityAuditor.py ``` 无需命令行参数 – 所有配置均在 GUI 内完成。 ## 使用 GUI ### 主布局 - **左侧面板** – 目标输入、协议选择、扫描选项和操作按钮。 - **右侧面板** – 选项卡视图:实时日志、发现表格、风险摘要、完整报告。 ### 逐步扫描 1. **输入目标** – 单个 IP (例如, `192.168.1.100`), CIDR (`192.168.1.0/24`) 或范围 (`10.0.0.1-254`)。使用逗号分隔多个目标。 2. **调整超时和线程** – 超时时间以毫秒为单位 (默认 2000), 线程数 (默认 50)。 3. **选择协议** – 使用 “☑ ALL PROTOCOLS” 或单独选取。 4. **启用可选测试** – “Test default credentials” (推荐)。 5. **点击 “START SCAN”** – 观察实时日志和进度条。 6. **扫描完成后**, 在 “FINDINGS” 选项卡、“RISK SUMMARY” 和 “FULL REPORT” 中查看发现结果。 7. **导出结果** – 使用 CSV, JSON, XML 或 PDF 按钮。 ### 理解风险评分 | 分数范围 | 风险等级 | 颜色 | |-------------|------------|-------| | 0–19 | SECURE / LOW | 绿色 / 黄色 | | 20–49 | MEDIUM | 橙色 | | 50–74 | HIGH | 红色 | | 75–100 | CRITICAL | 亮红色 | 该分数根据协议风险标签加权计算 (CRITICAL=40, HIGH=25, MEDIUM=10, LOW=5, INFO=2)。 ### 建议 该工具包含基于检测到的协议的最佳实践修复静态列表。请始终将自动化扫描与手动验证相结合。 ## 命令行模式 对于脚本编写或无头环境,同一脚本支持 CLI 模式: ``` python IoTSecurityAuditor.py --cli --target 192.168.1.0/24 --cred-test ``` 可用参数: | 参数 | 描述 | |----------|-------------| | `--cli` | 启用命令行界面 (无 GUI) | | `--target` (或 `-t`) | 单个 IP, CIDR 或范围 | | `--outfile` (或 `-o`) | 输出 CSV 文件路径 | | `--timeout` (或 `-to`) | 超时 (毫秒) | | `--cred-test` | 测试 Web 接口上的默认凭据 | | `--detailed` | 显示详细输出 | ## 输出文件 当扫描完成时,该工具可以自动保存: - **CSV** – 包含所有发现结果的可机读列表。 - **文本报告** – 人类可读的摘要 (如果启用则自动保存)。 可以通过导出按钮进行手动导出 (CSV, JSON, XML, PDF)。 CSV 列名示例: ``` ip,protocol,port,category,risk,detail 192.168.1.10,Modbus TCP,502,ICS/PLC,CRITICAL – unauthenticated read/write of registers,Modbus RTU unit=1... ``` ## 故障排除 ### GUI 未出现 / 缺少 tkinter - **Linux:** 按上述说明安装 `python3-tk`。 - **Windows/macOS:** 重新安装 Python 并确保选中了 “tcl/tk”。 ### PDF 导出失败 安装 `reportlab`: ``` pip install reportlab ``` ### 扫描未发现设备 - 确认目标范围是否正确。 - 检查防火墙规则 – 探测需要到指定端口的外部访问权限。 - 针对较慢的工业网络,请增加超时时间 (例如, 3000–5000 毫秒)。 - 某些设备可能对默认探测无响应 (非标准实现)。 ### “Partial Modbus response” 消息 设备可能使用了不同的单元标识符或需要不同的功能码。建议进行手动验证。 ## 仓库结构 ``` IoT-Security-Audit-Tool/ ├── IoTSecurityAuditor.py # Main GUI / CLI scanner ├── README.md # This file ├── license_file.md # MIT License └── (other assets) ``` ## 许可证 本项目基于 MIT 许可证授权 – 详见 [license_file.md](license_file.md)。 在遵守 MIT 许可证条款的前提下,您可以出于任何目的自由使用、修改和分发本软件。 ## 免责声明 本工具执行主动网络侦察。请仅在您拥有或已获得明确测试授权的网络上使用。作者不对因滥用本软件或由此造成的损害承担任何责任。 ## 作者与致谢 - **原始 PowerShell 版本** – Gareth Sheldon - **Python GUI 移植与统一** – Gareth Sheldon 及社区 灵感来源于现实世界的 OT 安全评估、工业协议规范,以及对跨平台、零依赖审计工具的需求。 特别感谢 tkinter 社区和工业控制系统安全研究人员。 ## 联系与支持 - **问题**: [GitHub Issues](https://github.com/GarethMSheldon/IoT-Security-Audit-Tool/issues) - **讨论**: [GitHub Discussions](https://github.com/GarethMSheldon/IoT-Security-Audit-Tool/discussions) **最后更新**:2026 年 4 月 26 日 **当前版本**:v1.2 **维护者**:Gareth Sheldon
标签:BACnet, DNP3, EtherNet/IP, GUI安全工具, ICS安全评估, IEC 62443, IoT安全, Libemu, NIST SP 800-82, OPC UA, OT安全, PDF报告生成, PKINIT, Profinet, Python安全工具, S7comm, SCADA渗透测试, SCADA漏洞扫描, 信息收集工具, 多格式导出, 工业互联网安全, 工控协议扫描, 工控安全, 工控设备识别, 并发扫描, 弱口令检查, 插件系统, 无线安全, 渗透测试框架, 网络安全审计工具, 网络安全评分, 逆向工具, 防御, 默认口令检测