可编程逻辑控制器中网络攻击弹性控制的程序随机化的制作方法

文档序号:15738771发布日期:2018-10-23 21:56阅读:261来源:国知局
可编程逻辑控制器中网络攻击弹性控制的程序随机化的制作方法

本申请要求在2016年1月11日提交的美国临时申请序列号62/277,014的权益,其全部内容通过引用并入本文。

技术领域

本发明主要涉及用于可编程逻辑控制器中的网络攻击弹性控制的随机化程序。所公开的技术可以应用于例如使用了工业控制器诸如可编程逻辑控制器(PLC)和分布式控制系统(DCS)的各种自动化生产环境。



背景技术:

常规的弹性可编程逻辑控制器(PLC)架构被设计成用于承受例如由部件或电源故障引起的随机和孤立故障。所谓的“高可用性”PLC提供热备份功能,在发生故障时,另一PLC可以在同一周期内立即接管系统的控制。几十年来,这些功能足以应对硬件故障和标准软件故障。

遗憾的是,常规的弹性架构不能提供足够的冗余来覆盖由网络攻击引发的故障,因为所有的PLC实例都在相同的存储器组织结构中执行相同的二进制数。因此,由网络攻击导致的故障可能会影响所有的PLC实例并导致灾难性后果。



技术实现要素:

本发明的实施例通过提供与用于PLC中的网络攻击弹性控制的随机化程序相关的方法、系统和设备来解决并克服一个或多个上述缺点和缺陷。更具体地,PLC软件的二进制数在冗余PLC架构的每个实例中被随机化。由于PLC实例执行的是不同的二进制数,所以整个系统在网络攻击方面比常规系统具有更强的弹性。此外,在一些实施例中,每个PLC的每个存储器组织结构也被改变以提供针对网络攻击的额外保护。

根据一些实施例,一种用于PLC程序随机化的方法包括工程系统计算机接收对应于PLC程序的源代码并将该源代码编译成PLC程序的多个功能等效的中间表示。PLC程序的程序结构在编译期间被随机化,使得每个中间表示在多个中间表示中是唯一的。在一些实施例中,随机化在程序的运行时之前执行,而在其它实施例中,可以在运行时执行随机化,例如使用本领域中通常已知的即时编译技术。工程系统计算机将多个中间表示发送给一个或多个PLC。

在上述用于PLC程序随机化的方法的一些实施例中,PLC接收PLC程序的第一中间表示并将其编译成PLC汇编代码。第一中间表示的程序结构在编译期间被随机化。该PLC汇编代码然后由PLC执行。在PLC故障切换之后,第一中间表示可以重新编译成新的PLC汇编代码,该新的PLC汇编代码然后由PLC执行。第一中间表示的程序结构可以在重新编译期间再次被随机化。

可以应用各种技术来随机化上述用于PLC程序随机化的方法中的程序结构。例如,在一些实施例中,通过随机化由PLC程序使用的多个数据块的存储器布局,PLC程序的程序结构在编译期间被随机化。例如,通过为每个数据块分配唯一的存储器地址,多个数据块的存储器布局被随机化。数据块可以在编译期间按类型分类以优化存储器布局中的存储器访问。在其它实施例中,通过随机化使用由PLC程序使用的函数块,PLC程序的程序结构在编译期间被随机化。例如,用于调用每个函数块的参数的排序可以被随机化,或者由每个函数块使用的排序循环变量可以被随机化。另外,通过构建将条件语句转换为等效控制流构造的控制流图或者构建将条件语句转换为等效的数据流表示的数据流图,多个函数块的使用可以被随机化。然后,控制流构造或数据流表示的顺序可以被随机化。在其它实施例中,函数块的使用被随机化,其中,将一个或多个非功能性函数块插入到多个函数块中。在一个实施例中,每个函数块由包括数字标识符的三元组来标识,并且PLC程序的程序结构通过向每个数字标识符分配随机值并通过数字标识符对多个函数块进行分类来随机化。在一些实施例中,PLC程序的程序结构在编译期间通过重新排序PLC程序中的一个或多个组织块而被随机化。

