掌桥专利:专业的专利平台
掌桥专利
首页

一种基于多异构执行体控制器的多变体用户程序编译方法

文献发布时间:2023-06-19 09:54:18


一种基于多异构执行体控制器的多变体用户程序编译方法

技术领域

本发明属于工业控制技术领域,尤其涉及一种基于多异构执行体控制器的多变体用户程序编译方法。

背景技术

随着工业应用的逐渐开放和智能,传统工业控制系统由多年的封闭式应用场景也逐渐开放,结合物联网、5G、人工智能、大数据等前沿技术,打造智能制造、工业4.0等新目标的同时,安全需求也更加迫切。拟态防御理论是一种基于内生安全机理的动态异构冗余构造(Dynamic Heterogeneous Redundancy,DHR)中引入拟态伪装的策略或机制,融合多种主动防御要素,以异构性、多元性改变目标系统的单一性;以动态性、随机性改变目标系统的确定性;以异构冗余多模裁决机制识别和屏蔽未知缺陷与未明威胁;以高可靠性架构增强目标系统服务功能的柔韧性或弹性;以系统的视在不确定属性防御或拒止针对目标系统的不确定性威胁。

工控系统上位机组态软件将工艺流程对应的用户程序通过编译后下载到如PLC或DCS控制器等的工业控制器中运行,提供针对用户程序的不同方式的编译方法。

为了高稳定性,传统控制器或者安全型控制器都具备设备冗余的强可靠性设计,即每套控制器都有1:1的热备冗余,安全型控制器能到达3个甚至更多的冗余;但是他们都是基于同源同架构的冗余,采用相同的内核、系统、驱动和执行程序。上位机组态软件下发用户程序给控制器通常有两种方法,一是将用户程序转为类汇编语句的解释型执行文件下发;二是将用户程序交叉编译成目标系统可执行文件下发。基于传统控制器,上位机组态软件只编译下发一套用户程序给各执行体,容易被攻击者破解、伪造。

拟态工业控制器是结合了拟态防御理论的一种内生安全工业控制器,其内部采用多套异构的主控芯片作为多个执行体。相对来说,拟态工业控制器的最大变更在于固定3个以上的冗余度,且每个冗余执行体都具备异构性,从硬件包括CPU架构、外设,到软件包括主程序、内部驱动都是不同的,比如ARMv7-A、X86、Mips等内核架构的处理器;整个控制执行中,实时通过裁决器从多个执行体中裁决判断输出,从而有效避免针对单一设备的攻击和漏洞利用。

发明内容

本发明的目的在于针对现有技术的不足,提供一种基于多异构执行体控制器的多变体用户程序编译方法。本发明针对的是多异构执行体控制器执行体软件中负责工业应用业务逻辑控制的用户程序的多样化编译处理,通过多种方法提高控制器中用户程序执行文件的异构彻底性、达到整体控制器的安全稳定性。

本发明的目的是通过以下技术方案来实现的:一种基于多异构执行体控制器的多变体用户程序编译方法,包括以下步骤:

(1)将用户程序语句转为C语言代码,具体为:

(1.1)用户程序的控制逻辑转为多套不同的C语言代码;

(1.2)每套C语言代码随机插入混淆代码、异常检查和异常处理的代码;

(1.3)每套C语言代码与其目标异构执行体约定针对同一业务功能采用相同的业务内存地址,且各异构执行体之间针对同一业务功能的业务内存地址不同,则每套C语言代码针对同一业务功能的业务内存地址也不同;

(2)针对各异构执行体,将C语言代码分别交叉编译成相应架构的目标程序,具体为:各异构执行体的内核版本不同,每套C语言代码根据其目标异构执行体的内核版本,通过指定内核版本的编译器或者相应的编译参数,实现交叉编译多套内核架构的目标程序;

