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 设备。通过现代深色琥珀色图形界面,对工业协议进行深度发现,检查默认凭据、不安全配置和缺失的加密。




## 概述
该工具为 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漏洞扫描, 信息收集工具, 多格式导出, 工业互联网安全, 工控协议扫描, 工控安全, 工控设备识别, 并发扫描, 弱口令检查, 插件系统, 无线安全, 渗透测试框架, 网络安全审计工具, 网络安全评分, 逆向工具, 防御, 默认口令检测