APP下载

基于蠕虫和代理的工控系统攻击建模

2023-11-14韩冬松沙乐天赵创业

计算机与现代化 2023年10期
关键词:内网蠕虫工控

韩冬松,沙乐天,赵创业

(南京邮电大学计算机学院、软件学院、网络空间安全学院,江苏 南京 210023)

0 引 言

随着5G 网络的不断普及、物联网设备的应用和工业互联网的发展,越来越多的信息技术涌入到工业生产的环境当中,传统设备渐渐被智能化设备取代,工业生产的效率得到了极大提升。但与之对应的工业信息安全问题也随之而来。传统的工业控制系统是一个“信息孤岛”,信息化融合过程打破了其一直以来的“封闭性”,工控系统遭受攻击的可能性大大增加[1]。2010 年,“震网”病毒感染了超过4500 个网络,使工控监控设备失去作用,导致伊朗核电站离心机在内的多台工业控制设备受损;2016 年,三一重工近千台工程机械设备遭受非法解锁破坏,直接经济损失超3000 万元;2021 年11 月,丹麦风力涡轮机巨头Vestas Wind Systems 遭到网络攻击,导致了尚未明确的数据泄露[2]。由此可见,新技术的运用对工业控制系统进行智能化革新以提高生产效率的同时,也带来了更高的安全风险。

在工业控制系统中,PLC 作为工业生产的基础性终端设备,是最接近生产设备的工控系统中的一环。PLC 可以接收控制程序,执行计数与算术操作等用户指令,并通过数字或模拟输入/输出控制各种类型的机械和生产设备,是连接物理世界和网络世界的“桥梁”。然而由于PLC计算能力小、功能精简集中、安全设计薄弱的特性,使得PLC也成为攻击工控系统的突破口之一。攻击者可在未经PLC 拥有者授权的情况下恶意篡改PLC内部数据或者程序逻辑,造成PLC级联设备执行状态的改变,从而改变生产过程[3]。本文利用工业控制系统中PLC的上述特性,融合多种已经被证实可行的攻击手段完成攻击模型的构建,并最终在模拟实际生产环境中验证该攻击模型对工业生产所造成的威胁。

1 背景知识

1.1 工控攻击发展

随着工业控制系统受到的攻击次数不断增多,遭受的攻击样式越来越多样,众多的安全研究人员开始对工业控制系统中PLC 的安全性进行研究。在Black Hat 2011 大会中,Beresford[4]在报告中演示了如何通过西门子S7Comm 协议的权限缺失漏洞来远程操作PLC。在Black Hat 2015,Klick 等人[5]在报告中演示攻击者如何通过代理,来发现内网中更多的PLC 设备。在Black Hat 2016,Spenneberg 等人[6]首次在报告中提出了PLC蠕虫病毒的概念,使得攻击源由传统的PC 上位机变为PLC。同样在Black Hat 2016 的报告中展示了一种无法被检测到的PLC RootKit。该攻击方式的一个版本被称为引脚配置,在PLC 操作系统不知情的状态下用恶意代码切换I/O引脚配置,从而影响生产结果,相比于之前所披露的PLC 攻击方式,PLC Rootkit 对PLC 的攻击立足于更低系统层级,使得固件和逻辑操纵不再是黑客攻击的唯一选择[7]。由于网络安全信息的敏感性,以及上述PLC 攻击方式涉及具体的公司和设备型号,因此上述多种PLC 攻击方式更多是提供一种新的PLC 攻击方向和验证其可行性,具体的攻击细节未被披露。

本文所实现的攻击模型正是对上述PLC 代理和PLC 蠕虫概念的实现和融合,构建出基于PLC 蠕虫和PLC 代理的攻击模型。以暴露在公网环境中的PLC为突破口,利用逻辑程序注入使该PLC具有代理服务器的功能,反向连接攻击者上位机并接收攻击者发送的指令,按照攻击者指令要求利用PLC蠕虫实现对内网环境中PLC 的攻击和感染。由于攻击者是被PLC代理所代理的,所以攻击者对于内网中的其他PLC不可见,大大提高了攻击的隐蔽性,且代理PLC 可以重复对内网PLC进行攻击,只对被攻击的内网PLC进行替换或者防护无法摆脱该攻击模型的攻击,除非将已经被改造为代理PLC 的PLC 移出内网。但由于大规模工业生产环境的复杂性,对代理PLC的定位存在巨大的困难,如果攻击发生在诸如电力、能源、交通、国防等领域,定位代理PLC过程中付出的安全和经济代价不言而喻。

