可编程逻辑控制器的控制逻辑注入攻击入侵检测方法

2023-07-03 14:12孙怡亭李长进张红军刘俊矫孙利民
计算机应用 2023年6期
关键词:白名单控制程序配置文件

孙怡亭,郭 越,李长进,张红军,刘 康,刘俊矫,孙利民

(1.物联网信息安全技术北京市重点实验室(中国科学院信息工程研究所),北京 100093;2.中国科学院大学 网络空间安全学院,北京 100049;3.河南中烟工业有限责任公司 许昌卷烟厂,河南 许昌 461000;4.河南新拓途信息技术有限公司,郑州 450000)

0 引言

工业控制系统(Industrial Control System,ICS)是国家基础设施的神经中枢,可编程逻辑控制器(Programmable Logic Controller,PLC)是ICS 的基础控制单元[1]。随着工业4.0 的兴起,PLC 通过互联网的连通性不断增强,致使针对PLC 的攻击面大幅增加。由于PLC 在工业控制过程中的敏感作用,一旦它们被成功利用,将导致物理过程偏离预期的规定运行,造成关键设施损坏、非计划停产和人员伤亡等严重后果[2-3]。

在各种PLC 攻击中,控制逻辑注入攻击造成的危害最严重。攻击者以PLC 控制逻辑为目标,通过篡改或注入恶意的控制逻辑破坏正常的物理控制过程。例如,Stuxnet[2]感染了控制离心机变频驱动的西门子S7 300 PLC 的控制逻辑,更改电机转速从而中断驱动器的正常运行。近年来,学术界关于控制逻辑攻击的研究层出不穷,例如DEO(Denial of Engineering Operations attack)[4]、CLIK(Control Logic Infection Attack)[5]和PLCinject[6]等。

因为恶意控制逻辑程序通常通过网络下载,所以针对网络流量的深度解析技术常用来检测此类攻击;随着碎片和噪声填充[7]等更为隐蔽的控制逻辑注入攻击的出现,攻击者能够绕过有效载荷检查等传统检测技术。基于PLC 代码的形式化验证技术也常用于防御攻击,包括PLC 代码形式化模型构建、状态缩减、规范生成和模型检测等,但形式化验证的状态爆炸问题使之难以实际应用,而且需要工程人员结合设备所处物理环境制定安全属性,迫切需要一种能检测PLC 控制逻辑注入攻击的实用化方法,高效检测出多种注入攻击。

本文提出了一种针对PLC 控制逻辑注入攻击的入侵检测方法,称为PLCShield(Programmable Logic Controller Shield)。首先,逆向了PLC 程序提取的协议交互模式,实现与PLC 的通信过程,主动获取控制逻辑的基线程序。其次,将提取的PLC 二进制程序统一重构为便于解析的指令表(Instruction List,IL)语言程序。然后,采用词法、语法和数据流分析等技术自动化分析控制程序,提取程序属性、地址、值域和结构等检测规则。以上步骤使得白名单生成流程自动化且无需人工参与。最后,基于检测规则,提出了主被动结合的攻击检测算法,即轻量级、主动地向PLC 请求检测信息和被动的网络流量解析,从不同角度实时检测攻击行为。

为了验证PLCShield 的可行性,本文以罗克韦尔AB MicroLogix 1400、西门子S7 300、西门子S7 400 和施耐德M221 这4 款PLC 作为案例,实现了一个原型系统并搭建了一个仿真环境模拟真实的工控环境进行测试。实验结果表明,本文检测方法可以在不影响PLC 正常工作的情况下,有效检测出控制逻辑注入攻击,准确率在97.71%以上。

本文的主要工作如下。

1)二进制程序反编译。通过分析PLC 二进制程序结构,从网络流量中将各种语言编译的二进制程序重构为便于解析的高级指令表程序。

2)检测规则自动化生成。通过自动化分析PLC 指令表程序的配置文件、指令功能、变量属性和执行路径等信息,提取程序属性、地址、值域和结构等检测规则,作为攻击检测的基线。

