| name | performing-scada-hmi-security-assessment |
| description | 对 SCADA 人机界面(HMI, Human-Machine Interface)系统进行安全评估,识别基于 Web 的 HMI、瘦客户端配置、认证机制以及 HMI 与 PLC 之间通信信道中的漏洞,符合 IEC 62443 和 NIST SP 800-82 指南要求。
|
| domain | cybersecurity |
| subdomain | ot-ics-security |
| tags | ["ot-security","ics","scada","hmi","security-assessment","vulnerability","iec62443","nist-800-82"] |
| version | 1.0 |
| author | mahipal |
| license | Apache-2.0 |
执行 SCADA HMI 安全评估
适用场景
- 评估 SCADA/DCS 环境中 HMI 系统的安全态势
- 评估基于 Web 的 HMI 界面中的常见 Web 漏洞
- 审计 HMI 认证、授权和会话管理
- 测试 HMI 与 PLC/RTU 之间的通信安全
- 为 IEC 62443 或 NERC CIP 合规评估做准备
不适用于在没有维护窗口和回滚计划的情况下测试生产中的活跃 HMI、PLC 级别协议分析(参见 performing-s7comm-protocol-security-analysis),或在非 OT 系统上进行通用 Web 应用测试。
前置条件
- 包含供应商、版本和网络配置详情的 HMI 系统清单
- 镜像生产 HMI 配置的实验室或测试环境(首选用于主动测试)
- 来自工厂运营部门的在维护窗口期间进行测试的授权
- NIST SP 800-82 和 IEC 62443 安全要求文档
- HMI 到 PLC 通信网段上的网络捕获能力
工作流程
步骤 1:评估 HMI 攻击面
"""SCADA HMI 安全评估工具。
根据 IEC 62443 和 NIST SP 800-82 要求,
评估 HMI 在认证、通信、配置和 Web 界面等方面的安全性。
"""
import json
import sys
from datetime import datetime
from typing import Dict, List
try:
import requests
except ImportError:
print("Install requests: pip install requests")
sys.exit(1)
class HMISecurityAssessment:
"""对 SCADA HMI 系统进行安全评估。"""
def __init__(self, hmi_info: dict):
self.hmi_info = hmi_info
self.findings = []
self.checks_run = 0
self.checks_passed = 0
def check_authentication(self):
"""评估 HMI 认证机制。"""
checks = [
{
"id": "AUTH-01",
"name": "密码复杂度执行",
"iec62443_ref": "ISA-62443-3-3 SR 1.7",
"description": "HMI 必须执行最低密码复杂度要求",
"test": "验证最小长度 >= 8,复杂度规则,历史记录 >= 5",
},
{
"id": "AUTH-02",
"name": ,
: ,
: ,
: ,
},
{
: ,
: ,
: ,
: ,
: ,
},
{
: ,
: ,
: ,
: ,
: ,
},
{
: ,
: ,
: ,
: ,
: ,
},
{
: ,
: ,
: ,
: ,
: ,
},
]
()
check checks:
.checks_run +=
()
()
()
():
checks = [
{
: ,
: ,
: ,
: ,
},
{
: ,
: ,
: ,
: ,
},
{
: ,
: ,
: ,
: ,
},
{
: ,
: ,
: ,
: ,
},
]
()
check checks:
.checks_run +=
()
()
():
hmi_url = .hmi_info.get(, )
hmi_url:
()
checks = [
{
: ,
: ,
: ,
: ,
},
{
: ,
: ,
: ,
: ,
},
{
: ,
: ,
: ,
: ,
},
{
: ,
: ,
: ,
},
{
: ,
: ,
: ,
},
]
()
()
check checks:
.checks_run +=
()
()
():
checks = [
{
: ,
: ,
: ,
},
{
: ,
: ,
: ,
},
{
: ,
: ,
: ,
},
{
: ,
: ,
: ,
},
{
: ,
: ,
: ,
},
]
()
check checks:
.checks_run +=
()
()
():
.check_authentication()
.check_communication_security()
.check_web_hmi_security()
.check_hardening()
()
()
()
()
()
()
()
()
()
__name__ == :
assessment = HMISecurityAssessment(hmi_info={
: ,
: ,
: ,
: ,
: ,
: ,
})
assessment.generate_report()
核心概念
| 术语 | 定义 |
|---|
| HMI | 人机界面(Human-Machine Interface),为操作员提供工业过程的可视化表示和控制 |
| Web HMI | 通过 HTTP/HTTPS 访问的基于浏览器的 HMI 界面,受标准 Web 漏洞影响 |
| 设定点(Setpoint) | 操作员可通过 HMI 更改的过程变量目标值;未授权更改可能导致过程中断 |
| 告警抑制(Alarm Suppression) | 攻击者禁用或隐藏 HMI 告警以掩盖恶意过程操纵的技术 |
| WinCC | 西门子 SCADA/HMI 软件,广泛部署于制造业和工艺行业 |
| CVE-2025-0921 | Ignition SCADA 特权文件系统漏洞,可通过恶意项目上传被利用 |
输出格式
HMI 安全评估报告
=================================
日期: YYYY-MM-DD
HMI: [名称] | 供应商: [供应商] | 版本: [版本]
按类别的发现:
认证: [通过/失败数量]
通信: [通过/失败数量]
Web 安全: [通过/失败数量]
加固: [通过/失败数量]
严重发现:
1. [带整改措施的发现]
合规状态:
IEC 62443 SL-T: [目标级别]
IEC 62443 SL-A: [已达成级别]