工控系统安全2——PLC攻击种类研究

PLC(Programmable Logic Controller,可编程逻辑控制器)是关键基础设施中的基础控制设备,其安全性涉及到整个控制系统的稳定运行。但是,随着两化融合的不断加深以及工业4.0的推进,工业控制系统在提高信息化水平的同时,其信息安全问题也日益突出。PLC遭受黑客攻击的途径也日益翻新,各种木马和病毒变体数量不断攀升,威胁工业控制系统的安全稳定运行和人员生命财产安全。上篇我们介绍了常见的几种PCL遭受的攻击路径,本篇再给大家介绍PCL遭受攻击的3个种类,进一步警醒大家:工业控制系统安全防护任重道远。

PLC遭受攻击的种类

PLC遭受攻击的种类按照攻击难易程度可以分为干扰性攻击、组态攻击和固件攻击。

三类攻击的描述如下表所示:

工控系统安全2——PLC攻击种类研究

表1 攻击的分类、描述及危害

01干扰性攻击

干扰性攻击主要用于耗尽PLC的资源,比如网络带宽、CPU计算资源等,从而使得PLC对正常的请求无法及时作出回应。华北电力大学举办的工控大赛上,初级攻击层次使用的就是DDoS(Distributed Denial of Service,分布式拒绝服务)的方式,使得PLC的通信模块拒绝服务,导致用户界面显示异常。另外也可以利用PLC通信缺乏认证和加密的缺陷,直接修改PLC的控制点位的数据,但是由于PLC自身的扫描周期比较短,因此,达到此种攻击需要攻击者使用的攻击机性能比较强大,发包速度比较快。而且这种攻击在停止后,一般PLC能恢复正常的运转。

Newman等[2]指出,在监狱中用来控制牢房和监狱大门的PLC可以远程打开或者锁死。一旦PLC被攻陷,就可以操作PLC控制的所有设施的物理状态:抑制发送给PLC或者由PLC发出的告警信息。McLaughlin等[3]开发了一款PLC攻击软件,对PLC的通信和控制过程进行分析,并生成动态的PLC通信载荷。不去修改PLC的组态,但是会对PLC的正常运行造成极大的危害,比如:打开变电站中的所有断路器。Abbasi等[4]开发出一款无法被检测到的PLC Rootkit,可能会比Stuxnet更加危险,因为Stuxnet的设计目标在于指向Windows架构之上的应用软件,而PLC Rootkit立足于更加底层的系统。该恶意软件会干扰PLC运行时与逻辑同I/O外设之间的连接(如图1),驻留在PLC组件的动态内存之中,且操纵相关的I/O及PLC流程(如图2),同时影响PLC进行通信交互以及处理物理流程控制的I/O模块。

工控系统安全2——PLC攻击种类研究

图1  PLC RootKit攻击过程

工控系统安全2——PLC攻击种类研究

图2  I/O 针脚复用攻击示意图

Tzokatziou等[5]指出,可以通过HID(human interface devices)对PLC的正常运行实施干扰。利用ABB PM564 PLC通信协议无加密、无认证的特性,使用Codesys系统和PLC建立通信并分析数据包指令,人为构造数据包,达到任意启停PLC的目的。

目前出现了专门针对PLC的勒索软件[5],也就是对工业控制系统进行加密,只有在支付一定数额的赎金之后才能获取解密密钥。这种攻击对PLC的组态并未破坏,但是在遭受攻击期间无法正常工作。

02组态攻击

组态攻击是对PLC的组态进行攻击,破坏PLC的控制逻辑,从而达到精准实施攻击的目标。Kclik等[6]开发了PLCinject工具,可以对PLC注入篡改后的组态,使得PLC的逻辑执行跳转到攻击者指定的功能块上。它利用PLC编程语言STL编写端口扫描器和SOCKS代理,首先下载PLC组态OB1,在组态开始执行前加入CALL指令,调用恶意功能块FC666,启动SNMP扫描器,然后运行以下5步骤:

(1)获取本地IP地址和子网

(2)计算IP地址

(3)建立UDP连接

(4)发送SNMP请求数据包

(5)接收SNMP回复数据包

(6)将回复数据包保存在DB中

(7)停止扫描,断开UDP连接

组态注入过程如图3所示:

工控系统安全2——PLC攻击种类研究

图3  PLC组态注入过程

Langner等[2] 利用编译后的十四字节序列,注入到原来PLC合法的组态OB1之前,设置终止条件,随时都可以终止PLC的运行。14字节的代码如下所示:

7E 63 00 0C 38 07 11 12 25 00 39 A0 05 00

McLaughlin等[13]通过连接到Internet的PLC,分析PLC的逻辑控制,并自动生成恶意代码,编译后注入PLC,从而更改PLC的组态。

但是组态攻击要达到比较准确的目标,往往需要对PLC的组态进行分析,找到攻击点的准确定位。典型的如Stuxnet[6]。

03固件攻击

原来的攻击都针对于PLC的上层系统,比如针对人机交互界面(HMI)和网络通信协议(比如Modbus协议)。即使是攻击手段较为复杂的Stuxnet,也是针对Siemens PLC的编程软件,而不是底层的现场设备代码。

在PLC架构中,固件充当了操作系统的角色,提供了诸多服务,比如通过web服务器远程访问、远程固件升级等。这些功能给终端用户的操作提供了极大的便利,但是同时也给攻击者以可乘之机,如图4所示[7]。

工控系统安全2——PLC攻击种类研究

图4  PLC组态、固件、硬件模型

针对PLC的固件攻击是目前最为隐蔽的攻击方式,实现起来比较复杂,一般分三步进行:

(1)对PLC的固件进行反汇编,确定各个参数的寄存器地址,匹配已知的设备功能;

(2)注入恶意指令、修改跳转指令或者修改寄存器地址,且一般不影响上层组态软件的稳定性;

(3)对固件进行重新打包并重新下载到PLC中。

Schuett等[7]首先通过逆向工程,分析PLC的固件映像的指令集,找到固件的存储区域和执行路径,然后修改固件中的服务和控制指令,从而实施远程攻击:设定时间终止PLC运行、收到控制信号终止PLC运行、对固件做永久修改使得操作员无法重新使用PLC。PLC固件的一个缺陷就是信任其内在的固件验证过程,这个过程依赖于CRC校验机制。CRC校验可以用来验证固件是否受到破坏,但是无法检测到恶意篡改。图5显示了对固件诊断例程的修改。

工控系统安全2——PLC攻击种类研究

图5  对PLC固件诊断例程修改过程

Beresford等[1]实现了针对Siemens Simatic S7 PLC的固件攻击。Garcia等[8]详细介绍了针对PLC的固件攻击全过程,利用内嵌的固件升级机制、在线代码注入等达到固件攻击的目的。具体的攻击过程如图6所示:

工控系统安全2——PLC攻击种类研究

图6  PLC固件双向攻击过程

通过双向修改实现攻击过程,修改PLC的控制指令,从而摧毁物理世界;同时修改传感器的测量值,使得操作员看到“合理”的数值,从而达到隐藏攻击,避开检测的目标。

综上所述

PLC的安全态势不容乐观,针对PLC的攻击路径比较多,而且攻击层次在逐渐深入,做好PLC的安全防护任重道远。

原创文章,作者:中国保密协会科学技术分会,如若转载,请注明出处:http://www.mottoin.com/tech/133164.html

发表评论

登录后才能评论

联系我们

021-62666911

在线咨询:点击这里给我发消息

邮件:root@mottoin.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code