AttkFinder利用信息流分析发现PLC程序中的攻击媒介

AttkFinder:利用信息流分析发现PLC程序中的攻击媒介

原文
AttkFinder: Discovering Attack Vectors in PLC Programs using Information Flow Analysis
申明
版权归原文作者及出版单位所有,如有侵权请联系删除。

关键字:PLC程序分析 信息流 命令执行

概述

​ 为了保护工业控制系统(ICS),防御者需要识别对系统的潜在攻击,然后设计机制来防止它们。不幸的是,识别潜在的攻击条件是一个耗时且容易出错的过程。在这项工作中,我们提出并评估了一套工具,在考虑到PLC网络通信(组成)的信息流分析指导下,对可编程逻辑控制器(PLC)的软件进行符号化分析。我们的工具系统地分析了可能迫使PLC向执行器发送特定控制命令的恶意网络数据包。我们在一个控制水处理化学品剂量的真实世界系统中评估了我们的方法。我们的工具能够发现75种攻击策略(56种是新型攻击),我们确认这些策略中的96%在我们的测试平台上引起了预期的效果。

1 简介

​ 工业控制系统(ICS)是一种网络物理系统(CPS),其中物理世界中的传感器和执行器由称为可编程逻辑控制器(PLC)的分布式计算节点系统控制。这些系统完成诸如水处理和分配、发电和制造等任务[4, 21]。因此,这类系统的安全保障至关重要,以避免对操作或依赖这类系统的人造成人身伤害。不幸的是,攻击正在增加[12, 13]。

​ 研究界已经为CPS提出了各种攻击检测和攻击缓解机制[16],然而,为了评估它们的有效性,我们需要用一组强大的可能攻击来测试它们。例如,一个简单的溢出水箱的攻击可以是关闭流出的水泵,并打开水箱进水口的马达阀门;然而,一个只看这个特定攻击特征的防御机制可能会错过其他实现相同目标的攻击(例如,关闭系统第二阶段的水泵,这将产生一个级联效应并溢出第一个水箱,或简单地发送报告低水位的虚假传感器信号也会溢出水箱)。问题是,我们有多大信心,攻击基准涵盖了广泛的可能攻击,以及这些攻击的变化,以实现相同的目标?

​ 不幸的是,识别潜在的攻击条件是一个耗时且容易出错的过程。最近,Chen等人[10, 11]提出了在软件中开发物理系统的高保真模型的想法,然后在软件模拟上使用模糊测试来自动找到几个导致物理系统达到不安全状态的输入(攻击)。虽然作者能够找到人工创建的基准中没有发现的几种攻击,但这种方法有几个缺点(1)我们需要获得一个高保真的系统物理模型。(2)安全研究人员需要具备识别物理过程中不安全区域的专业知识,以及(3)由于物理系统具有连续的变量,它们必须由一个无限维的状态系统来表示,以动态的方式(通过多次执行模拟)找到驱动该系统进入不安全状态的输入,在计算上非常昂贵。

​ 在这项工作中,我们开发了AttkFinder:一种新的自动寻找工业控制系统攻击条件的方法,它使用了一种新型的信息流引导的符号执行引擎,该引擎是针对PLC程序的独特方面及其与工业网络的交互而设计的。我们的方法(1)不需要系统的物理模型,(2)使用已经在PLC软件上编码的安全条件来列举不安全条件,(3)与其他方法相比,效率高,因为它只使用静态分析工具。使用标准的CPS安全测试平台,AttkFinder能够找到以前的建议[10, 11]或其他手动开发攻击的论文[2, 3, 22]所没有发现的几个攻击载体。

​ 为了在各种PLC编程语言中实现这一目标,我们还创建了一种新的PLC代码中间表示法(我们称之为STIR)。STIR可以应用于最流行的工业编程语言,如结构化文本、梯形图和功能块图。通过这个工具,防御者可以找到哪些变量可以被用来驱动系统进入不安全状态。

​ 令人惊讶的是,我们发现了几个操作上的漏洞,这些漏洞在工厂的规范中没有很好的记录,而且往往不为操作员所知。例如,我们测试的系统的操作员认为,由于PLC中编程的安全检查,一个叫做死机的事件(将在本文后面描述)是不可能的;然而,通过我们的工具,我们发现了几种欺骗安全检查器的方法,正如我们在表3中解释的那样。另一个先前未知行为的例子是我们发现的针对ICS组件的新型DoS攻击,我们可以通过滥用来自执行器的指示器来发动这种攻击(第4.4节)。我们发现的漏洞会触发安全条件,如水箱过流、泵死机、组件拒绝服务或化学污染(第4.4节)。总之,我们发现了56个新的漏洞,这些漏洞超越了针对控制理论规范的传统攻击。

​ 总而言之,我们的工作有以下贡献。

​ (1) 我们提出了一种新的方法,用于自动寻找导致PLC向物理世界发送恶意控制命令的攻击,该方法基于信息流分析和符号执行。

​ (2) 我们提出了一个新的对手模型,该模型考虑了对PLC的不同级别的访问(由访问控制的任务定义)。据我们所知,我们是第一个确定和讨论PLC中变量的访问控制如何进行的。以前的工作没有考虑对手可能拥有的访问控制权限;特别是,以前的工作只假设对PLC逻辑的完全控制[24, 25]。

​ (3) 我们设计了新的算法和工具来处理梯形逻辑、结构化文本和功能块图的PLC代码错综复杂的问题。

​ (4) 据我们所知,目前还没有可用的开源工具来对PLC语言进行符号分析,更不用说三种不同的PLC语言。我们正在将我们的工具作为开源产品发布1。

​ (5) 我们在一个现实世界的系统中评估了我们的方法,该系统控制着水处理中的化学品的剂量。我们的工具我们能够找到75种方法,通过注入恶意数据或恶意指令来改变执行器的状态。我们组成了我们的战术,以实现众所周知的攻击,如水箱溢出[9, 35],以及新的和更复杂的攻击,如死头攻击(增加水压,使管道破裂或损坏泵),或干运行攻击(在没有液体的情况下打开泵来损坏它)。我们对攻击的自动发现显示了比最先进的方法[10, 11]更全面和多样化的攻击。

2 背景

​ 一个ICS有四个主要组成部分。(1) 一个工厂代表被控制的物理过程,像压力或温度这样的物理属性被称为工厂的状态。(2) 一组传感器读取工厂的状态,将物理特性转换成电子信号,并将其传递给控制器。(3) 一个或多个控制器监测和控制工厂的状态;它们读取传感器信号,运行控制策略,并将相应的信号传递给执行器。(4) 一组执行器接收来自控制器的电信号,并相应地修改工厂的 “状态”。

2.1 PLC功能

​ 被称为可编程逻辑控制器(PLC)的工业计算机在ICS中使用。它们是专门的计算机,以高可靠性运行。PLC使用多个模块(主CPU的物理附加组件),为控制器提供新的功能,包括串行或以太网通信、离散/模拟输入输出模块。PLC使用非经典的编程语言进行编程(根据标准IEC-61131-3[34]描述)。这组程序或例程被称为 “控制逻辑”。由于它们控制着时间紧迫的系统,PLC必须在工业条件下(极端温度、湿度和电气噪声环境)以可靠和确定的方式运行。

2.2 PLC访问控制

​ PLC编程语言允许程序员在每个控制器中定义每个变量的访问权限。除了名称和数据类型外,程序员可以为 "外部 "实体分配访问权限,允许他们远程读/写变量。对内部PLC变量的远程访问,一般有三种选择。(1) 读/写。该变量可以从任何连接到控制器的外部设备上访问。(2) 只读。外部设备可以读取该变量,但不能修改其值。(3) 无。该变量不能被任何外部设备访问。

​ 所有变量默认都有读/写权限[29, p. 63]。我们利用这些特征来丰富第2.6节中提出的威胁模型。一个外部设备可以向PLC发送一个 "读 "或 "写 "请求,并将一个特定的变量作为有效载荷。然后,PLC查找请求的变量,验证读或写的权限,并返回封装在 "读 "响应消息中的值或更新变量的值(如果外部请求是’写’)

​ 备注1(远程访问PLC的内部变量)。工业网络中的任何设备,如监控器、人机界面(HMI)或其他控制器都可以查询PLC。查询包括 "读 "和 "写 "信息。从安全角度来看,恶意行为者可以利用这些功能,并可能破坏系统的保密性(读取PLC的变量)和完整性(操纵用于控制决策的变量)。

2.3 扫描周期

​ PLC是周期性运行的,不断重复相同的过程。这个周期性过程被称为扫描周期。

​ 定义1(扫描周期)。扫描周期是一个处理PLC程序执行的周期性过程。在每个扫描周期中,会发生以下过程。(1) PLC读取传感器并将其值存储在本地缓冲区。(2) 网络信息从网络模块上传至本地缓冲区,反之亦然。(3) PLC执行控制逻辑。(4) PLC根据本地缓冲区的值更新输出信号(到执行器)。(5) PLC执行安全检查。(6) 周而复始。

在这里插入图片描述

图1 扫描流程。

​ PLC启用了实时的Feigreusrpeo1n:seScgaunarcaynctelee,使扫描周期在每个执行期不超过预先配置的上限时间。如果一个程序超过了上限,控制器就会停止其执行并触发警报。

2.4 PLC中的信息流

​ PLC使用内部 "缓冲器 "来通过模块交换数据。模块是对PLC的硬件补充,通常用于将其与监管网络或传感器和执行器互连。例如,输入缓冲器将通过输入模块获得的数据存储在一个标有位置、插槽和类型的本地存储空间中[29。p.16].在图1中,输入模块(描述为箭头 "从 Sensors’)映射到输入缓冲区,数据可以通过以下方式访问控制逻辑使用标签RIO1:0:I.Data.0。它被解释为连接到PLC的RIO1模块(远程IO模块1),插槽0,类型I(输入),以及数据结构的第一位(数据。0)。网络和输出模块有它们的本地缓冲器,而它们可以从控制逻辑中访问。

​ 网络模块有独立的传入、传出和缓存功能。缓冲区 [30, Ch. 11]。传入缓冲区存储来自以下方面的接收请求其他设备,出站缓冲区存储要发送给其他设备的信息,而缓存缓冲区保持出站连接开放,以便能够向同一收件人发送多个信息。

​ 定义2(按信息流划分的PLC变量分类)。我们从数据流的角度强调PLC代码中的三类变量。(1) 远程变量(R):PLC从远程获得这些变量,它们以网络信息或直接连接到PLC的传感器的信号形式出现。(2) 输出变量(O)。这些变量影响外部实体。PLC将信号传递给直接连接的执行器或通过网络信息传递给其他设备。

​ (3) 本地变量(L)。所有在程序内部使用的其余变量。供应商建议在扫描周期开始时使用例程来读取缓冲区,以便在程序执行期间获得确定性的行为[29, p. 18]。控制逻辑中的例程可以被编程为从输入和网络缓冲区访问数据。如果攻击者能够到达PLC的监控网络,他们就有可能使用本地变量的远程访问权限。攻击者可以读取数据,甚至修改变量的值,导致控制逻辑执行恶意命令。

2.5 PLC编程语言
2.5.1 结构化文本(ST)。

​ ST是一种命令式的编程语言,通常用于对表示为状态机的简单程序进行编程。案例结构对于编码状态机非常有用,如图2a所示,其中一个双状态逻辑控制一个简单的mo- tor。用ST语言编写的例程可以从其他语言如LL和FBD中使用跳转到子程序功能(JSR)来调用。

2.5.2 梯形逻辑(LL)。

​ 梯形逻辑是从早期的自动化时代演变而来的,当时机电继电器被连接起来建立逻辑门来控制工业过程。梯形逻辑是一种图形化的顺序编程语言,由两条平行线组成,称为总线和连接左边总线和右边总线的逻辑电路。每个电路被称为一个梯级。触点(输入指令),被描述为平行条,和线圈(输出指令),被表示为一对一,组成了梯级。

​ 图2b显示了一个有两个梯级的LL程序,一个梯级由触点a、b、c和线圈x组成,第二个梯级有两个触点a和d以及函数MOV。平行连接对应于逻辑OR (a ∨ c in Rung 1),串行连接意味着逻辑AND;逻辑NEG被画成对角线(d ∧¬a in Rung 2)。

​ 特殊功能,如定时器、计数器和跳转到子程序(JSR)可以在rungs中进行配置。

2.5.3 功能块图(FBD)。

​ FBD是一种图形化的编程语言,它提供了一种直观的方式,根据不同组件之间的通信方式来编程。顾名思义,主要组件是块。块有输入参数、输出参数和内部程序。线路连接参数,描述数据在FBD程序中的流动方式。

​ 图2c显示了一个由A和B两个块组成的小型FBD程序。A有三个参数(变量),w和z为输入参数,x为输出参数,它们通过一个ADD函数连接,即x=w+z。

在这里插入图片描述

图2 PLC编程语言。
2.6 威胁模型

​ 我们假设攻击者(1)能够读取任何网络信息。(2)可以尝试从PLC读取内部变量,(3)可以尝试向PLC写入变量(通过网络信息)。然而,攻击者不能更新PLC中运行的程序,也不能篡改PLC对执行器的信号。

​ 定义3(攻击者的目标)。攻击者的目标是组成攻击策略,通过间接操纵执行器的状态,使系统进入关键状态。

​ 为了改变工厂的物理状态,攻击者将试图改变控制器的输出变量(O)。控制器的输出变量是发送到执行器的信号,因此,它们是网络和物理领域之间的最终边界。

​ 我们假设攻击者可能通过间谍活动或社会工程学获得控制器的程序,并能够对其进行分析[6]。此外,我们假设攻击者有一个可以进入PLC网络的设备,但他们不能修改PLC中运行的程序。这个假设是现实的,因为PLC实现了基于硬件的保护,其他研究人员以前也提出过软件验证[25]。

​ 我们为威胁模型定义了两个攻击者配置文件(图3),两者都可以通过网络访问PLC,但根据PLC中实施的访问控制机制有限制。

​ A1:完全访问。攻击者可以任意读写本地(L)和远程(R)变量。

​ A2:R-access。攻击者只对远程变量(R)有完全的读/写权限。

在这里插入图片描述

图3 威胁模型。

​ 我们在本文中试图回答的关键问题是,如何通过利用系统组成和信息流,在不改变其运行的软件的情况下操纵控制器?

​ 以前的工作专注于PLC的符号执行,探讨了攻击者可以更新PLC的控制逻辑的威胁模型[24, 25]。然而,改变PLC程序在实践中并不容易。PLC有一个基于硬件的保护机制,可以在 "运行 "和 "程序 "模式之间切换。如果PLC处于 "运行 "模式,并且PLC的钥匙不可用,PLC将不接受任何软件修改。除非攻击者实际存在于工厂中,并且能够获得改变PLC操作的物理钥匙,否则他们将无法对PLC进行重新编程。

​ 在本文中,我们考虑到远程攻击者可以闯入PLC的监督网络,然后可以向PLC发送特定的数据来改变其执行逻辑,而不需要实际改变PLC上的软件。

3 解决方案
3.1 简单的油箱填充实例

​ 我们用一个简单的水箱注水系统(图4a)作为一个运行的例子来帮助我们介绍我们的方法。该系统的功能要求是在需要时提供水。它有两个执行器:一个马达阀MV给水箱供水,一个泵P从水箱中排水。当水箱水位(T)低于L时,MV开启,这保证了水箱总是有足够的液体。当水箱水位超过H时,MV关闭,这可以防止水箱溢出。如果水箱水位保持在物理极限Hmax和Lmin之间,系统被认为是安全运行的。一旦需要水(通过网络信息D=ON),并且水箱水位高于L水位,泵(P)就会打开。图中描述的控制逻辑是PLC1中运行的代码,以保证系统的正确运行。

3.2 构成攻击载体的方式

​ 该方法假设攻击者可以获得两个主要的内部形成来源(见图6中的虚线框):一是 "中国 "的源代码,二是控制器,并对系统有足够的了解,能够建立系统的模型。基于对系统的了解,攻击者推导出了图5所示的模型。四个离散的状态(位置)组成了这个模型,每个位置都有其相应的执行器状态,控制着坦克的行为方式。

在这里插入图片描述

图4 填充罐系统。

​ 在了解系统后,攻击者可以推断出关键状态,选择合适的目标,并设计攻击策略。在这个例子中,攻击者可以确定两个关键状态,水箱溢出和缺水,在图5中表示为OF和WD。攻击者还确定了执行器信号MV和P作为其目标。攻击者只能访问远程变量(R:{D,T})。目标是只通过修改D来 "控制 "执行器MV和P。和T。一旦攻击者知道如何操纵执行器,他就可以组成攻击载体,如水箱溢出或水被剥夺。AttkFinder旨在通过分析PLC程序发现多种攻击向量。AttkFinder由三个步骤组成。(1) 对PLC代码进行静态分析,生成程序的模型和间歇性表示。(2) 使用符号执行,推导出可以控制R中变量的攻击策略。 (3) 组成影响系统的攻击向量(见图6中的工具符号)。

在这里插入图片描述

图5 系统模型。
3.3 PLC解释器
3.3.1 将PLC程序建模为图

​ AttkFinder处理每个标准语言的变量依赖关系,并建立一个信息流依赖图(IFDG),如图7a所描述。AttkFinder借用以前工作中的数据流分析[8]来建立IFDG。IFDG中的节点代表变量,而边指的是它们之间的关系。边缘标签显示在程序中发生的关系。AttkFinder使用这些信息来更有效地搜索变量定义。

在这里插入图片描述

图6 组成攻击向量的图示。该工具符号显示了由AttkFinder提供的步骤。

​ 控制流图(CFG)对程序的执行方式进行建模。AttkFinder将CFG构建为多个基本块的链[27]。边缘代表基本块的执行顺序。一个CFG有一个入口点和一个出口点。进入点之后的第一个块被称为 “根块”。

​ AttkFinder丰富了生产的CFG,为每个区块添加了属性,如起始线和结束线。它让AttkFinder将CFG和IFDG联系起来。图7显示了油箱灌装实例的IFDG和CFG的结果。

在这里插入图片描述

图7 从图4a的PLC1代码的静态分析中提取的图模型。
3.3.2 STIR(结构化文本中间表示法)。

​ 我们没有开发多种工具来分析每种类型的PLC 编程语言,而是将标准的编程语言 我们将标准的编程语言[34]翻译成一种中间表示法,称为STIR (结构化文本中间表示法)。STIR使用编程指南将FBD和LL的例程转换为ST的等效表示。供应商在指令参考手册[28]中定义了这些等价关系。 指令参考手册[28]。我们选择ST作为STIR的基础 STIR的基础,因为它可以与SMT引擎顺利整合。

​ AttkFinder将标准PLC翻译成STIR,如下所示。综上所述,FBD程序的处理分为两步。(1). 我们分别处理每个块的内部程序。(2). 如果我们有两个块A和B,A有一个(输出)变量x,B有一个(输入)变量y,并且它们的接线是A.xwire—→B.y,我们在STIR符号中改写为B.y :=A.x(见图8a)。在LL程序中,每一个rung都是当时处理的,用ST语言编写的程序可以直接复制到STIR中,不需要任何修改。

在这里插入图片描述

图8 PLC程序到STIR。
3.4 AttkFinder的符号执行组件

​ 攻击者向算法提供了从图5中推导出的目标集t∈O,它们是灌装罐例子中的MV和P。然后,该算法在IFDG中搜索t的定义。然后它得到每个定义的块ID。例如,区块B2、B3、B4的变化。从根块到目标块的路径是符号轨迹(π ∈ Π)。我们将定义d纳入轨迹π,并使用符号执行对其进行评估,以获得一个符号抽象。

​ 在加注箱的例子中,攻击者的目标是学习如何操纵执行器MV和P来组成攻击矢量。At- tkFinder返回帮助攻击者实现其目标的符号抽象集。Π(MV)是与电机阀MV的运行有关的痕迹集,而Π§代表能改变泵P行为的痕迹集。

在这里插入图片描述

​ 例如,Trace π3∈Π(MV)是由图4b推导出来的,π3对应于第7-9行的B3(l7-9),其中l8包含MV定义(MV = ON)。这个定义取决于l4和l7的条件。l7中的条件有谓语(T < L),ELSE条件暗示l4中的谓语必须被否定(¬(T > H)).跟踪π4∈Π§,B4对应于代码中的l10-11行.l11中的定义取决于一个输入变量(D),在分析的这一点上不能确定(P = D) ∧ D∈{ON, OFF}。这个定义取决于l4、l7和l10中的条件。l10中的条件表明,l7和l4中的条件¬(T < L)和¬(T > H)分别是对先前条件的否定。

3.4.1 推演攻击。

​ 攻击策略是上述抽象表达式的具体实现。为了得到攻击策略的集合,AttkFinder使用SMT求解器引擎,分为两个步骤(见表1):首先检查表达式的可满足性(SAT),其次为其生成具体案例(SOLV)。例如,如果一个攻击者想打开一个泵P,他可能会选择在P=ON的情况下,从(2)中评估π2 。

在这里插入图片描述

​ 因此,对P = ON的合适攻击是[T = H + ϵ, D = ON],其中ϵ是T的任何少量。表2总结了本例中所有的攻击策略。此外,我们引入了努力指数的概念(表2的最后一栏)。定义4(努力指数)。努力指数(ρ)是指攻击者建立一个攻击战术所需控制的变量数量。

在这里插入图片描述

3.5 构成攻击矢量

​ 这个过程主要是手工操作。攻击者使用系统知识(图5)来推断攻击策略,然后使用一个或多个攻击策略来组成攻击载体并实现其目标。例如,如果攻击者的目标是通过无限期关闭P来造成缺水,他们可以在攻击5-7中选择,其中攻击6(ρ=1)是最容易执行的,因为它只要求攻击者控制T。

​ • 如果攻击者控制了输入T,他们可以任意操纵MV和P的部分内容(只能关闭)。

​ • 输入D不会引起MV的变化。

​ • 如果攻击者只控制D,他们可以有条件地操纵P的状态,但只有在T>L的情况下。

​ 最初,由于这个例子的简单性,这些结论可能显得很直接,但我们的假设是,这种类型的分析将在更复杂的系统中产生更有价值的信息,在这些系统中,外部变量很多,控制策略包括安全条件和服务程序。

4 评价

​ 我们在两种不同类型的PLC(Allen Bradley和Wago)和三个不同的工业系统(化学计量过程、水过滤系统和智能电网部署)中测试我们的分析框架。

4.1 化学计量系统

​ 我们开始在一个化学计量系统中测试我们的方法,该系统是一个双罐级联的系统。该系统的目标是在任何时候都能在L31处获得处理过的液体(见图9)。该系统必须保证L31和L11在安全的条件下运行(在H和L极限之间)。L11向L31供应液体,泵P21、P23、P25分别加入NaCl、HCl和NaOCl化学品。磁性传感器F21测量管道P11-MV21中的液体流量,而传感器I21、I22、I23测量液体的化学性质。该系统有两个安全联锁,(1)。只有当MV21已经打开时,P11才会打开,(2)。只有当液体从L11流向L31时,化学品(P21、P23、P25)才会被应用,这是由F21测量的。

​ 该系统以两种模式运行,即自动和手动操作。两个PLC(C1,C2)控制系统。C1和C2监控系统在安全条件下运行,如(1)。油箱(L11,L31)必须保持在H和L限值之间的水平。(2).水中的化学含量不得超过安全限度。(3).安全联锁必须得到保证。

​ C1控制系统的前半部分;它读取传感器L11并控制MV11、P11。图10显示了由C1支配的系统模型。OF和UF代表水箱L11的溢出和下溢。Hmax和Lmin是系统达到不安全状态的界限。同样,C2控制试验台的后半部分;C2读取I21、I22、I23、F21、传感器并控制MV21、P21、P23、P25。读者可以参考附录,看看C2的模型,图14显示了系统的演变过程,除了OF和UF的不安全状态外,还突出了化学污染(CC)。

​ C1和C2是Allen Bradley的PLC(1756-L71),通过基 于Ethernet/IP和CIP工业协议的网络信息分享它们的状态,如图9b所示。

在这里插入图片描述

图9 化学定量供应系统。

在这里插入图片描述

图10 由C1管理的系统模型。
4.2 对C1和C2项目的分析

​ C1有11个例程。8个ST,2个LL,和1个FBD,C2有13个例程。9个ST,2个LL,2个FBD。AttkFinder产生了一个1000+LOC的STIR格式的代码(见第3.3.2节),C1产生了一个227块的CFG,一个2700+LOC的STIR文件,C2产生了573块的CFG。

​ 从系统模型中,我们将执行器AC 1∈{MV11, P11}和AC 2∈ {MV21, P21, P23, P25}的值V∈{OFF, ON}的集合定义为目标。我们给AttkFinder提供了这些目标。

4.3 攻击战术

​ 在处理C1和C2程序后,AttkFinder自动识别相应CFG中的目标。每个目标被AttkFinder处理,并产生一组痕迹Π,及其相应的符号表达。当符号表达式是一个逻辑解结时,攻击策略在满足符号表达式的不同谓词中被评估。例如,跟踪π105 :mv11.c = 2 ∧ auto.关闭 ∧ (mv11.fo ∨ mv11.fc) (3)可以解释为,在手动操作期间(AUTO.OFF = 1)和MV11开启后(MV11.C = 2),C1检查是否有故障打开MV11(MV11.FO = 1)或关闭MV11(MV11.FC = 1)。我们把原来的符号表达式(π105)分成两个;一个是检查开启故障MV11.FO(π105.1),另一个是关闭故障MV11.FC(π105.2)。这种表达方式的具体执行产生了攻击性的战术。战术。总的来说,AttkFinder发现了75种攻击战术。

​ n个扫描周期分析背后的直觉是,攻击表达式中使用的L中的变量可能取决于在以前的扫描周期中计算的R中的变量值。读者可以参考附录中关于n个周期分析的更详细解释。

在这里插入图片描述

图11 按目标划分的攻击战术的数量。

​ 图11显示了攻击战术在目标中的分布情况。它们是按努力指数(ρ)排列的。我们把努力指数定义为攻击者需要控制的变量数量来发动攻击的战术(见3.4.1节)。这个指数越大,攻击就越难发动。在这些目标中,电机阀(图11中的MV)具有相当低的ρ的攻击策略。这表明这些目标比泵更容易被攻击者操纵。

4.4 构成攻击的矢量

​ 到目前为止,我们已经表明,攻击者可以向PLC发送输入,使其改变一些执行器的状态。但是,仅仅改变一个执行器的状态可能不是一种攻击。例如,当L11远低于H时,打开MV11不会造成问题,而如果攻击者能对L11=H进行类似的攻击,这可能会造成油箱溢出。我们现在讨论如何发现安全威胁,以及如何创建覆盖这些条件的攻击向量。

​ 在改变执行器的状态之前,这些安全条件应该被验证。控制器根据传感器或通过网络信息检查安全条件,当它们被其他控制器监控时。因此,安全条件是R的一个子集。

​ 我们确定了六种可能的攻击情况,其中安全条件受到损害,或操作目标被破坏。这些情况是水箱溢流、水箱下溢、泵死机、 干运行泵、组件拒绝服务(cDoS)、化学污染和膜污损。

​ 水箱溢出。如果攻击者想溢出水箱L11,他需要选择适当的上下文(当L11≈H时),图10中的ℓ13或ℓ14。然后他需要增加L11的水平。这是有可能的战术6利用了MV加载AUTO.OFF=1和MV11.C=2的手动操作给C1。战术7改变油箱液位读数,从AI0使C1认为油箱处于低位。水平。攻击者还需要将AI0值保持在1000以下,以绕过溢出检查器(战术5)。

​ 坦克下溢。同样地,攻击者可能会选择在通过欺骗油箱液位传感器AI0,使其显示的液位高于200毫米的限制,从而导致流量L11。

​ 干式运转的泵。泵的设计是在泵送的液体与它的作用相反的情况下运行。缺少液体会导致组件过热,并可能造成损坏。在我们的方案中,这一策略与之前提出的水箱下溢案例有关。它是在L11空(AI0≈0)的情况下用同样的攻击策略实现的。

​ 泵的死头运行。当泵运行时,死头发生了,而且,排放管道2被关闭。由于液体不能流动,管道中的压力增加,导致泵过热。这个策略需要两个阶段:(1)保持MV21的关闭,(2)打开P11以增加管道P11-MV21的压力。为了关闭MV21,攻击者可能会结合战术22、24和25。然后他可以使用战术20或21来打开P11。有趣的是,这是一个不为人知的攻击策略,因为他认为C1会管理不希望出现的行为。

​ 组件的DoS(cDoS)。在这种策略中,攻击者的目的是通过虚假地描述不安全状况来禁用一个特定的组件。当控制器检测到不安全状况时,它将关闭特定的组件,造成拒绝服务。例如,在C2中,DI10表示P23是否处于故障状态,攻击者可以通过安全机制诱使P23关闭,迫使DI10=1,如战术46和51所示。所有cDoS攻击的案例都显示在表3中

​ 化学污染。泵P21、P23和P25分别控制化学药品NaCl、HCl和NaOCl的定量过程。每种化学品控制液体的一个特定属性。例如,盐酸控制水的pH值,C2应将其保持在6.5和7.5之间,以便为人类消费所接受3。如果水中的pH值下降到酸性水平(<6.5),则认为该液体被污染并腐蚀金属管道,因此变得对人类消费不安全。在我们的方案中,攻击者可以通过欺骗C2中的传感器AI2>7.05来实现这一目标,这将使C2认为pH值总是很高,关闭如攻击战术48所示,HCl源(P23)。

​ 膜结垢。这是在水处理系统中膜的过滤性能的损失。化学品NaCl和NaOCl化学品的操作极限之外的变化会导致膜污损[15]。在我们的方案中,攻击者可以欺骗传感器AI1和AI3来分别改变泵P21和P25的状态。与此策略相关的攻击战术是:P21的32和43,以及P25的64和75。表3总结了攻击向量。努力指数(ρ)显示了发动攻击的难度。即在L11溢出(表3第1行)中,有三种攻击战术可以组成策略,5(ρ=4),6(ρ=3)和7(ρ=4)。如果攻击者使用战术5+6,最后的努力是ρ=7。如果他使用战术7,努力是ρ=4。根据努力指数,cDoS和化学污染策略是最便宜的组成,因为它们只使用一种战术。

4.5 评估不同系统上的性能

​ 最后,为了测试我们算法的性能,我们从不同的真实世界系统中选择了一组PLC程序:SmartGrid、化学药剂和水过滤。智能电网有5个WAGO的PLC来控制发电、传输和消费过程。他们的程序是用结构化文本语言编写的。化学计量和水过滤系统有Allen Bradley的PLC来控制其子过程。PLC程序使用结构化文本、梯形逻辑和功能块图程序的组合来处理这些过程。PLC程序的规模各不相同,从仅有3个程序的ST程序到29个程序的多语言程序(分别为C1-SmartGrid和C2-化学计量),如图13a所示。

在这里插入图片描述

图12 攻击分布。

​ 这些PLC程序是用不同的编程语言编码的;有些使用LL、FBD和ST的组合,有些则使用纯ST。我们在所有11个PLC程序中测试了PLCParser,以评估其性能以及图形和STIR表示法的一致性。图13b显示了PLC-Parser处理不同大小和复杂程度的PLC程序的平均时间。该图还描述了结果、图形(节点)和STIR表示代码(代码行)的大小。产生的CFG图的大小从37块到575块不等;CFG的大小取决于PLC中控制策略的复杂性。

在这里插入图片描述

在这里插入图片描述

图13 在不同规模的PLC程序中评估PLC-parser的性能。
5 讨论
5.1 发现攻击的分类法

​ 我们根据它们在PLC代码中的目标变量对攻击策略进行分类。我们确定了以下四组:物理学启发、内部状态、组件信号和控制器间通信。

5.1.1 受物理学启发。

​ 它们是最直观的一组攻击,因为它们与控制策略直接相关。它们在文献中被探讨为虚假数据注入攻击[37]或欺骗攻击[5, 7]。这些攻击中的数值与执行器状态改变的设定点有关,即C2向液体中添加NaCl以增加电导率,直到它达到265µS/cm的上限设定点。然后C2改变策略,削减氯化钠的剂量。攻击者的目的是引导控制器采取错误的控制策略,欺骗传感器读数,如水箱水位、流量传感器等。例如,在我们的分析中,攻击者可以通过修改传感器AI0的值来改变MV11(AUTO.ON = 1),使C1认为水箱低于500厘米的下限,所以C1会打开MV11。另外,攻击者可以用1000厘米的数值来欺骗C1来关闭MV11,因为坦克似乎已经达到了上限。在75个攻击战术中,有16个对应于物理学启发的攻击(21.33%)。

5.1.2 内部状态。

​ 内部状态攻击只针对代码中的内部变量。它们的目的是强制执行PLC程序中的特定轨迹,以实现一个目标。内部状态攻击的一个例子是最后的状态攻击是战术1,攻击者强迫AUTO.这里的攻击旨在激活MV11的手动例程,将其关闭。通过静态程序分析可以推断出这种攻击策略。不过,从控制理论的角度来推断它还是有难度的,因为它与系统的物理行为没有关系。75种攻击策略中的25种对应于内部状态攻击(33.33%)。

5.1.3 组件信号。

​ 执行机构使用一组特定的指示器将其状态反馈给控制器。例如,一个执行器表明它的状态是 "运行 "还是 “停止”,或者在硬件故障的情况下,发出 "故障 "信号。所有这些信号都连接到它们各自的控制器。在我们的方案中,DI3是P11的 "运行 "状态指示灯,DI4是P11的 "故障 "指示灯。两者都连接到C1,C1根据它们的状态做出控制决定。攻击者可以劫持这种信号并向控制器报告错误的状态。据我们所知,我们是第一个研究这种类型的攻击。例如,如果攻击者截获了从DI4传感器到C2的信号(它对应于P21的 "故障 "信号),他可以覆盖DI4=1,C2会认为P21遭受了硬件故障。然后C2将向P21提供一个关闭信号作为安全措施。在75种攻击策略中,有27种对应于组件信号攻击(36.00%)。

5.1.4 控制器之间的通信。

​ 控制器使用网络信息共享它们的状态;如果攻击者破坏了这种通信,它可以通过控制器之间的状态不匹配而严重影响系统。这种状态不匹配会导致系统 ,在不安全的条件下运行。

​ 这种类型的攻击的例子是16、21和27。攻击16可以导致L31水箱关闭P11时的饥饿(没水),因为欺骗信息C2 : MV21.ST = 1。有一个安全机制,如果MV21被打开,P11就不会被打开。关闭,所以欺骗的消息会使C1认为MV21是关闭的,从而激活安全机制。攻击21和27可以通过欺骗消息C3导致L31溢出:L31.L=1导致C1和C2相信油箱L31总是低于下限。

​ 如果攻击者在MV21关闭时向C2 : MV21.ST = 2写入网络信息,一套更精细的攻击可以在管道P11-MV21中造成严重的破坏。我们提出了攻击矢量的组成,即在75种攻击策略中,有7种对应于控制器之间的通信攻击(9.33%)。

5.1.5 时间受限的特征(TC)。

​ 顾名思义,TC攻击有一个与之相关的时域成分。攻击向量有两个阶段。首先,必须有一个时间条件持有,那么攻击条件就被验证了。计时部分由一个双元组(x,t )描述,其中x是持有t时间的谓词。例如,攻击战术3是一种TC攻击,其符号表达式如下。π120.3 :自动。ON ∧ (MV11.Open × 6) ∧ ¬DI8可以读作。如果DI8=0,在MV11.Open=1后的6秒内则MV11=OFF’。换句话说,攻击3的结果将采取发动攻击后6秒生效。

​ 从整套攻击战术中,75个中有17个具有TC特征。读者可以参考附录中的表7来回顾所有具有TC特征的变量。总之,我们的攻击涵盖了比以往任何其他自动攻击发现工作或手动攻击基准更多样化的标准和条件,如表4所示。AttkFinder发现了以前没有讨论过的新的攻击,如Dead-headed pump攻击、dryrunning pump攻击、化学污染攻击,甚至DoS攻击。我们的工作显示了以前的物理系统模型模糊器的局限性[10, 11];它们不仅在部署和使用上更加昂贵(它们需要高保真的系统物理模型),而且它们对系统物理的依赖忽略了其他安全条件,如在干燥条件下运行泵的可能性(这些设备条件通常不在工艺的物理模型中捕获)。我们相信我们的工具提供了一个补充性的和强大的替代方案,以半自动的方式寻找工业系统的攻击。

5.2 攻击阶段手段的有效性

​ 在第2.6节中描述的两种不同的攻击情况下,对攻击策略进行了评估。攻击者坐在工业网络上,可以拦截到达PLC的信息,并可以通过网络信息查询PLC。A1是一个强大的攻击者,可以在两个空间(R和L)任意修改变量。A2可以完全访问R,但他们对L中发生的事情完全视而不见。我们在第4.1节中描述的一个化学计量系统中测试所有的攻击策略。R中的变量在被控制逻辑处理之前被拦截,而L中的值则通过工程工作站强制执行。诸如pycomm4 等库允许工程人员对python脚本进行编程,以便与PLC进行通信。工业网络中的攻击者或恶意软件可以使用类似的工具与目标PLC互动。攻击者可以发起中间人攻击(例如,通过破坏工业交换机[36]),欺骗携带来自其他控制器或远程传感器的网络信息。同时,它可以使用Pycomm读取和写入PLC的内部变量。

​ 我们将测试的攻击策略的结果分类为成功、有条件、失败或无法。在成功的攻击中,攻击者实现了改变目标状态。有条件的成功At- tack意味着攻击者可以发起5攻击,但成功与否取决于攻击者不控制的变量(在L空间)。然后他们必须推导或读取它们。失败意味着攻击者发动了攻击,但目标没有改变其状态。最后,"无法 "意味着攻击者在发动攻击时面临限制,即他们无法改变所有需要的变量(L和R)。表5总结了所有成功(S)和有条件成功(B)的情况。©按目标和攻击者概况的攻击战术顺序。由于A1是最强的攻击者,他可以发动更多的成功攻击(共72次),而A2实现了54次攻击。读者可以参考附录(表9和表10),查看75种攻击战术的详细结果。

​ 从结果来看,我们得出结论,A2不能打开系统中的任何泵(P11,P21,P23和P25),见表5中数值为0的行。原因是攻击战术集PXX=ON(20, 21, …, 75)。强烈依赖于L中的变量,并且由于A2不能读取L的状态。他们需要猜测这些数值。这使得他们很难捕捉到发动攻击的正确时机。要确定这个精确的时刻就成了一个概率问题,即以高度的信心预测L中的条件何时满足。实验显示了系统的非显性行为。C1同步了系统的全局状态,这意味着C1更新了AUTO.OFF和AUTO。ON变量在C2中通过网络信息更新。这些变量在C1中属于L,但在C2中属于R,这意味着攻击者A2可以影响C2比C1更多,换句话说,C2比C1更脆弱。在C1中,A2只能发动一次S攻击,而在C2中,S攻击的数量增加到13次。

在这里插入图片描述

在这里插入图片描述

6 相关工作

​ 符号执行(SE)的应用从自动测试生成到恶意软件分析不等[33]。在CPS安全的背景下,符号执行已经被探索用来识别PLC代码是否包含攻击。SABOT[24]旨在寻找从语义集到内存集的映射;作者创造了变量到设备映射(VTDM)这个术语。SABOT要求攻击者获得系统的详细知识。攻击者写一个规范,描述控制逻辑是如何执行的。然后,该工具将此规范与PLC中的程序相匹配。一旦攻击者了解了程序的编码方式,他就可以编写恶意代码并更新PLC以攻击系统。

​ 以类似的方式,McLaughlin等人[25]研究了如何广告攻击,行为者可以将恶意代码上传到PLC。TSV使用符号执行和模型检查的组合来验证PLC程序满足CPS的安全属性。工程师将安全属性定义为线性时态逻辑命题。TSV被部署为一个线内碰撞设备。它在上传到PLC之前捕获一个程序。TSV将PLC的汇编代码转换为一种称为ILIL的中间语言代表。然后,它建立一个符号扫描周期,模拟PLC程序的所有可能的执行。作者提出了一个时间执行图,通过多个扫描周期来模拟关系。使用模型检查,TSV验证了安全的适当性,并在违反的情况下产生一个反例。虽然TSV和我们的方法使用类似的技术,但威胁模型的推理是不同的。 威胁模型是不同的。虽然TSV的威胁模型涉及 攻击者改变了PLC程序,而我们探讨的是一个更有局限性的行为者,一个想利用操作性的攻击者。我们探讨的是一个更受限制的行为者,一个想远程利用运行中的 漏洞。

​ 在自动攻击生成方面,Sarkar等人[32]提出了 “我来了,我看到了,我黑了”。在他们的方法中,作者提出了一个自动发现工具来建立ICS的攻击。(1) 他们的方法从HMI设备收集屏幕截图,从控制器收集二进制文件。(2) 机器学习算法对CPS控制的系统类型进行分类。(3) 通过控制理论技术,该工具创建PLC程序的修改版本,以操纵系统的行为。一个重要的区别是,AttkFinder旨在通过注入网络数据包来影响系统。相比之下,他们的攻击载体是对控制器程序的微妙变化。

​ 其他研究人员以前也提出过网络物理系统中的信息流分析,但他们的目的是解决不同的问题。研究挑战。Morris等人[26]提出将CPS建模为一个状态机,并应用信息流分析来量化攻击者控制系统组件的效果。Castellanos等人[8]提出应用信息流对ICS进行风险分析;他们的目的是对系统中最脆弱的部件进行分类。我们的方法在使用信息流分析方面有相似之处,但我们用符号执行来补充它,以获得系统中攻击策略的具体案例。此外,我们用多个PLC供应商在各种现实的系统中测试我们的方法。

​ 从软件测试的角度来看,Guo等人[18]通过将结构化文本PLC程序翻译成C语言提出了SymPLC,然后SymPLC使用符号执行引擎来生成测试用例。虽然SymPLC考虑了特定的数据类型,如定时器,但它只评估这种数据类型的输出为布尔值。另一方面,在我们的分析中,我们将定时参数作为时间约束攻击的一个关键组成部分(见第5.1.5节)。另一个区别是,我们的方法也处理LL和FBD语言,并且可以适应其他供应商。

​ 所有这些先前的努力都认为攻击者可以修改PLC中运行的程序。相比之下,我们的贡献集中在确定攻击者可以向PLC发送的输入,迫使它以攻击者所希望的方式改变执行器,而不需要修改PLC上运行的软件。这是一个现实的场景,因为PLC要运行数年而没有任何更新,工程师们通常通过将一个物理密钥从 "编程 "移到 "运行 "来保护PLC的代码。没有这个钥匙,攻击者就不能在PLC中加载新的软件。我们还指出我们的攻击可以绕过PLC的控制流完整性检查器[1],因为我们的攻击会通过PLC中软件的批准执行路径。

​ 此外,以前的这些工作只考虑了一种PLC编程语言。然而,我们的工作适用于PLC中三种不同的、广泛使用的编程语言。此外,我们将使用不同语言的程序转换为中间表示法STIR文件的程序。我们的方法还评估了PLC的特殊功能,如定时组件和扫描周期影响(以前的工作[18]忽略了这些)。我们的工具将作为开源产品发布,以帮助工程师分析PLC程序。

​ 其他一些考虑控制系统安全的论文[9, 14, 17, 19, 23, 35]。这些以前的论文大多考虑如何通过驱动系统进入不安全状态来攻击控制系统,只关注被控制的主要变量,例如,水箱溢出或溢出不足,或向水中添加化学品以驱动pH值达到不安全水平。然而,我们的分析发现了不属于主要控制逻辑的硬编码安全功能的漏洞,例如防止在没有水流过的情况下打开泵或防止泵的死机操作。

7 结论

​ 我们引入了攻击策略的概念,即可以被攻击者利用的系统特征,可以在工业控制系统中造成不期望的后果。我们开发了一个信息流引导的符号执行引擎,它可以处理标准的工业编程语言[34]并半自动地发现攻击策略。

作[18]忽略了这些)。我们的工具将作为开源产品发布,以帮助工程师分析PLC程序。

​ 其他一些考虑控制系统安全的论文[9, 14, 17, 19, 23, 35]。这些以前的论文大多考虑如何通过驱动系统进入不安全状态来攻击控制系统,只关注被控制的主要变量,例如,水箱溢出或溢出不足,或向水中添加化学品以驱动pH值达到不安全水平。然而,我们的分析发现了不属于主要控制逻辑的硬编码安全功能的漏洞,例如防止在没有水流过的情况下打开泵或防止泵的死机操作。

7 结论

​ 我们引入了攻击策略的概念,即可以被攻击者利用的系统特征,可以在工业控制系统中造成不期望的后果。我们开发了一个信息流引导的符号执行引擎,它可以处理标准的工业编程语言[34]并半自动地发现攻击策略。

​ 我们在一个有三个攻击者特征的双控制器化学计量系统中测试了我们的方法。我们发现了72个成功的攻击策略,其中56个(除去物理学启发的攻击)是迄今为止操作者未知的新攻击。利用这些攻击策略,我们展示了如何组成攻击载体,如水箱溢出/下溢、死机泵、干运行泵、组件拒绝服务和化学污染,这些都能对系统运行产生重大影响。最后,我们表明,这种方法可以适用于其他行业,并可以调整为处理来自多个供应商的PLC程序。我们的实现可以作为开源软件使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: PLC程序的执行过程是按照顺序逐行执行每个指令,以控制PLC执行相应的任务。一般来说,PLC程序由多个程序段组成,每个程序段包含多个程序块。程序块包括输入、输出和间逻辑,用来实现控制逻辑。执行过程可以概括为以下几个步骤。 第一步是扫描输入,PLC会读取外部输入信号的状态,并记录到输入寄存器。这些输入信号来自外部的传感器、按钮、开关等设备。读取输入信号是PLC程序执行的起始点。 第二步是执行程序块。这些程序块包含逻辑指令,根据输入信号的状态和程序的设定,判断输出信号是否需要改变。比如,当传感器检测到物体靠近时,PLC程序能够控制输出信号来控制电机启停。 第三步是更新输出信号。在程序块执行完毕后,PLC会根据输出信号的状态更新外部输出设备,比如控制电机、气缸、灯等。这样,PLC能够实现对机器及设备的控制。 执行过程PLC还会监测输入和输出的状态,便于用户了解控制系统的运行情况。为了更好地分析和监控I/O状态,可以使用I/O状态分析表。 I/O状态分析表是一个表格,列出了PLC程序所有的输入和输出信号,以及它们的状态。通过观察和记录I/O状态分析表,用户可以了解每个输入和输出信号的变化情况,并且能够判断PLC程序是否正确执行。一般情况下,输入信号表示系统的输入设备的状态,输出信号表示系统的输出设备的状态。 通过对I/O状态分析表的分析,用户可以快速定位问题,比如检查某个输入状态是否正确或某个输出是否被正确触发。这有助于排除故障和调试PLC程序,从而提高PLC系统的稳定性和可靠性。 ### 回答2: PLC程序的执行过程是指根据编写好的程序,通过PLC运行系统来实现自动化控制。PLC程序的执行过程可以分为以下几个步骤: 1. 扫描输入信号:PLC会周期性地扫描所有输入信号的状态,包括开关、传感器等。根据这些输入信号的状态,PLC会更新输入寄存器的值,并对其进行逻辑运算。 2. 执行程序逻辑:PLC程序包含了一系列的逻辑控制指令,例如判断语句、计算语句、控制语句等。根据输入信号的状态和程序的逻辑控制指令,PLC会决定下一步的执行路径。执行路径的选择会根据程序的条件和逻辑规则来确定。 3. 更新输出信号:根据程序的逻辑计算结果和执行路径,PLC会更新输出寄存器的值。输出信号通常连接到执行器或者其他控制设备上,用于控制各种工业过程。通过更新输出信号,PLC实现了对控制设备的操作。 4. 循环执行:PLC程序会进行周期性的循环执行。每次循环的周期时间可以通过PLC的设置进行调整。循环执行能够保持程序的持续运行,并且根据输入信号的变化和程序的控制逻辑来不断调整输出信号,实现对系统的实时控制。 通过分析I/O状态分析表,可以了解PLC程序在执行过程输入信号和输出信号的对应关系。该表通常列出了各个输入端口和输出端口的状态信息,包括开关的开关状态、传感器的信号状态等。根据这些状态信息,可以判断PLC程序在运行过程具体的控制逻辑和操作结果。同时,也可以通过分析I/O状态分析表来判断程序是否正常运行,是否与实际控制设备的状态相符合,从而进行故障排除和调试。 ### 回答3: PLC(可编程逻辑控制器)程序的执行过程是指PLC按照事先编写的程序指令,对接入的传感器信号进行采集和处理,再根据处理结果对执行器进行控制的一个过程。 PLC程序的执行过程主要包括以下几个步骤: 1. 程序扫描开始:PLC程序的第一个指令开始扫描执行,并逐个执行程序的指令。 2. 采集输入:PLC从连接的输入设备如传感器、按钮等读取输入信号的状态,将其反映到内部存储器。 3. 分析指令:PLC根据程序的指令进行逻辑运算、数学计算以及比较等操作,得出相应的结果。 4. 更新输出:根据分析的结果,PLC将输出信号的状态更新到内部存储器。 5. 发送输出:PLC将更新后的输出信号反映到连接的输出设备,控制执行器的运行。 6. 程序扫描结束:当一个程序扫描周期完成后,PLC会再次从程序的第一个指令开始进行下一轮的扫描。 I/O状态分析表则是用于记录和分析输入输出信号状态的工具。它可以清楚地显示每个输入信号的当前状态以及每个输出信号的更新状态。通过分析这个表,可以帮助我们了解PLC程序执行过程的输入输出状态,帮助我们排查和解决可能存在的问题。 总而言之,PLC程序的执行过程就是根据事先编写的指令对输入信号进行采集和处理,然后控制输出信号来实现对执行器的控制。I/O状态分析表则可以帮助我们了解和分析输入输出信号状态,从而更好地理解PLC程序的执行过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值