CN117574443A - 工控软件控制流完整性保护方法及系统 - Google Patents

工控软件控制流完整性保护方法及系统 Download PDF

Info

Publication number
CN117574443A
CN117574443A CN202311598248.8A CN202311598248A CN117574443A CN 117574443 A CN117574443 A CN 117574443A CN 202311598248 A CN202311598248 A CN 202311598248A CN 117574443 A CN117574443 A CN 117574443A
Authority
CN
China
Prior art keywords
industrial control
control software
program
file
software
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202311598248.8A
Other languages
English (en)
Inventor
章荣炜
伍军
潘倩倩
张全海
徐寒松
申小朋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Doctor Of Engineering Equipment Group Co ltd
Shanghai Jiaotong University
Original Assignee
Shanghai Doctor Of Engineering Equipment Group Co ltd
Shanghai Jiaotong University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shanghai Doctor Of Engineering Equipment Group Co ltd, Shanghai Jiaotong University filed Critical Shanghai Doctor Of Engineering Equipment Group Co ltd
Priority to CN202311598248.8A priority Critical patent/CN117574443A/zh
Publication of CN117574443A publication Critical patent/CN117574443A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/64Protecting data integrity, e.g. using checksums, certificates or signatures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/554Detecting local intrusion or implementing counter-measures involving event detection and direct action
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02PCLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
    • Y02P90/00Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
    • Y02P90/02Total factory control, e.g. smart factories, flexible manufacturing systems [FMS] or integrated manufacturing systems [IMS]

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Storage Device Security (AREA)

Abstract

本发明提供了一种工控软件控制流完整性保护方法及系统,包括:步骤S1:获取目标工控软件的信息;所述信息包括控制程序的格式、控制程序的加载流程和控制流转移的过程;步骤S2:构建插桩框架,完成对目标工控软件的保护;所述插桩框架通过逆向工程分析PLC的信息。本发明首次提出了一种可以有效地保护工控软件控制流完整性的方法,该方法可以保护工控软件特有的重定向表,以确保攻击者无法通过篡改该重定向表的表项进而篡改程序的控制流,首次解决了因为工控软件的特殊性导致的传统软件控制流完整性保护方案不适用的问题。

Description

