implementing-iec-62443-security-zones
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseImplementing IEC 62443 Security Zones
实施IEC 62443安全区域
When to Use
适用场景
- When designing a greenfield OT network architecture for a new industrial facility
- When retrofitting security zones into an existing flat OT network after an assessment finding
- When implementing network segmentation to comply with IEC 62443-3-2 certification requirements
- When upgrading from basic VLAN segmentation to policy-enforced zone/conduit architecture
- When an IT/OT convergence project requires defining security boundaries between enterprise and operational networks
Do not use for IT-only network segmentation (see implementing-network-microsegmentation), for cloud-native workload segmentation (see securing-kubernetes-on-cloud), or for physical security zone design without a cyber component.
- 为新建工业设施设计全新的OT网络架构时
- 评估发现问题后,为现有扁平化OT网络改造安全区域时
- 实施网络分段以满足IEC 62443-3-2认证要求时
- 从基础VLAN分段升级为策略强制的区域/通信管道架构时
- IT/OT融合项目需要定义企业网络与运营网络之间的安全边界时
不适用场景:仅针对IT网络的分段(请参考implementing-network-microsegmentation)、云原生工作负载的分段(请参考securing-kubernetes-on-cloud),或无网络安全组件的物理安全区域设计。
Prerequisites
前置条件
- Completed OT network security assessment with asset inventory and traffic flow analysis
- Understanding of IEC 62443-3-2 zone/conduit design process and the Purdue Reference Model
- Industrial firewalls capable of deep packet inspection for OT protocols (Palo Alto with OT Security, Fortinet OT, Cisco ISA-3000)
- Network switches supporting VLANs, 802.1Q trunking, and port security
- Approval from operations management for network architecture changes during maintenance windows
- 已完成OT网络安全评估,包含资产清单和流量分析
- 理解IEC 62443-3-2的区域/通信管道设计流程以及普渡参考模型
- 支持OT协议深度包检测的工业防火墙(如带OT Security的Palo Alto、Fortinet OT、Cisco ISA-3000)
- 支持VLAN、802.1Q trunking和端口安全的网络交换机
- 运营管理部门批准在维护窗口期进行网络架构变更
Workflow
实施流程
Step 1: Perform Zone Partitioning Based on Risk Assessment
步骤1:基于风险评估进行区域划分
Partition the IACS into zones based on functional requirements, security requirements, criticality, and consequence of compromise. Each zone contains assets with common security requirements.
yaml
undefined根据功能需求、安全要求、关键程度和被入侵后的影响,将IACS划分为不同区域。每个区域包含具有相同安全要求的资产。
yaml
undefinedIEC 62443-3-2 Zone Definition Document
IEC 62443-3-2 Zone Definition Document
facility: "Petrochemical Refinery - Unit 3"
assessment_date: "2026-02-23"
standard: "IEC 62443-3-2:2020"
zones:
-
zone_id: "Z1-SIS" name: "Safety Instrumented Systems" purdue_level: 1 security_level_target: "SL 3" criticality: "Safety Critical" assets:
- "Triconex 3008 Safety Controller (SIS-01)"
- "Triconex 3008 Safety Controller (SIS-02)"
- "SIS Engineering Workstation" security_requirements:
- "Physically isolated from all other zones (air-gapped)"
- "Dedicated engineering workstation with removable media controls"
- "No remote access permitted under any circumstances"
- "Change management requires dual authorization" allowed_conduits: [] # No network conduits - fully air-gapped
-
zone_id: "Z2-BPCS" name: "Basic Process Control System" purdue_level: "1-2" security_level_target: "SL 2" criticality: "High" assets:
- "Allen-Bradley ControlLogix PLCs (PLC-01 through PLC-12)"
- "Rockwell FactoryTalk View HMIs (HMI-01 through HMI-06)"
- "Engineering Workstation (EWS-01)" security_requirements:
- "Industrial firewall at zone boundary with protocol inspection"
- "Read-only access from Level 3 for data acquisition"
- "Write access restricted to engineering workstation subnet"
- "USB ports disabled on HMIs" allowed_conduits: ["C1-BPCS-OPS"]
-
zone_id: "Z3-OPS" name: "Site Operations" purdue_level: 3 security_level_target: "SL 2" criticality: "Medium" assets:
- "OSIsoft PI Historian (HIST-01)"
- "OPC UA Server (OPC-01)"
- "MES Application Server (MES-01)"
- "Alarm Management Server (ALM-01)" security_requirements:
- "Firewall between operations and control zones"
- "Firewall between operations and DMZ"
- "No direct internet access"
- "Antivirus with OT-approved signatures" allowed_conduits: ["C1-BPCS-OPS", "C2-OPS-DMZ"]
-
zone_id: "Z4-DMZ" name: "Industrial Demilitarized Zone" purdue_level: 3.5 security_level_target: "SL 2" criticality: "Medium" assets:
- "PI-to-PI Interface (DMZ-HIST-01)"
- "Patch Management Server (DMZ-WSUS-01)"
- "Remote Access Jump Server (DMZ-JUMP-01)"
- "Data Diode - Waterfall Security (DMZ-DD-01)" security_requirements:
- "Dual-homed firewalls on both sides"
- "No direct traffic traversal - all connections terminate in DMZ"
- "Data diode for unidirectional historian replication"
- "Jump server with MFA for remote access" allowed_conduits: ["C2-OPS-DMZ", "C3-DMZ-ENT"]
-
zone_id: "Z5-ENT" name: "Enterprise Network" purdue_level: 4 security_level_target: "SL 1" criticality: "Low (from OT perspective)" assets:
- "Corporate systems accessing OT data" security_requirements:
- "Firewall between enterprise and DMZ"
- "No direct access to any OT zone below DMZ" allowed_conduits: ["C3-DMZ-ENT"]
conduits:
-
conduit_id: "C1-BPCS-OPS" name: "Control-to-Operations Conduit" connects: ["Z2-BPCS", "Z3-OPS"] security_level: "SL 2" protocols_allowed:
- protocol: "OPC UA" port: 4840 direction: "Z2 -> Z3 (read only)" security_mode: "SignAndEncrypt"
- protocol: "Modbus/TCP" port: 502 direction: "Z3 -> Z2 (read only, FC 3/4 only)" security_mode: "Firewall-enforced function code filtering" controls:
- "Industrial firewall with OT protocol DPI"
- "Allowlisted source/destination IP pairs"
- "Function code filtering (block all write operations from L3)"
- "Connection rate limiting"
-
conduit_id: "C2-OPS-DMZ" name: "Operations-to-DMZ Conduit" connects: ["Z3-OPS", "Z4-DMZ"] security_level: "SL 2" protocols_allowed:
- protocol: "PI-to-PI" port: 5450 direction: "Z3 -> Z4 (unidirectional via data diode)"
- protocol: "HTTPS" port: 443 direction: "Z4 -> Z3 (patch downloads only)" controls:
- "Data diode for historian replication (Waterfall Security)"
- "Firewall with application-layer inspection"
- "Patch server pulls only from approved vendor repositories"
-
conduit_id: "C3-DMZ-ENT" name: "DMZ-to-Enterprise Conduit" connects: ["Z4-DMZ", "Z5-ENT"] security_level: "SL 1" protocols_allowed:
- protocol: "HTTPS" port: 443 direction: "Z5 -> Z4 (historian read, remote access portal)"
- protocol: "RDP" port: 3389 direction: "Z5 -> Z4 (jump server with MFA)" controls:
- "Next-gen firewall with SSL inspection"
- "MFA required for all remote access sessions"
- "Session recording on jump server"
undefinedfacility: "Petrochemical Refinery - Unit 3"
assessment_date: "2026-02-23"
standard: "IEC 62443-3-2:2020"
zones:
-
zone_id: "Z1-SIS" name: "Safety Instrumented Systems" purdue_level: 1 security_level_target: "SL 3" criticality: "Safety Critical" assets:
- "Triconex 3008 Safety Controller (SIS-01)"
- "Triconex 3008 Safety Controller (SIS-02)"
- "SIS Engineering Workstation" security_requirements:
- "Physically isolated from all other zones (air-gapped)"
- "Dedicated engineering workstation with removable media controls"
- "No remote access permitted under any circumstances"
- "Change management requires dual authorization" allowed_conduits: [] # No network conduits - fully air-gapped
-
zone_id: "Z2-BPCS" name: "Basic Process Control System" purdue_level: "1-2" security_level_target: "SL 2" criticality: "High" assets:
- "Allen-Bradley ControlLogix PLCs (PLC-01 through PLC-12)"
- "Rockwell FactoryTalk View HMIs (HMI-01 through HMI-06)"
- "Engineering Workstation (EWS-01)" security_requirements:
- "Industrial firewall at zone boundary with protocol inspection"
- "Read-only access from Level 3 for data acquisition"
- "Write access restricted to engineering workstation subnet"
- "USB ports disabled on HMIs" allowed_conduits: ["C1-BPCS-OPS"]
-
zone_id: "Z3-OPS" name: "Site Operations" purdue_level: 3 security_level_target: "SL 2" criticality: "Medium" assets:
- "OSIsoft PI Historian (HIST-01)"
- "OPC UA Server (OPC-01)"
- "MES Application Server (MES-01)"
- "Alarm Management Server (ALM-01)" security_requirements:
- "Firewall between operations and control zones"
- "Firewall between operations and DMZ"
- "No direct internet access"
- "Antivirus with OT-approved signatures" allowed_conduits: ["C1-BPCS-OPS", "C2-OPS-DMZ"]
-
zone_id: "Z4-DMZ" name: "Industrial Demilitarized Zone" purdue_level: 3.5 security_level_target: "SL 2" criticality: "Medium" assets:
- "PI-to-PI Interface (DMZ-HIST-01)"
- "Patch Management Server (DMZ-WSUS-01)"
- "Remote Access Jump Server (DMZ-JUMP-01)"
- "Data Diode - Waterfall Security (DMZ-DD-01)" security_requirements:
- "Dual-homed firewalls on both sides"
- "No direct traffic traversal - all connections terminate in DMZ"
- "Data diode for unidirectional historian replication"
- "Jump server with MFA for remote access" allowed_conduits: ["C2-OPS-DMZ", "C3-DMZ-ENT"]
-
zone_id: "Z5-ENT" name: "Enterprise Network" purdue_level: 4 security_level_target: "SL 1" criticality: "Low (from OT perspective)" assets:
- "Corporate systems accessing OT data" security_requirements:
- "Firewall between enterprise and DMZ"
- "No direct access to any OT zone below DMZ" allowed_conduits: ["C3-DMZ-ENT"]
conduits:
-
conduit_id: "C1-BPCS-OPS" name: "Control-to-Operations Conduit" connects: ["Z2-BPCS", "Z3-OPS"] security_level: "SL 2" protocols_allowed:
- protocol: "OPC UA" port: 4840 direction: "Z2 -> Z3 (read only)" security_mode: "SignAndEncrypt"
- protocol: "Modbus/TCP" port: 502 direction: "Z3 -> Z2 (read only, FC 3/4 only)" security_mode: "Firewall-enforced function code filtering" controls:
- "Industrial firewall with OT protocol DPI"
- "Allowlisted source/destination IP pairs"
- "Function code filtering (block all write operations from L3)"
- "Connection rate limiting"
-
conduit_id: "C2-OPS-DMZ" name: "Operations-to-DMZ Conduit" connects: ["Z3-OPS", "Z4-DMZ"] security_level: "SL 2" protocols_allowed:
- protocol: "PI-to-PI" port: 5450 direction: "Z3 -> Z4 (unidirectional via data diode)"
- protocol: "HTTPS" port: 443 direction: "Z4 -> Z3 (patch downloads only)" controls:
- "Data diode for historian replication (Waterfall Security)"
- "Firewall with application-layer inspection"
- "Patch server pulls only from approved vendor repositories"
-
conduit_id: "C3-DMZ-ENT" name: "DMZ-to-Enterprise Conduit" connects: ["Z4-DMZ", "Z5-ENT"] security_level: "SL 1" protocols_allowed:
- protocol: "HTTPS" port: 443 direction: "Z5 -> Z4 (historian read, remote access portal)"
- protocol: "RDP" port: 3389 direction: "Z5 -> Z4 (jump server with MFA)" controls:
- "Next-gen firewall with SSL inspection"
- "MFA required for all remote access sessions"
- "Session recording on jump server"
undefinedStep 2: Configure Industrial Firewalls for Zone Boundaries
步骤2:为区域边界配置工业防火墙
Deploy and configure industrial-grade firewalls at each zone boundary with OT protocol-aware deep packet inspection.
bash
undefined在每个区域边界部署并配置支持OT协议深度包检测的工业级防火墙。
bash
undefinedCisco ISA-3000 Industrial Firewall Configuration
Cisco ISA-3000 Industrial Firewall Configuration
Conduit C1: BPCS (Zone 2) <-> Operations (Zone 3)
Conduit C1: BPCS (Zone 2) <-> Operations (Zone 3)
Define zone interfaces
Define zone interfaces
interface GigabitEthernet1/1
nameif zone-bpcs
security-level 90
ip address 10.20.1.1 255.255.0.0
interface GigabitEthernet1/2
nameif zone-ops
security-level 70
ip address 10.30.1.1 255.255.0.0
interface GigabitEthernet1/1
nameif zone-bpcs
security_level 90
ip address 10.20.1.1 255.255.0.0
interface GigabitEthernet1/2
nameif zone-ops
security_level 70
ip address 10.30.1.1 255.255.0.0
OPC UA from BPCS to Operations (read-only data flow)
OPC UA from BPCS to Operations (read-only data flow)
access-list BPCS-to-OPS extended permit tcp 10.20.0.0 255.255.0.0 host 10.30.1.50 eq 4840
access-list BPCS-to-OPS extended permit tcp 10.20.0.0 255.255.0.0 host 10.30.1.50 eq 4840
Modbus read from Operations historian to PLCs (FC 3,4 only)
Modbus read from Operations historian to PLCs (FC 3,4 only)
access-list OPS-to-BPCS extended permit tcp host 10.30.1.50 10.20.0.0 255.255.0.0 eq 502
access-list OPS-to-BPCS extended permit tcp host 10.30.1.50 10.20.0.0 255.255.0.0 eq 502
Deny all other traffic between zones
Deny all other traffic between zones
access-list BPCS-to-OPS extended deny ip any any log
access-list OPS-to-BPCS extended deny ip any any log
access-list BPCS-to-OPS extended deny ip any any log
access-list OPS-to-BPCS extended deny ip any any log
Apply access lists
Apply access lists
access-group BPCS-to-OPS in interface zone-bpcs
access-group OPS-to-BPCS in interface zone-ops
access-group BPCS-to-OPS in interface zone-bpcs
access-group OPS-to-BPCS in interface zone-ops
Enable Modbus protocol inspection with function code filtering
Enable Modbus protocol inspection with function code filtering
policy-map type inspect modbus MODBUS-INSPECT
parameters
# Allow read operations only from Operations zone
match func-code read-coils
match func-code read-discrete-inputs
match func-code read-holding-registers
match func-code read-input-registers
# Block all write function codes
match func-code force-single-coil action drop log
match func-code preset-single-register action drop log
match func-code force-multiple-coils action drop log
match func-code preset-multiple-registers action drop log
policy-map type inspect modbus MODBUS-INSPECT
parameters
# Allow read operations only from Operations zone
match func-code read-coils
match func-code read-discrete-inputs
match func-code read-holding-registers
match func-code read-input-registers
# Block all write function codes
match func-code force-single-coil action drop log
match func-code preset-single-register action drop log
match func-code force-multiple-coils action drop log
match func-code preset-multiple-registers action drop log
Apply to service policy
Apply to service policy
policy-map global_policy
class inspection_default
inspect modbus MODBUS-INSPECT
policy-map global_policy
class inspection_default
inspect modbus MODBUS-INSPECT
Logging to OT SIEM
Logging to OT SIEM
logging host zone-ops 10.30.1.60
logging trap informational
logging enable
undefinedlogging host zone-ops 10.30.1.60
logging trap informational
logging enable
undefinedStep 3: Implement VLAN Segmentation at Switch Level
步骤3:在交换机层面实施VLAN分段
Configure network switches to enforce zone boundaries at Layer 2, preventing broadcast domain overlap between Purdue levels.
bash
undefined配置网络交换机以在二层强制区域边界,防止普渡各层级之间的广播域重叠。
bash
undefinedCisco Industrial Ethernet Switch Configuration
Cisco Industrial Ethernet Switch Configuration
Zone-based VLAN assignment
Zone-based VLAN assignment
VLAN definitions aligned with zones
VLAN definitions aligned with zones
vlan 10
name Z1-SIS-Safety
vlan 20
name Z2-BPCS-Control
vlan 30
name Z3-OPS-Operations
vlan 35
name Z4-DMZ
vlan 40
name Z5-Enterprise
vlan 10
name Z1-SIS-Safety
vlan 20
name Z2-BPCS-Control
vlan 30
name Z3-OPS-Operations
vlan 35
name Z4-DMZ
vlan 40
name Z5-Enterprise
PLC ports - Zone 2 BPCS
PLC ports - Zone 2 BPCS
interface range GigabitEthernet1/0/1-12
description PLC connections - Zone 2
switchport mode access
switchport access vlan 20
switchport port-security
switchport port-security maximum 1
switchport port-security mac-address sticky
switchport port-security violation shutdown
spanning-tree portfast
spanning-tree bpduguard enable
no cdp enable
no lldp transmit
interface range GigabitEthernet1/0/1-12
description PLC connections - Zone 2
switchport mode access
switchport access vlan 20
switchport port-security
switchport port-security maximum 1
switchport port-security mac-address sticky
switchport port-security violation shutdown
spanning-tree portfast
spanning-tree bpduguard enable
no cdp enable
no lldp transmit
HMI ports - Zone 2 BPCS
HMI ports - Zone 2 BPCS
interface range GigabitEthernet1/0/13-18
description HMI connections - Zone 2
switchport mode access
switchport access vlan 20
switchport port-security
switchport port-security maximum 1
switchport port-security mac-address sticky
switchport port-security violation restrict
spanning-tree portfast
interface range GigabitEthernet1/0/13-18
description HMI connections - Zone 2
switchport mode access
switchport access vlan 20
switchport port-security
switchport port-security maximum 1
switchport port-security mac-address sticky
switchport port-security violation restrict
spanning-tree portfast
Trunk to industrial firewall
Trunk to industrial firewall
interface GigabitEthernet1/0/24
description Trunk to ISA-3000 Firewall
switchport mode trunk
switchport trunk allowed vlan 20,30,35
switchport trunk native vlan 999
interface GigabitEthernet1/0/24
description Trunk to ISA-3000 Firewall
switchport mode trunk
switchport trunk allowed vlan 20,30,35
switchport trunk native vlan 999
Disable unused ports
Disable unused ports
interface range GigabitEthernet1/0/19-23
shutdown
switchport access vlan 999
undefinedinterface range GigabitEthernet1/0/19-23
shutdown
switchport access vlan 999
undefinedStep 4: Deploy Data Diode for Unidirectional Historian Replication
步骤4:部署数据二极管实现单向历史数据复制
Install a hardware-enforced data diode between the operations zone and DMZ to ensure unidirectional data flow from OT to IT. Data diodes physically prevent any data from flowing back into the OT network.
python
#!/usr/bin/env python3
"""Data Diode Configuration Validator.
Validates that historian replication across the data diode
(Waterfall Security, Owl Cyber Defense, or Siemens) is
functioning correctly with unidirectional enforcement.
"""
import socket
import struct
import time
import json
from datetime import datetime
class DataDiodeValidator:
"""Validates data diode unidirectional enforcement."""
def __init__(self, diode_tx_ip, diode_rx_ip, historian_port=5450):
self.tx_ip = diode_tx_ip # OT side (transmit)
self.rx_ip = diode_rx_ip # IT/DMZ side (receive)
self.port = historian_port
self.results = []
def test_forward_flow(self):
"""Verify data flows from OT (TX) to DMZ (RX) through diode."""
test_payload = f"DIODE_TEST_{datetime.now().isoformat()}"
try:
# Send test data to TX interface
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.settimeout(5)
sock.sendto(test_payload.encode(), (self.tx_ip, self.port))
sock.close()
self.results.append({
"test": "forward_flow",
"status": "PASS",
"detail": f"Data sent to TX interface {self.tx_ip}:{self.port}",
})
except Exception as e:
self.results.append({
"test": "forward_flow",
"status": "FAIL",
"detail": f"Cannot reach TX interface: {e}",
})
def test_reverse_flow_blocked(self):
"""Verify reverse flow (DMZ to OT) is physically blocked by diode."""
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(3)
result = sock.connect_ex((self.tx_ip, self.port))
sock.close()
if result != 0:
self.results.append({
"test": "reverse_flow_blocked",
"status": "PASS",
"detail": "Reverse connection to OT side correctly rejected",
})
else:
self.results.append({
"test": "reverse_flow_blocked",
"status": "CRITICAL_FAIL",
"detail": "REVERSE FLOW POSSIBLE - Data diode bypass detected!",
})
except (socket.timeout, ConnectionRefusedError):
self.results.append({
"test": "reverse_flow_blocked",
"status": "PASS",
"detail": "Reverse connection timed out (expected with hardware diode)",
})
def test_historian_replication_latency(self):
"""Measure replication latency across the data diode."""
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(10)
start = time.time()
sock.connect((self.rx_ip, self.port))
latency = (time.time() - start) * 1000
sock.close()
status = "PASS" if latency < 1000 else "WARN"
self.results.append({
"test": "replication_latency",
"status": status,
"detail": f"Replication endpoint latency: {latency:.1f}ms",
})
except Exception as e:
self.results.append({
"test": "replication_latency",
"status": "FAIL",
"detail": f"Cannot reach RX historian: {e}",
})
def run_all_tests(self):
"""Run complete data diode validation suite."""
print("=" * 60)
print("DATA DIODE VALIDATION REPORT")
print("=" * 60)
self.test_forward_flow()
self.test_reverse_flow_blocked()
self.test_historian_replication_latency()
for r in self.results:
status_icon = "+" if r["status"] == "PASS" else "-"
print(f" [{status_icon}] {r['test']}: {r['status']}")
print(f" {r['detail']}")
return self.results
if __name__ == "__main__":
validator = DataDiodeValidator(
diode_tx_ip="10.30.1.100", # Operations zone TX
diode_rx_ip="172.16.1.100", # DMZ zone RX
)
validator.run_all_tests()在运营区域和DMZ之间安装硬件强制的数据二极管,确保数据从OT单向流向IT。数据二极管从物理层面阻止任何数据回流到OT网络。
python
#!/usr/bin/env python3
"""Data Diode Configuration Validator.
Validates that historian replication across the data diode
(Waterfall Security, Owl Cyber Defense, or Siemens) is
functioning correctly with unidirectional enforcement.
"""
import socket
import struct
import time
import json
from datetime import datetime
class DataDiodeValidator:
"""Validates data diode unidirectional enforcement."""
def __init__(self, diode_tx_ip, diode_rx_ip, historian_port=5450):
self.tx_ip = diode_tx_ip # OT side (transmit)
self.rx_ip = diode_rx_ip # IT/DMZ side (receive)
self.port = historian_port
self.results = []
def test_forward_flow(self):
"""Verify data flows from OT (TX) to DMZ (RX) through diode."""
test_payload = f"DIODE_TEST_{datetime.now().isoformat()}"
try:
# Send test data to TX interface
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.settimeout(5)
sock.sendto(test_payload.encode(), (self.tx_ip, self.port))
sock.close()
self.results.append({
"test": "forward_flow",
"status": "PASS",
"detail": f"Data sent to TX interface {self.tx_ip}:{self.port}",
})
except Exception as e:
self.results.append({
"test": "forward_flow",
"status": "FAIL",
"detail": f"Cannot reach TX interface: {e}",
})
def test_reverse_flow_blocked(self):
"""Verify reverse flow (DMZ to OT) is physically blocked by diode."""
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(3)
result = sock.connect_ex((self.tx_ip, self.port))
sock.close()
if result != 0:
self.results.append({
"test": "reverse_flow_blocked",
"status": "PASS",
"detail": "Reverse connection to OT side correctly rejected",
})
else:
self.results.append({
"test": "reverse_flow_blocked",
"status": "CRITICAL_FAIL",
"detail": "REVERSE FLOW POSSIBLE - Data diode bypass detected!",
})
except (socket.timeout, ConnectionRefusedError):
self.results.append({
"test": "reverse_flow_blocked",
"status": "PASS",
"detail": "Reverse connection timed out (expected with hardware diode)",
})
def test_historian_replication_latency(self):
"""Measure replication latency across the data diode."""
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(10)
start = time.time()
sock.connect((self.rx_ip, self.port))
latency = (time.time() - start) * 1000
sock.close()
status = "PASS" if latency < 1000 else "WARN"
self.results.append({
"test": "replication_latency",
"status": status,
"detail": f"Replication endpoint latency: {latency:.1f}ms",
})
except Exception as e:
self.results.append({
"test": "replication_latency",
"status": "FAIL",
"detail": f"Cannot reach RX historian: {e}",
})
def run_all_tests(self):
"""Run complete data diode validation suite."""
print("=" * 60)
print("DATA DIODE VALIDATION REPORT")
print("=" * 60)
self.test_forward_flow()
self.test_reverse_flow_blocked()
self.test_historian_replication_latency()
for r in self.results:
status_icon = "+" if r["status"] == "PASS" else "-"
print(f" [{status_icon}] {r['test']}: {r['status']}")
print(f" {r['detail']}")
return self.results
if __name__ == "__main__":
validator = DataDiodeValidator(
diode_tx_ip="10.30.1.100", # Operations zone TX
diode_rx_ip="172.16.1.100", # DMZ zone RX
)
validator.run_all_tests()Step 5: Validate Zone Architecture
步骤5:验证区域架构
After implementation, validate the zone architecture by verifying that only authorized conduit traffic passes between zones and that all prohibited cross-zone paths are blocked.
bash
undefined实施完成后,通过验证仅授权的通信管道流量可在区域间传输,且所有禁止的跨区域路径均被阻断,以此确认区域架构的有效性。
bash
undefinedValidation test from Enterprise zone - should be blocked from reaching BPCS
Validation test from Enterprise zone - should be blocked from reaching BPCS
nmap -sT -p 502,44818,102,4840 10.20.0.0/16 --reason
nmap -sT -p 502,44818,102,4840 10.20.0.0/16 --reason
Expected: All ports filtered/closed
Expected: All ports filtered/closed
Validation test from Operations zone - read-only Modbus should work
Validation test from Operations zone - read-only Modbus should work
python3 -c "
from pymodbus.client import ModbusTcpClient
client = ModbusTcpClient('10.20.1.10', port=502)
client.connect()
python3 -c "
from pymodbus.client import ModbusTcpClient
client = ModbusTcpClient('10.20.1.10', port=502)
client.connect()
Read should succeed
Read should succeed
result = client.read_holding_registers(0, 10, slave=1)
print(f'Read test: {"PASS" if not result.isError() else "FAIL"}')
result = client.read_holding_registers(0, 10, slave=1)
print(f'Read test: {"PASS" if not result.isError() else "FAIL"}')
Write should be blocked by firewall
Write should be blocked by firewall
result = client.write_register(0, 100, slave=1)
print(f'Write blocked: {"PASS" if result.isError() else "FAIL - WRITE PERMITTED!"}')
client.close()
"
result = client.write_register(0, 100, slave=1)
print(f'Write blocked: {"PASS" if result.isError() else "FAIL - WRITE PERMITTED!"}')
client.close()
"
Verify data diode blocks reverse traffic
Verify data diode blocks reverse traffic
ping -c 3 10.30.1.100 # From DMZ to OT - should timeout
ping -c 3 10.30.1.100 # From DMZ to OT - should timeout
Expected: 100% packet loss (hardware diode blocks ICMP)
Expected: 100% packet loss (hardware diode blocks ICMP)
undefinedundefinedKey Concepts
核心概念
| Term | Definition |
|---|---|
| Security Zone | A grouping of logical or physical assets that share common security requirements, as defined by IEC 62443-3-2 |
| Conduit | A logical grouping of communication channels connecting two or more zones, subject to common security policies |
| Security Level Target (SL-T) | The desired security level for a zone, ranging from SL 1 (casual violation) to SL 4 (state-sponsored attack) |
| Data Diode | Hardware-enforced unidirectional network gateway that physically prevents data from flowing in the reverse direction |
| Microsegmentation | Granular network segmentation at the device level, managing communication device-by-device based on roles and functions |
| Deep Packet Inspection (DPI) | Firewall capability to inspect industrial protocol payloads (Modbus function codes, OPC UA service calls) beyond Layer 4 |
| Defense in Depth | Layered security approach where multiple security controls protect assets at different levels of the architecture |
| 术语 | 定义 |
|---|---|
| 安全区域 | 依据IEC 62443-3-2定义,将具有相同安全要求的逻辑或物理资产归组形成的集合 |
| 通信管道 | 连接两个或多个区域的逻辑通信通道组,受统一安全策略管控 |
| 安全等级目标(SL-T) | 区域的期望安全等级,范围从SL 1(普通违规)到SL 4(国家级攻击) |
| 数据二极管 | 硬件强制的单向网络网关,从物理层面阻止数据反向流动 |
| 微分段 | 在设备层面进行细粒度的网络分段,基于角色和功能管理设备间的通信 |
| 深度包检测(DPI) | 防火墙的一种能力,可检查OT协议的负载内容(如Modbus功能码、OPC UA服务调用),而不止于四层信息 |
| 纵深防御 | 分层安全防护方法,通过多层面的安全控制保护架构中不同层级的资产 |
Tools & Systems
工具与系统
- Cisco ISA-3000: Industrial security appliance providing OT-aware firewall, IPS, and VPN capabilities with Modbus, DNP3, and EtherNet/IP inspection
- Fortinet FortiGate Rugged: Ruggedized next-gen firewall with OT protocol support for industrial environments
- Palo Alto IoT/OT Security: Cloud-delivered OT security subscription providing device identification and protocol-aware policy enforcement
- Waterfall Security Solutions: Hardware-enforced unidirectional security gateways (data diodes) for OT-to-IT data transfer
- Tofino Xenon: Industrial security appliance providing deep packet inspection for Modbus, OPC, and EtherNet/IP protocols
- Cisco ISA-3000:工业安全设备,提供支持OT协议检测的防火墙、IPS和VPN功能,可检测Modbus、DNP3和EtherNet/IP协议
- Fortinet FortiGate Rugged:加固型下一代防火墙,支持OT协议,适用于工业环境
- Palo Alto IoT/OT Security:云交付的OT安全订阅服务,提供设备识别和基于协议的策略强制
- Waterfall Security Solutions:硬件强制的单向安全网关(数据二极管),用于OT到IT的数据传输
- Tofino Xenon:工业安全设备,为Modbus、OPC和EtherNet/IP协议提供深度包检测
Common Scenarios
常见场景
Scenario: Migrating Flat OT Network to Zone Architecture
场景:从扁平化OT网络迁移到区域架构
Context: A manufacturing plant operates all OT devices on a single VLAN (10.10.0.0/16) with no segmentation between PLCs, HMIs, historians, and the corporate network. An IEC 62443 gap assessment identified this as a critical finding requiring zone implementation.
Approach:
- Capture complete traffic baseline for 4 weeks using passive monitoring to identify all legitimate communication flows
- Classify all assets into Purdue levels and group into logical zones based on function and security requirements
- Design VLAN architecture with one VLAN per zone and inter-zone firewall rules based on observed legitimate traffic
- Deploy industrial firewalls at zone boundaries with initial "monitor only" mode (log but do not block)
- Analyze firewall logs for 2 weeks to identify any legitimate traffic that would be blocked
- Switch firewalls to enforcement mode during a scheduled maintenance window
- Validate that all process control communications function correctly post-segmentation
- Implement data diode between operations and DMZ for historian replication
Pitfalls: Implementing zone firewalls without a complete traffic baseline will break unknown but legitimate communication paths. Scheduling zone cutover during production instead of maintenance windows risks process disruptions. Placing SIS controllers in the same zone as BPCS violates IEC 62443 safety system isolation requirements.
背景:某制造工厂的所有OT设备都运行在单个VLAN(10.10.0.0/16)上,PLC、HMI、历史数据库和企业网络之间没有分段。IEC 62443差距评估将此列为关键问题,要求实施区域架构。
实施方法:
- 使用被动监控捕获4周的完整流量基线,识别所有合法通信流
- 将所有资产分类到普渡层级,并根据功能和安全要求分组为逻辑区域
- 设计VLAN架构,每个区域对应一个VLAN,并基于观察到的合法通信流制定区域间防火墙规则
- 在区域边界部署工业防火墙,初始设置为“仅监控”模式(记录但不阻断流量)
- 分析2周的防火墙日志,识别任何会被阻断的合法流量
- 在预定维护窗口期将防火墙切换到强制模式
- 验证分段后所有过程控制通信正常运行
- 在运营区域和DMZ之间部署数据二极管用于历史数据复制
注意事项:在没有完整流量基线的情况下部署区域防火墙会中断未知但合法的通信路径。在生产期间而非维护窗口期进行区域切换会有流程中断风险。将SIS控制器与BPCS放在同一区域违反了IEC 62443安全系统隔离要求。
Output Format
输出格式
IEC 62443 Zone Implementation Report
=====================================
Facility: [Name]
Implementation Date: YYYY-MM-DD
Standard: IEC 62443-3-2/3-3
ZONE ARCHITECTURE:
Zone [ID]: [Name] (SL-T: [1-4])
Assets: [count]
Conduits: [list]
Controls: [firewall type, data diode, etc.]
CONDUIT CONFIGURATION:
Conduit [ID]: [Zone A] <-> [Zone B]
Protocols: [allowed protocols with direction]
Firewall Rules: [count allow / count deny]
DPI Enabled: Yes/No
VALIDATION RESULTS:
Cross-zone tests: [pass/fail count]
Prohibited path tests: [all blocked / exceptions]
Protocol enforcement: [function code filtering verified]IEC 62443 Zone Implementation Report
=====================================
Facility: [Name]
Implementation Date: YYYY-MM-DD
Standard: IEC 62443-3-2/3-3
ZONE ARCHITECTURE:
Zone [ID]: [Name] (SL-T: [1-4])
Assets: [count]
Conduits: [list]
Controls: [firewall type, data diode, etc.]
CONDUIT CONFIGURATION:
Conduit [ID]: [Zone A] <-> [Zone B]
Protocols: [allowed protocols with direction]
Firewall Rules: [count allow / count deny]
DPI Enabled: Yes/No
VALIDATION RESULTS:
Cross-zone tests: [pass/fail count]
Prohibited path tests: [all blocked / exceptions]
Protocol enforcement: [function code filtering verified]