1.2 工控协议剖析

无论对PLC采取何种攻击方式,首先应当能够与PLC 建立通信,而实现完整的PLC 通信过程离不开对工控系统中PLC 通信协议的剖析[8]。本文进行工业控制系统攻击建模所用PLC 型号为Siemens 公司的Siemens S7-1200 PLC,该型号PLC 应用层采用Siemens 私有通信协议S7CommPlus,本文重点对S7CommPlus 通信协议进行分析,其它通信协议分析过程类同。S7CommPlus 通信协议是Siemens 公司基于TPKT和ISO8073 协议进行开发实现的应用层协议,该协议相比于前代S7Comm 通信协议使用了更加复杂的编码规范,并增加了防重放攻击措施,具有更高通信安全性。S7-1200 PLC各层次通信协议如图1所示。

图1 S7-1200 PLC通信协议层次

由于工业控制系统中指令相对单一,数据报格式相对固定,所以对工控协议通信数据报的伪造和篡改较为容易。这也是大多数工控通信协议的通病。S7CommPlus协议报文结构如图2所示。

图2 S7CommPlus协议结构

S7CommPlus 协议主要分为Header、Data 和Trailer 部分。Header 和Trailer 数据完全一致,均包含Protocol Id、Protool version 和Data length 数据项,当PLC 型号被选定,内置通信模块确定,与同一个PLC通信的Protocol Id 和Protool version 不再发生变化,Data length 代表本条通信数据报的数据长度,每一次通信过程都有不同的数据长度。Data部分包含Function、Session Id、Request Set 等众多数据项,这些数据项中重点关注Request Set 部分,攻击模型构建过程中的第三方伪造数据报代替上位机与PLC 进行通信及攻击指令发送依赖于该部分的数据,而其余数据项可在通信过程中自动生成。多个数据项不需要逐一设置,本文采用如下方式进行多个数据项的获取和设置:在上位机软件中提前编写将要注入PLC中的程序或者指令,利用上位机软件与PLC进行正常通信和数据下载,在此过程中利用数据包抓取软件对通信过程数据包进行抓取,从抓取的数据包中获取到完整通信过程和数据传输过程数据包,获取数据包中的数据,之后就可以利用脚本语言套接字的方式代替上位机软件与PLC进行通信和数据传输,执行结果和上位机与PLC的通信结果相同,这种方式通常应用于重放攻击[9]。对于应用了防重放攻击措施的S7CommPlus 协议,该方法无法奏效。

S7CommPlus 协议为S7Comm 协议的升级版本,使用了特殊的编码规范,并引入了响应字节防止重放攻击。在PLC 的应答报文中,S7CommPLus 协议的特定偏移处为一随机变化的字节,不同时刻建立的通信,PLC 应答的该字节不同,其大小范围为0x06 至0x7F。在后续与PLC进一步数据交互的过程中,连接建立发起方,在其报文特定偏移处为该随机字节加上0x80 后的值,否则PLC 将直接断开连接,无法进行后续通信,由于每一次建立通信响应字节都不同,所以该措施有效防止了重放攻击。防重放攻击响应字节结构如图3所示。

图3 S7CommPlus响应字节

如图3 所示,与PLC 的每一次通信需要在上一次收到PLC 的回复后,获取回复的第25 个字节,将该字节与0x80 相加,并将相加的结果放置在下一次请求的第24 个字节和第29 个字节处,PLC 端会对第24 和29 字节处的字节进行判断,并由此推断是否遭受重放攻击[10]。由于该响应字节的产生存在规律且可预测,故防重放攻击效果并不理想,可以比较容易地对该协议的通信过程进行伪造,本攻击模型构建依赖于该通信协议漏洞(CVE-2016-2201)。

1.3 PLC存储形式及生产拓扑

PLC 中的程序和数据以“数据块”的形式存在,包括Organized Block (OB)、Data Block (DB)、Function Block(FB)、Function Control(FC),PLC 通过多个块按照事先定义的逻辑顺序协作完成对级联设备进行控制的整个过程[11]。其中OB 块类似于Main 函数,存储PLC 运行的代码逻辑,是PLC 得以运行的核心数据块,DB 块、FB 块和FC 块都为OB 块的运行服务。基于PLC 的这种存储形式,对PLC 进行攻击时,PLC 攻击代码写在OB 块中进行注入,PLC 攻击所需数据写在DB块中进行注入。PLC 块功能及相互关系如图4所示。

