全国服务热线 19542938937

如何在S71200实现蠕虫病毒?

发布:2023-03-12 23:49,更新:2023-08-01 08:00

如何在S71200实现蠕虫病毒?

关注公众号,获取更多自动化资讯!


1、概述


众所周知,工业生产过程是通过可编程逻辑控制器(PLC)来控制的。现在市场上许多PLC都配置了以太网口并且可以用IP进行通信。我们将以西门子SIMATICS7-12、相关准备工作


PLC硬件系统构架其实很简单。他们基于中央处理器(CPU)模块,加上支持数字输入和输出模块组成。CPU处理PLC操作系统以及运行用户程序。此外CPU负责与其他设备通讯以及管理过程映像。


过程映像储存着所有的输入和输出的状态。用户程序不能直接操作物理的输入输出,而是通过操作过程映像而实现的。用户程序的运行是一个循环,每次循环的起始和结束的时候,CPU会刷新过程映像;循环上限指的是循环时间,如果一个循环运行的时间超过循环上限时,PLC会停止用户程序运行并抛出一个异常。


Figure1.ZykluseinesPLCs


用户程序通过POU(程序单元)构造而成。这些单元(程序单元)包含了控制PLC的使用说明,因而可控制工业生产。SIMATICS7-14.1体系结构


这个蠕虫的编写与其他限制性蠕虫软件一样。在开发过程中,必须满足特定的PLC的限制条件,尤其是循环上限必须满足,蠕虫每几微秒就必须中断其执行,并在接下来的每次循环中继续执行,为了满足这个要求,我们通过状态机来设计了该蠕虫,当前的状态被存在全局变量里面,在每次循环开始开始时,蠕虫的相关代码将会被调用,所以永远不会超过循环上限的时间。


如图2中所展示的步骤,蠕虫首先初始化一个连接来连接可能目标,一旦建立了连接,蠕虫会检测目标是否已经被感染,如果没有感染,蠕虫将停止目标机上的用户主程序的执行,使其能够传输自己的代码,然后蠕虫把自己复制到目标上,随后启动目标PLC,接下来蠕虫再测试下一个可能的目标。


Figure2.Executionsequenceoftheworm


4.2目标侦查


蠕虫先扫描可能的目标,SiemensSIMATIC的PLC可能被识别为102/tcp端口,这个端口仅仅能够被外部防火墙所关闭,其他普通的服务不会使用这个端口。


S7-14.3.1传播协议


文章的剩下部分主要讲解这种被称为S7CommPlus的私有协议。这是一个使用TPKT和ISO8073标准制定的一个二进制协议,。正常情况下这两个协议都使用102/tcp端口,S7CommPlus主要特性:


·PLC的配置


·启动和停止PLC


·读写过程变量


·程序传输(上传和下载)


·调试


·提供调试信息


·警告


4.3.2消息


S7CommPlus所使用的每个消息都有着相似的结构。图5展示了连接中的个消息,TIA端口通过发送该消息来初始化一个连接,通用的结构接下来会进行解释,前两个域表示的是TPKT和ISO8073协议,他们的内容在相应的文档中都有解释,之后的0x72字节表示S7CommPlus信息的起始,不同的协议会有不同的版本号,长度域不受帧边界的限制,如果帧的边界丢失,更多的信息附在附加的信息的后面,紧跟长度域后面的是类型域,子类型字段进一步了该消息,序列号是随着每个消息而递增的,其他的数据在特定属性块中被传输。


Figure5.S7CommPlusmessagestructure


4.3.3属性块


真正的数据是在属性块中。图6展示了这个例子当中的个标志块,每个属性块都是以0xA3开始,该块包含一个字符串,完整的字符串包含长度和字符串值。


Figure6.Attributeblock


4.3.4数字编码


属性块中的数字通过一种特别的方式进行了编码。数字的长度是可变的,数字的每一个字节的个位决定决定了之后是否还有字节数据,图7解释了上一个例子当中的属性ID和长度字段。此外,属性块的值数据是不需要编码的。


Figure7.Encodingofnumbers


4.3.5反回放机制


S7CommPlus协议可以检查到回放攻击。为了发现回放攻击,PLC发送响应消息的第25个字节的是一个随机数字,该字节数据用于检测回放攻击。随机数值在0x06和0x7f之间变化,这个字节称为anti-replaychallenge。


