S7协议应用层数据分布
图9为下装程序块的S7Comm数据报文,其中0x32为S7Comm协议标识符,Protocol Data UnitReference为协议数据单元标识符,在S7Comm协议中用作通信过程的时序标记。Function标识了该数据报文的功能。Data报文区为所对应功能块的内容。
功能块下装数据报文
在博途软件中,使用FC功能块实现连接的建立,寻找新的目标IP,判断目标PLC是否已被感染病毒,并进行病毒程序的传播等功能。使用一个DB数据块存放FC功能块中所用到的所有全局变量,使用一个DB数据块存放病毒感染全部过程所需要的报文内容。
激活
建立调用病毒程序的OB块OB9999,并将其存植入到目标PLC中,用以激活病毒,并进行新的病毒传播感染。西门子PLC在运行时,会按照从OB1到OB9999的顺序进行调用。如图10所示。
西门子PLC程序调用步骤
恶意功能的实现 C&C服务器 一旦PLC被感染病毒,会基于TCP主动去连接C&C服务器。通过C&C服务器,可以远程控制PLC,包括PLC的启停,输出值的改变等。Socks4代理 一旦PLC被病毒感染,在局域网中的其他PLC,可以通过Socks4代理连接到C&C服务器。 拒绝服务攻击可以向PLC中下装例如死循环、除零或者负数开方的程序,让PLC停止工作。 改变输出值可以通过编写正常的PLC程序,来改变输出值,进而影响现场设备的正常运行。
检测与防护病毒的检测 利用博途软件 博途软件提供了PLC程序在线与离线差异的检测功能,如图11所示。程序块后面的绿色圆圈表示在线程序与离线程序一致,蓝色与橘黄色组成的圆形表示在线程序与离线程序不一致。
博途软件对程序在线离线一致性的检测
观察PLC的状态灯下装程序的过程中会导致PLC的停止与启动,在此期间,所有模拟量数值与开关量状态会保持不变。该时间仅有几秒钟,操作员可能会忽视该细节。使用工控漏扫设备 使用工控漏扫设备对PLC进行扫描,由于病毒程序必须利用较大编号的OB块。扫描较大编号的OB块可以对病毒进行检测。检测网络 在病毒进行传播的过程中,网络中会出现PLC与PLC通信的数据报文,根据该异常报文可以检测出病毒测存在。 病毒的存活性重启PLC 病毒为正常的程序块,此重启PLC后,该病毒仍存在于PLC中,并且正常运行。 恢复到出厂设置恢复到出厂设置会清空PLC中的所有程序,病毒程序连同正常程序一起会被清空。 下装程序
如果有正常的OB9999组织块,或者与病毒同编号的FC块、DB块的下装,则病毒会被新下装的程序覆盖,并且不会被感染
病毒的防护 设置权限密码 工控厂商对于自己产品,在协议层设置权限密码,没有密码的清空下,不可以利用协议来与PLC建立通信连接。在工控系统中布置IDS/审计系统 布置IDS/审计系统,通过工控协议特征值的采集、分析与识别,如发现异常数据包,则记录日志或报警布置工控防火墙 通过工控防火墙,对异常数据包进行检测以及隔离防护