3)主被动相结合的检测方案。通过主动请求PLC 的运行“快照”和被动监听网络流量相结合的方式,实时获取PLC当前的运行状态,并与检测规则比对识别攻击行为。

1 背景知识

1.1 PLC的控制逻辑程序

PLC 的控制逻辑程序以IEC61131-3 标准[8]中定义的5 种编程语言编写,包括梯形图逻辑(LaDder logic programming language,LD)、功能模块(Function Block Diagram,FBD)语言、顺序功能流程图(Sequential Function Chart,SFC)语言、IL 语言和结构文本化(Structured Text,ST)语言。LD、FBD 语言、SFC 语言属于图形化的编程语言;IL 语言类似于汇编语言,由操作码和操作数组成;ST 语言类似于高级语言。

PLC 的控制逻辑是高度结构化的,以西门子PLC 为例,控制逻辑代码由各种类型块组成,例如组织块(Organization Block,OB)、功能块(Function Block,FB)、函数(FunCtion,FC)等。一个PLC 控制程序至少包含一个称为OB1 的组织块,相当于编程语言中的main 函数,是用户程序中的主程序。FB、FC 类似于函数实现特定功能,如运动控制、网络通信等。每个程序块内部包括变量定义和具体的代码逻辑实现。

PLC 通常配备有RS-232 串口、以太网和USB 等通信接口,用来传输代码和数据。工程师利用供应商提供的上位机软件编写控制程序并编译为PLC 可执行的二进制程序,然后使用特定的工控协议通过以太网或串口将程序下载到PLC中。同样,用户也可以使用上位机软件从PLC 中获取控制程序和数据。控制程序在上传/下载过程中主要分为3种类型文件:配置文件、代码文件和数据文件。配置文件记录了其他类型文件的信息,例如文件地址和大小等,以及PLC 配置信息;代码文件存储了PLC 上运行的控制逻辑代码;数据文件存储了在代码文件中使用的变量,例如输入、输出、计时器等。

1.2 PLC控制逻辑注入攻击

PLC 控制逻辑注入攻击就是通过篡改或注入恶意的控制程序操纵目标PLC的物理控制过程,从而影响工业控制过程,甚至产生破坏,Stuxnet 是现实世界中此类攻击的典型代表。近年来,与控制逻辑相关的通用漏洞披露(Common Vulnerabilities and Exposures,CVE)呈现快速增长的趋势[9]。攻击者可以利用上位机漏洞或接入ICS 网络访问PLC 原始控制程序,并进行恶意篡改[2,6,10]。通常攻击者为了增强隐蔽性只对关键控制语句进行微小的改动,例如修改关键方程式或设定点信息,这需要攻击者对程序和物理过程有足够的了解[5]。除此之外,攻击者还可以篡改程序字节码或二进制文件,攻击者首先对程序字节码或二进制进行逆向操作,然后修改反编译后的程序从而产生攻击,这个过程发生在控制程序从上位机下载到PLC期间,攻击者作为中间人拦截和修改程序传输流量,相关攻击如:DEO[4]、LLB(Ladder Logic Bombs)[11]。

随着对抗能力的增强,攻击者开始使用更高级的手段来逃避各种检测机制,例如攻击者通过构造虚假响应向工程人员营造出控制逻辑未被攻击的假象[2,5]。Yoo 等[7]提出了一种名为碎片和噪声填充的新型攻击,隐藏恶意控制逻辑在网络上的传输,逃避了传统的深度数据包检查,成功实现对PLC 控制逻辑的注入攻击,而市面上常见的网络IDS 很难检测到这种类型的攻击。

1.3 相关工作

现如今许多工业协议都支持TCP/IP(Transmission Control Protocol/ Internet Protocol)和以太网通信,PLC 通常配备有RS-232 串口、以太网等通信接口,用来传输代码或数据。一个可行的解决方案是在控制逻辑下载到PLC 之前进行验证。例如,比较正在传输的控制逻辑与正常控制逻辑[12-13],即如果PLC 控制逻辑在执行期间仅遵循有效的执行路径[14],则可以检查PLC 运行时控制逻辑的控制流。最有效的方法是在ICS 网络中检测并阻止控制逻辑数据包的传输,除非明确允许该传输。通常,可以通过检查PLC 协议标头实现,该标头包含有效负载类型的信息[1,15],或者检查数据包的有效负载以识别控制逻辑或PLC 配置中的未经授权的更改[16]。

