| name | implementing-conduit-security-for-ot-remote-access |
| description | 按照IEC 62443区域和管道模型实现OT远程访问的安全管道架构,部署跳板服务器、启用MFA的网关、会话录制和基于审批的工作流,在不直接暴露OT网络的情况下控制供应商和工程师对工业控制系统的访问。
|
| domain | cybersecurity |
| subdomain | ot-ics-security |
| tags | ["ot-security","ics","remote-access","iec62443","jump-server","zero-trust","conduit","mfa"] |
| version | 1.0 |
| author | mahipal |
| license | Apache-2.0 |
为OT远程访问实现管道安全
适用场景
- 将来自IT或供应商直接进入OT控制网络的VPN连接替换为安全管道
- 实现符合IEC 62443的远程访问路径管道架构
- 为第三方供应商维护ICS设备部署安全远程访问
- 为特权OT系统访问构建基于审批的访问工作流
- 修复关于SCADA系统不受控远程访问的审计发现
不适用于设计整体Purdue Model分段(参见implementing-purdue-model-network-segmentation)、部署仅IT远程访问解决方案,或配置对PLC的本地控制台访问。
前置条件
- 使用双防火墙架构部署的IT/OT DMZ(3.5级)
- 跳板服务器或特权访问管理(PAM)平台(CyberArk、BeyondTrust)
- 用于OT远程访问用户的多因素认证(MFA)基础设施
- 用于合规和取证的会话录制能力
- 访问请求的审批工作流系统(ServiceNow、工单系统)
工作流程
步骤 1:设计远程访问管道架构
conduit_architecture:
remote_access_conduit:
conduit_id: "RA-001"
source_zone: "企业IT(4级)"
destination_zone: "OT DMZ(3.5级)"
security_level_target: "SL3"
components:
external_gateway:
type: "VPN集中器"
location: "企业DMZ"
ip: "10.200.1.10"
protocols: ["IPsec", "SSL-VPN"]
authentication: "需要MFA(证书 + OTP)"
dmz_jump_server:
type: "特权访问工作站"
location: "OT DMZ(3.5级)"
ip: "10.10.150.20"
os: "Windows Server 2022(加固版)"
controls:
- "禁用本地管理员账户"
- "禁用USB端口"
- "默认禁用剪贴板传输"
- "启用会话录制(所有击键和屏幕)"
- "最长会话时长: 4小时"
- "空闲15分钟后自动注销"
- "强制执行应用程序白名单"
ot_access_gateway:
type:
步骤 2:实现访问控制和监控
"""OT Remote Access Conduit Manager.
Manages approval-based remote access to OT systems through
secure conduit architecture with session recording, MFA
enforcement, and time-limited access windows.
"""
import json
import sys
from datetime import datetime, timedelta
from typing import Dict, List, Optional
from enum import Enum
class AccessRequestStatus(Enum):
PENDING = "pending"
APPROVED = "approved"
REJECTED = "rejected"
ACTIVE = "active"
EXPIRED = "expired"
REVOKED = "revoked"
class RemoteAccessRequest:
"""Represents an OT remote access request."""
def __init__(self, requestor: str, requestor_type: str, purpose: str,
target_systems: List[str], duration_hours: int,
requested_start: str):
self.id = f"OT-RA-{datetime.now().strftime('%Y%m%d-%H%M%S')}"
self.requestor = requestor
self.requestor_type = requestor_type
self.purpose = purpose
.target_systems = target_systems
.duration_hours = duration_hours
.requested_start = requested_start
.status = AccessRequestStatus.PENDING
.created = datetime.now().isoformat()
.approved_by =
.session_id =
.audit_trail = []
():
.status = AccessRequestStatus.APPROVED
.approved_by = approver
.audit_trail.append({
: datetime.now().isoformat(),
: ,
: approver,
: conditions,
})
():
.status = AccessRequestStatus.REJECTED
.audit_trail.append({
: datetime.now().isoformat(),
: ,
: rejector,
: reason,
})
:
():
.access_requests: [, RemoteAccessRequest] = {}
.active_sessions: [, ] = {}
.policy = ._load_policy()
() -> :
{
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: [, ],
: [, , ],
: [, , ],
}
() -> :
violations = []
request.duration_hours > .policy[]:
violations.append(
)
target request.target_systems:
prohibited .policy[]:
pattern = prohibited.replace(, )
target.startswith(pattern):
violations.append()
violations:
()
v violations:
()
.access_requests[request.] = request
()
request.
():
pending = [r r .access_requests.values()
r.status == AccessRequestStatus.PENDING]
()
()
()
pending:
()
req pending:
()
()
()
()
()
()
()
():
()
()
()
()
()
status_counts = {}
req .access_requests.values():
status = req.status.value
status_counts[status] = status_counts.get(status, ) +
()
status, count status_counts.items():
()
()
req .access_requests.values():
()
()
()
entry req.audit_trail:
()
__name__ == :
manager = OTConduitManager()
vendor_req = RemoteAccessRequest(
requestor=,
requestor_type=,
purpose=,
target_systems=[, ],
duration_hours=,
requested_start=,
)
req_id = manager.submit_request(vendor_req)
req_id:
manager.list_pending_requests()
manager.access_requests[req_id].approve(
approver=,
conditions=,
)
manager.generate_audit_report()
核心概念
| 术语 | 定义 |
|---|
| 管道(Conduit) | IEC 62443中定义了安全策略的安全区域之间的受控通信路径 |
| 跳板服务器(Jump Server) | 位于DMZ中的加固中间服务器,所有OT远程访问必须经过此服务器 |
| 会话录制(Session Recording) | 捕获远程访问会话期间所有屏幕活动、击键和命令,用于审计 |
| 基于审批的访问(Approval-Based Access) | 要求工厂运营经理授权才能激活远程访问凭据的工作流 |
| 供应商陪同(Vendor Escort) | 内部OT工程师实时监控供应商远程会话的做法 |
| 紧急访问(Break-Glass Access) | 关键情况下绕过正常审批工作流的紧急访问程序 |
输出格式
OT远程访问管道报告
==================================
日期: YYYY-MM-DD
管道状态:
内部访问管道: [活跃/非活跃]
供应商访问管道: [活跃/非活跃]
访问请求(过去30天):
已提交: [数量]
已批准: [数量]
已拒绝: [数量]
平均会话时长: [小时]
策略合规性:
MFA执行率: [100%]
会话录制率: [100%]
有时间限制的会话: [合规%]
阻止的禁止目标尝试: [数量]