根据本发明的其它实施例,一种用于PLC程序随机化的方法包含PLC接收PLC程序的中间表示并将该中间表示编译成PLC汇编代码。在编译期间中间表示的程序结构关于一个或多个程序块的使用而被随机化。PLC然后可以执行PLC汇编代码。在PLC的故障切换之后,PLC可以将中间表示重新编译成新的PLC汇编代码,在再编译期间再次使中间表示的程序结构随机化。然后新的PLC汇编代码可以由PLC执行。

在用于PLC程序随机化的上述方法的一些实施例中,中间表示的程序结构在编译期间通过随机化由PLC程序使用的一个或多个数据块的地址值而被随机化。其它技术可以替代地(或附加地)用于在编译期间对中间表示进行随机化,包括(a)随机化由PLC程序使用的函数块和函数的控制流程;(b)随机化由PLC程序使用的函数块和函数的数据流;和/或(c)对由中间表示中的PLC程序使用的一个或多个组织块进行重新排序。

根据其它实施例,一种用于可编程逻辑控制器(PLC)程序随机化的系统包含存储对应于PLC程序的源代码的计算机可读存储介质;以及工程系统和多个可编程逻辑控制器。工程系统被配置为将源代码编译成PLC程序的多个功能等效的中间表示。PLC程序的程序结构在编译期间被随机化,使得每个中间表示在多个中间表示中是唯一的。每个可编程逻辑控制器被配置为从工程系统接收PLC程序的中间表示,并将中间表示编译成PLC汇编代码,其中,中间表示的程序结构在编译期间关于一个或多个程序块的使用被随机化。

根据参照附图进行的对示例性实施例的以下详细描述,本发明的附加特征和优点将变得显而易见。

附图说明

结合附图阅读以下详细描述,可以最好地理解本发明的前述和其它方面。为了说明本发明,在附图中示出了目前优选的实施例,然而应当理解,本发明不限于所公开的具体手段。在附图中包括以下附图:

图1提供了根据一些实施例的、在工程系统和运行时系统处完成的示例随机化;

图2提供了可以在一些实施例中实现的四重冗余控制架构的图示;

图3提供了根据一些实施例的通过API实现的PLC程序随机化的图示;

图4示出了可以在一些实施例中实现的常规PLC项目的示例随机化;

图5示出了可以在一些实施例中使用的数据块随机化改变了数据块(DB)变量的地址和偏移量;

图6示出了根据一些实施例的DB块优化如何消除存储器填充并重新排列存储器布局;

图7提供了根据一些实施例的函数块参数重新排序如何改变PLC程序的二进制表示的图示;

图8提供了根据一些实施例的循环变量重新排序向PLC二进制程序引入二进制变化的图示;

图9示出了根据一些实施例的循环变量重新排序向PLC二进制程序引入二进制变化;并且

图10提供了根据一些实施例的组织块随机化将可变性引入OB的时序和优先级的图示。

具体实施方式

本文描述的系统、方法和设备主要涉及用于PLC中的网络攻击弹性控制的随机化程序。更具体地,本文描述的技术允许在冗余PLC架构的每个实例中执行PLC软件的随机化二进制数。这种架构用于改善针对由网络攻击引发的故障模式的系统弹性(即工厂及其子系统)。本文称为弹性控制(REsilient CONtrol)或“RECON”的架构架构依赖于作为用于创建弹性工业控制系统(ICS)的构建块的传统PLC阵列。冗余PLC设有与物理系统相同的传感器输入,并且所有PLC执行功能相同的程序;然而,每个PLC包含不同的随机化二进制数。在成功利用主PLC的漏洞情况下,冗余系统会检测到故障,并由备用PLC进行控制。使用不同的随机化二进制数可降低相同漏洞影响备份PLC的机会。此外,在检测到故障后,可针对受影响的PLC实例即时重新编译新的随机化二进制数,以提高系统的可用性。如下面进一步详细描述的,在RECON的一些实施例中,随机化发生在两个阶段:(1)在PLC源代码被转换为PLC中间表示的高级编译时;以及(2)在PLC中间表示被转换成汇编指令以用于在PLC处理器中执行的运行时。可以利用每个代码表示提供的不同随机化机会来创建实现可扩展RECON架构的代码和存储器路径的大型组合。