图4 PLC数据块功能及相互关系

PLC 是现代工业自动化生产的核心零部件。PLC 读取的输入可以是数字信号或者模数转换后的模拟信号,用来接收外部传感器信号、生产设备反馈数据或者上位机指令[12]。PLC 写出的输出为数字信号,用来对PLC 连接的级联设备进行控制。PLC 生产结构拓扑如图5所示。

图5 PLC生产结构拓扑

1.4 PLC蠕虫攻击

PLC 蠕虫,基于PLC 通信协议,不同于传统的“上位机-PLC”数据传输方式,PLC 蠕虫在PLC 与PLC 之间进行传播[13]。PLC 蠕虫的出现颠覆了之前的攻击者-上位机-PLC-级联设备攻击链路,变为攻击者-PLC-PLC-级联设备攻击链路,绕过了防护完善的上位机,使得针对工业控制系统的攻击难度大大降低。攻击者需要将蠕虫代码注入一个PLC,使该PLC 成为感染源,之后该PLC会根据工业控制协议规定的通信规则对处于同一局域网下的PLC进行连接和感染,后续感染流程不需要攻击者参与。PLC 蠕虫感染拓扑如图6所示。

图6 蠕虫传播拓扑

如图6 所示,PLC A 作为感染源,可以利用蠕虫对同一局域网下的PLC进行攻击,通过块注入的方式干扰PLC所连接级联设备的生产过程;由于PLC蠕虫本身就是多个数据块的集合,所以也可以通过块注入的方式将PLC 蠕虫自身复制到同一局域网下的其它PLC 当中,将多个PLC 改造为感染源,自我复制过程保证当一个感染源被发现并清除,针对工业控制系统的攻击仍可由其它PLC 继续进行[12]。尽管PLC 蠕虫可以对内网PLC进行攻击和复制,但PLC蠕虫攻击过程也存在不足,不足之处在于:1)PLC 蠕虫的攻击和复制从感染源PLC被启动开始,某些情况下这不是攻击者所期望的PLC蠕虫传播时机,攻击者不仅仅希望能够对同一局域网下的PLC进行攻击,也希望攻击能够发生在攻击者希望的时间点;2)由于PLC蠕虫攻击过程后续不需要攻击者参与,所以当蠕虫代码被注入感染源PLC 后,对内网PLC 进行何种攻击就已固定,无法实现攻击手段多样化。正是由于上述不足,在攻击模型中引入PLC代理,将PLC蠕虫与PLC代理进行融合,实现任意时刻的PLC蠕虫传播和指令控制下的攻击手段多样化。

1.5 PLC代理

网络代理,是一种特殊的网络服务,它允许网络终端A 通过该服务与网络终端B 进行非直接的连接,实现网络终端A 对网络终端B 的非直接访问或获取网络终端B 的资源信息。提供代理服务的电脑系统或其他类型的网络终端称为代理服务器[14]。事实上,随着工业化与信息化结合的不断紧密,工业控制系统越来越多地采用标准化通信协议和软硬件,并通过互联网来实现远程控制和操作,使得相当多的工业生产设备暴露在外界可直接访问的环境当中,这是PLC 代理之所以能够实现的前提[15]。通过代理程序注入的方式将暴露在公网中的PLC 改造为代理PLC,代理PLC反向连接攻击者、接收攻击指令和调用代理程序中定义好的攻击方式进行内网攻击。通过PLC代理来代理攻击者,实现攻击者在攻击过程中的隐藏。代理PLC生成及执行过程如图7所示。

图7 PLC代理执行过程

检测到可被访问的PLC之后,由于PLC网络通信使用固定的端口,可直接使用socket 套接字与可访问的PLC 建立通信。本文涉及的PLC 型号所用网络通信端口为102,对于已经暴露在可访问环境中的PLC,使用socket 通信将代理程序注入可被访问的PLC 当中,则该PLC 被改造为代理PLC,代理程序中包含对攻击者上位机的反向连接操作,而一般的网络防火墙不会隔绝网络内部对外部的访问,因此,只要工业控制网络没有实现完全的网络隔离,攻击者就可以接收到PLC的反向连接信息并建立通信连接,通信建立之后,攻击者可以在任意时刻向代理PLC发送指令。