工控软件控制流完整性保护方法及系统
技术领域
本发明涉及工控系统安全技术领域,具体地,涉及一种工控软件控制流完整性保护方法及系统。
背景技术
工控系统用于自动化地控制和管理工业过程,它被广泛地应用于各种国家关键基础设施当中,例如军工、智能电网、化工、核电站等。在这些场景中,如果工控软件受到了攻击并被篡改程序的控制流而去执行攻击者嵌入的恶意代码,就会造成非常严重的经济损失,且会带来严重的安全风险。
在工控系统中,PLC的工控软件是其中一个关键部分:向下监控和控制各种工业设备,向上提供一个控制和管理的可视接口。工控系统的控制逻辑依赖于PLC,所以一旦攻击者攻击了PLC,并篡改了其中的控制逻辑时,工控系统就有可能执行攻击者期望的恶意代码。
传统控制流完整性保护方法可以被划分为:前向控制流完整性保护、后向控制流完整性保护。其中,后向控制流完整性保护主要用于避免因为函数返回导致的控制流改变,比较常用的保护方案有:代码可写可执行分离、栈金丝雀、影子栈等机制;它们主要通过防止攻击者通过栈溢出等手段篡改了栈的内容,然后执行攻击者期望的恶意代码。但是工控软件中的控制流跳转与传统软件的直接跳转不同,它会经过一个额外的重定向表,之后会根据该表找到后续将要调用的函数地址,使得向控制流完整性保护方案无法保护到该重定向表。而前向控制流完整性保护方案主要用于保护函数内部的跳转指令,其可以通过Vulcan来生成程序的控制流图,然后确定其中的每一个分支是否合法;但这种方法在资源有限的嵌入式场景下不太适用。还有一些方法针对资源受限的场景,采用一种粗粒度的保护方法。该方法不会校验所有分支,所以开销较少,但同时也降低了准确性。在工控软件中,函数将要跳转的位置是未知的,需要在运行时根据重定向表来确定到底调用哪个函数,因此上述方法都不适用。除此之外,因为工控软件的控制程序结构采用的不是常见的PE格式或ELF格式,导致现有的静态分析工具无法直接用于分析工控软件的控制程序,进而无从获取其控制流图等信息。
目前尚无针对工控软件的控制流完整性保护方案,其主要难点在于下面三个方面:
(1)工控软件的二进制文件结构不同。工控软件基于IEC 61131-3标准规定的编程语言进行编写,其编译产生的控制程序二进制文件格式与传统软件中的PE、ELF格式有很大的不同,这就导致插桩的位置较难确定。
(2)工控软件的加载与传统软件不同。工控软件加载时存在诸多校验逻辑,这就导致插桩完成后的控制程序并不能成功地被加载,还需要做很多的修复。
(3)工控软件的控制流转移与传统软件不同。工控软件控制流转移时会经过一个中间的重定向表,由该表确定最终的跳转地址,但是传统的控制流完整性保护方法都没有保护该表,从而引入了安全威胁。
在公开号为CN111240708A的中国专利文献中,公开了一种工控系统主机、工控系统及工控系统主机软件升级的方法,该方法包括:获取服务器发送的工单任务,并将工单任务添加至临时白名单列表,工单任务包括工单升级包、工单任务的起始时间、工单任务的结束时间、工单任务的要求;周期性判断当前时间是否达到工单任务的起始时间;如果当前时间达到工单任务的起始时间,激活工单任务,根据工单任务执行预设工单安全策略;获取管理员对激活后的工单任务中工单升级包的操作;判断管理员对工单升级包的操作是否符合工单任务的要求;如果管理员对工单升级包的操作符合工单任务的要求,接受管理员对工单升级包的操作,根据操作及工单升级包对工控系统主机软件进行升级。但该专利文献仅降低了管理员错误操作的概率,并不能很好的保护工控软件的安全,因此无法解决上述问题。
发明内容
针对现有技术中的缺陷,本发明的目的是提供一种工控软件控制流完整性保护方法及系统。
根据本发明提供的一种工控软件控制流完整性保护方法,包括:
步骤S1:获取目标工控软件的信息;
所述信息包括控制程序的格式、控制程序的加载流程和控制流转移的过程;
步骤S2:构建插桩框架,完成对目标工控软件的保护;
所述插桩框架通过逆向工程分析PLC的信息。
优选的,所述步骤S2包括以下子步骤:
步骤S2.1:解析目标工控软件的信息,移除元信息后,提取其中的函数指令块;
步骤S2.2:编写插桩代码后嵌入工控软件程序中;所述插桩代码编译为机器码后,替换工控软件程序中每个跳转位置的指令;所述工控软件程序在每次跳转前先执行所述插桩代码,执行完毕后再跳转至原本要执行的位置;
步骤S2.3:修补控制程序;所述控制程序包括函数tag、POU tag和Segment tag;
步骤S2.4:生成对应的校验文件;所述校验文件能够通过PLC的防篡改校验;
步骤S2.5:将校验文件和控制程序下载至PLC中。
优选的,所述插桩框架使用哈希校验保护敏感内存;所述敏感内存包括工控软件的定向表;所述定向表为函数跳转的中间层;所述插桩框架在初始化重定向表后计算初始哈希值,且每次控制流跳转时,通过重新计算重定向表的哈希值确定重定向表条目是否被篡改。
优选的,所述哈希校验包括获取重定向表的位置后,逐指令双字计算重定向表中每个表项存储内容的哈希值,计算完毕后与初始哈希值进行对比;若对比通过,则正常跳转至原本要执行的汇编指令。
优选的,所述哈希校验的校验频率平衡对实时性带来的影响,在插桩代码内部能够自定义调整抽样频率。
优选的,所述工控软件为二进制文件;所述文件包括文件头、设备元信息、POU函数段、动态链接段、外部函数段、文件信息段、下载信息段和文件结束段。
根据本发明提供的一种工控软件控制流完整性保护系统,包括:
模块M1:获取目标工控软件的信息;
所述信息包括控制程序的格式、控制程序的加载流程和控制流转移的过程;
模块M2:构建插桩框架,完成对目标工控软件的保护;
所述插桩框架通过逆向工程分析PLC的信息。
优选的,所述模块M2包括以下子模块:
模块M2.1:解析目标工控软件的信息,移除元信息后,提取其中的函数指令块;
模块M2.2:编写插桩代码后嵌入工控软件程序中;所述插桩代码编译为机器码后,替换工控软件程序中每个跳转位置的指令;所述工控软件程序在每次跳转前先执行所述插桩代码,执行完毕后再跳转至原本要执行的位置;
模块M2.3:修补控制程序;所述控制程序包括函数tag、POU tag和Segment tag;
模块M2.4:生成对应的校验文件;所述校验文件能够通过PLC的防篡改校验;
模块M2.5:将校验文件和控制程序下载至PLC中。
优选的,所述插桩框架使用哈希校验保护敏感内存;所述敏感内存包括工控软件的定向表;所述定向表为函数跳转的中间层;所述插桩框架在初始化重定向表后计算初始哈希值,且每次控制流跳转时,通过重新计算重定向表的哈希值确定重定向表条目是否被篡改。
优选的,所述哈希校验包括获取重定向表的位置后,逐指令双字计算重定向表中每个表项存储内容的哈希值,计算完毕后与初始哈希值进行对比;若对比通过,则正常跳转至原本要执行的汇编指令。
优选的,所述哈希校验的校验频率平衡对实时性带来的影响,在插桩代码内部能够自定义调整抽样频率。
优选的,所述工控软件为二进制文件;所述文件包括文件头、设备元信息、POU函数段、动态链接段、外部函数段、文件信息段、下载信息段和文件结束段。
与现有技术相比,本发明具有如下的有益效果:
1、本发明首次提出了一种可以有效地保护工控软件控制流完整性的方法,该方法可以保护工控软件特有的重定向表,以确保攻击者无法通过篡改该重定向表的表项进而篡改程序的控制流,首次解决了因为工控软件的特殊性导致的传统软件控制流完整性保护方案不适用的问题。
2、本发明能够基于校验算法来保护工控设备PLC的特有的敏感内存——重定向表,从而实现对控制流完整性的保护;该校验算法通过插桩的形式嵌入PLC二进制文件中;为了顺利进行插桩,本发明还构建了一个插桩框架,该框架能够基于工控设备特有的二进制文件结构及其逆向工程的分析结果对二进制文件进行插桩,可以在线对PLC打补丁,不需要重启PLC即可完成对其控制流的加固。
3、本发明提出的保护方法会在重定向表初始化完成后计算重定向表的初始值,并存放在特定位置供后续的调用;且提出的插桩框架可以确保插桩代码既能够顺利地插入控制程序中,又能通过加载相关的解析校验和防篡改校验,让插桩完成后的控制程序流畅的运行起来。
4、本方法使用哈希校验来保护敏感内存,敏感内存是工控软件的重定向表,而该表是一个不同于传统软件的存在;工控软件中的函数跳转都需要先经过该重定向表作为中间层来查找将要调用的函数地址,而不像传统软件一样进行直接跳转;为了确保该表的表项不被篡改,本发明还会识别相关特征来判断该重定向表是否已经初始化完成,在该表初始化完成后计算其初始哈希值并保存在特定位置,之后会定期地对该重定向表重新计算哈希值并进行校验。
5、本发明还考虑到了在嵌入式场景中的存在资源受限和实时性的要求,因此哈希校验的校验频率会与其对实时性带来的影响做出平衡性调整;同时,为了进一步减少对实时性的影响,本发明还支持抽样检验的思路,在插桩代码内部可以自定义地调整抽样频率,从而灵活地调整插桩代码对实时性的影响。
本发明的其他有益效果,将在具体实施方式中通过具体技术特征和技术方案的介绍来阐述,本领域技术人员通过这些技术特征和技术方案的介绍,应能理解所述技术特征和技术方案带来的有益技术效果。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1为本发明实施例中所使用的工控软件控制流完整性保护的框架示意图。
图2为本发明实施例中工控软件控制程序及其对应的校验文件的生成过程示意图。
图3为本发明实施例中使用的工控软件控制程序的Tag机制示意图。
图4为本发明实施例中使用的工控软件控制程序的重定向表机制示意图。
图5为本发明实施例中控制流完整性保护机制示意图。
图6为本发明实施例中使用插桩框架的示意图。
图7为本发明实施例中插桩框架对文件大小的影响示意图。
图8为本发明实施例中插桩框架对指令数量的影响示意图。
图9为本发明实施例中采用的内存保护算法图。
具体实施方式
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。
参照图1所示,一种工控软件控制流完整性保护方法,包括:
首先获取目标工控软件的控制程序的格式、控制程序的加载流程和控制流转移的过程。工控软件为二进制文件,文件分为文件头、设备元信息、POU函数段、动态链接段、外部函数段、文件信息段、下载信息段和文件结束段等。
接着构建插桩框架,完成对目标工控软件的保护。
参照图4所示,本发明使用哈希校验来保护敏感内存。这里的敏感内存是工控软件的重定向表,该表是一个不同于传统软件的存在,工控软件中的函数跳转都需要先经过该重定向表作为中间层来查找将要调用的函数地址,而不像传统软件一样进行直接跳转。在工控软件进行加载时,会逐渐对该表进行初始化,并最终使用该表辅助函数进行跳转。为了确保该表的表项不被篡改,本发明会识别相关特征来判断该重定向表是否已经初始化完成,然后在该表刚初始化完成后就计算其初始哈希值并保存在特定位置,之后会定期地对该重定向表重新计算哈希并进行校验。
其中,哈希校验的步骤如下:
(1)获取重定向表的位置。对于同一个工控软件的控制程序,其每次加载时的所在的地址都不同,本发明通过逆向工程分析工控软件二进制文件结构以及加载流程来基于一些运算来获取。具体来说,重定向表的长度由工控软件控制程序中的某些字段共同决定,而重定向表的起始位置由动态加载的起始地址再加上控制程序的某些字段共同决定;通过一系列计算来获取重定向表的起始位置和长度,从而确定重定向表。本发明可在每次加载时重定向表位置都随机的情况下动态地定位到重定向表。
(2)逐指令计算哈希。校验算法会逐个双字地计算重定向表每个表项所存储内容的哈希值。具体来说,它会每四个字节对重定向表条目的内容进行哈希运算。这些计算结果会存放在由插桩代码控制的特定位置,因为嵌入式场景资源受限的特点,这里采用了一种低开销的计算方式。
(3)哈希校验。计算完当前哈希结果后,会与保存在特定位置的初始哈希值进行对比,如果校验通过,则会正常跳转到原本要执行的汇编指令;否则,会产生异常。基于此,便能成功地通过保护重定向表来确保程序的控制流完整性。
本发明还考虑到在嵌入式场景中的存在资源受限和实时性的要求,所以该哈希校验的校验频率需要在校验的频率与频率给实时性带来的影响之间做一个平衡。同时,为了进一步减少对实时性的影响,本发明还支持抽样检验的思路,在插桩代码内部可以自定义地调整抽样频率,从而灵活地调整插桩代码对实时性的影响。
构建插桩框架的具体操作如下:
先解析目标工控软件的信息,移除元信息后,提取其中的函数指令块。编写插桩代码,然后将其编译为机器码后,替换工控软件程序中每个跳转位置的指令并嵌入工控软件程序中;工控软件程序在每次跳转前先执行插桩代码,执行完毕后再跳转至原本要执行的位置。
参照图2和图3所示,插桩完成后的控制程序并不能被正确的加载,因为工控软件的控制程序的所有内容都是经过严密地层层封装,每个封装的头中都带有其封装内容的校验和等各种元数据。所以,为了确保插桩完成后的控制程序能够被正确地加载,还需要根据控制程序基本单元的封装方式对程序的元数据进行层层修复。
参照图5所示,修复完成后的控制程序还不能被正确加载,因为工控软件在加载控制程序时,不仅需要控制程序,还需要一个在编译阶段与该控制程序同时生成的校验文件。所以当我们修复完控制程序后,便不能通过工控软件的防篡改校验,这时候需要根据工控软件的校验文件生成算法来重新生成对应的校验文件。
本发明首次提出了一种可以有效地保护工控软件控制流完整性的方法,该方法可以保护工控软件特有的重定向表,以确保攻击者无法通过篡改该重定向表的表项进而篡改程序的控制流,首次解决了因为工控软件的特殊性导致的传统软件控制流完整性保护方案不适用的问题。
以上为本发明的基础实施例,下面通过一个优选实施例对本发明的技术方案做进一步的说明。
实施例1
参照图6所示,本发明实例中,假设攻击者通过某种方式成功地入侵了系统,并在内存中的特定位置置入了恶意代码,然后企图通过篡改重定向表条目来引导控制流跳转并查找重定向表时,将控制流引导到攻击者期望的恶意代码处,从而实现针对工控系统的攻击。
本发明实例搭建了一个实验环境,选择WAGO 750-8303和WAGO 750-8216这两个工控设备作为测试设备分别进行测试,它们运行在CODESYS V3.5上,并通过以太网与主机连接。同时还建立起多个虚拟机来执行不同的功能:虚拟机#1负责监控工控软件的日志,来查看加载、运行的情况;虚拟机#2作为gdb server负责作为辅助gdb客户端的调试的服务器;虚拟机#3负责模拟攻击者插入代码与篡改重定向表;虚拟机#4负责运行插桩框架,生成最终的控制程序及其校验文件。工控软件的控制程序使用IEC 61131-3标准指定的编程语言,并通过e!cockpit进行编写和编译。
具体步骤如下:
(1)通过逆向工程来获取目标工控软件控制程序的格式、控制程序的加载流程以及控制流转移的过程。
(2)基于ARM汇编编写插桩代码,在编写时需要注意寄存器的状态以及跳转位置,编写完成之后,借助开源工具keystone转换成对应的机器码。除此之外,还需要预留一些空间作为插桩代码数据的存储空间。
(3)将插桩代码嵌入到工控软件控制程序中的合适位置。
(4)为了确保插桩代码能够顺利通过工控软件运行时的校验,还需要对生成的控制程序进行大量的修补,修补完成后,还需要基于修补后的控制程序生成对应的校验文件以通过加载的防篡改校验。
因为本方法基于工控软件控制程序加固的形式来实现针对工控软件控制程序的控制流完整性保护,所以首先需要获取工控软件的控制程序。这里有两种场景:
(1)场景一:正在线上环境运行的程序需要进行控制流完整性的加固。因为现在尚无针对工控软件的控制程序的控制流完整性保护方法,所以早期主要是这种场景。
(2)场景二:编译生成工控软件控制程序后,希望直接通过本方法来对工控软件控制程序进行加固来确保其在加载之后具有确保控制流完整性的能力。
针对场景一,首要的任务就是获得位于工控设备文件系统中的控制程序。本实施例通过以太网连接到工控设备,然后在特定目录下可以获得该控制程序。如此便解决了在场景一中获取工控软件控制程序的困难。之后,该控制程序可以在被插桩加固之后与新生成的校验文件一起覆盖原来的文件,从而在加载该工控软件控制程序时便具有了确保控制流完整性的能力。
再之后便是编写确保控制流完整性的插桩代码,该插桩代码包含两个模块,分别是重定向表定位模块和重定向表校验模块。首先,为了正确定位工控软件在运行时所需要的重定向表,重定向表定位模块基于动态偏移量的计算以及二进制文件的信息来辅助定位内存中重定向表的位置。该方法需要一些由逆向工程获得的预设值作为后续用于计算动态偏移的输入值。在该重定向表定位模块运行完成之后,就获得了重定向表的起始地址以及范围。重定向表校验模块会在重定向表初始化完成之后计算该重定向表的初始哈希并存放在特定位置用于后续的校验。参照图5所示,在每次进行工控软件控制程序中的代码进行控制流转移时,都会先跳转到重定向表定位模块,由该模块逐四个字节进行哈希的计算,并将最终结果与初始计算的哈希进行对比来确定控制流是否被攻击者篡改。为了确保工控软件控制程序在插桩后能够正确地被加载进内存中,本实施例还设计了一个插桩框架来将插桩程序嵌入到工控软件控制程序中的特定位置,并对工控软件控制程序二进制文件中的一些字段进行修改,基于修改后的工控软件控制程序生成对应的校验文件,通过ssh传到工控软件中。
为了观察重定向表篡改前后的变化,在进行控制流完整性加固前,首先通过一些手段篡改函数调用路径上要访问的重定向表表项到LED亮灯函数,成功篡改后,发现LED确实如预期那样开始闪烁。之后将经过控制流完整性加固的工控软件控制程序重新放入工控设备中,并让其正常加载。可以发现,工控设备并没有如预期地进行LED闪烁。通过gdb查看内存的情况,最终结果为,插桩代码检测到重定向表被篡改,于是直接异常退出。
为了测试本方法的性能,本实施例中做了两个实验,在静态方面评估了本控制流完整性保护方法对文件大小的影响,在运行时方面评估了本方法对最终指令数的影响。参照图7所示,可以看出其对文件大小的影响微乎其微,并且影响随着原始文件大小的增大而减小,这是因为本方法所插入的插桩代码是固定大小的,并且该大小相对于工控软件控制程序的大小来说可以忽略不计。参照图8所示,可以看出,不同于静态的固定大小,本实施例对运行时指令数量的影响是显著的,并且会随着其中所调用函数数量的增加而增加,但是仍在可接受范围内。除此之外,在实验中通过对日志的观察可以得出,虽然本实施例会显著地增大指令数量,但是并没有影响到工控系统的实时性约束。
综上所述,本发明所提出的一种工控场景下的控制流完整性保护方法能够首次解决工控场景中因为引入重定向表导致其控制流完整性容易受到攻击者篡改的问题。同时,评估结果表明,本发明对工控软件控制程序二进制文件的大小影响较小,其对工控软件控制程序在运行阶段汇编指令数的存在一定程度的影响,但是在一个可接受范围内。
参照图9所示,本实施例还提供了一种内存保护算法,具体如下:
Require:tableAddr tableSize
Ensure:state
corretHash←0
curHash←0
while True do
if Function execute to its end then
curHash←0
n←tableSize÷4
addr←tableAddr
hashValue←0
while n≠0do
hashValue←hashValue xor*tableAddr
tableAddr←tableAddr+4
end while
if Init relocate table then
corretHash←hashValue
else
curHash←hashValue
if curHash==corretHash then
return 0
else
return errorCode
end if
end if
end if
end while。
本发明还提供一种工控软件控制流完整性保护系统,所述工控软件控制流完整性保护系统可以通过执行所述工控软件控制流完整性保护方法的流程步骤予以实现,即本领域技术人员可以将所述工控软件控制流完整性保护方法理解为所述工控软件控制流完整性保护系统的优选实施方式。
具体的,一种工控软件控制流完整性保护系统,包括:
模块M1:获取目标工控软件的信息;
所述信息包括控制程序的格式、控制程序的加载流程和控制流转移的过程;
模块M2:构建插桩框架,完成对目标工控软件的保护;
所述插桩框架通过逆向工程分析PLC的信息。
所述模块M2包括以下子模块:
模块M2.1:解析目标工控软件的信息,移除元信息后,提取其中的函数指令块;
模块M2.2:编写插桩代码后嵌入工控软件程序中;所述插桩代码编译为机器码后,替换工控软件程序中每个跳转位置的指令;所述工控软件程序在每次跳转前先执行所述插桩代码,执行完毕后再跳转至原本要执行的位置;
模块M2.3:修补控制程序;所述控制程序包括函数tag、POU tag和Segment tag;
模块M2.4:生成对应的校验文件;所述校验文件能够通过PLC的防篡改校验;
模块M2.5:将校验文件和控制程序下载至PLC中。
所述插桩框架使用哈希校验保护敏感内存;所述敏感内存包括工控软件的定向表;所述定向表为函数跳转的中间层;所述插桩框架在初始化重定向表后计算初始哈希值,且每次控制流跳转时,通过重新计算重定向表的哈希值确定重定向表条目是否被篡改。
所述哈希校验包括获取重定向表的位置后,逐指令双字计算重定向表中每个表项存储内容的哈希值,计算完毕后与初始哈希值进行对比;若对比通过,则正常跳转至原本要执行的汇编指令。
所述哈希校验的校验频率平衡对实时性带来的影响,在插桩代码内部能够自定义调整抽样频率。
所述工控软件为二进制文件;所述文件包括文件头、设备元信息、POU函数段、动态链接段、外部函数段、文件信息段、下载信息段和文件结束段。
本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统及其各个装置、模块、单元以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统及其各个装置、模块、单元以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同功能。所以,本发明提供的系统及其各项装置、模块、单元可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置、模块、单元也可以视为硬件部件内的结构;也可以将用于实现各种功能的装置、模块、单元视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。