图1提供了根据一些实施例的、在工程系统100(例如西门子TIA博途工程系统)和运行时系统105(例如西门子PLC操作系统)处执行的随机化的高级概述。PLC为硬件实时控制系统,其被设计成在恶劣的环境中和很长一段时间内通过传感器和致动器与物理过程进行交互并对其进行控制。PLC在工程系统100中使用为物理系统专家(即电气机械工程师)设计的专用领域的高级PLC编程语言(例如IEC 61131-3)进行编程。

如图1所示,PLC源代码在工程系统100中的源代码编辑器100A中进行开发。源代码由高级编译器100B编译成PLC中间表示(IR)100C。PLC IR 100C允许工程系统100针对不同硬件和固件具有多个PLC版本。在一些实施例中,使用多种PLC语言来开发程序。集成开发环境(例如,源代码编辑器100A的一部分)将各种源代码语言编译成可重移植到各种PLC架构(例如,x86、MIPS、ARM等)的PLC IR 100C。可以额外执行代码和存储器布局的抽象语法树(AST)随机化。

为了将PLC程序部署到现场,PLC IR 100C由工程系统100“下载”到PLC的运行时系统105中;运行时系统105类似于通用计算机中的操作系统。然后运行时系统使用板载编译器105A(包含在PLC的固件中)将PLC IR编译成PLC汇编代码。最后,由PLC处理器105C以循环方式执行PLC组件105B。需指出,在传统的弹性PLC架构的情况下,同一个PLC IR被分配给所有PLC实例,并且假定所有实例都具有相同版本的板载编译器,所有实例都会为通用PLC IR生成相同的PLC组件。

为了提高针对故意和遍及的网络攻击引起的故障容错能力,在一些实施例中,RECON在高级和板载编译器中利用代码和存储器路径随机化。高级编译器随机化利用了在抽象语法树(AST)和控制流图(CFG)级别完成的一套丰富的编译器转换和优化。第一随机化步骤在PLC IR级别引入高度可变性。

在板载编译器中完成的第二随机化步骤具有由目标汇编语言强加的更多限制,并且比在更高级别上进行的随机化具有更小的灵活性。然而,板载编译器随机化为系统提供了第二道防线,以防攻击者危害随机化的第一阶段。板载随机化将PLC IR变为无法在PLC外访问的唯一二进制数。进一步防止任何外部人员读取板载随机化二进制数的一种方法是通过PLC配置。因此,板载随机化在软件开发和维护周期中隐藏了二进制数。此外,应当指出,通过使用与PLC软件的先前版本功能相同的新随机二进制数,板载随机化提供了在故障切换后重新部署的能力。通过这种方式,受制于在代码级别的网络攻击的PLC可以通过附加的防止攻击重复的安全措施重新启动。

图2示出了根据一些实施例的四重冗余控制架构200。通过使用多核处理器,先进的PLC比传统的PLC提供更强大的计算能力。例如,可以使用多个双核PLC(SIMATIC S7-1500)来实现图2中所示的四重冗余控制PLC架构200。除了提供更多的逻辑PLC之外,这种架构的一个优点在于多核PLC的虚拟化,其中每个PLC具有不连贯的存储器和代码空间,并防止主PLC中的软件故障影响从PLC。在同一个核中具有虚拟化双冗余允许在发生故障时更快恢复。

