在大量使用标准网络和互联网技术之后,工业控制系统在获得了大量益处的同时,加强其信息安全和网络安全业也变得更加重要。
防火墙在阻断外部威胁以及内部可能影响生产安全、可靠性和生产力的网络事件方面扮演了重要角色,它们控制通信数据流并通过滤数据包来阻断有害的网络流量。
今天有工业用层2和层3交换机、路由器、防火墙等安全装置支持很多数据包过滤技术,比如接入控制清单、状态检测和深度包解析,每一种技术都过滤不同的消息。
这里我们研究要在深度防御的安全体系架构设计中做出明智选择时,你需要了解的基本概念。
数据包结构基础知识:UDP和TCP
要理解数据包过滤,首先要了解消息(数据包)是怎样构成的。今天的工业网络是构建在标准互联网的之上的。在物理层,以太网提供将数据包从一个地方到另一个地方运送的“管道”。在以太网数据帧上典型的载荷就是IP包,在IP包内有:
发送消息设备的IP地址(也就是源地址)
接受消息设备的IP地址(也就是目的地址)
优先级信息
数据包载荷部分的协议名称通常是UDP或TCP协议。下面是这两种协议的不同点:
UDP | TCP | |
描述 | “无连接”“无状态” | “面向连接”“有状态” |
速率 | 快 | 慢 |
确认 | 不提供 | 提供 |
重复检测 | 不提供 | 提供 |
有序发送 | 不提供 | 提供 |
端口 | 没有物理端口,但是有用于确定应用协议的端口号。 例如:端口502是MODBUS TCP,端口 80是HTTP |
数据包可以使用成UDP或TCP通信协议。UDP的优点是延时短,而TCP的优点是有状态。
首先解释一下“面向连接”和 “有状态的”的含义,在面向连接的协议中,设备之间的对话就像讲故事。对话有开始,内容和结束。发送内容时有序号,这样整个故事就有意义。
当我们说设备间的通信时有状态是因为,每个数据包在某种程度上依赖之前的数据包。在网络中,“状态”包括了一些信息比如哪个设备启动会话,上一条消息是谁发送的,因为什么错误上一条消息被拒绝了等等。
在无连接的协议中,没有建立一个对话的开始或结束。消息只是根据需要发送到目的地,与之前发送的消息没有关联。
TCP是一个有状态协议,UDP是无状态的。了解这种能力的不同在构建工业以太网的纵深防御时非常重要和有用。基于TCP和UDP数据包结构的背景了解,我们可以审视不同的数据包过滤的机制。记住:数据包过滤的目的是确保只有你想要的数据流才能进入你的网络传输。
数据包过滤做了什么?
数据包过滤其实就是在网络之间或网络内部监视和控制数据流,是通过捕获流经网络的数据流与事先定义的一套规则进行比较进行的。
不符合规则的消息被丢弃,原理上说以太网数据帧的所有信息包括载荷都可以用于创建一条规则,比如源IP地址、目的IP地址、MAC地址、协议信息和端口号等。
使用访问控制清单进行包过滤
你也许能够通过名字就能够猜到,访问控制清单(Access Control List:ACL)其实就是一个基于以太网、IP地址和TCP/UDP包头内的数值获得授权网络流量的列表。ACL也可以规定带宽限制或延迟某些流量的传输提高特定通信的优先级。
ACL的功能可以内置于交换机芯片,使得ACL以“有线速率”运行成为可能,“有线速率”是指在转发数据帧时没有增加什么延时。ACL作用于每个数据包(也就是说是无状态的)。ACL通过限制网络通信特定的发送端、接收端和协议(端口)来提供信息安全。
把以上汇总起来,想像你希望Modbus TCP数据流在IP地址为192.168.1.10的客户端与IP地址是192.168.1.20的目的地址之间传输。由于Modbus使用了TCP/IP,你需要创建两条规则来完成双向通信,你构建的ACL规则如下:
“允许 Scr=192.168.1.10 Dis=192.168.1.20 Port=502 Protocol=Modbus”
“允许 Scr=192.168.1.20 Dis=192.168.1.10 Port=502 Protocol=Modbus”
ACL的优势在于过滤迅速,缺点是不能阻断非“向外”请求引起的“向内的”消息。他们不能确定一个刚收到的TCP消息是不是一个正在进行的TCP连接的一部分或一个未经请求响应,因此很可能是恶意的未完成或不稳定的数据包。
因此,带有ACL的层2或层3的交换机在排除多余的数据包是扮演重要角色,它们不会阻断无序数据包。根据你的应用,比如高速机器人应用,ACL也许是数据包过滤的唯一选择。
使用状态检测进行包过滤
正好相反,状态防火墙着眼于其他参数并保持内部记录跟踪会话状态的细节。这些信息随后被用于分析每个数据包的合理性。客户端设备的内向流量只有是针对外向请求的响应时才被接受。
由于内向的请求与之前外向的请求没有关联,ACL不能防止PLC面临的拒绝服务(DoS)攻击。状态防火墙(也就是SPI防火墙)可以阻止这样的攻击,因为攻击的内向消息与正确的事件序列没有关联。
基于前面ACL规则的例子,检查数据包要满足标准:
发自Modbus端口
源于授权的源
发送到授权的目的地
尽管如此,如果数据包不是当前进行中的TCP会话也会被阻断,以保护网络不会遭受外部发起的攻击。
由于要额外处理确定”状态”,状态检测不能以“有线速率”工作并且引入了转发数据包延迟。根据你的应用和安全策略,状态防火墙可能应用于网络边界(包括无线网络边界)来分割内部网络,或是现场级网络。
使用深度包解析进行包过滤
前面我们介绍了ACL防火墙和状态检测防火墙,ACL限制网络上传输的消息类型而转台检测防火墙确保特定数据包和之前通信有关联性,两种技术都是有用的保护,但是它们都不能阻止有“坏企图”的数据包。
回到前面的例子, 使用ACL或状态检测你允许Modbus消息通过或阻断所有消息。对协议的精细控制室不可能的。
这样,如果你允许从HMI到PLC读数据,你也就允许编程消息通过。这是一个严重的安全问题。相反,如果你不允许所有Modbus消息,那么网络控制必须的消息也被阻断了。
这些宽泛的规则也许适合系统的较高层次,因为我们只关心数据包使用了许可的协议发送给过从授权设备。但是如果我们在深入系统到PLC和其他控制设备,则需要更精细的保护。
这就是深度包解析要做的,它不仅要检查消息头也要多载荷部分解码,允许我们定义非常精细的规则,例如:
PLC只接收来自HMI的读消息, 任何来自HMI的写操作消息都视为可疑并阻断。
允许IP地址是192.168.1.15的设备发布Modbus写操作请求到特定的寄存器。
对异常格式的消息和不寻常的行为做“完整性检查”。比如一个请求消息有10,000个响应消息就属于不寻常的行为。这种方法可以阻断一个故障设备导致的网络洪水攻击或黑客搞跨PLC的企图。
简言之,深度包解析是我们能够确保应用需要的所有消息通过,并阻断所有其它消息。
你可以想象,完全解码并在应用协议级别分析每个数据包需要额外的处理能力,深度包解析技术隐含着巨大的处理开销和网络延时。
然而,根据IEC62443,要保护运营中重要系统,比如生产安全系统、RTU和汽轮机等,确保现场设备的区域之间的各种管道安全,精细保护是最理想的方案。
深度包解析的设备实例可以在谷神星工业防火墙的实现看到(http://www.gushenxing.com/proshow_show.asp?id=475&paid=53&bid=41)。
深度包解析可以是“针对协议”或“针对内容”,还有一种深度包解析是”基于签名”的。这种方法非常不同,它是映射一些列字节到签名数据库中已知字节模式,然后进行比较。
基于签名的深度包解析可以对抗已知漏洞,但不提供针对协议深度包解析格式错误数据包的宽泛保护。为了真正确保ICS和SCADA网络的安全,针对协议的深度包解析通常在控制系统的底层需要。
纵深防御中的不同包过滤技术
前面我们介绍了在工业以太网交换机使用访问控制清单,在路由器或无线接入点使用SPI防火墙或具有深度包解析功能的安全设施。
在实施纵深防御战略时最好在网络架构中的每个网元采用与之匹配的保护手段,如果想了解一个工业防火墙的具体实现,请参见谷神星相关的防护产品。
谷神星致力于工业控制系统与设备漏洞扫描与漏洞挖掘,软件白名单,工业控制网络风险评估与安全审计等,为企业工控网络安全保驾护航。