一种基于寄存器随机化和常数致盲的隐式常量防御策略制造技术

技术编号:24122260 阅读:32 留言:0更新日期:2020-05-13 03:26
一种基于寄存器随机化和常数致盲的隐式常量防御策略。用于防御利用隐式常量的gadget攻击,属于软件安全领域。首先,分析即时编译器的工作原理,从代码缓存中筛选用到的寄存器,剖析寄存器的使用范围,分类和作用,最终决断出所有可以进行随机化的寄存器;其次,对可用于随机化的寄存器,设计置换规则算法,建立置换寄存器对;其次,对不同的代码段进行寄存器置换,同时遵守函数的调用约定,在调用前后分别进行随机化还原和再随机化处理;接着,对随机化后动态生成的代码进行常数致盲操作,用异或方式去除剩余有害常量。

【技术实现步骤摘要】
一种基于寄存器随机化和常数致盲的隐式常量防御策略
本专利技术属于计算机
尤其是软件安全
本专利技术提出了一种基于寄存器随机化和常数致盲的隐式常量防御策略。能够有效的削减即时编译器的代码缓存中有害隐式常量的数量,使得攻击者难以预测Gadget的生成。
技术介绍
现代生活中,互联网成为了生活的必需品。而浏览器以及浏览器组件的广泛使用,使其成为攻击者的目标之一。为了提高运行JavaScript(JS)程序的性能,现代浏览器采用即时编译机制将频繁执行的JS代码转换为本机代码。但是,攻击者可能会滥用此机制来注入启动ROP攻击的gadget(小工具)。虽然现代浏览器已经部署了很多防御措施来抵御攻击,但都已被证明存在缺陷而导致被绕过。攻击者的手段也千变万化,其中利用隐式常量的ROP攻击就是攻击者常用且危害较大的一种攻击方式,严重威胁着浏览器以及用户的安全。ROP,即返回导向编程,一种基于代码复用技术的攻击,它较为常见且具有相当破坏力。攻击者通过某种手段,比如内存泄漏等,从系统中提取出可以利用的gadget,这些指令片段一般都是以ret结尾,或者是条件跳转指令。通过将它们有组织的串接在一起,就可以形成达成攻击所需要的程序,然后通过控制栈指针寄存器的值来控制程序执行流。目前已经证明ROP是图灵完备的。也就是说,通过ROP,攻击者可以完成他想完成的几乎所有的操作。针对这些问题的一个有效解决方案是扰乱即时编译机制的可预测性。通过在即时编译器的代码缓存中削减或隐藏有害隐式常量的数量,以此来提高攻击者寻找合适Gadget的难度,也就是提高攻击成本。但实际上,隐式常量的数量会非常多,将其全部隐藏或削减,将会引入额外的处理代码。结果反而引入了额外的性能开销和空间开销,甚至抵消了即时编译机制带来的性能提升。因此,本专利技术的主要目标是研究一种能够在扰乱即时编译器可预测性的同时,最大程度上削减隐式常量的数量,并带来可接受的性能开销。
技术实现思路
一种基于寄存器随机化和常数致盲的隐式常量防御策略。首先,分析即时编译器的工作原理,从代码缓存中筛选用到的寄存器,剖析寄存器的使用范围,分类和作用,最终决断出所有可以进行随机化的寄存器;其次,对可用于随机化的寄存器,设计置换规则算法,建立置换寄存器对;其次,对不同的代码段进行寄存器置换,同时遵守函数的调用约定,在调用前后分别进行随机化还原和再随机化处理;接着,对随机化后动态生成的代码进行常数致盲操作,用异或方式去除剩余常量。针对以上问题,本专利技术的工作和贡献如下:优选地,对代码缓存中用到的寄存器,确定寄存器的使用和分类。每个通用寄存器应该根据其在微体系结构中的特殊用途来区别对待。对于64位操作数,可用寄存器应包括RAX,RBX,RCX,RDX,RDI,RSI,RBP,RSP和R8-R15。其中RSP和RBP分别用作堆栈指针和堆栈帧寄存器,不能够被随便替代,应该被排除在置换规则之外。其中寄存器的确定需要通过提前对代码缓存中用到的寄存器做总结,必须通过细致科学的代码审计,挖掘即时编译器的寄存器使用规则。不同的现代浏览器使用的即时编译机制虽然在原理上上大致相同的,但寄存器的使用存在着些许区别,所以要根据不同的应用环境做区分。在对动态生成代码运用寄存器随机化方案的时候,函数之间的调用约定应该得到遵守。函数的返回值应该被保存在正确的寄存器中。优选地,设计合理的置换算法。我们选择通过将需要用到的14个寄存器分成两组,随机选取未被使用的寄存器替换正在使用的寄存器,组成寄存器对。优选地,对指令中的寄存器根据选定的寄存器置换规则进行随机地置换。为了提高随机化的熵值,选择对不同的代码块进行不同的寄存器置换。为此,需要多次重复置换规则的选取操作。同时也可以自定义选择需要置换的寄存器对数。当置换完成后,应该考虑遵守函数的调用约定。在代码缓存里的call指令前后各使用一次本块代码内所应有的置换规则。在调用call指令之前接触随机化,在指令之后再使用相同置换规则随机化。优选地,对随机化后动态生成的代码进行常数致盲操作,用异或方式去除剩余常量。附图说明图1为本专利技术基于寄存器随机化和常数致盲的流程示意图图2为本专利技术基于寄存器置换规则的示意图图3为本专利技术基于常数致盲的规则示意图具体实施方式本专利技术具体包括以下步骤:1)确定寄存器的使用和分类,每个通用寄存器应该根据其在微体系结构中的特殊用途来区别对待。在确定置换规则之前,函数之间的调用约定应该得到遵守;2)设计合理的寄存器置换算法。为了让置换规则具有一定的随机性,在寄存器置换前,动态地选择置换规则。用作特殊用途的寄存器,如栈指针寄存器,应该被置换规则排除在外,以免破坏特定指令的运行环境;3)对指令中的寄存器根据选定的寄存器置换规则进行随机地置换。其中可以自主的选择寄存器置换的对数,不同置换规则的选取将会影响置换后有害隐式常量的留存数量;4)对随机化后动态生成的代码进行常数致盲操作,用两个数异或方式去除剩余的有害常量。步骤1)确定寄存器的使用和分类。首先需要对即时编译器的代码缓存进行分析,从代码缓存中提取出用到的寄存器。对于普通的寄存器分配,编译器使用寄存器分配类作为抽象层,按顺序分配寄存器。对于调用函数,编译器严格遵循ABI,在系统上将遵循x86-64快速调用转换使用rdi,rsi作为参数。但在调用之前,编译器生成的代码一般保存上述8个寄存器和xmm0~xmm1415个浮点寄存器。并生成代码,在调用后恢复它们。当确定寄存器之后,通过在64位模式下扩展的寄存器和其他通用寄存器之间的置换,改变隐式常量的值。步骤2)确定置换算法。以64位为例,我们需要用到的寄存器有16个,分别是RAX,RBX,RCX,RDX,RDI,RSI,R8,R9,R10,R11,R12,R13,R14,R15,RBP和RSP。其中RBP,RSP用于存储堆栈指针和帧指针的值,并且不能被替换。所以我们将上述寄存器分为两组A[RAX,RBX,RCX,RDX,RDI,RSI],B[R8,R9,R10,R11,R12,R13,R14,R15]。设置标志位数组C[14],用于表示该寄存器是否被用过。参照图2,首选需要确定需要置换的寄存器对数,根据置换算法得出需要进行置换的寄存器对。步骤3)对指令中的寄存器根据选定的寄存器置换规则进行随机地置换。为了提高随机化的熵值,选择对不同的代码块进行不同的寄存器置换。为此,需要多次重复置换规则的选取操作。同时也可以自定义选择需要置换的寄存器对数。当置换完成后,应该考虑遵守函数的调用约定。在代码缓存里的call指令前后各使用一次本块代码内所应有的置换规则。在调用call指令之前接触随机化,在指令之后再使用相同置换规则随机化。步骤4)对随机化后动态生成的代码进行常数致盲操作,用两个数异或方式去除剩余常量。首先需要找到所有包含隐式常量的指令,然后判断隐式常量中管是否包含ret指令的编码,如果有,则认为是有害隐式常本文档来自技高网
...