形式化验证技术长期以来也一直用于防御控制逻辑注入攻击,该技术是基于某种形式的逻辑来验证程序是否符合其规范,研究主要集中在行为建模[17-19]、状态减少[20-21]、规范生成[21-22]和验证[23-24]。形式化验证技术具有其他解决方案无法提供的优点。PLC 在控制物理过程时必须严格满足实时性约束,这对于执行大量动态分析的重量级解决方案说是不切实际的;而形式化验证是轻量级的,能够适用于控制逻辑注入攻击的检测。

2 控制逻辑注入攻击检测方法

如图1 所示,PLCShield 主要包括白名单规则生成阶段和基于规则的主被动攻击检测阶段两个阶段。

图1 控制逻辑注入攻击检测方法Fig.1 Control logic injection attack detection method

2.1 基于基线程序白名单规则的自动化生成方法

本文提出了一种基于基线程序白名单规则的自动化生成方法,相关技术已申请了专利[25],专利仅说明了从基线程序中提取白名单规则,而本文则详细介绍了如何从基线程序中提取白名单规则以及提取了哪些白名单规则。

在工业控制系统中,PLC 的控制逻辑确定了系统的业务控制流程,诸如定时器设定点信息、一些关键变量的取值范围等。通过分析PLC 基线程序,能够提取用于控制逻辑注入攻击检测的多种白名单信息。

1)程序结构白名单。IEC 标准强调结构化的程序结构,控制逻辑由程序组织单元(Programming Organization Unit,POU)例如程序块、功能块、函数等组成。每个POU 都有固定的类型和块号。在程序执行期间,从主程序块开始执行,程序块在执行过程中可以调用其他的函数或者功能块。当工程人员将定义好的控制逻辑下载到PLC 中时,控制逻辑包含的块类型、数目和块之间的结构关系都是固定的,这样才能保证PLC 进行正常的物理控制过程。许多攻击者会将恶意程序块注入PLC 中,并篡改原始程序调用恶意程序块,使得恶意程序在下一个循环周期中自动执行且不会中断任何服务。对于程序结构白名单的生成,需要基于IL 语言特征对程序进行控制流分析,提取程序间的结构关系。

2)程序属性白名单。控制逻辑中每个POU 块都有一些固定的属性特征,表明该POU 块的一些基本信息,例如块的大小、地址、校验和梯级数目等。这些POU 块的基本属性信息可以提供一些重要的指示,说明PLC 控制程序可能发生的变化或修改。生成程序属性白名单,需要提取并解析配置文件内容,得到POU 块的属性特征。

3)程序地址范围白名单。程序在执行过程中,只会读写程序使用范围内的物理地址,如果出现超出范围的读写操作,很可能是攻击者在探测或注入一些非法数据和代码。生成程序地址范围白名单,需要对程序进行词法分析提取变量集合,并将变量信息映射为实际物理地址,从而得到程序有效地址范围集合。

4)程序数据范围白名单。PLC 运行时的数据取值范围受内部程序约束,例如水闸控制的水位阈值等。攻击者若篡改了控制这些关键数据的代码,会使数据超出合法取值范围,破坏物理世界的稳定,震网病毒通过篡改与离心机有关的控制语句使得离心机转速超出预设值。因此可以基于对控制程序进行数据流分析得到程序数据范围白名单,通过判断变量取值是否超出合法范围,从而断定控制程序或寄存器数值是否遭受恶意篡改。

本文以罗克韦尔AB MicroLogix 1400 PLC 为例,介绍白名单规则的提取过程,包括基线程序采集、二进制程序反编译和白名单规则提取。

