从扫描到异常检测的实战指南
目录导读
- 工控网络排查的核心挑战——与传统IT网络有何不同?
- 八大常用工控网络工具解析——功能对比与适用场景
- 排查实操三步法——发现、识别、分析
- 常见排查问题与对策——Q&A深度问答
- 排查后的安全加固建议——如何从“排查”走向“防护”
工控网络排查的核心挑战
工控网络(ICS/SCADA)与传统IT网络存在本质差异:它需要保障实时性、可用性和确定性,传统IT扫描工具(如Nmap、Wireshark)直接应用可能引发PLC、DCS系统中断或死机,排查工控网络的核心目标是在零中断前提下,完成资产发现、协议识别、漏洞评估与异常检测。

关键难点:
- 协议非标准化:Modbus、PROFINET、EtherNet/IP等专有协议,数据包结构异于TCP/IP
- 设备脆弱性:老旧RTU、PLC可能因ICMP请求或端口扫描宕机
- 网络隔离弱:工控网通常与办公网、互联网存在“空气间隙”但近年被打破
八大常用工控网络工具解析
| 工具名称 | 核心功能 | 适用场景 | 风险等级 |
|---|---|---|---|
| Nmap(带脚本) | 端口扫描 + 工控脚本(如modbus-discover) | 资产发现、服务枚举 | 中(需禁用-0/-sV以外的激进模式) |
| Wireshark | 深度数据包解析(支持DNP3、Modbus等) | 协议分析、流量基线建立 | 低(被动监听) |
| GRASSMARLIN | 主动/被动资产指纹识别 + 网络拓扑可视化 | 大型工控网络资产梳理 | 中(需配置白名单) |
| Shodan(工业版) | 互联网暴露面扫描 | 发现公网暴露的PLC/HMI | 低(外部视角) |
| ModbusFuzzer | Modbus协议模糊测试 | 漏洞挖掘(仅实验室环境) | 极高(禁止在产线使用) |
| Zabbix/PRTG(定制) | 工控专用监控(支持OPC UA、Modbus) | 实时状态监控、异常告警 | 低(读操作) |
| Metasploit(工控模块) | 利用已知漏洞(如Siemens SIMATIC) | 渗透测试(需授权) | 极高(严格管控) |
| OT网络安全平台(如Dragos、Claroty) | 资产发现+异常检测+威胁狩猎 | 整体工控安全运维 | 低(偏被动) |
关键原则:主动工具需“温和”(禁用SYN洪水扫描、慢速探测),被动工具首推有线端口镜像或TAP分流。
排查实操三步法
第一步:被动资产发现(零风险)
通过交换机端口镜像或网络TAP抓取全流量,使用Wireshark或GRASSMARLIN自动识别:
- IP/MAC地址:区分PLC、HMI、服务器、网关
- 协议版本:Modbus TCP、S7Comm、PROFINET实时帧
- 设备厂商:西门子、罗克韦尔、施耐德等(通过OUI+CIP属性)
命令示例(Wireshark过滤):
(eth.type == 0x0800 and (ip.proto == 502 or ip.proto == 102)) or (eth.type == 0x8100 and (ip.proto == 2222))
第二步:温和主动扫描
确认网络无关键任务运行后,使用Nmap加-T2慢速模式,禁用-O和-sV(避免连接复位信号):
nmap -sS -T2 -p 502,102,1911,2222,4840 192.168.1.0/24 --script=modbus-discover
输出结果:会列出响应Modbus请求的IP、单元标识符、设备ID码。
第三步:深度流量分析
用Wireshark的统计功能建立网络基线:
- IO图表:正常流量波动范围
- 端点统计:哪个IP发送最多Modbus写请求(异常行为)
- 专家信息:检查重复ACK、重传率(可能表示冲突或攻击)
Q&A核心问题:
问:扫描时PLC会死机吗?
答:老型号(如S7-200、AB MicroLogix 1100)发送大于512字节的Modbus数据包或连续SYN扫描可能导致看门狗超时。必须:1) 先用被动工具确认设备型号;2) 对老旧设备仅做被动监听;3) 主动扫描设置“每包间隔≥100ms”。
问:如何检测工控网的隐蔽后门?
答:关注以下异常流量:
- 非标准端口上的Modbus/TCP通信(如端口8888)
- 突发的批量写寄存器操作(如5秒内写100000次)
- 来自办公网IP的S7Comm读请求(正常只有工控网内部)
使用工具如Bro/Zeek的工控协议分析器,设置白名单报警。
问:排查后如何生成报告?
答:输出包含:
- 资产列表(IP、MAC、厂商、固件推测)
- 风险等级(如:老旧SubSTATION固件、未加密Modbus)
- 网络拓扑图(GRASSMARLIN自动生成SVG格式)
- 异常流量时间线(Wireshark导出为CSV+热力图)
常见排查问题与对策
问题1:扫描时设备响应“Function Code Not Supported”
原因:设备只允许读线圈(功能码01),但扫描器发送了写指令(功能码05)
解决:修改脚本参数,仅发送特定功能码的请求,例如Nmap的modbus-discover脚本默认只查询设备ID。
问题2:流量捕获中发现大量广播风暴
根源:可能是环路(STP故障)或某个PLC的错误MAC层发送
排查:Wireshark统计→对话列表→按广播包数量排序,逐台排查;使用CDP/LLDP协议找出连接关系。
问题3:排查后系统变慢
原因:主动扫描产生的TCP连接未被及时关闭,占用了PLC的有限连接池
对策:强制关闭所有半开连接:nmap --defeat-rst-ratelimit(或重启PLC/交换机,但需停机窗口)
排查后的安全加固建议
- 建立基线白名单:记录每个设备允许的通信对端、协议、端口、周期
- 实施网络分段:使用防火墙或ACL限制工控网与办公网交互,仅允许指定OPC UA/Modbus访问
- 启用异常检测:部署开源工具如Security Onion的工控插件,对写操作、多线程登录、非工作时间通信告警
- 定期复诊:每月执行一次被动扫描,每季度在维护窗口进行温和主动扫描
工控网络排查的本质是在“不停机”约束下的安全审计,工具选择上,应从被动到主动、从轻量到深度,始终优先保障产线连续性,真正的工控安全不是一次排查,而是建立持续监控的“巡检机制”,建议将本文工具与流程整合进企业的ICS-SOC标准作业程序。
标签: 异常检测