在图2中,发动机表示受控制的物理系统。两个传感器(S1、S2)测量发动机的温度和每分钟转数。两个冗余I/O板(I/O 1,I/O 2)将传感器数据连接到PLC(PLC 1,...,PLC 4)。在每个扫描周期(例如100ms)中,PLC执行三个主要阶段:读取、处理和写入。重要的是需要指出,读写不是直接对传感器和执行器进行,而是通过PLC的过程映像进行。过程映像为可将执行与物理过程分离并允许PLC在发生任何中断或故障时恢复的缓冲区。也就是说,保证过程映像在每个周期边界(例如,100ms、200ms、300ms)是一致的。过程映像的一致性通过DB一致性检查来检查。在过程阶段,RECON使用不同的随机化二进制数,不同的随机化二进制数使用图1中描述的方法进行编译。由于每个随机二进制数的代码和存储器路径不同,因此同步器会检查在主PLC和从PLC中执行的代码的功能是否等效。功能等效可以通过在不同粒度的等效位置处插入运行检查点来完成。例如,如果以基本块粒度(例如,微指令改组)完成随机化,则可以在基本块边界处插入检查点。

图3为根据一些实施例的提供如何可以实现PLC程序随机化的附加细节的系统图。如本领域所理解的,PLC包括操作系统和用户程序。操作系统提供了内在的PLC功能(例如,处理重启和错误、存储器管理、调用用户程序等)。如图3所示,用户程序包括执行自动化任务的所有“块”。用户程序使用程序块进行编程,程序块包括函数块(FB)和函数(FC)。FB和FC引用在数据块(DB)中组织的局部和全局变量。在PLC中,用户程序通常在组织块(OB)中循环执行(非循环程序也是可行的)。主循环OB始终存在,并且在PLC程序被初始化并在无限循环中执行时可用。

图3所示的PLC程序结构是固定的,并提供了具有不同块类型的清晰结构。该示例说明了将RECON系统连接到工程系统305的方法。本例中的RECON 315包括解析PLC结构、应用转换并封装新PLC结构的软件组件。更具体地,使用应用编程接口(API)310,RECON 315在PLC程序下载之前访问并随机化PLC程序。由于块(OB、FB、FC、DB)与二进制表示的映射更改,因此修改PLC程序的块结构会对所产生的代码产生深远影响。因此,对PLC程序结构的修改实现了RECON寻求的二元制多样化。使用图3中阐述的通用架构,可以实现PLC程序结构中的所有块类型的随机化。

RECON可用于在现有技术和传统系统中执行PLC程序随机化。图4示出了根据一些实施例的可以如何使用RECON执行传统PLC项目的随机化的两种技术。如图4所示,可以将PLC程序从传统PLC 405提取到工程系统410中。另选地,常规数据库415可以提供PLC项目文件,而不是从常规PLC 405中提取PLC程序。如图4所示,任一机制的条件在于项目文件未加密和不受保护。

在上述技术的详细阐述中,PLC程序随机化由三个软件组件:数据块随机化组件、函数块和函数随机化组件以及组织块随机化组件执行。下面将进一步详细描述这些组件中的每个组件。

DB组织可寻址块中的存储器,程序使用可寻址块访问变量、传感器和致动器。DB为被称为标签的命名变量的集合。标签为PLC中值的保留存储区。标签包含数据类型(例如,布尔类、整数类等)、数值(例如“15”)和DB中的物理地址。

图5示出了根据一些实施例的块随机化如何改变DB变量的地址和偏移。如图5所示,PLC 1中的“Motor_1”标签具有布尔类型和地址“%I0.0”。在通过数据块随机组件处理后,PLC 2中相同变量的地址可以更改为“%I2.0”。同样,通过在PLC 2的符号表中引入“tag”之前引入“new_tag”,可以将PLC 1中布尔类型的静态变量“tag”中的偏移量从“0.0”更改为“0.1”。这些变化使PLC中的存储器布局变得多样化,以致相同的网络攻击在具有不同存储器布局的两个PLC中不太可能有效。

随机化的一个附加层是启用DB块优化,在DB块优化时,所有标签都按其数据类型分类。如图6所示,分类最小化标签之间的数据间隙(填充),并优化目标PLC处理器的存储器访问。在该示例中,标准DB 605具有在变量之间的数据间隙,数据间隙在优化的DB 610中被消除。结合使用这两种DB随机化技术,RECON可以为PLC多样化程序生成数百个等效的存储器布局。