Claims (10)

1.一种工控软件控制流完整性保护方法,其特征在于,包括:
步骤S1:获取目标工控软件的信息;
所述信息包括控制程序的格式、控制程序的加载流程和控制流转移的过程;
步骤S2:构建插桩框架,完成对目标工控软件的保护;
所述插桩框架通过逆向工程分析PLC的信息。
2.根据权利要求1所述的一种工控软件控制流完整性保护方法,其特征在于,所述步骤S2包括以下子步骤:
步骤S2.1:解析目标工控软件的信息,移除元信息后,提取其中的函数指令块;
步骤S2.2:编写插桩代码后嵌入工控软件程序中;所述插桩代码编译为机器码后,替换工控软件程序中每个跳转位置的指令;所述工控软件程序在每次跳转前先执行所述插桩代码,执行完毕后再跳转至原本要执行的位置;
步骤S2.3:修补控制程序;所述控制程序包括函数tag、POU tag和Segment tag;
步骤S2.4:生成对应的校验文件;所述校验文件能够通过PLC的防篡改校验;
步骤S2.5:将校验文件和控制程序下载至PLC中。
3.根据权利要求2所述的一种工控软件控制流完整性保护方法,其特征在于,所述插桩框架使用哈希校验保护敏感内存;所述敏感内存包括工控软件的定向表;所述定向表为函数跳转的中间层;所述插桩框架在初始化重定向表后计算初始哈希值,且每次控制流跳转时,通过重新计算重定向表的哈希值确定重定向表条目是否被篡改。
4.根据权利要求3所述的一种工控软件控制流完整性保护方法,其特征在于,所述哈希校验包括获取重定向表的位置后,逐指令双字计算重定向表中每个表项存储内容的哈希值,计算完毕后与初始哈希值进行对比;若对比通过,则正常跳转至原本要执行的汇编指令。
5.根据权利要求3所述的一种工控软件控制流完整性保护方法,其特征在于,所述哈希校验的校验频率平衡对实时性带来的影响,在插桩代码内部能够自定义调整抽样频率。
6.根据权利要求1所述的一种工控软件控制流完整性保护方法,其特征在于,所述工控软件为二进制文件;所述文件包括文件头、设备元信息、POU函数段、动态链接段、外部函数段、文件信息段、下载信息段和文件结束段。
7.一种工控软件控制流完整性保护系统,其特征在于,包括:
模块M1:获取目标工控软件的信息;
所述信息包括控制程序的格式、控制程序的加载流程和控制流转移的过程;
模块M2:构建插桩框架,完成对目标工控软件的保护;
所述插桩框架通过逆向工程分析PLC的信息。
8.根据权利要求7所述的一种工控软件控制流完整性保护系统,其特征在于,所述模块M2包括以下子模块:
模块M2.1:解析目标工控软件的信息,移除元信息后,提取其中的函数指令块;
模块M2.2:编写插桩代码后嵌入工控软件程序中;所述插桩代码编译为机器码后,替换工控软件程序中每个跳转位置的指令;所述工控软件程序在每次跳转前先执行所述插桩代码,执行完毕后再跳转至原本要执行的位置;
模块M2.3:修补控制程序;所述控制程序包括函数tag、POU tag和Segment tag;
模块M2.4:生成对应的校验文件;所述校验文件能够通过PLC的防篡改校验;
模块M2.5:将校验文件和控制程序下载至PLC中。
9.根据权利要求8所述的一种工控软件控制流完整性保护系统,其特征在于,所述插桩框架使用哈希校验保护敏感内存;所述敏感内存包括工控软件的定向表;所述定向表为函数跳转的中间层;所述插桩框架在初始化重定向表后计算初始哈希值,且每次控制流跳转时,通过重新计算重定向表的哈希值确定重定向表条目是否被篡改。
10.根据权利要求9所述的一种工控软件控制流完整性保护系统,其特征在于,所述哈希校验包括获取重定向表的位置后,逐指令双字计算重定向表中每个表项存储内容的哈希值,计算完毕后与初始哈希值进行对比;若对比通过,则正常跳转至原本要执行的汇编指令。
CN202311598248.8A 2023-11-27 2023-11-27 工控软件控制流完整性保护方法及系统 Pending CN117574443A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311598248.8A CN117574443A (zh) 2023-11-27 2023-11-27 工控软件控制流完整性保护方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311598248.8A CN117574443A (zh) 2023-11-27 2023-11-27 工控软件控制流完整性保护方法及系统