1)基线程序采集。白名单规则是以PLC 正常工作状态下运行的控制逻辑为依据构建,将PLC 未遭受攻击状态下的控制逻辑程序称为基线程序。该步骤是使用特定的通信协议与PLC 建立连接并发送程序上载请求提取基线程序。MicroLogix 1400 PLC 使 用PCCC(Programmable Controller Communication Command)协议通信,程序上载主要包括3 种类型文件:配置文件、代码文件和数据文件(输入、输出、计时器和计数器等),表1 展示了PCCC 协议中常见的文件类型字段含义。

表1 PCCC协议中常见文件类型Tab.1 Common file types in PCCC protocol

由于代码和数据文件的数目、映射地址和大小记录在配置文件中,因此首先需要获取并解析配置文件。MicroLogix 1400 PLC 的文件信息在配置文件中以10 B 的结构存储,其格式如表2 所示,多余字节由0x00 填充。基于配置文件结构,解析得到此次传输程序中一共包含6 个程序文件和8 个数据文件,如图2 所示。

表2 配置文件中的文件信息存储结构Tab.2 File information storage structure in configuration file

图2 MicroLogix1400 PLC配置文件解析结果Fig.2 Analysis results of MicroLogix1400 PLC configuration file

基于文件类型、起始地址和大小,构造请求数据包,获取以上文件内容,程序采集流程如图3 所示。

图3 MicroLogix1400 PLC程序采集流程Fig.3 Flow of MicroLogix1400 PLC program acquisition

2)二进制程序反编译为IL 程序。IEC 标准定义了5 种PLC 编程语言,语言之间可以自由混合编程。编程语言的多样性对开发人员是一个优势,但对程序分析或检测却是一个很大的挑战,为了提供普遍且适用的检测方案,应该支持所有语言。因此,本文选择将各种语言编译后的二进制程序重构为便于解析的IL 语言程序。

在进行反编译操作之前,需要分析二进制程序的内部结构,本文以IEC61131-3 标准为基准分析程序结构。如图4 所示,主要包括程序块识别、梯级识别、梯级中指令和数据变量识别等,接着基于分析结果进行反编译操作。该过程以代码块、数据块等作为输入,并利用IL 指令映射数据库进行控制程序反编译。

图4 二进制程序的反编译流程Fig.4 Flow of binary program decompilation

表3 展示了MicroLogix 1400 PLC 二进制梯级结构,梯级始终以两个0x00 开始,紧接着第3~4 字节是梯级的签名,第5~6 字节是梯级的大小;因此,本文使用梯级起始字段和梯级大小字段作为划分梯级的依据。指令从梯级的第7 字节开始,按顺序连续放置。每个指令包括2 个字节的操作码、1个字节的文件号、2 个字节的字地址和2 个字节的位地址。

表3 MicroLogix1400 PLC二进制梯级结构Tab.3 MicroLogix1400 PLC binary rung structure

表3 中操作码表示指令的具体操作,例如JMP(跳转到标签),SUB(减法)。为了识别指令操作码,本文维护了一个二进制指令与IL 指令之间的映射表,如表4 所示,存储在MySQL 数据库中。而指令中操作数的解析需要文件编号(File No)、字索引(Word index)和位索引(Bit index)这3 个字段来确定。File No 定义了操作数类型,例如0x00 代表输出,0x01 代表输入。Word index 定义了该类型数据文件在PLC中的物理地址,Bit index 定义了操作数在数据文件中的偏移位置。其中Word index 是由梯级中的字偏移量(Word Offset)和配置文件中的起始地址作差得到的。图5 展示了部分程序的反编译结果。

表4 MicroLogix 1400 PLC部分指令映射表Tab.4 Part of instruction mapping table of MicroLogix 1400 PLC

图5 MicroLogix 1400 PLC程序反编译结果Fig.5 MicroLogix 1400 PLC program decompilation results

3)白名单规则生成。该步骤目标是自动分析IL 基线程序并提取白名单规则。程序结构白名单包含MicroLogix 1400 PLC 中合法程序块之间的调用关系。罗克韦尔MicroLogix 系列PLC 一共有 256 个程序文件,前两个是系统文件,LAD 2 是主程序文件,文件3~255 为用户自行创建的子程序。首先,解析MicroLogix 1400 PLC 的配置文件汇总所有的合法程序块,如图2 所示,可知程序包括6 个程序文件和9 个数据文件。

