PLC是工业领域中很常用的一种控制器。现在常用的PLC都配备有以太网接口,并采用了IP协议。我们基于西门子S7-1200设计了一个蠕虫病毒,这种蠕虫病毒不需要借助PC机,仅仅基于PLC设备就能实现扩散,攻击目标并将自身进行复制。该蠕虫病毒代码在目标机复制后不会发生变化,从而可以重复进行目标扫描,进一步扩散。我们分析了该蠕虫病毒的影响和预防措施。
1.概述
IT是现代工业控制系统的重要组成部分,因为如果没有IT系统,生产过程将无法进行。不幸的事,由于引入了IT系统,工控系统的使用者也面临着传统IT系统的信息安全威胁。IT系统的黑客可以从几个不同的角度威胁工控系统。他们可以引起生产中断,造成巨额经济损失,以及损坏周围人员的健康安全。震网病毒的案例充分说明了这一点。伊朗铀浓缩工作受西门子PLC被篡改的影响,被迫暂停。蠕虫病毒利用windows的漏洞,在铀浓缩工厂的PC之间传播。PLC的软件被篡改,使得离心机被毁。该蠕虫病毒需要借助PC机进行传播,并基于PC机攻击PLC设备。本文演示了一种基于PLC设备进行传播的蠕虫病毒,而不需要PC机。这种病毒可能被在役的PLC传播到工控系统中,并在PLC之间传播和复制。该蠕虫病毒进入目标后,复制自身代码并修改目标PLC中已经下载完毕的用户代码,使病毒激活。本文基于西门子S7-1200 v3进行实验,用结构文本编辑病毒代码。
2.相关工作
2015年,Klick等人利用PLC的通信机制实现了一个代理,进而展示了一种病毒。本文利用这一通信机制,基于新型号的S7-1200 V3实现了蠕虫病毒在PLC之间的传播。
3.PLC结构
图1 Zyklus eines PLCs
PLC的过程映像区保存有所有输入和输出的状态,用户程序在过程映像区中运行,不直接操作PLC的物理输入和输出接口。用户程序按照循环周期运行,在每个循环周期的开始和结束时间CPU会刷新过程映像区,循环的最长时间限制被称作循环周期。如果超出了循环周期,PLC会停止运行并报异常。
程序组织单元(Program Organization Units,POU),西门子S7-1200支持如下POU:
组织块(Organization block,OB),进入用户程序的主要入口
数据块(Data block,DB),全局存储
函数(Function),函数
函数块(Function Block,FB),具有持续本地存储的函数
除了用户定义POU函数,西门子还提供了几种函数。包括TCON、TDISCON,利用这些函数PLC可以初始化和终止与任意系统之间的TCP连接。基于TRCV和TSEND函数缓冲区可以发送和接收函数。
4.计算机蠕虫病毒
蠕虫病毒攻击包括以下三个阶段:可能目标检测,向目标扩散,在目标上激活并执行恶意代码。
5.S7 1200的蠕虫病毒实现
5.1结构
在S7 1200PLC上实现蠕虫病毒首先要满足PLC关于最大执行的循环时间限制,所以蠕虫病毒必须每隔几毫秒就暂停一次,然后在下一次循环周期开始时重新启动。为了满足这一要求,本文使用状态机设计蠕虫病毒,将病毒的当前状态保存在一个全局变量中,每隔循环周期的开始阶段会调用病毒的特定代码,确保病毒的运行不会超出PLC的循环时间限制。
图2显示了病毒的执行流程。蠕虫病毒首先与潜在目标建立一个连接,建立连接后蠕虫病毒先检测目标是否已被感染,如果没有被感染则停止目标上的用户程序,并复制自己并向目标传送自己的代码,然后重新启动PLC。然后继续检测潜在目标PLC,循环执行上述周期。
图2 蠕虫病毒的传播过程
5.2目标检测
蠕虫通过TCP的102端口检测潜在目标,该端口只能被外部的防火墙关闭,而且没有其他服务会使用该端口。
S7-1200使用POU的TCON函数管理TCP连接。源代码如列表3所示,其中第3行显示了POU的使用,第9行传递了一个任意的IP地址和端口。只要POU被调用,PLC就会尝试建立连接。这一过程是异步执行的。在稍后的循环周期中会验证连接状态。返回值DONE表返回连接是否建立。如果返回值为true,则继续传播。如果IP地址和端口的连接无法建立,则不会引起错误。通过在循环周期内增加一个不断增加的计数器,以实现定时功能。
图3 利用SCL检测目标
如果经过200个周期没有建立连接,则蠕虫会执行图4中的程序。如果没有建立连接,则必须调用POU的TDISCON释放资源以便建立下一个连接,如在第13行中所示,IP地址增加。从而实现对所有的子网进行扫描以寻找开放的204端口。
图4 基于SCL语言的目标检测程序