当前位置: 首页 > 专利查询>山东大学专利>正文

基于二进制重写的故障注入防护方法技术

技术编号:36862258 阅读:47 留言:0更新日期:2023-03-15 18:39
本发明专利技术属于代码转换技术领域,具体涉及一种基于二进制重写的故障注入防护方法。基于二进制重写的故障注入防护方法,包括:步骤1,通过故障注入的方式,模拟目标二进制文件在该故障模型下的故障,并产生一个易受攻击的列表;步骤2,利用局部保护策略修补故障列表中易受攻击的指令,获得修补后的二进制文件;步骤3,对修补后的二进制文件重复步骤1和步骤2的操作,直到不再有新的故障出现。本发明专利技术提出的基于二进制重写的故障注入防护方法,通过重新组装反汇编的方式,在汇编代码级别来注入对策;并提出了一个迭代和模拟驱动的框架,该框架只对程序中易受攻击的部分插入对策,因此能够以有针对性的方式修补二进制文件。有针对性的方式修补二进制文件。有针对性的方式修补二进制文件。

【技术实现步骤摘要】
基于二进制重写的故障注入防护方法


[0001]本专利技术属于代码转换
,具体涉及一种基于二进制重写的故障注入防护方法。

技术介绍

[0002]故障注入攻击,又称错误攻击,正变得越来越普遍,成功的故障攻击会导致信息泄露或者权限提升,更甚至引起整个系统的崩溃。例如,ARM 的安全启动可能会受到电压故障的影响,从而使攻击者能够在程序计数器 (PC)中加载受控值;利用激光注入故障可以绕过 Android 智能手机上的安全引导加载程序。针对这类攻击,一是从硬件层面进行防护,二是在软件层面,目前针对软件层面的防护对策大部分都需要访问程序的源代码,这在某些情况下是不切实际的。
[0003]二进制重写在软件安全和系统中有许多重要的应用,例如程序加固、自动修复、插桩、优化、边界检查等等。二进制重写的优点是:即使在软件的源代码不可用的情况下,也可以应用它,从而达到保护软件的目的。二进制重写的目标是添加、删除和替换二进制代码中的指令。目前有两种主要类型的二进制重写技术:静态和动态。在静态二进制重写中,二进制文件在程序执行之前被重写在磁盘上。静态二进制重写方案主要有三种,第一种是基于汇编级别的绕过策略(detouring),其是通过hook出底层指令来工作的,但这种方法会导致高性能下降和额外的代码开销。第二种是可重组反汇编的方式(Reassembleable disassembly),该方法使用反汇编代码可重定位的规则,反汇编可执行文件,生成的代码可以在无需手动操作的情况下组装回工作二进制文件,总体就是一个拆卸
r/>重组的过程。第三种是全翻译方案,该方案使用基于编译器的前端将低级机器码翻译成高级中间表示(IR),用于体系结构独立的二进制重写。

技术实现思路

