您当前的位置 :先锋新闻网 > 旅游 > 51109705

51109705

时间:2019-01-04 09:37:35 来源:先锋新闻网 作者:匿名
  

LC代码的形式分析和验证

PLC代码使用“序列扫描,连续循环”操作方法。典型的PLC作业过程包括三个不同的阶段:将输入数据读入存储器,处理存储器中的数据,以及更新输出数据。 PLC程序仅包括有限的条件动员和有限的变量,并且程序内部不包括循环。安全要求取决于输出变量。因此,形式化验证技术适用于PLC程序安全分析和恶意代码检测。

形式分析分为两种方法:定理证明和模型检验。该定理证明该过程过于复杂和繁琐。在实践中,尚未认识到使用定理证明来验证PLC程序的正确性。模型检测是一种广泛使用的形式化方法。它更适合PLC代码的验证。与传统的计算机程序相比,主PLC程序的建模将更加简化,转换系统因其条件而相对简单。

(1)PLC正式分析面临的困难

(1)PLC缺乏高端编程语言

PLC编程属于主要编程语言,并且具有许多编程语言。语法和语义不顺畅。采用分层寻址,地址寻址复杂,并且存在隐式类型数据。建模很困难,语言功能很容易丢失。

(2)缺少时间建模

工业控制系统的实时要求非常高,因此对时间进行建模非常重要。时间建模的目标应该包括定时器的累积时间,单个指令的运行时间和实现周期时间,因为定时器是一个周期。考虑到时间的全局变量极大地提高了建模的难度并增加了检测时间,但是不考虑时间而无法检测与时间相关的安全协议。

(3)缺少物理环境建模

工业控制系统与物理环境密切相关。工业控制器的输入通常可以被视为物理环境的输出。输出通常可以被视为物理环境的输入,形成闭环,并且在不考虑物理环境的情况下不能精确地模拟工业控制器。的行为。

(4)条件空间爆破

PLC代码包含许多变量和大的情况。 PLC代码的建模和分析基于状态转换。如果直接测试模型,将形成问题空间爆炸。(二)PLC代码的形式化分析

PLC代码的形式验证是检测PLC代码的缺点,防止恶意代码的攻击。现在形式验证方法发现PLC代码的缺点主要集中在PLC代码形式化模型构建,PLC代码缺陷和安全要求规范图纸以及PLC代码模型检测技术上。

c)PLC控制代码检测的技术路线

(1)中级语言翻译

由于工业控制器支持各种标准编程语言,并且语法和语义完全不同,因此现有的模型检测技术大多基于特定的编程语言。为了降低建模的复杂性,我们需要将PLC编程语言转换为模型检测器可以处理的中间语言。

Darvas等。提出将PLC程序的SCL语言转换为基于NuSMV的中间模型,NuSMV是接近活动机器模型的中间模型。 McLaughlin等人。根据Vine提供了一种将PLC的指令列表IL语言代码翻译成中间语言ILIL的方法。 Zonouz和其他反编译方法将MC7code转换为中间语言ILIL,中间语言ILIL类似地使用BitBlaze二进制解析Vine插件描述。

(2)时间模型构建

工业控制系统实时要求很高,因此时间是一个重要的建模目标。延迟寄存器(On-Delay Timer,TON)用于确保PLC的实时特性,TON指令为PLC的输入信号提供延迟机制。对TON计时器进行建模极大地提高了建模的难度并增加了检测时间,但是无论时间如何都无法检测到与时间相关的安全协议。因此,TON计时器的形式验证成为PLC代码形式验证的瓶颈之一。

近年来,对TON定时器进行了一些建模研究。 Masder等人。开始了这个领域的研究。他们将IL程序转换为时间活跃的机器模型,并使用活动机器和Prometa模型对计时器进行建模。 Willems使用时间活跃的机器来模拟TON模型以处理TON的问题。 Wan等人。在定理证明器Coq中对梯形图语言的TON计时器进行了形式化,但没有给出一般模块的PLC程序的正式描述。 Sidi在定理证明器Coq中为指令列表语言形式化了TON计时器。(3)模型检测技术

模型检测是一种广泛使用的主动验证技术,它选择适当的模型来验证系统并系统地检测模型以查看要验证的所需特征。由于可以主动执行模型检测并且当系统不满意时可以提供反例示例方法,因此在行业中它比演绎证明更受尊重。模型检测在PLC系统安全性验证中特别有用,因为与传统的计算机编程相比,它可以更简单地建模为条件转换系统。

研究中使用了许多模型,如SMV,UPPAAL,SPIN等.Yoo等。使用Verilog模型和CadenceSMV模型来模拟核电站控制系统的PLC代码。 McLaughlin等人。开发了TSV(Trusted Safety Verifier),它使用TEG(时间执行图)图进行模型检测。根据给定的安全性,原始IL代码将值分配给输出变量,然后将它们转换为ILII中间语言。需求,TSV使用生成的TEG图来解析详细的原子命题值。 Zonouz等人。使用TEG图执行模型检查。首先,反转线性时间序列逻辑标准公式,然后获得TEG-UR图模型P,然后搜索模型M以获得满意的路径。最后,如果不是第三步。有任何方法可以满足原始代码的安全要求,并能够安全地执行它。如果有办法,可以通过违反债券的条件获得相应的反例。

开发和开发的PLC程序包括多个变量和条件空间,实现路径更复杂。情况空间爆炸会出现问题。处理情景空间爆破问题最有用的方法是象征性的实现。 McLaughlin等人。提出了一种条件聚合方法,该方法将输入与相同的输出结合起来,以防止生成等价条件。郭等人。提出了一个SymPLC用于PLC编程语言符号的主动测试。 SymPLC将PLC源代码作为输入并在应用符号实现之前将其转换为C语言,系统生成测试输入以覆盖每个循环任务中的所有路径。为此,他们提出了一些特定于PLC的减少技术来识别和消除冗余。在工业控制系统中,小代码缺陷可能会影响整个工业过程的损害,甚至威胁到生命和财产的安全。本文围绕工业控制系统控制代码安全性公开讨论,从PLC代码逻辑缺陷,代码安全性要求规范两个方面对工业控制代码的缺点,并结合实际梯形逻辑故障结构的代码应用场景,这些代码逻辑的缺点完成了工业控制系统的拒绝服务入侵,中间人入侵等。 PLC代码的形式验证是找到PLC代码缺点的重要而有用的方法。

阿里1688