函数块和函数随机化组件改变了代码和存储器堆栈的结构,并因此对于RECON创建程序变体很重要。FB与FC的区别在于循环数据存储。FC为没有数据存储的块。这意味着值FC为无状态的,并且块变量不能在循环中持久化。并且另一方面,FB为具有循环数据存储的块。这意味着FB为有状态的,并且块变量值在循环中保持不变。FB和FC两者均使用各种高级语言(包含图形和文本语言)进行编程。最流行的PLC编程语言为基于PASCAL的结构化控制语言(SCL)。SCL也基于用于由IEC 61131-3标准化的PLC编程的结构化文本(ST)规范。下面描述的FB和FC随机化技术基于SCL以用于说明目的;然而,应当理解,这些技术可以被推广并应用于提供类似功能的任何PLC编程语言。

函数块和函数具有包括输入、输出、输入输出参数和函数主体的声明语句。这个声明语句对所有语言都是通用的,包含SCL。图7示出了用于包括输入参数“FINALVAL”、输入输出参数“IQ1”和输出参数“CONTROL”的“TEST”程序的示例性函数块声明语句。引入随机化的一种技术是在调用函数块时对参数重新进行排序,如右侧两个示例所示。由于参数是命名的,列出参数的顺序不会改变程序的含义。然而,这会为这两个程序创建不同的存储器布局。在实际的PLC程序中,参数的数量往往非常大(有时为数百个参数),并因此这种技术可以非常有效地创建大量不同但等效的SCL程序。

类似的技术适用于在循环中持续存在的FB循环变量。图8示出根据一些实施例的循环变量重新排序如何将二进制变化引入PLC二进制程序。如图8所示,变量PID_CONTROLLER_1和PID_CONTROLLER_2的顺序可以重新排列,使得循环变量在不同的PLC实例中占据不同的存储器位置。

SCL代码本身可以在控制流和数据流级别中随机化。例如,对于控制流,可以解析包含SCL说明语句的可扩展标记语言(XML)文件,并且可以在将条件语句转换为等效控制流构造的情况下重建控制流图。

图9示出了根据一些实施例的、控制流和数据流转换如何在SCL代码级别引入二进制多样化。例如,在图9中,if-else语句的结构被“NOT”指令反转,使得PLC 1中的“if”语句的主体成为PLC 2中的else语句的主体,并且反之亦然。对于数据流,可以解析包含SCL语句的XML文件,并且可以在表示转换为等效数据流表示的地方重建数据流图。例如,图7示出了PLC 1中的表示“IQ1:=IQ1*2”被转换为PLC 2中的“IQ1:=IQ1+IQ1”。此外,可以插入附加表示,例如“N:=0”和“SUM:=0”,这些表示不会对控制程序造成影响,但会在编译时产生代码级别的二进制多样性。这与NOOP(无操作)随机化技术相似。重要的是需要指出,某些PLC中不存在NOOP操作数,但对程序没有影响的插入操作在功能上是等效的。

在一些实施例中,应用FB和FC的排序随机化技术来影响它们在存储器中的排列。每个FB和FC均有一个三元组<name,type,number>,其中name为使用者在PLC程序中提供的任意名称,type为取决于块类型(例如,FB、FC、OB、DB)的枚举,并且number为与块关联的唯一标识符。关键的观察结果是,PLC存储器中块的位置与它们的编号相对应,因为它们首先被分类并然后下载到PLC中以用于执行。因此,可以应用排序随机化技术来随机化三元组中的数字以在执行期间改变它们的顺序。另外(或者替代地),虚拟FC和FB可以被插入以占用存储空间并任意移动提供有用工作的其它FB和FC。这种转换也可以通过开放接口来实现并且也可以扩展到DB。

OB为操作系统和用户程序之间的接口。用户程序只能由OB调用,并因此为PLC程序结构的重要部分。循环地或在发生某些事件时,操作系统会调用OB。在大多数PLC中,有几种类型的OB(或其它供应商的类似概念),使用者可以根据所需功能选择其程序。例如,有启动OB、循环程序执行OB、中断(一天中某个时间、循环、延时、硬件)OB和误差(异步和同步)OB。OB通过编号标识,并且不同的编号具有不同的优先级。例如,“OB 1”为具有最高优先级的循环程序OB,而OB 10为具有较低优先级的一天中某个时间的中断OB。例如,一些PLC提供了相同类型的多个中断,例如在西门子PLCS中,OB 32、OB 33、OB 34和OB 35为循环中断OB,使用者可以使用它们来组织其程序。