出于通过互联网来实现远程控制和操作PLC 的需要,PLC 可能会被映射在可被直接访问的环境当中,但通常PLC会采取保护措施来避免不受信任用户对PLC的操作,例如用户访问白名单或配置PLC禁止写。但对白名单的绕过和访问受保护的内存区域漏洞已经被发现,工业网络安全公司Claroty 于2021 年披露的PLC漏洞(CVE-2020-15782)证明未经身份验证的远程攻击者可绕过白名单并通过网络访问PLC的TCP通信端口执行远程代码,将任意数据或代码写入受保护的内存区域或读取敏感区域的数据[16]。该漏洞的发现也使设置了用户访问白名单或配置了PLC禁止写等防护措施的PLC被攻击成为可能。

2 攻击模型构建

2.1 攻击模型总体框架

PLC 代理实现对内网环境的突破,PLC 蠕虫实现对内网环境中PLC的攻击或感染,本文所构建的攻击模型将二者融合实现对工业控制系统内网生产环境中级联设备生产状态和输出结果的改变。

将PLC改造为代理PLC过程中,代理程序以块的形式被注入PLC,该PLC 被改造为代理服务器PLC,该代理程序就是本文所构建的攻击模型的核心。代理程序具体可划分为2 个模块,反向连接攻击者上位机及指令接收模块和PLC 攻击模块。反向连接攻击者上位机及指令接收模块有2个子功能:

1)负责与攻击者上位机建立通信,该功能使代理PLC 能处于攻击者的控制之下,即使代理PLC 被防护,也能保证攻击者后续攻击指令的发布。

2)接收攻击者上位机发送的攻击指令,并将攻击指令进行存储,若指令不为空则跳转至PLC 攻击模块;PLC 攻击模块包含多种攻击效果代码及其所需数据,跳转至该模块标志着对内网PLC开始攻击。

该模块首先会对存储的攻击指令进行判断,根据指令判断结果选定要实现的攻击效果。之后该模块与内网PLC 进行遍历连接,连接建立之后,使用PLC蠕虫对内网PLC 进行攻击实现攻击效果。本文所构建攻击模型的攻击过程如图8所示。

图8 攻击模型的攻击过程

如图8 所示,该攻击模型包含代理程序注入、代理PLC 反向连接攻击者上位机、攻击者发布攻击指令、指令判断跳转、根据指令选择攻击效果、PLC 蠕虫攻击、干扰运行7 个步骤。不同于以往的攻击者首先攻击PLC上位机,获取PLC上位机权限之后再利用上位机将恶意代码注入内网PLC,改变内网PLC 级联设备的运行状态这一过程,本文构建的攻击模型中首先攻击一个可被直接访问的PLC,通过代码注入将其设置为代理PLC,之后对内网PLC 的攻击由代理PLC 来进行,将传统的“上位机-PLC-级联设备”攻击链路转变为“PLC-PLC-级联设备”攻击链路。

2.2 反向连接攻击者上位机及指令接收模块

该模块负责反向连接攻击者上位机及攻击者攻击指令的接收。改造完成之后的代理PLC 执行代理功能,被代理者为攻击者上位机。在一些情况下,暴露在可直接访问环境的代理PLC 可能会被放回到有防火墙的环境中,此时攻击者通过正向连接的方式无法再与代理PLC 建立通信,而防火墙无法防止由内而外的泄密行为,所以通过将反向连接攻击者上位机这一功能植入代理PLC,代理PLC 从防火墙内部与攻击者建立连接,保证代理PLC 即使在有防火墙防护的环境中也能接收到攻击者的攻击指令。这也就是利用PLC 代理实现对内网环境的突破,为后续攻击奠定基础。

未接收到攻击者的攻击指令时,反向连接攻击者上位机模块处于对攻击者上位机的循环连接请求过程当中,该连接过程主要使用Siemens PLC 组态函数TCON_DB、TSEND、TRCV 和TDISCON_DB,TCON_DB函数负责与主机建立TCP 连接,TSEND 和TRCV 负责2 台通信设备间信息的发送和接收,TDISCON_DB 负责与主机断开连接,只有断开与主机连接,代理PLC才能在后续过程与内网PLC 建立连接。代理PLC 反向连接攻击者上位机及指令接收过程如图9所示。

图9 反向连接攻击者上位机及指令接收模块工作过程

如图9 所示,步骤4 为反向连接攻击者上位机及指令接收模块向攻击者上位机发送信息,该信息在本攻击模型中的意义在于使攻击者感知到代理PLC 处于可工作状态。步骤5 为反向连接攻击者上位机及指令接收模块接收攻击指令,接收后指令内容被存储在代理PLC的DB块中。本模块的整个连接建立及指令接收过程不会影响代理PLC 正常输出信号进行生产控制,所以对于生产设备参数监视者而言PLC执行该模块是无感的。接收到攻击者攻击指令且判断不为空之后,代理PLC从反向连接攻击者上位机及接收指令模块跳转至PLC攻击模块。

2.3 PLC攻击模块

当接收到攻击者指令并跳转至PLC 攻击模块之后,PLC 攻击模块使用PLC 蠕虫对内网PLC 进行攻击。PLC 蠕虫可被看作是一种载体,可将数据块、指令等内容传输至内网PLC 并执行,也可选择在内网PLC 进行蠕虫自我复制。PLC 攻击模块攻击过程如图10 所示。整个PLC 蠕虫攻击过程需要严格按照PLC通信协议进行函数和数据构造。

图10 PLC攻击模块攻击过程

PLC 攻击模块包含多种攻击代码,在该模块中可对反向连接攻击者上位机及接收指令模块接收到的攻击者指令进行判断,从而决定采取何种攻击方式。本文所构建的攻击模型中攻击者指令采用数字形式,攻击指令与所采取的攻击方式对应关系如图11所示。

图11 攻击指令与攻击方式对应关系

攻击方式主要包括简单恶意响应攻击、恶意参数命令注入攻击、恶意功能命令注入攻击、拒绝服务攻击等[17]。简单恶意响应攻击:强制性启停PLC,干扰PLC 正常工作进程。恶意参数命令注入攻击:通过注入一个引脚控制块,强制改变PLC中某引脚的输出状态,改变PLC 执行过程[18]。恶意功能命令注入攻击:将一个或多个块注入内网PLC,内网PLC 执行新注入的块,改变PLC的执行过程和执行结果。拒绝服务攻击:设定一个频率,不断访问内网PLC的通信端口,使内网PLC失去正常通信能力,由于PLC上位机使用网线连接或者无线连接的方式与PLC通信,所以该种攻击可以使PLC 上位机无法操纵PLC,使操作员失去对PLC的控制,也就是PLC拒绝服务[19]。除了以上提到的几种攻击方式之外,随着针对工业控制系统的攻击方式的不断发展,可以在该工业控制系统攻击模型中组合更多新型的攻击方式,实现对工业控制系统更隐蔽、更强破坏性的攻击。这也是本文所构造的攻击模型特点所在,以PLC代理和PLC蠕虫作为攻击模型基础,在该基础上实现多种不同的PLC攻击效果。

至此,本文所述工业控制系统攻击模型已构建完成。利用PLC代理实现内网突破,利用PLC蠕虫融合多种攻击方式攻击内网PLC,改变内网PLC 级联设备的执行状态和执行结果,最终摒弃传统的攻击者-PLC 上位机-PLC-级联设备攻击链条,实现完整的攻击者-PLC-PLC-级联设备攻击链条。

3 模型验证

3.1 实验环境

实验环境软硬件配置如表1所示,分为上位机端和生产设备端2个部分。代理程序注入及攻击者指令发送使用Python编程,Python版本为3.9。PLC编程使用Siemens独有的Structured Control Language(SCL)语言。

表1 实验环境设备配置

实验所搭建的模拟生产设备端环境如图12 所示,环境包括步进电机、内网PLC、电机驱动器、电源、代理PLC,代理PLC 和内网PLC 经由交换机连接于同一局域网下,这也是实际生产环境中可能采用的级联设备配置方式。

图12 生产设备端环境

实际生产环境中PLC以集群的方式进行配置,负责同一生产过程的PLC处于同一集群,多个PLC组成的集群经由同一交换机连接于同一网络之下,方便生产流程监测者在一台监测设备观察负责同一生产过程的所有PLC。出于安全考虑,PLC 使用者会设置PLC 集群与集群间的物理隔离,但只要没有实现任意2 台PLC 之间的完全物理隔离,PLC 蠕虫对同一集群中的PLC进行攻击就成为可能。

3.2 模型仿真验证

3.2.1 简单恶意响应攻击验证

