3. 工业网络协议与面试追问

工控安全工程师面试中,协议问题几乎不会只问“Modbus 是干什么的”。面试官更常见的问法是:“Modbus TCP 没有认证,你会怎么在现网里降低风险?”或者“Profinet 的实时通信被干扰时,你如何判断是网络问题还是设备问题?”这类追问考的不是背诵,而是你能否把协议原理、脆弱点、攻击面和防护措施串成一条可落地的分析链。本章围绕 Modbus、OPC、Profinet、EtherNet/IP、DNP3 五种典型协议,按“先讲清机制,再定位弱点,最后给出可执行防护”的方式展开。

一、Modbus:最该先讲清“无状态”和“无认证”

Modbus 的核心机制是请求/响应模型。串行链路上有 RTU 和 ASCII 两种帧格式,TCP 上则是 MBAP 头加 PDU。以 Modbus TCP 为例,MBAP 头占 7 字节,包含事务标识符、协议标识符、长度、单元标识符;PDU 由功能码和数据组成。常见功能码如 0x01 读线圈、0x03 读保持寄存器、0x05 写单线圈、0x06 写单寄存器、0x10 写多寄存器。面试中若被问“为什么 Modbus 容易被伪造”,关键回答是:它没有会话、没有身份认证、没有完整性校验,任何能到达 502 端口的节点都可以构造合法请求。

攻击面主要在三处:一是未授权读写,攻击者可直接改写寄存器导致阀门动作或设定值漂移;二是功能码滥用,例如用 0x08 诊断功能码探测设备状态;三是中间人篡改,由于没有 MAC 或签名,响应可被替换。防护上不能只说“上防火墙”,要给出具体做法:在边界防火墙或工业防火墙中只允许指定 PLC 的 IP 访问指定从站 IP 的 502 端口,并进一步限制功能码,例如只放行 0x03、0x04 读操作,禁止 0x05、0x06、0x10 写操作;对必须写操作的场景,采用串口转 TCP 网关加白名单,或在支持 Modbus Security 的设备上启用 TLS。若现场设备不支持加密,可用带深度包检测的工业防火墙做功能码级过滤,并记录每次写操作的源 IP、寄存器地址和值,作为审计依据。

二、OPC 与 OPC UA:从“接口标准”到“安全通道”

面试中常把 OPC Classic 和 OPC UA 混在一起问。OPC Classic 基于 DCOM,依赖 Windows 的 RPC 和动态端口,跨网段和跨平台部署困难,安全边界基本等同于 Windows 域安全。OPC UA 则是面向服务的架构,使用 TCP 4840 端口,具备会话、加密、签名和证书体系。它的安全模型包括安全策略(如 Basic256Sha256)和安全模式(None、Sign、SignAndEncrypt)。若被追问“OPC UA 一定安全吗”,要指出:安全取决于配置。很多现场为了调试方便把安全策略设为 None,或信任所有证书,这等于把 OPC UA 当成了明文协议。

实际防护动作可以这样展开:在 OPC UA 服务器上禁用 None 策略,只保留 SignAndEncrypt;为客户端和服务器签发由内部 CA 签发的证书,并在服务器信任列表中只导入已授权客户端证书;在防火墙上只允许指定客户端 IP 访问 4840。若面试官继续问“如何验证配置有效”,可以回答:用 UaExpert 连接时观察安全策略是否显示为 Basic256Sha256,抓包时若能看到明文 ReadRequest 则说明未加密,反之只能看到 TLS 记录层数据。

三、Profinet 与 EtherNet/IP:实时工业以太网的共性弱点

Profinet 和 EtherNet/IP 都建立在标准以太网之上,但为实时性做了优化。Profinet 使用 RT 和 IRT 通道,RT 帧通常不经过 TCP/IP 栈,直接以以太网类型 0x8892 传输;EtherNet/IP 则基于 CIP,封装在 TCP 和 UDP 之上,UDP 端口 2222 用于实时 I/O,TCP 端口 44818 用于显式消息。它们的共同脆弱点是:协议设计优先考虑确定性和实时性,对认证和加密支持有限;一旦攻击者接入同一广播域,就可能伪造 I/O 数据、重放控制命令或发起拒绝服务。