本文使用调用图(Call Graph,CG)来描述程序块之间的结构。CG 是控制流图,表示了整个程序块之间的调用关系,图中的节点代表程序块,边代表程序块之间调用关系。程序调用白名单生成算法主要分为两步:基于IL 语言特征采用控制流图生成算法生成程序块调用关系图;遍历CG,生成程序调用白名单。图6 为控制程序结构,LAD2 为主程序块,对LAD2 程序进行控制流分析可知,LAD2 一共调用LAD5、LAD7 和LAD4 这3 个子程序块,分别用于电机控制和头轮信号控制等。子程序LAD7 嵌套调用LAD3、LAD6 子程序。

图6 控制程序结构Fig.6 Structure of control program

程序属性白名单包含了所有合法程序块的属性信息,包括程序块物理地址、大小和梯级数目等。这些信息都可以通过解析MicroLogix 1400 PLC 的配置文件获取。根据表1 的文件类型以及文件信息在配置文件的存储结构,可以获取控制程序、输入输出等其他File Type 类型文件的具体信息。例如,通过解析图2 配置文件可获得的程序信息如表5 所示。

表5 配置文件解析结果Tab.5 Configuration file parsing results

表6 LAD2程序地址范围Tab.6 LAD2 program address range

程序地址范围白名单包含了程序有效访问地址集合。例如MicroLogix 1400 PLC 中的变量类型可分为输入、输出、字符串、计时器等,这些变量与PLC 的内存物理地址一一对应,通常上位机或组态软件只会读写这些合法的内部地址。因此,通过对IL 程序中的每个程序块分别进行词法分析,提取上述合法的内部地址,就可生成程序地址范围白名单。

程序数据范围白名单包含程序块中变量的合法取值范围。首先,基于IL 语言特征对程序预处理,构建程序控制流图,遍历程序控制流图得到程序可执行路径集合;然后,分析数据流,最终得到变量合法取值范围。

图7展示了对LAD2代码的数据流分析结果。首先,程序加载整型N7:0,整型N7:0 的数据范围为(-215,215)。当N7:0取值小于50 时,将N7:0 赋值给N7:17,因此N7:17 取值范围为(-215,50);当N7:0 取值大于等于50 时,将50 赋值给N7:17,因此N7:17 的取值为50,最终可得N7:17 的取值范围为(-215,50],计时器T4:34数据范围为[0,800]等。基于以上分析,图8 展示了生成的铸造机LAD2 示例程序块的检测规则。

图7 LAD2程序数据范围分析Fig.7 LAD2 program data range analysis

图8 铸造机LAD示例程序检测规则Fig.8 Casting machine LAD sample program detection rules

2.2 主被动结合的攻击检测算法

控制逻辑注入攻击最有效的检测方法是使用上位机软件从PLC 中获取当前运行的控制逻辑进行分析和检查。但如果ICS 遭受网络攻击,上位机与PLC 之间的通信并不可靠,攻击者可能通过构造虚假响应或中间人等手段操纵通信数据,而且攻击有时并不会反映在网络流量中,例如通过本地编程接口对PLC 进行攻击。因此,本文提出了一种主动和被动结合的攻击检测方案,多角度检测控制逻辑注入攻击。其中:被动检测通过被动监听与程序传输和数据读写相关网络流量检测异常;主动检测是主动与PLC 建立连接并向PLC请求检测信息,实时监控异常行为。

被动检测模式下,监听工业交换机中流经的网络流量,提取并解析与程序传输相关的流量信息,依次验证是否满足程序结构白名单rulestruc、程序属性白名单ruleattri、程序地址范围白名单ruleaddr和程序数据范围白名单rulevalue,检测恶意程序块注入、控制流劫持、指令或数据篡改等异常行为,并基于匹配结果记录异常程序块号及告警信息。