TIAportal会基于该challeng数值做一次响应,响应的数据第24、29个字节来检查值。检查值的计算公式如下:


antireplaybyte=challenge+0x80


Figure8.Antireplaymechanim


之后所有的从TIA端口发送给S7-1


Figure9.AntireplayMechanism


4.3.6程序传输


为了传输用户程序,一种特定的消息在此被使用。每条消息传输一个POU,POU的类型也会因POU的不同而不同,块编码(Theblocknumber)了该POU的PLC内存位置。


Figure10.Transferringtheuserprogram


消息头后面会有几个属性块。此外,在S7上存储有确切的字节码元信息,这个元信息详细说明需要的内存空间、创建日期、块号(blocknumber)、所用语言、源代码和保护属性。TIAportal也许会使用这些信息来验证代码的有效性。


4.3.7确定所需的消息


在用户程序传输的过程中,有几个消息会进行交换,不过这个交换对于蠕虫来说并不是强制的。这些无关的消息会增加蠕虫的储存空间,因此被忽略。


图11展示了一次有效的感染所需的消息。通讯首先被初始化,为了避免重复的感染,蠕虫会首先测试目标并试图下载一个自己的拷贝,在上传代码之前,需要暂停PLC,然后传递程序,重启PLC。



4.3.8实现


基于以上协议的分析,传输的程序可能会在PLC上被记录、修改和重放。所有所需的消息都已知晓,为了在蠕虫中储存消息,需要使用到静态DBPOU,额外的DBs用来储存临时变量和收发缓冲区。


静态DB必须储存感染所需所有消息。该DB块无法通过TIAportal来生成,需要手动进行构造。


Figure12.ManualgenerationoftheDB


5、启动蠕虫


当被传达的蠕虫代码加入到运行于目标PLC中的用户程序中时,额外OB和所需的DBs也需要加入。目标上的原始代码是不能够操作的,OB会被PLC自动发现并且执行。


Figure13.Thewormisrunasnormalcode


6、恶意功能


根据蠕虫的功能特性,我们可以实现一些不同的蠕虫功能,并阐述其危害性。


6.1C&C服务器


我们的蠕虫需要连接到C&C服务器。通信协议是基于TCP的。蠕虫的不同功能可以通过C&C服务器来触发。


6.2Socks4代理服务


我们的蠕虫可以作为一个Socks4代理服务。一旦蠕虫连接上了C&C服务器,在PLC网络中任何新的客户端的连接都通过的内嵌Sock4代理服务来启动。


6.3DOS


PLC执行的时间超出循环上限,便会停止执行。蠕虫可以实现一个无线循环触发这样一种错误条件来达到Dos的效果。


6.4操作输出


蠕虫可以操控PLC的任何输出,利用POUPOKE,过程镜像中的任何值都可以进行篡改。


7、蠕虫的探测、持久性与资源


7.1蠕虫的探测


7.1.1TIAportal


TIAportal可以验证PLC上的用户程序,并且可以侦测到被篡改和被加入的POU,被红线框起来的是蠕虫所用的POU,因为TIAportal仅仅分析XML的源代码,所以对POU的分析是不可能的,此外通过利用TIAportal的bug中,蠕虫会导致应用崩溃。


Figure14.TIAportalexposestheworm


7.1.2停止PLC


PLC会在感染期间有大概10秒左右的时间是不工作的。在此期间原始的用户程序不会运行,这种PLC中断可能会引起注意并且被记录在PLC之中。


7.1.3网络流量


蠕虫会在ICS环境中产生不正常的流量,在扫描和感染阶段,会发送很多可疑的数据包。


7.2.蠕虫的持久性


7.2.1重新启动与重新引导


蠕虫是被储存在PLC中的,它成了用户程序的一部分,所以即使在重启和甚至是拔除电源的情况下都会存在。


7.2.2恢复出厂设置


TIA端口可以触发PLC恢复出厂设置,这种情况下,所有的设置和用户程序包括蠕虫都会被清除。


7.2.3程序传输


我们的蠕虫存储在OB9999里面,如果这个POU被覆盖住了,蠕虫也就从PLC上被删除了。