(3)将目标程序链接成多个可执行文件,具体为:将步骤(2)生成的目标程序链接生成可执行文件;其中,每个可执行文件链接时指定的运行地址与其目标异构执行体的运行地址约定一致,且各异构执行体之间的运行地址不同。

进一步地,每个异构执行体的业务内存地址支持通过其它约定文件动态变更。

进一步地,所述其它约定文件包括用户程序配置表。

进一步地,所述可执行文件链接时指定的运行地址包括代码段和数据段的起始地址。

进一步地,所述用户程序为装载到工业控制器后运行的业务控制程序,对应各个工业场景的工艺流程。

进一步地,所述多异构执行体控制器为拟态工业控制器。

进一步地,所述混淆代码包括无效的临时变量定义以及相关运算、正常变量值的加减异或、无法满足的条件分支下的复杂逻辑运算和赋值。

进一步地,所述异常检查和异常处理的代码包括判断预留陷阱对应的内存变化时,进入指定的异常处理,从而记录异常事件或者触发报警。

进一步地,所述预留陷阱包括业务无关的堆变量和栈变量。

本发明的有益效果是:基于多异构执行体控制器,本发明将用户程序交叉编译成目标系统可执行文件下发,上位机针对不同的异构执行体编译成不同架构的用户程序可执行文件。本发明在用户程序的编译中考虑几种变化方法,通过在用户程序代码转为C语言代码时增加代码混淆和异常探测等手段,变化的业务内存地址,以及利用编译器链接工具指定不同代码段和数据段地址的方式,生成更具动态性和多样性的用户程序执行文件,从而达到更高的安全性。针对控制器中多套异构执行体的设计,满足编译型用户程序执行所需的多套内核架构程序编译方法,同时使用户程序和控制器具备更高的安全性。

附图说明

图1是用户程序编译下载主流程图。

具体实施方式

本发明一种基于多异构执行体控制器的多变体用户程序编译方法,采用用户程序编译型下发的方式,通过插入无效代码、检查代码、多平台交叉编译、动态代码地址和数据地址的方式编译工控系统组态软件生成的用户程序,生成不同的可执行文件,用于下载到目标控制器。

用户程序是指装载到工业控制器后运行的业务控制程序,对应各个工业场景的工艺流程。用户程序的编写规范根据IEC61131-3国际标准,定义有文本语言(指令表IL、结构文本ST)和图形化语言(梯形图LD、功能块图FBD、顺序功能图SFC);编程组态软件在用户程序编写完成后,需要编译成目标控制器可识别的执行指令,编译方式通常有2种,一是编译型,用户程序源码编程先转为C语言,再通过对C语言的交叉编译生成目标控制器的执行文件;二是解释型,用户程序源码先转为自定义的中间解释型指令,下发到目标控制器,由目标控制器解释执行。本实施例以拟态工业控制器为例,整体流程如图1所示,主要操作步骤如下:

步骤一、用户程序转为多套C语言代码

本发明仅针对第一种方式,将其转为C语言代码;在此过程中,增加几个变化方法,差异化地生成多套不同的C语言代码,具体如下:

1)增加混淆代码

用户程序转为多套C语言代码,每套C语言代码随机插入不同的混淆代码,比如无效的临时变量定义以及相关运算、正常变量值的加减异或、无法满足的条件分支下的复杂逻辑运算和赋值等。

大部分用户程序的控制逻辑都相对简单,容易被攻击者在下载组态软件用户程序时抓取通信包解析破解;增加不同的混淆代码一是为了增加拟态工业控制器多执行体的用户程序的代码异构性;二是为了增加攻击者对用户程序理解的难度,防止破解和伪造。

2)增加检查代码

插入异常检查和异常处理的代码逻辑,判断当某些预留的陷阱对应的内存(比如业务无关的堆变量或者栈变量)发生变化时,进入指定的异常处理,从而记录异常事件或者触发报警。比如在函数内对传入参数进行限定大小范围的检查,或者函数预留一个多余不用的参数,在调用方约定传入一个固定的值,一旦检查不符合即认为堆内存异常,触发报警。记录报警时将相关信息(比如时刻、代码位置、异常值等)写入另一个指定内存区,该内存区由主程序异常检查代码统一处理。

