PLC勒索病毒的起源
在IT领域中,勒索病毒通过对系统中的用户文件进行加密,以阻止用户对这些加密文件的访问,最终强迫用户支付赎金来解密这些文件。
在工业控制领域中,CRASHOVERRIDE、TRITON、Industroyer2以及PIPEDREAM等恶意软件会直接对工业控制系统进行破坏活动,而勒索病毒在工业控制领域的攻击却并不常见。一方面是由于工业控制系统网络具备一定的隔离性;另一方面是由于工业控制系统中控制器的系统计算资源有限,且控制器的编程基础架构有别于传统的IT系统的编程。因此,很难基于有限的资源环境编写功能复杂的勒索程序。
2017年Formby等人实现了LogicLocker,并声称LogicLocker是第一个针对控制器进行勒索的勒索病毒;2020年Yipeng Zhang等人实现了ICS-BROCK来对各种型号的控制器进行勒索。这两个勒索病毒是当前学术界提出的针对工业控制系统进行加密破坏的恶意软件,它们在探究工业控制系统安全攻击和防护上具有重要的参考价值。但针对工业控制系统的攻击仍有很大的提高空间,即充分利用工业控制系统提供的操作能力,结合企业生产的工艺流程,对整个工业控制系统进行攻击破坏。
针对上述两款勒索病毒有待提高的部分,2023年Richard Derbyshire等人实现了Dead Man’s PLC勒索病毒,充分挖掘工业控制系统提供的编程支持,将工业控制系统当作一个整体进行勒索攻击。攻击成功后,任何针对工业控制系统中控制器的恢复工作都将触发勒索病毒对生产过程的破坏,给企业的恢复工作带来了挑战。
我们针对上述DM-PLC勒索病毒攻击进行了模拟实现,并评估了该种攻击方式在实际生产中的有效性和适用性,结果表明,该种攻击方式能够对企业工业控制系统中各种品牌的控制器实施有效攻击,且不需要较高的门槛即可实现一个具备较大破坏能力的勒索病毒,工业企业应引起重视并加强相关安全防范措施。
DM-PLC勒索病毒的原理
DM-PLC勒索病毒的架构包括三个方面:对工业控制系统网络的重构、勒索病毒的破坏载荷和勒索病毒的解除。
2.1 攻击路径
为了将攻击重点聚焦在工业控制系统网络的范围内,我们假设攻击者已经突破了企业的外网和内部网络,并已经获取企业工业控制系统网络的控制权。
图 1 DM-PLC勒索目标
为了给企业造成最大程度的破坏,攻击者面对企业内部的控制系统网络,可以从三个方面入手:上位机、控制器和现场设备。上述三者,即从工程师站到现场设备,逐步深入,形成一个完整的工业控制系统网络。同时,随着攻击的深入,所需要的技能和攻击成功的难度也逐渐增加。
下图是一个西门子S7 PLC的网络拓扑,采用3级总线复合型结构,最下面一级为远程I/O链路,负责与现场设备通信;中间一级为Profibus现场总线或主从式多点链路,复杂传送控制器的控制信息;最高一级为工业以太网,负责传送工程师站的生产管理信息。
图 2 西门子PLC网络拓扑
为了最大化破坏工业企业的生产过程,DM-PLC勒索攻击将上位机、控制器和现场设备三者作为一个整体进行攻击破坏,此处并不仅仅是针对三者全部进行攻击,而是将对三者的攻击有机的结合起来,实现对整个工业控制系统的破坏,这给恢复工作带来了挑战。
此外,DM-PLC勒索病毒还充分利用了工业控制系统平台提供的编程函数库来实现自身的功能,通过这种方式降低了勒索病毒对其他条件的依赖,具有更好的适用性。
2.2 工作机制
DM-PLC勒索病毒基于上位机、控制器和现场设备三部分,结合工业控制系统提供的编程函数库实现勒索破坏功能。
(1)针对上位机进行的攻击,所使用的是传统IT领域的勒索病毒,将上位机上的用户文件进行加密。
(2)针对控制器的勒索病毒,则是在识别了整个工业控制系统中的控制器资产后,将所有可访问的控制器和工程师站进行重新组网,并建立PLC-PLC和工程师站-PLC的隐藏网络通信,基于此网络实现针对所有控制器的锁定。
(3)针对现场设备的破坏,则是构成勒索的最后一步,一旦工业企业拒绝支付赎金,勒索病毒会在倒计时结束后,对现场设备进行攻击,破坏和影响现场的生产流程。整个系统的架构如下图所示。
图 3 DM-PLC勒索病毒架构
在这三方面的勒索破坏中,针对工程师站上用户数据文件的加密是为了防止用户进行恢复操作;针对PLC的锁定是关键的一步,在该步骤中对所有可访问PLC和工程师站进行重新组网,并通过心跳包来探测彼此之间的连接,一旦心跳包异常,勒索病毒将据此判定工业企业用户在试图通过更换PLC等方式对系统进行恢复,勒索病毒随即对系统进行破坏;针对现场生产流程的破坏是DM-PLC勒索病毒的勒索筹码,该破坏会直接影响企业的生产过程,给企业带来直接损失。
DM-PLC勒索病毒通过将上述三者有机的结合起来,在最大程度的阻止工业企业用户恢复系统的基础上,对企业用户进行勒索,一旦企业用户拒绝支持赎金,便对企业的生产过程进行直接的破坏,给企业的生产及安全造成损失。
2.2.1 重新组网
DM-PLC勒索病毒在获取工程师站的控制权后,通过工程师站识别企业工业控制系统资产。在获取这些工控资产后,攻击者针对这些PLC节点以及工程师站节点,通过发送和接收心跳包来进行重新组网,将这些节点连接成一个整体。一旦某个心跳包接收或者发送异常,DM-PLC勒索病毒判定企业用户在试图恢复系统,随即便会将该判定信息在整个工业控制系统中传播,告知其中的每个PLC,为下一步的破坏活动做准备。
如下图所示是一个工程师站和三个PLC重新组网后的网络拓扑图。工程师站可以访问三个PLC,三个PLC之间也可以互通。在这个网络拓扑的各个节点之间,通过轮询的方式不断读取代表心跳包的标志位,一旦读取标志位的某个心跳包出现异常,勒索病毒随即判定该PLC被更换或者组态程序被更改,推断为工业企业用户在试图恢复系统。此后,勒索病毒会通过这个隐藏的网络通信,将企业用户的恢复系统行为信息在PLC之间进行传播,使得所有PLC获取该信息并对工业企业用户的生产过程开始破坏。
图 4 重新组网拓扑图
2.2.2 构建破坏载荷
在Richard Derbyshire等人提出的DM-PLC勒索病毒的PoC中,对工业企业用户的生产过程的破坏中,仅仅是简单的将所有的数字输出置位,这是由于这仅是一个示例破坏程序。
图 5 将所有的数字输出置位
实际上,在对工业企业生产过程的破坏中,攻击者可以发挥的空间是巨大的,这取决于攻击者对工业企业生产过程的理解程度。如攻击者对工业企业的生产过程有深入的了解,则完全可以编写出破坏力较强的载荷,对企业的生产流程进行精准干扰,足以导致工业企业生产过程中的安全事故,从而造成经济损失和人员伤亡。
2.2.3 勒索的解除机制
DM-PLC勒索病毒在每个PLC上的勒索代码之前,引入了一个启动变量,该变量为布尔类型。攻击者首先将DM-PLC勒索组态程序下载到每个PLC中,完成部署后,通过开源工具Snap7提供的db_write函数实现对勒索病毒的启动,梯形图如下图所示。而在工业企业用户支付赎金后,又可以通过该逻辑变量解除对控制器的勒索,同样是使用Snap7软件来实现。
图 6 启动变量
PLC勒索病毒的构建实验
综上分析,我们选取西门子S7-1500 PLC开展了相关实验,以验证该勒索病毒攻击方式的有效性和适用性。实验中,通过使用西门子官方的S7模拟器和博途19编程软件,成功实现了该攻击方式,得到了预期的攻击效果。
3.1 实验环境
在西门子S7-PLCSIM V18中创建三个S7-1500的实例,并将通信方式选为TCP/IP单适配器。在博途中添加S7-1500设备,并完成硬件组态,这里选取的是S7-1500 CPU为1511-PN,且订货号为6ES7 511-1AK00-0AB0的PLC。为其添加DI和DQ模块,最终完成三个S7-1500 PLC的硬件组态,并将其配置到同一个网段中。
图 7 组态全部下完成后的PLC状态
3.2 构建步骤
3.2.1 构建心跳包
在完成三个PLC硬件的组态后,需要构建隐藏的网络通信,将所有的PLC和工程师站连接起来,并在它们中间发送和接收心跳包,可以使用西门子博途提供的GET/PUT函数来实现对心跳包的发送和接收。一旦GET/PUT函数发送数据包失败,就设置报警变量的值,并将该报警在所有PLC中进行传播。上位机与PLC之间的隐藏网络通信,可以使用snap7库提供的db_read函数和db_write函数来进行读写。
3.2.2 构建报警网络
在DM-PLC勒索病毒发现有针对系统的更改或者恢复时,即心跳包的收发出现错误时,会设置报警变量,以便接下来进行破坏攻击。代码除了对发送和接收数据包的结果进行监控外,还监控其他PLC的报警状态,一旦有任何一个出现异常,随即设置自身的报警状态。
3.2.3 构建倒计时功能
勒索病毒的倒计时功能能够给用户造成一定的压力,迫使用户支付赎金。一旦倒计时完成,便设置报警信息并将此报警信息在PLC之间进行传播,最后会对工业控制现场生产流程进行攻击破坏。
3.2.4 构建攻击载荷
在本次实验中,我们构建的攻击载荷只是把组态程序中的正常生产流程中的布尔变量置位和复位,在实际的攻击过程中可以有针对性的对工业企业进行定制化的破坏操作,以便最大化对工业企业生产过程造成干扰。
3.2.5完整的梯形图程序
该勒索病毒的梯形图主程序如下图所示,其中Tank Control_FB代表工业企业正常的组态程序,DM-PLC_FB代表勒索程序模块。DM-PLC攻击代码会附加到正常程序的后面,通过一个bEnable的变量来控制其是否执行,不会影响工业企业原有的组态程序。通过这种设计可以在用户支付赎金后恢复用户的组态程序,使其正常运行。
图 8 梯形图的主程序
整个勒索程序的流程图如下图所示,一旦开始攻击,首先会启动倒计时模块进行倒计时;随即构建隐藏的通信网络来发送和接收心跳包,如果发送或者接收失败,会设置自身PLC的报警状态表示产生了报警;此后,程序会读取其他PLC的报警状态,如果其他PLC的报警状态已经被设置,则程序会设置自身的报警状态,通过此种方式可以将报警状态在PLC之间进行传播;最后判断自身PLC的报警状态,如果已经设置了报警状态,则进行攻击,否则进入下一个心跳包的收发循环。
图 9 程序流程图
3.3 实验效果
通过对上述PLC-PLC以及工程师站-PLC的隐藏网络的构建,以及破坏现场生产流程代码的部署,攻击者完成了对于整个工业控制系统的勒索准备。接下来,只需要通过Snap7来启动DM-PLC勒索病毒即可开启勒索攻击。
在本次实验中,当我们停止某个PLC准备更换时,会导致心跳包的收发失败。如下图所示,我们停止了PLC2,此时通过wireshark抓包时已经没有PLC2(192.168.0.92)的数据包。
图 10 停止PLC2
由于PLC2被停止,因此收发心跳包会出现错误,并设置报警信息,该报警信息会通过攻击者构造的隐藏网络在PLC之间进行传播。最终会触发勒索病毒的破坏程序,开始对现场的生产流程进行干扰。在实验中,正常生产过程中控制器组态的Entry_conveyor、Exit_conveyor和Grab变量的值分别被置位和复位,如下图所示。
图 11 PLC1的变量被修改
当用户支付了赎金时,攻击者同样使用Snap7来对DM-PLC进行停止攻击操作,只需要把攻击代码前面的布尔值翻转即可。在实验中可以看到勒索病毒已经停止,并且已经没有了收发心跳包的s7comm数据包。
图 12 解除攻击后s7comm数据包消失
总结与思考
4.1 PLC勒索病毒的特性
通过上面的原理分析和实验过程可以看出,DM-PLC勒索病毒攻击方式,是将上位机、控制器和现场设备三者有机的结合到一起,从而实现了对整个工业控制系统的勒索,并且,这种病毒不需要较高的门槛即可完成编写。以整个工业控制系统为勒索目标,增加了工业企业用户恢复被控制系统的难度,提高了勒索成功的概率。
上述实验都是以西门子的S7控制器为例子进行讨论的,在实际的工业企业中,使用到的控制器不仅限于西门子的S7控制器,其他品牌的控制器,如三菱、罗克韦尔、欧姆龙等也在石油炼化、电力、化工以及自来水厂等行业的工业企业中大量使用,而且,一些工业企业中使用的控制器来源可能不仅限于一个控制器厂商,很可能使用了不同厂商的控制器实现对生产工艺的控制。
尽管存在着具体控制器品牌和型号的差异,但从以上分析可以看出,如果这些PLC之间使用相同的协议进行通信,如Modbus协议,DM-PLC的攻击方式仍然适用于这些实际生产中的控制环境。攻击者只需要掌握每个品牌的控制器的组态程序编写方法即可实现攻击,且这些勒索的组态程序并不复杂。
4.2 预防和恢复措施
基于上述分析,工业企业应特别关注此种攻击方式带来的威胁,有针对性地采取预防措施。主要包括以下方面:
(1)PLC勒索病毒需要获取上位机控制权限以便后续针对勒索病毒进行部署,因此,可对工业控制系统中的工程师站、服务器、操作员站等主机部署终端防护,对操作系统进行安全加固。
(2)PLC勒索病毒会对控制器进行组态篡改来配置和安装病毒。为了防止攻击者针对控制器的这些非法操作,可对控制器加强专用的控制器防护,降低PLC组态被恶意篡改的风险。
(3)若PLC已被注入恶意代码,感染勒索病毒,可通过加强对控制器的监测及应急恢复,从而实时监测控制器组态的变更,并对非法组态篡改及时进行恢复。
国利网安“工控安全盾”
公司简介
Company Profile
浙江国利网安科技有限公司坚守“让控制更安全,让用户更放心”的使命,凭借30年的工控技术积累和十余年的工控安全研究,已形成了“工控安全试验场”“工控安全盾”等独具特色与优势的攻防核心技术、安全产品与服务体系,以及完整的行业解决方案,在水务水利、石油炼化、油气管网、城市燃气、电力能源、轨道交通、智能制造等行业拥有众多客户,致力于成为世界一流的关键基础设施安全整体解决方案提供商。
原文始发于微信公众号(国利网安):安全新视野 | 新型攻击方式——PLC勒索病毒的研究和预警