arnavparekar/ics-zoneaudit

GitHub: arnavparekar/ics-zoneaudit

这是一款将工业网络 Nmap 扫描结果自动映射到 IEC 62443 安全区域并生成合规审计报告的 Python 命令行工具。

Stars: 0 | Forks: 0

# ICS-ZoneAudit [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT) [![Python 3.11](https://img.shields.io/badge/python-3.11-3776AB?logo=python&logoColor=white)](https://www.python.org/) [![Nmap](https://img.shields.io/badge/scan-Nmap-2B2B2B?logo=linux&logoColor=white)](https://nmap.org/) [![IEC 62443](https://img.shields.io/badge/Standard-IEC%2062443-005b9f)](https://www.isa.org/standards-and-publications/isa-standards/isa-iec-62443-series-of-standards) 这是一个 Python CLI 工具,它接收工业网络的 Nmap XML 扫描结果,自动将每个发现的资产分类到 **IEC 62443 安全区域**(Purdue 模型)中,检查区域边界和管道违规情况,根据安全强化检查表对每个资产进行评分,并生成结构化的合规审计报告(JSON + HTML)。 ICS-ZoneAudit 让 IEC 62443 区域和管道建模变得触手可及且直观。你可以扫描真实或模拟的网络,并立即查看你的资产拓扑如何映射到该标准,而不是仅仅将标准作为理论来阅读。 ![ICS-ZoneAudit 仪表板](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/3815746a77141212.png) ## 目录 - [背景](#background) - [项目架构](#project-architecture) - [目录结构](#directory-structure) - [启发式方法与规则引擎](#heuristics--rule-engines) - [区域分类](#zone-classification) - [安全强化检查表](#hardening-checklist) - [管道违规](#conduit-violations) - [快速开始](#quick-start) - [自定义拓扑覆盖](#custom-topology-overrides) - [可选的 Docker OT 实验室](#optional-docker-ot-lab) - [示例输出](#sample-output) - [许可证](#license) ## 背景 **IEC 62443** 系列是运营技术(OT)和工业控制系统(ICS)网络安全领域占主导地位的国际标准。IEC 62443 的一个核心概念是将其划分为**区域与管道**: - **区域:** 具有共同安全要求的逻辑或物理资产组(例如,企业、DMZ、控制、现场设备)。 - **管道:** 这些区域之间的通信路径。 保护 OT 网络安全需要确保这些区域被适当地隔离,防火墙位于边界管道上,并且区域内的单个设备根据其目标安全级别(SL)进行了安全强化。 **ICS-ZoneAudit** 将此评估自动化。通过运行标准的网络扫描(Nmap),该工具结合使用端口分析和主机名启发式方法来重建区域模型,发现违规管道(如 PLC 直接将现场网络桥接到企业 LAN),并对资产进行评级。 ## 项目架构 ``` graph TD N[Nmap Scan XML] --> P[XML Parser] T[topology.yaml] -.->|Optional Overrides| C subgraph "ICS-ZoneAudit Engine" P --> C[Zone Classifier] C --> H[Hardening Checker] H --> V[Violation Detector] V --> R[Report Generator] end R -->|Generates| JSON[zoneaudit_report.json] R -->|Generates| HTML[zoneaudit_report.html] ``` 该工具完全静态且离线运行。它通过一系列规则引擎组成的 pipeline 处理 XML 文件,构建出丰富的 `Asset` 对象模型,最后将其传递给 Jinja2 报告生成器。 ## 目录结构 ``` ICS-ZoneAudit/ ├── ics_zoneaudit.py # Main CLI entry-point and orchestrator ├── requirements.txt # Python dependencies (Jinja2, PyYAML, libnmap) │ ├── core_engines/ # (Conceptual) │ ├── classifier.py # Port/hostname heuristics to determine Zones & SLs │ ├── checker.py # Assesses assets against the Hardening Checklist │ ├── violations.py # Evaluates cross-asset relationships for illegal conduits │ └── reporter.py # JSON generation and Jinja2 HTML rendering │ ├── templates/ │ └── report.html.j2 # Jinja2 template for the interactive HTML dashboard │ ├── tests/ │ ├── test_classifier.py # Pytest unit tests for the classification logic │ └── test_checker.py # Pytest unit tests for the hardening logic │ ├── samples/ │ ├── demo_scan.xml # Simulated Nmap XML of a 12-host OT environment │ └── topology.yaml # Example manual override configuration │ └── lab/ ├── docker-compose.yml # Optional simulated OT lab environment └── README.md # Instructions for running the Docker lab ``` ## 启发式方法与规则引擎 ### 区域分类 该工具根据资产暴露的服务将其归入四个区域(企业、DMZ、控制、现场设备)之一。 - **现场设备:** 如果检测到 Modbus (502)、DNP3 (20000) 或 S7comm (102) 等协议端口开放。 - **控制:** 通过 EtherNet/IP (44818)、OPC UA (4840) 等协议以及其他指标,或 `scada` 或 `hmi` 等主机名来检测。 - **DMZ:** 通过远程访问(SSH/RDP)和不包含 ICS 协议的 Web 服务的组合,或特定的主机名(`vpn`、`historian`)来检测。 - **企业:** 缺少任何工业指标的标准 IT 服务(SMB、电子邮件、通用 Web)的默认归类。 ### 安全强化检查表 `checker.py` 引擎根据映射到 IEC 62443-3-3(系统安全要求)和 NIST 800-82 的健全检查表对每个资产进行评估。 | ID | 名称 | 触发条件 | |----|------|-------------------| | **H-01** | Telnet 已禁用 | 23 端口开放。 | | **H-02** | FTP 已禁用 | 21 端口开放。 | | **H-03** | Modbus 未暴露 | 资产位于现场设备区域,502 端口开放,并且没有边界防火墙(根据扫描拓扑推断)。 | | **H-07** | 默认 ICS 凭据已更改 | 检查没有身份验证的特定已知易受攻击的端口。 | | **H-10** | 非双宿主主机 | 资产同时运行强企业协议(RDP)和控制协议。 | | **H-14** | 子网分割 | 现场设备和企业资产共享同一个 /24 子网。 | *(注意:总共有 15 项安全强化检查(H-01 至 H-15),涵盖安全访问、遗留协议和网络规范)。* ### 管道违规 `violations.py` 引擎通过评估资产*之间*的关系来检测架构缺陷。 | ID | 严重程度 | 类型 | 触发条件 | |----|----------|------|-------------------| | **V-001** | 高危 | 双宿主资产 | 资产被分配到特定区域,但在多个子网上拥有 IP(桥接区域)。 | | **V-006** | 高危 | 无防火墙证据 | 现场或控制资产与企业资产位于完全相同的子网上。 | | **V-009** | 中危 | OT 上的企业协议 | 控制或现场资产暴露了典型的 IT 协议(SMB、RDP)且没有 DMZ 代理。 | | **V-012** | 中危 | 不安全的协议 | 在控制或现场设备区域的资产上发现 Telnet/FTP。 | ## 快速开始 ### 1. 安装 需要 Python 3.11+。 ``` git clone https://github.com/arnavparekar/ics-zoneaudit.git cd ics-zoneaudit pip install -r requirements.txt ``` ### 2. 运行示例扫描 使用提供的示例 Nmap XML 测试该工具,该 XML 包含一个模拟的 12 主机 OT 环境及故意设置的缺陷。 ``` python3 ics_zoneaudit.py --input samples/demo_scan.xml --format both ``` 这将立即生成 `zoneaudit_report.json` 和 `zoneaudit_report.html`。在任何浏览器中打开该 HTML 文件即可浏览仪表板。 ### 3. 运行真实扫描 要审计你自己的环境,首先运行带有版本检测(`-sV`)的 Nmap 扫描,并将其输出为 XML(`-oX`): ``` sudo nmap -sV -p- -oX my_network.xml 192.168.1.0/24 192.168.2.0/24 ``` 然后在生成的 XML 文件上运行 ICS-ZoneAudit: ``` python3 ics_zoneaudit.py --input my_network.xml --output my_audit_report ``` ## 自定义拓扑覆盖 由于网络扫描无法完美推断意图,因此分类器启发式方法可以被覆盖。你可以提供一个 `topology.yaml` 文件,将特定的 IP 或整个子网显式绑定到某个区域。 **topology.yaml** ``` zones: Enterprise: - 192.168.1.10 # Exact IP match DMZ: - 192.168.2.0/24 # Entire subnet match Control: - 192.168.3.0/24 Field Device: - 192.168.4.0/24 ``` 使用配置覆盖运行: ``` python3 ics_zoneaudit.py --input my_network.xml --config topology.yaml ``` ## 可选的 Docker OT 实验室 如果你无法访问真实的 ICS 网络进行扫描,此仓库包含了一个使用 Docker Compose 构建的模拟微型 OT 网络。 1. 导航到 `lab/` 目录并启动 stack: cd lab docker compose up -d 2. 扫描实验室环境(假设使用标准的 Docker 网桥 IP 分配): nmap -sV -p- -oX lab_scan.xml 192.168.1.0/24 192.168.2.0/24 192.168.3.0/24 192.168.4.0/24 3. 针对你的新扫描运行审计: python3 ../ics_zoneaudit.py --input lab_scan.xml *有关模拟错误配置的更多详细信息,请参阅 `lab/README.md`。* ## 示例输出 HTML 仪表板采用专业的工业暗色主题来展示审计结果。它包括: - **区域摘要仪表板:** 快速查看在每个区域中发现了多少资产的指标视图。 - **推断的区域拓扑:** 自动生成的 SVG 图表,显示 Purdue 模型层、资产计数以及检测到的任何违规管道(以红色突出显示)。 - **违规表:** 清晰列出架构缺陷、严重程度和受影响资产的表格。 - **详细资产评分卡:** 每个主机的单独卡片,显示其分配的区域、安全级别(SL)、开放端口以及安全强化检查表的通过/失败状态。 ![资产评分卡](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/46536ba1fa141220.png) ## 许可证 该项目基于 MIT 许可证授权 — 有关详细信息,请参阅 [LICENSE](LICENSE) 文件。
标签:CTI, ICS, IEC 62443, Nmap, NTLM Relay, OT安全, Python, 恶意代码分类, 插件系统, 无后门, 虚拟驱动器, 请求拦截, 逆向工具