VISHAKHVIJAYAN/iec62443-risk-assessment

GitHub: VISHAKHVIJAYAN/iec62443-risk-assessment

基于 IEC 62443 标准与机器学习的工业控制系统安全风险评估框架,支持资产合规检查、威胁情报富化与风险等级预测。

Stars: 1 | Forks: 0

# 面向石油和天然气 ICS 安全的 AI 增强 IEC 62443 风险评估框架 **MCA 重大项目 | Amity University Online | Vishakh P** 一款基于 Python 的工具,用于根据 IEC 62443 要求评估 OT/ICS 资产的安全态势。它读取资产清单 CSV,执行基于规则的合规性检查(FR1-FR7,SL 差距),利用真实的 CISA 威胁情报丰富资产信息,使用 Random Forest 模型预测风险,并生成优先级报告。 基于在油气采集作业中积累的 11 年以上 Honeywell Experion DCS、Safety Manager ESD、SCADA 和过程仪表的 OT 实战经验开发。 ## 功能概述 1. 从 CSV/XLSX 加载 **20 字段的资产清单** 2. 运行 **对齐 IEC 62443-3-3** 的 FR1-FR7 合规性检查并计算 SL 差距 3. 利用 **CISA KEV**(已知被利用漏洞)和 **ICS-CERT 公告**证据丰富资产信息 4. 将资产弱点映射到 **MITRE ATT&CK for ICS v18.1** 技术,以提供解释背景 5. 使用 **Random Forest 模型**(18 个特征,3 分类:LOW/MEDIUM/HIGH)预测风险等级 6. 根据过程关键性应用 **后果权重**(Safety-Critical=1.5x 至 Low=0.7x) 7. 输出 CSV 文件、图表、建议和 HTML 报告 ## 风险公式 ``` Vulnerability = 0.60 x (1 - compliance_score) + 0.40 x KEV_score Threat = 0.70 x ML_expected + 0.30 x ICS-CERT_score Likelihood = 0.50 x Vulnerability + 0.50 x Threat Risk = Likelihood x Consequence ``` 风险等级:CRITICAL (>=0.90) | HIGH (>=0.60) | MEDIUM (>=0.30) | LOW (<0.30) CRITICAL 是 ML 之后的后果层级 —— 该模型仅预测 LOW/MEDIUM/HIGH。MITRE ATT&CK 映射仅用于解释/提供建议,不参与数值评分。 ## 快速开始 ### CLI ``` pip install -r requirements.txt # 运行第一个 demo(首次运行时训练 model) python main.py --input sample_inputs/demo_starwar_gas.csv --train --output outputs/starwar_gas # 运行剩余的 demo(使用已保存的 model) python main.py --input sample_inputs/demo_narachi_petrochem.csv --output outputs/narachi_petrochem python main.py --input sample_inputs/demo_thumbad_ammonia.csv --output outputs/thumbad_ammonia ``` ### Flask GUI ``` python app.py # 打开 http://127.0.0.1:5000 ``` 或者在 Windows 上双击 `START_TOOL.bat` —— 它会自动设置 venv 并启动。 ### 测试 ``` python -m pytest tests/ -v ``` ## 项目结构 ``` ├── main.py # CLI entry point ├── app.py # Flask web GUI ├── START_TOOL.bat # Windows launcher (creates venv, installs deps, starts GUI) │ ├── src/ # Active pipeline modules (all imported by assessment_pipeline.py) │ ├── assessment_pipeline.py # Shared backend — both CLI and Flask call this │ ├── asset_loader.py # CSV input parsing (20-field schema) │ ├── iec62443_engine.py # FR1-FR7 compliance + SL gap + recommendations │ ├── zone_conduit_mapper.py # Purdue zone and conduit checks │ ├── kev_enricher.py # CISA KEV lookup by vendor+product │ ├── icscert_enricher.py # ICS-CERT advisory lookup │ ├── mitre_enricher.py # ATT&CK technique mapping (9 rules + CVE cross-ref) │ ├── ml_predictor.py # Random Forest model (18 features) │ ├── risk_aggregator.py # Risk = Likelihood x Consequence │ └── report_generator.py # CSV, charts, recommendations, HTML report │ ├── experimental/ # Future scope / optional reference modules │ └── swat_mapper.py # Optional SWaT attack-pattern reference module (future validation). │ # NOT imported by the active assessment pipeline. │ ├── data/ │ ├── cisa_kev.json # Cached CISA KEV catalog │ ├── icscert_advisories.json # Curated ICS-CERT advisories (80 entries) │ ├── cve_to_technique.json # CVE-to-ATT&CK mapping (31 verified entries) │ ├── mitre_ics_v18_1.json # MITRE ATT&CK for ICS technique data │ ├── training_dataset.csv # ML training data (501 rows, 18 features + metadata) │ └── template_assets.csv # Empty 20-column template │ ├── sample_inputs/ # Three demo facility inventories ├── models/ # Saved Random Forest model (.pkl) ├── tests/ # pytest unit tests ├── templates/ # Flask HTML templates ├── static/ # Flask CSS/JS assets └── tools/ # Data generation scripts ``` ## 输入 Schema(20 个字段) ``` asset_id, asset_name, asset_type, vendor, product, firmware_version, zone, authentication_type, patch_status, network_segmented, internet_facing, remote_access, encryption_enabled, target_sl, process_criticality, communication_protocol, os_end_of_life, has_role_based_access, has_audit_logging, has_redundancy ``` vendor/product/firmware_version 用于 KEV 和 ICS-CERT 匹配 —— 它们不是 ML 特征。 ## 训练数据集说明 `data/training_dataset.csv` 包含 501 条用于训练 Random Forest 模型的合成 OT 资产配置。该文件有 25 列: - **18 个 ML 输入特征**(即 `ml_predictor.py` 中确切的 `FEATURE_NAMES` 列表) - **3 个查询标识符**(不作为特征使用):`vendor`、`product`、`firmware_version` - **3 个元数据/审计追踪列**(不作为 ML 输入特征使用):`compliance_score`、 `final_risk_score` 和 `risk_label`(其中 `risk_label` 是训练目标类) - **1 个派生字段**:`sl_gap`(用作 18 特征向量中的第 15 个特征) `compliance_score` 和 `final_risk_score` 是预计算的参考值,仅出于审计追踪目的包含在内。 它们不会被输入到 Random Forest 编码器中,也不影响模型训练或预测。 ## 演示设施 | 设施 | 安全态势 | 预期结果 | |---|---|---| | Star War Gas Plant | 强化基线 | 在当前的演示运行中全为 LOW 风险 | | Narachi Petrochemical | 混合控制 | MEDIUM/HIGH 风险 | | Thumbad Ammonia Plant | 薄弱安全 | HIGH/CRITICAL 风险 | ## 关键设计决策 - **achieved_sl 始终是计算输出**,绝不是 CSV 输入列 - **SL 启发式算法** 受 IEC 62443-3-3 SR/RE 表启发,并非官方公式 - **kev_max_cvss** 是基于 KEV 描述关键字得出的严重性代理指标,并非真实的 NVD CVSS - **MITRE ATT&CK for ICS v18.1**(2025 年 10 月 28 日)—— 保持引用一致 - **SWaT 原始数据** 不在运行时评分中使用 —— 保留在 `experimental/` 中作为可选参考 - **60/40 的漏洞权重划分** 和 **70/30 的威胁权重划分** 是项目定义的权重 - **风险公式权重** 是为学术优先级划分而由项目定义的,与 IEC 62443 风险方法论概念保持一致 —— 并非官方 IEC 标准系数 ## 标准参考 - IEC 62443-1-1:术语、概念和模型 - IEC 62443-2-1:网络安全管理系统(风险评估方法论) - IEC 62443-3-2:系统设计的安全风险评估 - IEC 62443-3-3:系统安全要求和安全级别 - MITRE ATT&CK for ICS v18.1 - CISA 已知被利用漏洞目录 - CISA ICS-CERT 公告
标签:Apex, Flask, IEC 62443, PKINIT, Python, 威胁情报, 安全规则引擎, 工控安全, 开发者工具, 无后门, 机器学习, 逆向工具