简单恶意响应攻击是针对工业控制系统比较常见的一类攻击,比如控制工业控制设备的恶意启停,使设备停止运作。2010 年针对伊朗核电站的“震网”工控攻击就涉及了此类攻击,攻击使核电站中的温度参数采集监测PLC 停止工作或向监测人员发送被注入的虚假数据,致使核电站离心机内部温度升高而监测人员无法及时发现,最终导致核电站发生爆炸事故。本文构建的攻击模型所进行的简单恶意响应攻击就对恶意启停这一攻击方式进行了验证。代理程序中简单恶意响应攻击对应指令“1”,攻击者向代理PLC 发送指令“1”,代理PLC 的指令接收模块接收到攻击者指令,指令不为空则跳转至PLC 攻击模块,PLC 攻击模块判断指令,判断指令内容为“1”,随即调用PLC 攻击模块中的Stop 代码块对内网PLC 进行攻击,指令判断及攻击代码调用如图13所示。

图13 简单恶意响应攻击指令判断和代码调用

内网PLC 被代理PLC 攻击之前处于RUN 状态,级联设备可以正常运行,内网PLC被代理PLC攻击之后被恶意篡改状态为STOP 状态,相应的内网PLC 级联设备也停止工作。攻击前后内网PLC 状态变化如图14所示。

图14 简单恶意响应攻击前后对比

如图14 所示,攻击前RUN/STOP 信号显示绿色,也就是RUN状态,且有一信号输出口Q0.0显示绿色,该信号输出口处于工作状态,可以控制级联设备的运行。攻击后RUN/STOP 信号显示橙色,且信号输出口不再亮起,此时PLC处于STOP状态不再工作,攻击生效。该实验验证了本文所构建的攻击模型可实现针对工业控制系统中PLC的简单恶意响应攻击。

3.2.2 恶意功能命令注入攻击验证

恶意功能命令注入攻击也是比较常见的针对工业控制系统的攻击方式,相比于本文提到的其他攻击方式而言,恶意功能命令注入攻击不仅能影响到工控系统的正常运转,更重要的是可以通过功能代码注入使工控系统按照攻击者设想的执行过程进行运转。本文设计实验来验证恶意功能命令注入攻击。

代理程序中恶意功能命令注入攻击对应攻击指令为“3”,攻击者向代理PLC 发送指令“3”,代理PLC的指令接收模块接收攻击者指令并将指令暂存在数据块的数组recvdata2 中,指令不为空则跳转至PLC攻击模块,PLC 攻击模块对指令进行判断,判断指令内容为“3”,则PLC 攻击模块使用PLC 蠕虫向内网PLC 注入组织块sendOB125 实现对目标PLC 的攻击,该攻击过程可以在任意时刻进行,指令判断与攻击代码调用如图15所示。

如图15 中代码所示,程序对recvdata2 数组中的数据进行判断,如果判断recvdata2[0]存储的数据为“3”,则执行后续的攻击过程,否则跳过。代码中的变量con_state2 作为代码接力执行的状态码,状态码的存在使整个代理程序除了循环执行之外,可以按照攻击者意图执行代码跳过和判断等复杂操作[20]。攻击前后内网PLC 项目树对比如图16 所示,可以看到项目树中增加了被注入的OB125组织块。

代理PLC对内网PLC进行攻击前,内网PLC级联电机的转动速度为299 r/s,该转动速率可看作是实际生产环境中的电机正常转动速率,内网PLC被代理PLC 攻击之后,代理PLC 将OB125 块注入内网PLC,在OB125块被执行之后,内网PLC级联电机转动速度变为178 r/s。攻击前后内网PLC 级联电机转动速率对比如图17所示。

通过实验结果可以看到本文所构建的攻击模型可以有效实现对工业控制系统中PLC 的恶意功能命令注入攻击,实现对PLC 级联设备运行状态的影响。其他攻击方式经过模拟生产环境实验表明均可被实现,本文不再阐述。

3.3 与已有攻击模型的比较

本文所构建的攻击模型实现了PLC蠕虫和PLC代理的融合,根据2种PLC攻击方式所具有的特性,应用在攻击模型构建的不同阶段,完成攻击模型的构建。

为了进一步说明模型的有效性,选取已有文献中实用效果较好的工控系统攻击模型进行比较,攻击模型对比如表2所示。

表2 攻击模型比较