当监听到与数据读写相关网络流量时,提取IP、数据地址和写入值。首先,根据设备IP 检索程序地址范围白名单和程序数据范围白名单;然后,验证数据地址是否满足程序地址范围白名单,检测非法地址写入/读取等异常行为;最后,验证写入值是否满足程序数据范围白名单,检测非法数值写入等异常行为。被动检测流程如算法1 所示。

算法1 被动检测算法。

主动检测模式是在不影响PLC 正常工作的前提下,以低频率、轮询的方式主动请求PLC当前“快照”进行检测,检测流程如算法2所示。首先,根据目标PLC的IP地址,加载该IP下所有的白名单规则。然后,与PLC建立连接,根据通信协议构建程序上载请求获取当前程序进行解析,验证是否满足程序结构白名单rulestruc、程序属性白名单ruleattri、程序地址范围白名单ruleaddr和程序数据范围白名单rulevalue,从而判断是否存在程序块调用异常、程序块属性异常、程序非法写地址异常和指令篡改异常等异常行为,基于匹配结果记录告警信息及异常程序块号。同时,遍历程序地址范围白名单ruleaddr,主动发送请求包读取该地址下的寄存器数值,验证是否满足程序数据范围白名单rulevalue,检测非法数值、指令篡改等异常行为。以上流程结束后,结束任务并断开与PLC的连接。

算法2 主动检测算法。

3 实验与结果分析

为了评估本文方法检测出控制逻辑注入攻击的准确性,选取工控生产环境中具有代表性的4 款PLC 进行实验,包括西门子S7 300、西门子S7 400、施耐德M221 和罗克韦尔AB MicroLogix 1400。首先,验证二进制程序反编译为IL 源码的准确性;然后,模拟控制逻辑注入攻击,评估检测能力;最后,验证主动检测模式对PLC 性能的影响,以说明本文方法不会影响PLC 的正常运行。

3.1 实验环境

本文利用工控软硬件设备搭建了一个仿真环境模拟真实的工控系统进行验证实验,如图9 所示,包括工作站、组态软件、PLC 设备、工业交换机、现场设备和检测系统。

图9 实验环境Fig.9 Experimental environment

PLC 设备选定了工业生产环境中具有代表性的4 款设备,包括西门子S7 300、西门子S7 400、罗克韦尔MicroLogix 1400 和施耐德M221。为了保证PLC 的实时性和稳定性,检测系统采用旁路部署的方式连接至工业交换机,以便捕获ICS 系统中的网络流量。

3.2 反编译准确度评估

本文为每款设备选取了50 个不同物理过程(例如燃气管道、交通灯等)下的控制程序评估反编译的准确度,验证过程如下:首先将数据集中的程序下载至PLC,然后检测模块从PLC 中提取二进制程序并反编译为IL 语言程序,将反编译后的代码与上位机程序进行比较,以验证其准确度。

本文使用PLC 编程软件统计了数据集中每条指令出现的频率并与反编译后的结果进行比较,表7 展示了4 款PLC反编译准确度的验证结果。比较结果显示反编译模块可以100%识别支持的指令。但是,反编译中指令识别过程依赖于IL 指令映射数据库,其中西门子S7 300 和S7 400 系列PLC是3 个厂商中支持指令最多的,几乎能支持IL 语言中所有指令,而施耐德M221 和罗克韦尔Micrologix1400 数据库支持的IL 指令类型并未完全覆盖IL 语言中的所有指令类型,后续仍需扩充指令映射数据库。

表7 四款PLC反编译准确度验证结果Tab.7 Four PLC decompilation accuracy verification results

3.3 检测能力评估

根据1.2 节描述的PLC 控制逻辑注入攻击,拟定了十几种攻击,有些攻击来源于相关的PLC 攻击文献[4-7,9]。检测系统上线前,需要先录入目标PLC 的IP 地址,然后使用白名单规则生成功能,整个过程耗时较短。接着,系统上线运行48 h,期间使用自动化工具对每款PLC 设备进行上百次攻击实验。为了验证检测系统是否能有效检测出控制逻辑注入攻击,将从检测精度、误报率、漏报率这3 个方面进行评估。检测精度越高,误报率和漏报率越低,系统对控制逻辑注入攻击的检测效果越好。

