工控系统安全2——PLC攻击种类研究
PLC遭受攻击的种类
三类攻击的描述如下表所示:
表1 攻击的分类、描述及危害
01干扰性攻击
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模块。
图1 PLC RootKit攻击过程
图2 I/O 针脚复用攻击示意图
目前出现了专门针对PLC的勒索软件[5],也就是对工业控制系统进行加密,只有在支付一定数额的赎金之后才能获取解密密钥。这种攻击对PLC的组态并未破坏,但是在遭受攻击期间无法正常工作。
02组态攻击
(1)获取本地IP地址和子网
(2)计算IP地址
(3)建立UDP连接
(4)发送SNMP请求数据包
(5)接收SNMP回复数据包
(6)将回复数据包保存在DB中
(7)停止扫描,断开UDP连接
组态注入过程如图3所示:
图3 PLC组态注入过程
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架构中,固件充当了操作系统的角色,提供了诸多服务,比如通过web服务器远程访问、远程固件升级等。这些功能给终端用户的操作提供了极大的便利,但是同时也给攻击者以可乘之机,如图4所示[7]。
图4 PLC组态、固件、硬件模型
(1)对PLC的固件进行反汇编,确定各个参数的寄存器地址,匹配已知的设备功能;
(2)注入恶意指令、修改跳转指令或者修改寄存器地址,且一般不影响上层组态软件的稳定性;
(3)对固件进行重新打包并重新下载到PLC中。
Schuett等[7]首先通过逆向工程,分析PLC的固件映像的指令集,找到固件的存储区域和执行路径,然后修改固件中的服务和控制指令,从而实施远程攻击:设定时间终止PLC运行、收到控制信号终止PLC运行、对固件做永久修改使得操作员无法重新使用PLC。PLC固件的一个缺陷就是信任其内在的固件验证过程,这个过程依赖于CRC校验机制。CRC校验可以用来验证固件是否受到破坏,但是无法检测到恶意篡改。图5显示了对固件诊断例程的修改。
图5 对PLC固件诊断例程修改过程
Beresford等[1]实现了针对Siemens Simatic S7 PLC的固件攻击。Garcia等[8]详细介绍了针对PLC的固件攻击全过程,利用内嵌的固件升级机制、在线代码注入等达到固件攻击的目的。具体的攻击过程如图6所示:

图6 PLC固件双向攻击过程
综上所述
原创文章,作者:中国保密协会科学技术分会,如若转载,请注明出处:http://www.mottoin.com/tech/133164.html