组织块随机化组件对OB进行重新排序,使得不同的PLC程序使用不同的OB(具有相同的优先级和实时保证)。例如,图10示出了如何将具有两个OB(OB 1和OB 32)的PLC程序结构转换为具有三个OB(OB 1、OB 32和OB 35)的程序结构。在本例中,控制器代码被分为两部分,前半部分被分配给OB 32,后半部分被分配给OB 35。需指出,这会在OB 35和OB 32之间创建相关性。然而,PLC中支持OB之间的同步。图10还示出了可以利用将RECON应用至OB、FB、FC和DB以创建大的组合空间的随机化,来创建多样化的PLC二进制数。

本文描述的由控制层装置使用的处理器可以包含一个或多个中央处理单元(CPU)、图形处理单元(GPU)或本领域已知的任何其它处理器。更一般地,本文使用的处理器为用于执行存储在计算机可读介质上的机器可读指令、用于执行任务并且可以包括硬件和固件中的任一者或其组合的装置。处理器还可以包括存储可执行用于执行任务的机器可读指令的存储器。处理器通过操纵、分析、修改、转换或传输供可执行程序或信息装置使用的信息和/或通过将信息路由到输出装置来对信息起作用。处理器可以使用或包括例如计算机、控制器或微处理器的能力,并且可以使用可执行指令进行调节以执行不是由通用计算机执行的专用函数。处理器可以与能够在其间进行交互和/或通信的任何其它处理器耦合(电和/或包括可执行组件)。用户接口处理器或发生器为包括用于生成显示图像或其部分的电子电路或软件或两者的组合的已知元件。用户界面包括使用户能够与处理器或其它装置交互的一个或多个显示图像。

本文的包括但不限于控制层装置和相关计算基础设施的各种装置可以包括至少一个计算机可读介质或存储器,其用于保存根据本发明的实施例编程的指令并且用于包含本文描述的数据结构、表格、记录或其它数据。本文使用的术语“计算机可读介质”是指参与向一个或多个处理器提供指令以供执行的任何介质。计算机可读介质可以采取许多形式,包括但不限于非暂态、非易失性介质、易失性介质和传输介质。非易失性介质的非限制性示例包括光盘、固态驱动器、磁盘和磁光盘。易失性介质的非限制性示例包括动态存储器。传输介质的非限制性示例包括同轴电缆、铜线和光纤,包括组成系统总线的导线。传输介质也可以采取声波或光波的形式,例如在无线电波和红外数据通信期间产生的声波或光波。

本文使用的可执行应用包括代码或机器可读指令,其用于调节处理器以例如响应于用户命令或输入而实现预定函数如操作系统、上下文数据采集系统或其它信息处理系统的那些预定函数。可执行程序为用于执行一个或多个特定过程的代码段或机器可读指令、子例程或其它不同的代码段或可执行应用的一部分。这些过程可以包括接收输入数据和/或参数、对接收到的输入数据执行操作和/或响应于接收到的输入参数执行函数并提供所得输出数据和/或参数。

本文的函数和过程步骤可以响应于用户命令自动地、完全或部分地执行。响应于一个或多个可执行指令或装置操作而自动执行行动(包括步骤),而无需用户直接发起行动。

附图的系统和过程并不是唯一的。其它系统、过程和菜单可根据本发明的原理导出以实现相同的目标。尽管已经参考特定实施例描述了本发明,但是应当理解,本文示出和描述的实施例及其变体仅用于说明的目的。本领域技术人员可以实现对当前设计的修改,而不偏离本发明的范围。如本文所描述的,可以使用硬件组件、软件组件和/或它们的组合来实现各种系统、子系统、代理、管理器和进程。本文中的权利要求要素不应根据35U.S.C.112的第六段的规定来解释,除非使用短语“用于...的装置”来明确地列举要素。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1