表8展示了4款PLC的实验结果,对各种隐蔽性的控制逻辑注入攻击的检测精度都可达到95%以上。其中,西门子S7 300和S7 400的检测精度可达到98%以上,是3个厂商中检测效果最好的;这是因为西门子厂商的PLC的程序结构清晰,可解析信息较为全面,所以生成的检测规则最全面、最细致。

表8 4款PLC检测能力验证结果Tab.8 Four PLC detection performance verification results

检测方案对恶意程序完全替换、恶意程序块注入等攻击的检测效果最佳,因为攻击隐蔽性最差,也最容易被发现。非法地址读/写异常检测中出现误报主要是因为上位机在进行正常数据监控的时候,访问数据地址时可能会连带访问邻近地址,引起误报。其他产生误报和漏报的主要原因是反编译模块支持的IL 指令类型并未完全覆盖PLC 中的所有指令,影响了白名单覆盖度和检测准确度。

此外,在实际的ICS 中,特别是中小型ICS 系统,控制程序通常小于10 KB。如果攻击者想要暗中损害ICS 而不被发现,至少也需要修改几行代码。随着攻击变得更加具有破坏性,注入的恶意代码往往越多,例如Stuxnet 病毒包含一万多行代码,并且需要额外的程序块或者数据块存储。随着异常程序修改内容的增加,检测效果也变得越来越好。其中对于隐蔽性较强的虚假响应攻击,由于攻击者为了隐藏其恶意攻击会将正常程序传输流量转发给检测系统,主动请求方式无法检测到攻击,但被动监听方式会在恶意程序下载过程中发现异常。而对于碎片和噪声填充攻击以及通过本地USB 上传恶意控制程序这种常规的入侵检测系统无法检测到的攻击,本文检测方法可以通过主动请求方式检测到。因此,使用主被动结合的方式具有更好的检测效果。

3.4 主动检测模式对PLC性能影响

由于PLC 实时性较强,额外的网络流量可能影响工业控制系统控制的过程。主要原因是PLC 有限的系统资源导致在处理通信的时候可能会影响控制程序的正常运行,使循环周期变长。而检测系统在主动检测模式下,涉及对PLC 控制逻辑以及寄存器的读操作请求,因此需要验证该模式是否会对PLC 工作过程造成影响。

为了测试主动检测模式对PLC 性能的影响,实验使用特定协议每秒向PLC 发送不同频率的数据包并测量设备的循环周期时间。在正常程序运行状态下,PLC 的循环周期在1~3 ms,大部分时间处于2 ms 左右。

根据图10 可知,随着发包频率的增加,这4 款PLC 的周期时间几乎没有受到影响,而且检测系统在实际运行过程中,主动检测的数据包频率小于实验中的最大频率,不会影响PLC 的正常工作。用户可以根据生产情况,自定义适合的主动检测频率。

图10 不同PLC发包次数对循环周期的影响Fig.10 Influence of different PLC packet sending times on cycle period

4 结语

本文针对PLC 控制逻辑注入攻击检测面临的问题,提出了一种基于PLC 程序的检测规则自动化生成方法PLCShield,能够在无需先验知识的前提下构建完备的检测规则。采用主被动相结合的检测模式,在不干扰PLC 正常操作的情况下,准确识别控制逻辑注入攻击。下一步将扩展支持的PLC 型号和协议:将PLCShield 扩展到更多的PLC 型号和使用的通信协议上以适应不同的工业控制系统。

猜你喜欢
白名单控制程序配置文件
基于白名单的车道工控系统信息安全解决方案
提示用户配置文件错误 这样解决
基于PLC的变电站备用电源自动投入装置控制程序的研究
核电厂仪控系统安全防护策略研究及应用
互不干涉混用Chromium Edge
忘记ESXi主机root密码怎么办
打印机设置
基于PLC数值处理模块的PID控制程序研究
公布洋大学“白名单”远远不够
纸机传动控制程序的复用性研究