[0004]针对现有技术中故障注入的防护措施的缺点和不足,如源代码不可知,运行开销大,性能损失大等等,本专利技术提供一种基于二进制重写的故障注入防护方法,该方法利用静态二进制重写技术,能够在保持原始二进制文件的结构的前提下,只对程序中易受攻击的部分插入对策,从而达到更高的防护效率。
[0005]本专利技术解决其技术问题采用的技术方案是:基于二进制重写的故障注入防护方法,包括:步骤1,通过故障注入的方式,模拟目标二进制文件在该故障模型下的故障,并产生一个易受攻击的列表;步骤2,利用局部保护策略修补故障列表中易受攻击的指令,获得修补后的二进制文件;步骤3,对修补后的二进制文件重复步骤1和步骤2的操作,直到不再有新的故障出现。
[0006]进一步地,所述步骤2通过以下方式实现:采用Ddisasm工具对目标二进制文件执行指针分析,并以GrammaTech二进制文件的中间表示法(GTIRB)的形式生成中间表示,然后通过Python GTIRB库对中间表示进行操作,并将其重新编译为可执行二进制文件。
[0007]进一步地,所述局部保护策略是在局部插入受保护的指令代码,包括:保护mov指令或保护cmp指令。
[0008]进一步地,所述保护mov指令具体为:在执行mov操作之后,比较两个存储位置的结果,并且在两个存储位置不一致的情况下,调用故障处理程序。
[0009]进一步地,所述保护cmp指令具体为:通过执行两次比较,并比较两次比较的结果是否相等,若不相等,则调用故障处理程序。
[0010]本专利技术与现有技术相比,具有如下优点与有益效果:1.采用静态二进制重写方案来注入保护对策,此保护方式不需要知道程序的源代码,这样会适用于大部分的商业软件;2.通过重新组装反汇编的方式,在汇编代码级别来注入保护对策,因此能够以有针对性的方式修补二进制文件;3.运行开销小,对经典的复制方案来说,复制每个指令意味着代码大小至少有300%的开销,因为对于每个指令,它将添加指令的另一个副本以及他们的结果之间的比较过程。而本专利技术提出的方法只针对易受攻击的点,所以比简单的复制方案执行得更好。
附图说明
[0011]图1为本专利技术基于二进制重写的故障注入防护方法的整体流程图;图2为mov操作的局部保护模式的流程图;图3为cmp操作的局部保护模式的流程图。
具体实施方式
[0012]下面将结合本专利技术的实施例和附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。以下对至少一个示例性实施例的描述实际上仅仅是说明性的,绝不作为对本专利技术及其应用或使用的任何限制。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。
[0013]实施例1 本实施例提供一种基于二进制重写的故障注入防护方法,该方法采用故障模拟驱动的迭代方法来减轻二进制文件中的故障注入漏洞,通过不断地迭代去修补二进制文件,直到不再出现故障注入的漏洞为止。
[0014]本实施例中的方法,主要采用如图1所示的系统来实现,该系统由两个主要组件组成:一个故障器和一个修补器。故障器在目标二进制文件中的某个故障模型下模拟故障,并产生一个易受攻击的列表,这意味着在目标二进制文件中触发了故障。修补器使用由出错程序产生的列表来修补二进制文件。修补器将尽可能局部地修补每个故障漏洞,而不影响其周围的代码。然后,修补后的二进制文件再次通过故障器和修补器运行,重复迭代这一过程,直到不再出现故障或可以修复为止。具体包括以下步骤:一、故障模拟
首先要选择一个想要保护目标二进制文件免受其害的错误模型,例如单比特翻转错误模型、字节错误模型等等。故障器接受一个目标二进制文件和两个输入:一个“好”的输入和一个“坏”的输入。例如,“好”的输入是正确的密码,而“坏”的输入是除了正确的密码之外的任何值。首先,执行“好”和“坏”的输入,以查看它们之间执行轨迹的差异。当用“坏”的输入运行目标二进制文件时,可以有效地记录所有执行的指令的轨迹。然后,对于轨迹中的每个偏移,以单比特翻转错误模型为例,运行二进制代码直到轨迹中的那个偏移,在偏移处翻转指令中的一个比特,然后继续执行,目标二进制文件要么崩溃,要么作为不正确的输入执行,要么表现不同(作为正确的输入)。如果它表现为正确的输入,这便是成功的故障,则记录轨迹偏移和导致它的错误,在这种情况下,记录轨迹偏移处的指令中的位偏移,得到一个故障列表,该列表中记录所有成功的故障。
[0015]二、故障(漏洞)修补来自故障器的“成功故障列表”在修补器中被本地寻址。修补器用已知的加固模式替换易受攻击的指令。例如,考虑在“指令跳过”故障模型下故障器的运行,其识别在时间戳40,mov指令的跳过是成功的故障。局部对策是执行两次mov,或者添加一个比较指令来验证mov之前已经执行过。请注意,这些对策会导致重复读取,但是冗余是减少故障注入攻击的关键。
[0016]本专利技术基于GrammaTech的Ddisasm工具和Python二进制操作库实现了一个概念验证修补程序,具体为:Ddisasm工具对目标二进制文件执行指针分析,并以GrammaTech二进制文件的中间表示法本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.基于二进制重写的故障注入防护方法,其特征在于,包括:步骤1,通过故障注入的方式,模拟目标二进制文件在该故障模型下的故障,并产生一个易受攻击的列表;步骤2,利用局部保护策略修补故障列表中易受攻击的指令,获得修补后的二进制文件;步骤3,对修补后的二进制文件重复步骤1和步骤2的操作,直到不再有新的故障出现。2.根据权利要求1所述的基于二进制重写的故障注入防护方法,其特征在于,所述步骤2通过以下方式实现:采用Ddisasm工具对目标二进制文件执行指针分析,并以GrammaTech二进制文件的中间表示法的形式生成中间表示,然后通过Python GTIRB库对中间表示进行操作...

【专利技术属性】
技术研发人员:胡鹏飞赵斌郝立鹏潘润宇钟方天底晓强
申请(专利权)人:山东大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1