3)定义相同业务功能对应不同的内存地址

用户程序中涉及的业务功能包括位号、功能块、硬件组态参数等,拟态工业控制器不同执行体各自针对不同的用户程序业务功能采用不同的业务内存地址,并约定在用户程序生成的C语言代码中业务内存地址操作是相对应的;即同一执行体针对不同业务功能采用不同的业务内存地址,不同执行体针对同一业务功能也采用不同的业务内存地址。各执行体的业务内存地址举例如下表1所示,比如同样对于第1个DO位号置值,执行体A对应的该位号的业务内存地址是0x800A100,执行体B对应的该位号的业务内存地址是0x900B200,执行体B的硬件组态参数的业务内存地址可能才是0x800A100。每个执行体的业务内存地址支持通过其它约定文件(比如用户程序配置表)动态变更。

表1:各执行体的业务内存地址

传统控制器内部的内存地址划分是固定的,比如位号区、硬件组态区等,拟态工业控制器多个执行体通过定义业务的可变内存地址,既能增加控制器内部的内存不确定性,又能增加用户程序C代码的差异性,即使攻击者逆向解析出了用户程序的执行代码,也难以确定最终的业务目的。

步骤二、C语言代码交叉编译成多个目标程序

C语言代码通过指定内核版本的编译器或者相应的编译参数,实现交叉编译多套内核架构的目标程序(.o文件),具体的内核版本根据拟态工业控制器各个执行体硬件所采用的CPU架构判断。所述交叉编译是在一个内核版本的操作系统上生成可在另一个内核版本的操作系统上执行的目标程序;比如使用x86版本的GCC编译成x86目标程序、使用Mips版本的GCC编译成Mips目标程序、使用ARM GCC编译器的-march子参数编译成相应内核版本的ARM目标程序。比如对于ArmV7-A系列的内核芯片执行体,在使用Arm-elf-gcc编译时指定编译命令为“arm-elf-gcc -std=c99 -march=armv7-a -mfpu=fpa”。

步骤三、目标程序链接成多套可执行文件

将步骤二生成的目标程序通过步骤二指定的编译器或者相应的编译参数链接生成可执行文件(bin文件);拟态工业控制器各执行体分别指定不同的可执行文件运行地址,可执行文件与目标执行体约定可执行文件的运行地址相同;所述可执行文件链接时指定的运行地址包括代码段和数据段起始地址。每个执行体的可执行文件运行地址支持通过其它约定文件(比如用户程序配置表)动态变更。比如GCC的LD链接命令通过参数“-Ttext”指定代码段起始地址,通过参数“-Tdata”指定数据段起始地址。各执行体的运行地址举例如下表2所示,比如使用Arm-elf-gcc链接时指定代码段起始地址为0x80002000,数据段起始地址为0xA0003000的链接命令为“arm-elf-ld -Ttext 0x80002000 -Tdata 0xA0003000”。

表2:各执行体的运行地址

步骤四、通过以上三个步骤将通过上位机组态软件创建的一套用户程序IEC61131-3编程语言源码,变化生成多套面向不同异构内核的可执行文件,用于下载到目标控制器中。

本发明通过多样化的编译生成动态的用户程序可执行文件,对攻击者的通信包分析、可执行文件逆向分析等攻击行为造成一定的干扰和难度,提高控制器的用户程序运行安全,保证现场工艺流程的正确。另外C代码中增加的检查机制,可以达到类似蜜罐功能,在程序执行异常的时候触发报警,作为控制器捕捉和相应反制措施提供依据。

相关技术
  • 一种基于多异构执行体控制器的多变体用户程序编译方法
  • 基于相对时间的异构执行体程序同步方法及装置
技术分类

06120112347742