【技术保护点】
1.一种基于寄存器随机化和常数致盲的隐式常量防御策略。其特征是确定寄存器的使用范围和函数之间的调用约定;接着,设计置换算法,选取合适的置换规则;接着对指令中的寄存器根据选定的寄存器置换规则进行随机地置换;接着,对置换后的代码缓存的仍然存在的常数进行常数致盲。/n

【技术特征摘要】
1.一种基于寄存器随机化和常数致盲的隐式常量防御策略。其特征是确定寄存器的使用范围和函数之间的调用约定;接着,设计置换算法,选取合适的置换规则;接着对指令中的寄存器根据选定的寄存器置换规则进行随机地置换;接着,对置换后的代码缓存的仍然存在的常数进行常数致盲。


2.根据权利要求1所描述的一种基于寄存器随机化和常数致盲的隐式常量防御策略,其特征包括以下几个步骤:
1)确定寄存器的使用和分类,每个通用寄存器应该根据其在微体系结构中的特殊用途来区别对待。在确定置换规则之前,函数之间的调用约定应该得到遵守;
2)设计合理的寄存器置换算法。为了让置换规则具有一定的随机性,在寄存器置换前,动态地选择置换规则。用作特殊用途的寄存器,如栈指针寄存器,应该被置换规则排除在外,以免破坏特定指令的运行环境;
3)对指令中的寄存器根据选定的寄存器置换规则进行随机地置换。其中可以自主的选择寄存器置换的对数,不同置换规则的选取将会影响置换后有害隐式常量的留存数量;
4)对置换后的代码缓存中仍剩余的常量进行常数致盲操作。采用两个数异或的方式隐藏剩余的隐式常量。


3.根据权利要求2所述的一种基于寄存器随机化和常数致盲的隐式常量防御策略,其特征是步骤1)中,对代码缓存中用到的寄存器,确定寄存器的使用和分类。每个通用寄存器应该根据其在微体系结构中的特殊用途来区别对待。对于64位操作数,可用寄存器应包括RAX,RBX,RCX,RDX,RDI,RSI,RBP,RSP和R8-R15。其中RSP和RBP分别用作堆栈指针和堆栈帧寄存器,不能...

【专利技术属性】
技术研发人员:周国强苗响戴桂兰李涛
申请(专利权)人:南京邮电大学
类型:发明
国别省市:江苏;32

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

1