表2 中比较结果表明,基于攻击图的工控网络威胁建模可以获得良好的攻击效果,但该攻击模型的攻击源头需要利用Windowst系统漏洞、U盘或外部设备接入、内部人员打开嵌入恶意代码的文档或邮件等方式开始攻击,而上位机系统可设置的安全防护系统远多于工控设备本身,且上位机防护系统处于快速迭代当中,因此直接攻击上位机的难度巨大。如果利用社会工程学或内部工作人员的工作疏忽,该攻击又具有偶然性,操作难度较大。电力信息物理跨空间协同攻击模型不需要攻击上位机,该模型利用PLC蠕虫对内网PLC进行攻击,但该攻击模型专注于在PLC中注入虚假数据欺骗工控监控系统,无法使PLC级联设备按照攻击者意图执行,攻击手段较单一,且该攻击模型仅使用PLC 蠕虫,当失去可被直接访问的PLC,PLC蠕虫将失去源头,则该模型将无法发挥作用。本文所构建的攻击模型则针对上述2 个工控攻击模型的缺陷做出改进,改进如下:

1)本文构建的攻击模型将传统的攻击者-上位机-PLC-级联设备攻击链转变为攻击者-PLC-PLC-级联设备攻击链,绕过防护严密的上位机,使针对工控系统的攻击难度降低。

2)在攻击模型中加入多种攻击手段,可以实现简单恶意响应攻击、恶意参数命令注入攻击、恶意功能命令注入攻击、拒绝服务攻击等,适应不同状况下的攻击需求。

3)使用PLC作为代理,当某个时刻失去可直接访问的PLC,之前被改造的代理PLC 仍能通过反向连接的方式再次与攻击者建立连接,使攻击模型可获得重复利用。

3.4 防护建议

通过对基于PLC 代理和PLC 蠕虫的工业控制系统攻击模型构建并进行与之相关的实验,表明该攻击模式与不同攻击方式结合均可对工业控制系统安全造成巨大威胁。针对本文所述攻击模型而言,整个攻击过程依然没有脱离通信数据报重放、数据注入、第三方指令伪造等常见网络入侵手段,是多种网络入侵方法的融合[23]。因此,提前采取安全措施可避免遭受此类攻击。

可采取的安全措施包括:1)避免工业控制设备暴露在可被直接访问的环境当中,牺牲设备控制灵活性,但工业控制系统安全性大大提高[24];2)实现不同工业控制设备间的物理隔离,避免将多台工业控制设备连接在同一网络当中[25];3)定期更新工业控制设备中的程序和数据,重新执行程序下载过程会覆盖之前所有的旧程序和旧数据,包括被恶意注入的数据,以及对于数据传输过程进行更为严格的加密[26];4)及时更新工业控制系统防火墙,防火墙会及时对披露的工控漏洞进行补丁更新,以避免工控系统被入侵[27];5)针对当下流行的工业控制系统入侵检测和态势感知等机器学习算法,应用成熟的工控防护产品进行工业控制系统的安全防护[28]。入侵检测不再局限于被入侵之后的感知,而是在入侵过程中就感知到攻击,并对攻击进行遏制,由攻击后检测变为入侵前预防。笔者在学习过程中接触的比较高效实用的入侵检测方案包括:PU学习入侵检测方法[29]、支持向量机的入侵检测等[30]。采取上述防护措施之后,可大大降低工业控制系统被攻击的风险。

4 结束语

目前工控系统的应用已经十分普及,出于操作便利性和实时性的需要,工控系统在网络环境的暴露度也逐渐增多,使得工控系统脆弱性逐渐显现出来。本文以工控系统中的基础性终端设备PLC作为切入点,进行基于PLC 代理和PLC 蠕虫的工业控制系统攻击模型的构建,并在该模型的基础上加入多种攻击方式,实现对工业控制系统中PLC的入侵和PLC级联设备执行状态的改变。通过总结攻击模型构建过程中涉及的攻击技术,针对该类攻击模型的攻击过程给出了针对性的防护建议,这对实际生产场景中防护此类工业控制系统攻击具有帮助。

猜你喜欢

内网蠕虫工控
蠕虫状MoS2/C的制备及其在锂离子电池负极材料中的应用
秋季谨防家禽蠕虫病
工控速派 一个工控技术服务的江湖
企业内网中的数据隔离与交换技术探索
工控速浱 一个工控技术服务的江湖
地下车库柱网布置设计思路
QoS技术在企业内网实践探索
热点追踪 工控安全低调而不失重要
青海海晏县牛羊寄生蠕虫种调查与防治
基于攻击图的工控系统脆弱性量化方法