Publications (1)

Publication Number Publication Date
CN117574443A true CN117574443A (zh) 2024-02-20

Family

ID=89887913

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311598248.8A Pending CN117574443A (zh) 2023-11-27 2023-11-27 工控软件控制流完整性保护方法及系统

Country Status (1)

Country Link
CN (1) CN117574443A (zh)

Similar Documents

Publication Publication Date Title
CN103778061B (zh) 数组越界错误的自动检测和校正方法
US8356351B2 (en) Method and device for verification of code module in virtual machine
US20180089422A1 (en) Technologies for deterministic code flow integrity protection
JP7154365B2 (ja) ソフトウェアコードをセキュアにするための方法
US20100070804A1 (en) Method for controlling program execution integrity by verifying execution trace Prints
CN102708013A (zh) 程序语句控制的指令流控制
EP2958044A1 (en) A computer implemented method and a system for controlling dynamically the execution of a code
JP2013161479A (ja) セキュアドメインおよび低セキュアドメインを使用するデータ処理装置および方法
KR101052734B1 (ko) 응용 프로그램 패치 장치 및 방법
CN109271789B (zh) 恶意进程检测方法、装置、电子设备及存储介质
CN113779578B (zh) 移动端应用的智能混淆方法和系统
US11176060B2 (en) Dynamic memory protection
KR20130051225A (ko) 이기종 컴퓨팅 환경에서 보안 강화 방법 및 장치
KR20210024161A (ko) 소스 텍스트들의 분석을 위한 방법
US11113392B2 (en) Executable binary code insertion
CN117574443A (zh) 工控软件控制流完整性保护方法及系统
CN107545174B (zh) 一种基于llvm的抵御控制流劫持的系统和方法
KR102567924B1 (ko) 웹 어셈블리에서의 간접호출 명령어 보호를 위한 장치 및 방법
CN114637988A (zh) 一种面向二进制的函数级软件随机化方法
WO2023025370A1 (en) Control flow integrity
KR20210108848A (ko) Cfi 기반 got 변조 공격 방지 장치 및 그 방법
CN112671741A (zh) 一种网络防护的方法、装置、终端及存储介质
US20230418950A1 (en) Methods, Devices, and Systems for Control Flow Integrity
CN111898119A (zh) 控制流完整性保护方法、装置、设备及存储介质
CN111898120A (zh) 控制流完整性保护方法及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination