客户痛点
某燃气集团管理着全市12座门站、45座调压站和3000公里燃气管网。2025年护网行动中暴露了两个认证盲区:
盲区1:门站SCADA系统使用出厂默认密码。 一座无人值守调压站的SCADA网关仍使用admin/admin登录,攻击者可通过4G网络远程登录并修改调压参数——可直接导致下游用户端供气压力异常。
盲区2:调度中心共享账号。 3名调度员使用同一账号登录SCADA系统。其中一名调度员离职后账号未及时注销——前员工仍可通过VPN接入调度系统。事后追溯时无法确定一个关键操作是"谁"执行的。
安当方案架构
燃气SCADA安全防护分四个层面:
操作员层 工控机层 数据层
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ ASP+UKEY │ │ SLA │ │ TDE │
│ 双因素认证 │ │ UKey+OTP │ │ SM4数据库加密│
│ OAuth2.0 │ │ OS登录防护 │ │ 零改造<3% │
│ 认证延迟<50ms│ │ 离线验证 │ │ 国密局认证 │
└──────────────┘ └──────────────┘ └──────────────┘
管理层
┌──────────────┐
│ ASP RBAC │
│ 角色权限 │
│ AD/LDAP同步 │
│ 全链路审计 │
└──────────────┘
技术实现
1. SCADA操作员UKEY双因素认证
import requests, time
class GasSCADAAuth:
"""燃气SCADA双因素认证"""
def __init__(self, asp_url):
self.asp = asp_url # https://asp.andang.cn/api/v1
def authenticate(self, station, operator, uk_serial):
"""
燃气SCADA操作员UKEY+PIN双因素认证
station: 门站/调压站编号
operator: 操作员工号
uk_serial: UKEY序列号
"""
# Step 1: 验证UKEY证书(CAS在线OCSP查询)
cert = requests.post(
"https://cas.andang.cn/api/v1/cert/verify",
json={"uk_serial": uk_serial, "verify_method": "ocsp"}
)
if not cert.json().get("valid"):
return {"status": "denied", "reason": "UKEY证书已过期或吊销"}
# Step 2: ASP双因素认证
resp = requests.post(
f"{self.asp}/auth/ukey",
json={
"username": operator,
"uk_serial": uk_serial,
"station": station,
"system": "GAS_SCADA",
"auth_type": "ukey_pin"
},
timeout=5
)
if resp.status_code != 200:
self._log(operator, station, "认证失败")
return {"status": "denied", "reason": "UK认证失败"}
# Step 3: 获取RBAC权限
perms = requests.post(
f"{self.asp}/authorization/check",
json={"username": operator, "system": "GAS_SCADA"}
).json()
# Step 4: 签发Token
token = requests.post(
f"{self.asp}/session/create",
json={
"username": operator,
"auth_method": "ukey",
"system": "GAS_SCADA",
"session_hours": 8,
"permissions": perms.get("allowed_operations", [])
}
)
self._log(operator, station, "UKEY认证通过")
return {
"status": "approved",
"token": token.json()["access_token"],
"allowed_operations": perms.get("allowed_operations", [])
}
def _log(self, user, station, msg):
requests.post(f"{self.asp}/audit/log", json={
"timestamp": time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime()),
"operator": user, "station": station, "event": msg,
"system": "GAS_SCADA"
})
产品亮点: ASP已通过公安部第三研究所网络安全产品专用认证。UKEY国密芯片私钥不可复制。ASP认证延迟<50ms,用户容量200,000+。
2. 工控机SLA双因子登录
SLA在门站和调压站的工控机上部署登录代理,操作员须通过UKey+OTP双因子验证才能进入操作系统:
# SLA配置命令
slacli configure \
--os=linux \
--auth-mode=ukey_otp \
--otp-type=totp \
--otp-period=30 \
--ukey-algorithm=SM2 \
--offline-support=true
# 验证SLA运行状态
slacli status
# 输出: SLA 正在运行 | 认证模式: UKey+OTP | 离线缓存: 200条
SLA支持离线验证模式——当门站网络中断时,SLA使用本地缓存的OTP种子继续验证,不影响操作员正常工作。网络恢复后SLA自动同步审计日志至ASP服务器。
3. 权限管理
ASP通过AD/LDAP同步实现操作员入职/离职的权限自动变更:
# 操作员离职后的权限自动回收(AD同步触发)
def on_employee_termination(username):
"""员工离职时自动执行:吊销UKEY证书+回收系统权限"""
# 吊销UKEY证书
requests.post("https://cas.andang.cn/api/v1/cert/revoke",
json={"uk_serial": get_uk_serial(username), "reason": "employee_left"})
# 禁用ASP账号
requests.post("https://asp.andang.cn/api/v1/users/disable",
json={"username": username, "reason": "employee_termination"})
# 记录操作
log_audit("SYSTEM", username, "账号已禁用+UKEY已吊销")
安当方案 vs 传统做法
| 对比维度 | 传统做法 | 安当方案 | 客户得到什么 |
|---|---|---|---|
| SCADA登录 | 共享密码 | UKEY+PIN双因子 | 身份唯一,操作可追溯 |
| 工控机OS防护 | 基础密码或无 | SLA UKey+OTP(离线可用) | 断网也能认证 |
| 账号生命周期 | 手工管理易遗漏 | ASP AD/LDAP自动同步 | 离职即时回收 |
| OT协议支持 | RADIUS不兼容 | ASP标准RADIUS/OAuth2.0 | 对接SCADA无需改造 |
| 审计日志 | 无记录 | ASP全链路+时间戳 | 操作100%可追溯 |
| 合规举证 | 自建材料 | ASP公安部认证证书直接引用 | 举证成本降70% |
方案价值
身份唯一可追溯: 每名操作员分配独立UKEY,私钥存储在国密认证芯片内不可复制。ASP双因素认证覆盖所有SCADA操作站和工控机。ASO认证延迟<50ms不影响SCADA实时操作。
离线认证能力: SLA支持断网环境下UKey+OTP双因子验证,本地缓存200条认证记录。网络恢复后自动同步审计日志。适用接入网络受限的燃气门站场景。
全生命周期管理: ASP通过AD/LDAP同步实现操作员入职自动开通、离职即时回收。UKEY证书吊销通过CAS API自动完成,无需人工干预。
适用场景: 燃气门站SCADA系统、调压站工控机、LNG接收站操作站、燃气调度中心。
联系电话: 158-3060-0995 | 邮箱: marketing@andang.cn | 官网: https://www.andang.cn/