面试追问常聚焦“如何在不影响实时性的前提下做防护”。合理的回答是采用工业防火墙或支持 Profinet/EtherNet/IP 深度解析的交换机,在控制器与 I/O 设备之间做端口和 MAC 白名单,限制广播风暴;对 EtherNet/IP,可限制 44818 端口的显式消息只允许工程站访问,2222 端口的 I/O 流量只允许控制器和对应适配器之间通信。若现场使用环网,还要检查 MRP 或 RSTP 配置,避免攻击者通过伪造拓扑变更报文引发网络震荡。判断防护是否有效,可以观察控制器诊断缓冲区是否出现“站丢失”“重复 IP”或“拓扑变化”记录,并结合交换机端口镜像抓包,确认异常源 MAC 是否被阻断。

四、DNP3:电力场景下的“先认证再控制”

DNP3 广泛用于电力和水务 SCADA,运行在 TCP 20000 或串行链路上。它支持时间同步、事件缓冲和远程控制,功能强大也意味着风险集中。DNP3 的脆弱点包括:早期版本没有认证,攻击者可伪造主站下发 Select/Operate 命令直接操作断路器;此外,DNP3 的链路层和传输层存在重放和篡改可能。防护上,DNP3 Secure Authentication 是重点,它通过挑战/应答和 HMAC 保证报文完整性和身份真实性。面试中若被问“SA 怎么部署”,可以回答:先确认 RTU 和主站是否支持 SA v2 或 v5,然后在主站和从站配置预共享密钥或证书,逐步从“仅关键操作认证”过渡到“所有控制命令认证”。同时,在边界限制 20000 端口只允许主站 IP 访问,并对 Select/Operate 操作单独记录日志。

五、面试追问的通用答题框架

面对协议类追问,建议按“机制—弱点—攻击面—防护—验证”五步组织,但不要机械背模板。例如被问“Modbus 和 DNP3 在防护上最大的区别是什么”,可以答:Modbus 几乎没有原生安全机制,防护主要靠网络隔离和功能码过滤;DNP3 有 Secure Authentication 扩展,可以在协议层做认证,但仍需网络边界配合。再如被问“如果只能做一件事来提升协议安全”,优先回答“资产测绘和通信基线”,因为不知道哪些设备在通信、用什么功能码,后续策略都无从谈起。

最后给出一份可直接用于面试准备的协议对照检查表,便于快速复查:

协议 默认端口/链路 核心脆弱点 优先防护动作 验证观察点
Modbus TCP TCP 502 无认证、无完整性、功能码可滥用 白名单+功能码过滤,禁用写操作 抓包看是否出现未授权 0x06/0x10
OPC UA TCP 4840 None 策略、信任所有证书 强制 SignAndEncrypt,证书白名单 UaExpert 安全策略显示、抓包是否明文
Profinet 以太网 0x8892 实时帧无认证、广播域暴露 端口/MAC 白名单,限制广播 控制器诊断缓冲区站丢失记录
EtherNet/IP TCP 44818 / UDP 2222 显式消息可被伪造、I/O 可重放 分离显式与 I/O 流量,限制工程站访问 交换机端口镜像看异常源 MAC
DNP3 TCP 20000 / 串行 无认证时 Select/Operate 可伪造 启用 Secure Authentication,限制主站 IP 日志中 Select/Operate 源与时间

把这张表里的“验证观察点”真正做一遍,比背十遍协议定义更有用。面试官追问时,你能说出“我在抓包里看到什么、在诊断缓冲区里看到什么、因此判断策略是否生效”,就已经超过了大多数只背概念的候选人。