7.3蠕虫的资源


7.3.1循环时间


循环上限是固定的,默认限制时间是150微秒,蠕虫一定不能超过这个限制,在没有用户程序的情况下我们测量的PLC循环时间是0微秒,在我们用蠕虫感染了S7后,再测量了一遍得到的循环时间是7微秒(ms),这是循环上限的4.7%。


7.3.2储存器


蠕虫需要38.5KB的RAM来存储蠕虫代码和数据,其中9.0KB(23.3%)是恶意功能代码。此外,还需要216.6KB的FLASH,表格1当中展示了不同型号机的储存器可用空间。



8、保护机制


PLCS7-18.1专有技术保护(KnowhowProtection)


专有保护技术保护用户程序不被未授权访问。用密码可以禁止非授权访问和POU篡改。


专有保护技术通过属性块而实现的,该块在程序传输的时候被写入到PLC中。在图15中展示了该块,Flag表示该技术是否启用,passwordhash是基于密码P使用如下公式产生的:


H=sha-1(encode_utf-16le(P))


Figure15.Attributeblock:knowhowprotection


TIA端口获取该属性块,如果flag被设置了,TIAportal在密码不正确的情况下会禁止读和写相关程序块,密码是通过hash进行比对的。


为了避免代码被访问,PLC上XML的源代码是通过AES128-CBC加密的,图16展示了加密的源代码。


Figure16.Encryptedsourcecode


8.1.1薄弱点


缺失完整性保护:即使在专有保护技术的存在下,块还是有可能被读取和修改。这个保护在TIAportal中实现的,而不是在PLC里面,使用自写工具在PLC中进行块的读写都是可以的,PLC会给予一切许可,甚至可以直接重置专用保护技术flag,以此可以通过TIAportal来实现完全访问。


AES-key可能被衍生:AES加密key可能来自于passwordhash。passwordhash可以使用自写入软件来读取。Key是采用如下公式计算得到的:


8.1.2从蠕虫的角度分析保护功能


这个特性不会对蠕虫攻击有保护。


8.2防拷贝保护


防拷贝保护禁止将用户程序拷贝到另外一个PLC中,目标PLC的序列号是存在用户程序中,以此防止TIAPortal将用户程序传输到其他PLC中,序列号被储存在几个独立的属性块当中。


8.2.1更多薄弱点


完整性保护缺失(供应商在SSA-833048中已经修复),属性块的完整性是不受到保护的,被存储的序列号可能被修改甚至删除,PLC本身并不会检查序列号,这种保护特性仅仅在TIAportal中实现。


8.2.2蠕虫的角度来分析防拷贝保护机制


该(防拷贝特性)特性并不能防止该蠕虫攻击。


8.3访问保护


访问保护可以防止使用S7CommPlus协议软件无密码访问PLC,其有三种保护级别,表格2列出了不同的级别。


Table2.Accessbasedontheprotectionlevel


这些级别的验证采用的是challenge响应机制。


8.3.1从蠕虫的角度分析访问保护机制


该访问保护机制可以保护PLC免受蠕虫的攻击,写保护可以防止任何人篡改PLC中的代码,使用challenge响应机制来鉴定应该说是安全的,如果蠕虫不知道密码,那么蠕虫就无法感染PLC,但是在默认情况下访问保护都是关闭的。


9、S7-1500入门指南


在这篇文章中我们阐述了PLC蠕虫实现的可行性。该蠕虫代表了工控行业中的一种新型威胁,这样的网络在传统观念里都很好地受到保护而难以受外部攻击,通过引入PLC蠕虫,PLC成为了攻击源,而不只是攻击目标,受感染的PLC可能通过工控组件提供商或者在组件传输过程中被掺入其中而进入到工控系统中,蠕虫之后便可以在工控网络内部进行扩散,且不需要任何标准电脑和服务器,因此它不会被任何杀毒软件做侦测到,此外工厂操作员也只有很少选择来识别PLC上的恶意软件。


联系方式

  • 地址:上海黄浦 上海市松江区石湖荡镇塔汇路755弄29号1幢
  • 邮编:200011
  • 电话:19542938937
  • 联系人:刘经理
  • 手机:19542938937
  • 微信:19542938937
产品分类