一种硬件辅助抗代码复用攻击防御系统及方法转让专利

申请号 : CN201710832254.3

文献号 : CN107590385B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张吉良齐斌航王湘奇

申请人 : 湖南大学

摘要 :

本发明公开了一种硬件辅助抗代码复用攻击防御系统及方法,其中防御系统包括预处理模块、缓存、内存、CPU和加密解密架构,所述加密解密架构包括PUF模块、第一密钥寄存器、第一长度寄存器、第二密钥寄存器、第二长度寄存器、PUF加密模块、汉明距离编码模块、汉明距离解码模块、解压缩模块和判决模块。本发明利用程序返回地址与密钥间的汉明距离并匹配来抵抗ROP攻击;由于对汉明距离进行了编码操作,消除了以往工作中攻击者可通过选择明文攻击的方式来猜测由PUF模块产生的密钥这一安全性问题,因而安全性高;同时,将指令级别的数据隐藏技术应用于JOP攻击防御中,性能开销低,无需修改指令集,通用性好,安全性高。

权利要求 :

1.一种硬件辅助抗代码复用攻击防御系统,其特征在于,包括预处理模块、缓存(1)、内存(2)、CPU(3)和加密解密架构(4),其中,

预处理模块:在程序被加载进内存(2)前将程序源代码中所有jmp指令的目的地址处的指令、所有call指令的目的地址处的指令传送给加密解密架构(4);在程序执行时从缓存(1)中读取指令;

内存(2):在程序执行时实时将程序指令传送给缓存(1);

加密解密架构(4)在程序加载到内存(2)前执行以下操作:在接收到jmp指令的目的地址处的指令和call指令的目的地址处的指令时产生第一密钥和第二密钥;计算call指令的目的地址处的指令与第二密钥的汉明距离、jmp指令的目的地址处的指令与第二密钥的汉明距离;将call指令目标地址处的指令进行压缩并隐藏对应的汉明距离;将jmp指令目标地址处的指令进行压缩并隐藏对应的汉明距离;将压缩并隐藏有汉明距离的伪指令放回原始指令处;

加密解密架构(4)在程序执行call指令时执行以下操作:计算返回地址与第一密钥之间的汉明距离并将该汉明距离编码,将编码后的汉明距离作为参数存入栈中;将call指令的目的地址处的指令解压缩得到解压缩后的指令与解压缩后的汉明距离;计算解压缩后的指令与第二密钥之间的汉明距离并将该汉明距离与解压缩后的汉明距离进行对比;若对比结果为相同则call指令正常执行;若对比结果为不相同或解压缩失败,则程序产生异常并判断出存在攻击行为;

加密解密架构(4)在程序执行jmp指令时执行以下操作:将jmp指令的目的地址处的指令解压缩得到解压缩后的指令与解压缩后的汉明距离;计算解压缩后的指令与第二密钥之间的汉明距离并将该汉明距离与解压缩后的汉明距离进行对比;若对比结果为相同则jmp指令正常执行;若对比结果为不相同或解压缩失败,则程序产生异常并判断出存在攻击行为;

加密解密架构(4)在程序执行ret指令时执行以下操作:计算ret指令的目的地址与第一密钥之间的汉明距离;将栈中编码过的汉明距离解码;对比计算得到的汉明距离与解码后的汉明距离,若对比结果为相同则ret指令正常执行;若对比结果为不相同,则程序产生异常并判断出存在攻击行为。

2.如权利要求1所述的硬件辅助抗代码复用攻击防御系统,其特征在于,所述加密解密架构(4)包括PUF模块(401)、第一密钥寄存器(402)、第一长度寄存器(403)、第二密钥寄存器(404)、第二长度寄存器(405)、PUF加密模块(406)、汉明距离编码模块(407)、汉明距离解码模块(408)、解压缩模块(409)和判决模块(410),其中,PUF模块(401):用于产生第一密钥及第一密钥的长度,产生第二密钥及第二密钥的长度;第一密钥保存在第一密钥寄存器(402)内,第二密钥保存在第二密钥寄存器(404)内,第一密钥的长度保存在第一长度寄存器(403)内,第二密钥的长度保存在第二长度寄存器(405)内;

PUF加密模块(406):用于在程序加载到内存(2)前计算call指令的目的地址处的指令与第二密钥的汉明距离、jmp指令的目的地址处的指令与第二密钥的汉明距离;将call指令目标地址处的指令进行压缩并隐藏对应的汉明距离;将jmp指令目标地址处的指令进行压缩并隐藏对应的汉明距离;将压缩并隐藏有汉明距离的伪指令放回原始指令处;

汉明距离编码模块(407):用于在执行call指令时计算返回地址与第一密钥之间的汉明距离并将该汉明距离编码,将编码后的汉明距离作为参数存入栈中;

汉明距离解码模块(408):用于在执行ret指令时计算ret指令的目的地址与第一密钥之间的汉明距离;将栈中编码过的汉明距离解码;

解压缩模块(409):用于在执行call指令时将call指令的目的地址处的指令解压缩得到解压缩后的指令与解压缩后的汉明距离;计算解压缩后的call指令的目的地址处的指令与第二密钥之间的汉明距离;用于在执行jmp指令时将jmp指令的目的地址处的指令解压缩得到解压缩后的jmp指令的目的地址处的指令与解压缩后的汉明距离;计算解压缩后的jmp指令的目的地址处的指令与第二密钥之间的汉明距离;

判决模块(410):用于对比解压缩后的call指令的目的地址处的指令与第二密钥之间的汉明距离及解压缩call指令后得到的汉明距离,若对比结果为相同则call指令正常执行;用于对比解压缩后的jmp指令的目的地址处的指令与第二密钥之间的汉明距离及解压缩jmp指令时得到的汉明距离,若对比结果为相同则jmp指令正常执行;用于对比ret指令目的地址与第一密钥间的汉明距离与栈中解码后的汉明距离,若对比结果为相同则ret指令正常执行。

3.如权利要求1或2所述的硬件辅助抗代码复用攻击防御系统,其特征在于,第一密钥和第二密钥为不同的密钥。

4.一种利用如权利要求2所述的硬件辅助抗代码复用攻击防御系统进行抗代码复用攻击防御的方法,其特征在于,包括以下步骤:

a).预处理模块收集程序源代码中所有jmp指令的目的地址处的指令、所有call指令的目的地址处的指令;

b).CPU(3)调用PUF模块(401)产生第一密钥及第一密钥的长度、第二密钥及第二密钥的长度;第一密钥保存在第一密钥寄存器(402)内,第二密钥保存在第二密钥寄存器(404)内,第一密钥的长度保存在第一长度寄存器(403)内,第二密钥的长度保存在第二长度寄存器(405)内;

c).PUF加密模块(406)计算call指令的目的地址处的指令与第二密钥的汉明距离、jmp指令的目的地址处的指令与第二密钥的汉明距离;将call指令目标地址处的指令进行压缩并隐藏对应的汉明距离;将jmp指令目标地址处的指令进行压缩并隐藏对应的汉明距离;将压缩并隐藏有汉明距离的伪指令放回原始指令处;

d).程序加载到内存(2)并执行;

e).若程序执行到call指令,则汉明距离编码模块(407)计算call指令的返回地址与第一密钥之间的汉明距离并将该汉明距离编码,将编码后的汉明距离作为参数存入栈中;随后,解压缩模块(409)将call指令的目的地址处的指令解压缩得到解压缩后的call指令的目的地址处的指令与解压缩后的汉明距离;计算解压缩后的call指令的目的地址处的指令与第二密钥之间的汉明距离;最后,判决模块(410)对比解压缩后的call指令的目的地址处的指令与第二密钥之间的汉明距离及解压缩call指令得到的汉明距离,若对比结果为相同则call指令正常执行;若对比结果为不相同或解压缩失败,则程序产生异常并判断出存在攻击行为;

f).若程序执行到jmp指令,则解压缩模块(409)将jmp指令的目的地址处的指令解压缩得到解压缩后的jmp指令的目的地址处的指令与解压缩后的汉明距离;计算解压缩后的jmp指令的目的地址处的指令与第二密钥之间的汉明距离;随后,判决模块(410)对比解压缩后的jmp指令的目的地址处的指令与第二密钥之间的汉明距离及解压缩jmp指令得到的汉明距离,若对比结果为相同则jmp指令正常执行;若对比结果为不相同或解压缩失败,则程序产生异常并判断出存在攻击行为;

g).若程序执行到ret指令,则汉明距离解码模块(408)计算ret指令的目的地址与第一密钥之间的汉明距离;并将栈中编码过的汉明距离解码;随后,判决模块(410)对比ret指令目的地址与第一密钥间的汉明距离与栈中解码后的汉明距离,若对比结果为相同则ret指令正常执行;若对比结果为不相同或解压缩失败,则程序产生异常并判断出存在攻击行为。

说明书 :

一种硬件辅助抗代码复用攻击防御系统及方法

技术领域

[0001] 本发明属于软件安全技术领域,特别涉及一种硬件辅助抗代码复用攻击防御系统及方法。

背景技术

[0002] 现在流行的代码复用攻击根据构造代码片段的结尾不同主要分为ROP攻击和JOP攻击。ROP攻击主要以ret指令作为结尾,JOP攻击则以jmp指令作为结尾。自从2007年HovavShacham提出代码复用攻击并证明ROP攻击是图灵完备后,越来越多的研究学者开始对代码复用攻击展开深入研究,并提出了很多防御机制。这些防御机制主要分为两类:基于软件的防御机制和基于硬件辅助的防御机制。
[0003] (1)基于软件的防御技术
[0004] 2009年,Davi等人提出了一种新型侦测ROP的工具:ROPdefender。ROPdefender由几个影子栈和一个侦测单元组成,通过对程序的返回地址进行检查来抵抗ROP攻击,其不需要源代码或调试信息,易于部署,但性能开销过大。
[0005] 2010年,Chen等人提出了检测ret指令的防御机制,其通过检查ret指令来探测潜在的ROP攻击。同年,Li等人通过重写二进制的方法去消除那些可能被用作gadgets的代码片段的方式来防御ROP攻击。
[0006] 在2013年,Yao等人提出了一个易于实现的JOP-alarm算法,该算法通过计算分值去评估潜在的JOP攻击的可能性,并且可以检测到可能存在恶意行为的程序,但该侦测算法无法应用到各种类型的CRA中。
[0007] 2015年,Kim等人提出了target shepherding防御机制,该机制通过生成一些检测代码去判断程序跳转的目标地址是否合法,并在运行时检查程序控制流是否被JOP攻击篡改。
[0008] 上述这些基于软件的防御机制虽然容易部署,但其存在性能开销过大等问题。
[0009] (2)硬件辅助的防御技术
[0010] 2009年,Francillon等人提出一种保护嵌入式系统不受控制流攻击的防御技术,该技术通过将堆栈分离技术和基于指令的内存控制技术相结合,可以对返回地址进行保护,从而有效的防止控制流被恶意篡改,但该方法需要修改ISA(程序指令集)。
[0011] 2012年,Mehmet Kayaalp等人提出了Branch Regulations(BR)防御机制,这是一个轻量级的防御机制,其不需要编译器和调试信息,而是基于硬件在运行时对程序进行检测。该机制限制了分支指令的目的地址,把目的地址限制在同一个函数的内部或一个函数的开头,解决了CFI的分析复杂性和运行时开销大等问题。但是,当一个函数之中存在足够多的可利用的代码片段时,攻击者可以在部署BR的情况下完成攻击。
[0012] 2014年,Davi等人提出了一种硬件辅助的控制流完整性检测的扩展方法(HAFIX)。这个方法可以高效并安全地访问控制流完整性数据,并提供了一个新的专用的CFI指令集。
该机制利用硬件大大提高了控制流检测的效率,但是需要修改ISA,通用性较差。
[0013] 2016年,Qiu等人提出一种基于物理不可克隆函数的轻量级线性加解密防御代码复用攻击的防御机制。该机制不需要额外的软件处理和扩展指令集,产生极低的性能开销。但是该机制存在密钥泄露等安全性问题。
[0014] 综上可知,基于软件的防御机制性能开销过大,基于硬件的防御机制虽可有效降低性能开销,但需要修改ISA,存在安全性问题等。

发明内容

[0015] 现有的基于软件的抗代码复用攻击防御机制性能开销过大,基于硬件的抗代码复用攻击防御机制虽可有效降低性能开销,但需要修改指令集,通用性差,存在密钥泄漏的安全性问题等。本发明的目的在于,针对上述现有技术的不足,提供一种硬件辅助抗代码复用攻击防御系统及方法,性能开销低,无需修改指令集,通用性好,安全性高。
[0016] 为解决上述技术问题,本发明所采用的技术方案是:
[0017] 一种硬件辅助抗代码复用攻击防御系统,其特点是包括预处理模块、缓存、内存、CPU和加密解密架构,其中,
[0018] 预处理模块:在程序被加载进内存前将程序源代码中所有jmp指令的目的地址处的指令、所有call指令的目的地址处的指令传送给加密解密架构;在程序执行时从缓存中读取指令;
[0019] 内存:在程序执行时实时将程序指令传送给缓存;
[0020] 加密解密架构在程序加载到内存前执行以下操作:在接收到jmp指令的目的地址处的指令和call指令的目的地址处的指令时产生第一密钥和第二密钥;计算call指令的目的地址处的指令与第二密钥的汉明距离、jmp指令的目的地址处的指令与第二密钥的汉明距离;将call指令原始目标地址处的指令进行压缩并隐藏对应的汉明距离;将jmp指令原始目标地址处的指令进行压缩并隐藏对应的汉明距离;将压缩并隐藏有汉明距离的伪指令放回原始指令处;
[0021] 加密解密架构在程序执行call指令时执行以下操作:计算返回地址与第一密钥之间的汉明距离并将该汉明距离编码,将编码后的汉明距离作为参数存入栈中;将call指令的目的地址处的指令解压缩得到解压缩后的指令与解压缩后的汉明距离;计算解压缩后的指令与第二密钥之间的汉明距离并将该汉明距离与解压缩后的汉明距离进行对比;若对比结果为相同则call指令正常执行;若对比结果为不相同或解压缩失败,则程序产生异常并判断出存在攻击行为;
[0022] 加密解密架构在程序执行jmp指令时执行以下操作:将jmp指令的目的地址处的指令解压缩得到解压缩后的指令与解压缩后的汉明距离;计算解压缩后的指令与第二密钥之间的汉明距离并将该汉明距离与解压缩后的汉明距离进行对比;若对比结果为相同则jmp指令正常执行;若对比结果为不相同或解压缩失败,则程序产生异常并判断出存在攻击行为;
[0023] 加密解密架构在程序执行ret指令时执行以下操作:计算ret指令的目的地址与第一密钥之间的汉明距离;将栈中编码过的汉明距离解码;对比计算得到的汉明距离与解码后的汉明距离,若对比结果为相同则ret指令正常执行;若对比结果为不相同或解压缩失败,则程序产生异常并判断出存在攻击行为。
[0024] 作为一种优选方式,所述加密解密架构包括PUF模块、第一密钥寄存器、第一长度寄存器、第二密钥寄存器、第二长度寄存器、PUF加密模块、汉明距离编码模块、汉明距离解码模块、解压缩模块和判决模块,其中,
[0025] PUF模块:用于产生第一密钥及第一密钥的长度,产生第二密钥及第二密钥的长度;第一密钥保存在第一密钥寄存器内,第二密钥保存在第二密钥寄存器内,第一密钥的长度保存在第一长度寄存器内,第二密钥的长度保存在第二长度寄存器内;
[0026] PUF加密模块:用于在程序加载到内存前计算call指令的目的地址处的指令与第二密钥的汉明距离、jmp指令的目的地址处的指令与第二密钥的汉明距离;将call指令原始目标地址处的指令进行压缩并隐藏对应的汉明距离;将jmp指令原始目标地址处的指令进行压缩并隐藏对应的汉明距离;将压缩并隐藏有汉明距离的伪指令放回原始指令处;
[0027] 汉明距离编码模块:用于在执行call指令时计算返回地址与第一密钥之间的汉明距离并将该汉明距离编码,将编码后的汉明距离作为参数存入栈中;
[0028] 汉明距离解码模块:用于在执行ret指令时计算ret指令的目的地址与第一密钥之间的汉明距离;将栈中编码过的汉明距离解码;
[0029] 解压缩模块:用于在执行call指令时将call指令的目的地址处的指令解压缩得到解压缩后的指令与解压缩后的汉明距离;计算解压缩后的call指令的目的地址处的指令与第二密钥之间的汉明距离;用于在执行jmp指令时将jmp指令的目的地址处的指令解压缩得到解压缩后的jmp指令的目的地址处的指令与解压缩后的汉明距离;计算解压缩后的jmp指令的目的地址处的指令与第二密钥之间的汉明距离;
[0030] 判决模块:用于对比解压缩后的call指令的目的地址处的指令与第二密钥之间的汉明距离及解压缩call指令得到的汉明距离,若对比结果为相同则call指令正常执行;用于对比解压缩后的jmp指令的目的地址处的指令与第二密钥之间的汉明距离及解压缩jmp指令得到的汉明距离,若对比结果为相同则jmp指令正常执行;用于对比ret指令目的地址与第一密钥间的汉明距离与栈中解码后的汉明距离,若对比结果为相同则ret指令正常执行。
[0031] 作为一种优选方式,第一密钥和第二密钥为不同的密钥。
[0032] 基于同一个发明构思,本发明还提供了一种利用所述的硬件辅助抗代码复用攻击防御系统进行抗代码复用攻击防御的方法,包括以下步骤:
[0033] a).预处理模块收集程序源代码中所有jmp指令的目的地址处的指令、所有call指令的目的地址处的指令;
[0034] b).CPU调用PUF模块产生第一密钥及第一密钥的长度、第二密钥及第二密钥的长度;第一密钥保存在第一密钥寄存器内,第二密钥保存在第二密钥寄存器内,第一密钥的长度保存在第一长度寄存器内,第二密钥的长度保存在第二长度寄存器内;
[0035] c).PUF加密模块计算call指令的目的地址处的指令与第二密钥的汉明距离、jmp指令的目的地址处的指令与第二密钥的汉明距离;将call指令原始目标地址处的指令进行压缩并隐藏对应的汉明距离;将jmp指令原始目标地址处的指令进行压缩并隐藏对应的汉明距离;将压缩并隐藏有汉明距离的伪指令放回原始指令处;
[0036] d).程序加载到内存并执行;
[0037] e).若程序执行到call指令,则汉明距离编码模块计算call指令的返回地址与第一密钥之间的汉明距离并将该汉明距离编码,将编码后的汉明距离作为参数存入栈中;随后,解压缩模块将call指令的目的地址处的指令解压缩得到解压缩后的call指令的目的地址处的指令与解压缩后的汉明距离;计算解压缩后的call指令的目的地址处的指令与第二密钥之间的汉明距离;最后,判决模块对比解压缩后的call指令的目的地址处的指令与第二密钥之间的汉明距离及解压缩call指令得到的汉明距离,若对比结果为相同则call指令正常执行;若对比结果为不相同或解压缩失败,则程序产生异常并判断出存在攻击行为;
[0038] f).若程序执行到jmp指令,则解压缩模块将jmp指令的目的地址处的指令解压缩得到解压缩后的jmp指令的目的地址处的指令与解压缩后的汉明距离;计算解压缩后的jmp指令的目的地址处的指令与第二密钥之间的汉明距离;随后,判决模块对比解压缩后的jmp指令的目的地址处的指令与第二密钥之间的汉明距离及解压缩jmp指令得到的汉明距离,若对比结果为相同则jmp指令正常执行;若对比结果为不相同或解压缩失败,则程序产生异常并判断出存在攻击行为;
[0039] g).若程序执行到ret指令,则汉明距离解码模块计算ret指令的目的地址与第一密钥之间的汉明距离;并将栈中编码过的汉明距离解码;随后,判决模块对比ret指令目的地址与第一密钥间的汉明距离与栈中解码后的汉明距离,若对比结果为相同则ret指令正常执行;若对比结果为不相同或解压缩失败,则程序产生异常并判断出存在攻击行为。
[0040] 与现有技术相比,本发明利用程序返回地址与密钥间的汉明距离并匹配来抵抗ROP攻击;由于对汉明距离进行了编码操作,消除了以往工作中攻击者可通过选择明文攻击的方式来猜测由PUF模块产生的密钥这一安全性问题,因而安全性高;同时,将指令级别的数据隐藏技术应用于JOP攻击防御中,性能开销低,无需修改指令集,通用性好,安全性高。

附图说明

[0041] 图1为本发明防御系统原理图。
[0042] 图2为本发明防御机制架构图。
[0043] 图3为本发明防御方法流程图。
[0044] 图4为查找表结构示意图。
[0045] 图5为指令压缩及汉明距离隐藏流程说明例图。
[0046] 图6为指令解压缩及汉明距离匹配流程说明例图。
[0047] 其中,1为缓存,2为内存,3为CPU,301为IR寄存器,4为加密解密架构,401为PUF模块,402为第一密钥寄存器,403为第一长度寄存器,404为第二密钥寄存器,405为第二长度寄存器,406为PUF加密模块,407为汉明距离编码模块,408为汉明距离解码模块,409为解压缩模块,410为判决模块,411为仲裁模块,412为查找表。

具体实施方式

[0048] 如图1所示,本发明硬件辅助抗代码复用攻击防御系统包括预处理模块、缓存1、内存2、CPU3和加密解密架构4,其中,
[0049] 预处理模块:在程序被加载进内存2前将程序源代码中所有jmp指令的目的地址处的指令、所有call指令的目的地址处的指令传送给加密解密架构4;在程序执行时从缓存1中读取指令;
[0050] 内存2:在程序执行时实时将程序指令传送给缓存1;
[0051] 加密解密架构4在程序加载到内存2前执行以下操作:在接收到jmp指令的目的地址处的指令和call指令的目的地址处的指令时产生第一密钥key_1和第二密钥key_2;计算call指令的目的地址处的指令与第二密钥的汉明距离、jmp指令的目的地址处的指令与第二密钥的汉明距离;将call指令原始目标地址处的指令进行压缩并隐藏对应的汉明距离;将jmp指令原始目标地址处的指令进行压缩并隐藏对应的汉明距离;将压缩并隐藏有汉明距离的伪指令放回原始指令处;
[0052] 加密解密架构4在程序执行call指令时执行以下操作:计算返回地址与第一密钥之间的汉明距离并将该汉明距离编码,将编码后的汉明距离作为参数存入栈中;将call指令的目的地址处的指令解压缩得到解压缩后的指令与解压缩后的汉明距离;计算解压缩后的指令与第二密钥之间的汉明距离并将该汉明距离与解压缩后的汉明距离进行对比;若对比结果为相同则call指令正常执行;若对比结果为不相同或解压缩失败,则程序产生异常并判断出存在攻击行为;
[0053] 加密解密架构4在程序执行jmp指令时执行以下操作:将jmp指令的目的地址处的指令解压缩得到解压缩后的指令与解压缩后的汉明距离;计算解压缩后的指令与第二密钥之间的汉明距离并将该汉明距离与解压缩后的汉明距离进行对比;若对比结果为相同则jmp指令正常执行;若对比结果为不相同或解压缩失败,则程序产生异常并判断出存在攻击行为;
[0054] 加密解密架构4在程序执行ret指令时执行以下操作:计算ret指令的目的地址与第一密钥之间的汉明距离;将栈中编码过的汉明距离解码;对比计算得到的汉明距离与解码后的汉明距离,若对比结果为相同则ret指令正常执行;若对比结果为不相同或解压缩失败,则程序产生异常并判断出存在攻击行为。
[0055] 所述加密解密架构4包括PUF模块401、第一密钥寄存器402、第一长度寄存器403、第二密钥寄存器404、第二长度寄存器405、PUF加密模块406、汉明距离编码模块407、汉明距离解码模块408、解压缩模块409和判决模块410,其中,
[0056] PUF模块401:用于产生第一密钥key_1及第一密钥key_1的长度key_length_1,产生第二密钥key_2及第二密钥key_2的长度key_length_2;第一密钥保存在第一密钥寄存器402内,第二密钥保存在第二密钥寄存器404内,第一密钥的长度保存在第一长度寄存器403内,第二密钥的长度保存在第二长度寄存器405内;
[0057] PUF加密模块406:用于在程序加载到内存2前计算call指令的目的地址处的指令与第二密钥的汉明距离、jmp指令的目的地址处的指令与第二密钥的汉明距离;将call指令原始目标地址处的指令进行压缩并隐藏对应的汉明距离;将jmp指令原始目标地址处的指令进行压缩并隐藏对应的汉明距离;将压缩并隐藏有汉明距离的伪指令放回原始指令处;
[0058] 汉明距离编码模块407:用于在执行call指令时计算返回地址与第一密钥之间的汉明距离并将该汉明距离编码,将编码后的汉明距离作为参数存入栈中;
[0059] 汉明距离解码模块408:用于在执行ret指令时计算ret指令的目的地址与第一密钥之间的汉明距离;将栈中编码过的汉明距离解码;
[0060] 解压缩模块409:用于在执行call指令时将call指令的目的地址处的指令解压缩得到解压缩后的指令与解压缩后的汉明距离;计算解压缩后的call指令的目的地址处的指令与第二密钥之间的汉明距离;用于在执行jmp指令时将jmp指令的目的地址处的指令解压缩得到解压缩后的jmp指令的目的地址处的指令与解压缩后的汉明距离;计算解压缩后的jmp指令的目的地址处的指令与第二密钥之间的汉明距离;
[0061] 判决模块410:用于对比解压缩后的call指令的目的地址处的指令与第二密钥之间的汉明距离及解压缩call指令得到的汉明距离,若对比结果为相同则call指令正常执行;用于对比解压缩后的jmp指令的目的地址处的指令与第二密钥之间的汉明距离及解压缩jmp指令得到的汉明距离,若对比结果为相同则jmp指令正常执行;用于对比ret指令目的地址与第一密钥间的汉明距离与栈中解码后的汉明距离,若对比结果为相同则ret指令正常执行。
[0062] PUF为物理不可克隆函数,通过PUF模块401产生的密钥具有不可克隆性和实时性。第一密钥寄存器402、第一长度寄存器403、第二密钥寄存器404、第二长度寄存器405为四个不同的寄存器。第一密钥寄存器402和第二密钥寄存器404分别保存由PUF模块401产生的两个不同的响应作为密钥。其中,第一密钥将被用于计算ret指令的目的地址的汉明距离和call指令返回地址的汉明距离的计算与编码和解码。第二密钥将被用于对jmp指令和call指令的目标地址处的指令的汉明距离计算。第一密钥和第二密钥为不同的密钥。
[0063] 本申请之所以提出分别使用两个不同的密钥来处理ROP攻击和JOP攻击,是因为在对JOP攻击的防御中,虽然当程序被加载进内存2后,其内存2中的代码是不能被修改的,但是攻击者在进行JOP攻击的过程中,通过内存2泄露和调试的方式,攻击者可能猜测出线性加密的密钥。这样一来,如果使用的是同一个密钥,攻击者就能够尝试通过获得的密钥针对ROP攻击的防御机制进行破解。使用两个不同的密钥能够很好的解决这一问题。第一长度寄存器403中保存的是在加解密过程中需要使用到的第一密钥的长度,第二长度寄存器405中保存的是在汉明距离计算过程中需要使用到的第二密钥的长度。解压缩模块409在程序执行过程中,将对被压缩并隐藏有汉明距离的指令进行解压缩和汉明距离的匹配。
[0064] 本发明提出硬件辅助的控制流完整性检验方案,以防御JOP攻击和ROP攻击,主要基于物理不可克隆函数(PUF)和数据隐藏技术,主要分为两个部分:ROP防御部分和JOP防御部分。
[0065] 本发明防御机制的基本框架如图2所示,其中仲裁模块411位于CPU3内,用于判断当前指令是否为程序控制流指令。当被读取的指令是控制流指令时,该指令的下一条指令将会被本发明提出的防御机制处理。当被读取的指令不是控制流指令时,该指令将直接交由传统的处理器进行处理。本发明提出五项操作:预处理、基于PUF的加密操作、汉明距离计算并编码操作、汉明距离解码操作和解压缩器解压操作。在程序加载到内存2前,PUF加密模块406用来压缩所有call指令和jmp指令目的地址处的指令,并将计算出的汉明距离藏入指令中。解压缩模块409用于对call指令和jmp指令的目标地址处的指令进行解压缩和验证,以抵抗JOP攻击。当程序执行call指令时,汉明距离编码模块407计算返回地址的汉明距离并编码,将编码后的汉明距离存入栈中。汉明距离解码模块408用来在ret指令执行时,计算当前的返回地址的汉明距离,并与之前存入栈中的汉明距离进行对比,以抵抗ROP攻击。
[0066] 如图3所示,本发明硬件辅助抗代码复用攻击防御方法,包括以下步骤:
[0067] a).在程序被加载进内存2之前,预处理模块通过预处理收集程序源代码中所有jmp指令的目的地址处的指令、所有call指令的目的地址处的指令。
[0068] b).CPU3调用PUF模块401产生第一密钥及第一密钥的长度、第二密钥及第二密钥的长度;第一密钥保存在第一密钥寄存器402内,第二密钥保存在第二密钥寄存器404内,第一密钥的长度保存在第一长度寄存器403内,第二密钥的长度保存在第二长度寄存器405内。
[0069] c).PUF加密模块406计算call指令的目的地址处的指令与第二密钥的汉明距离、jmp指令的目的地址处的指令与第二密钥的汉明距离;将call指令原始目标地址处的指令进行压缩并隐藏对应的汉明距离;将jmp指令原始目标地址处的指令进行压缩并隐藏对应的汉明距离;将压缩并隐藏有汉明距离的伪指令放回原始指令处。这些隐藏有汉明距离的伪指令不能直接由传统的ISA执行。本发明提出使用轻量级解码器,通过查找表412的方式来提前隐藏信息和解码指令。被解码的指令可直接由传统的ISA执行。
[0070] d).程序加载到内存2并执行。
[0071] e).若程序执行到call指令,则汉明距离编码模块407计算call指令的返回地址与第一密钥之间的汉明距离并将该汉明距离编码,将编码后的汉明距离作为参数存入栈中;随后,解压缩模块409将call指令的目的地址处的指令解压缩得到解压缩后的call指令的目的地址处的指令与解压缩后的汉明距离;计算解压缩后的call指令的目的地址处的指令与第二密钥之间的汉明距离;最后,判决模块410对比解压缩后的call指令的目的地址处的指令与第二密钥之间的汉明距离及解压缩call指令得到的汉明距离,若对比结果为相同则call指令正常执行;若对比结果为不相同或解压缩失败,则程序产生异常并判断出存在攻击行为。
[0072] f).若程序执行到jmp指令,则解压缩模块409将jmp指令的目的地址处的指令解压缩得到解压缩后的jmp指令的目的地址处的指令与解压缩后的汉明距离;计算解压缩后的jmp指令的目的地址处的指令与第二密钥之间的汉明距离;随后,判决模块410对比解压缩后的jmp指令的目的地址处的指令与第二密钥之间的汉明距离及解压缩jmp指令得到的汉明距离,若对比结果为相同则jmp指令正常执行;若对比结果为不相同或解压缩失败,则程序产生异常并判断出存在攻击行为。
[0073] g).若程序执行到ret指令,则汉明距离解码模块408计算ret指令的目的地址与第一密钥之间的汉明距离;并将栈中编码过的汉明距离解码;随后,判决模块410对比ret指令目的地址与第一密钥间的汉明距离与栈中解码后的汉明距离,若对比结果为相同则ret指令正常执行;若对比结果为不相同或解压缩失败,则程序产生异常并判断出存在攻击行为。
[0074] ROP防御部分:
[0075] 为防止攻击者通过程序中ret指令进行ROP攻击,本申请通过计算并对比ret指令的目的地址的汉明距离来抵抗ROP攻击。
[0076] 汉明距离是一个用于标志两个不同二进制字符串的差别的数值。假设x和y分别为两个长度相等的二进制字符序列,则x和y的汉明距离d(x+y)表示的是x和y对应位置上不同字符的个数,其表达式如公式(1)所示。
[0077]
[0078] 其中,i=0,1,…,n-1;x,y表示的是长度为n比特的二进制字符序列,⊕表示异或。
[0079] 汉明距离的编码过程为:在汉明距离的尾部添加2bits的0,1bit串b后,得到一个新的汉明距离HD’,然后对HD’向右循环移位n bits得到编码过的汉明距离。其中,b是截取第一密钥首部的2bits得到的。n是由第一密钥尾部3bits决定的。因为程序中的地址为32bits,所以汉明距离的范围是0到32,一共需要6bits位来存储。n是由第一密钥尾部3bits决定的,取值范围是0到7。如果将6bits长的汉明距离向右循环移动n位,那么n=0时和n=6时所得到的结果相同,n=1时和n=7时所得到的结果相同。这样会增大攻击者猜出HD的可能性。为了保证循环移位后可能的结果足够多且不会出现重复的情况,在汉明距离尾部插入2bits的b,并对长度为8bits的汉明距离向右循环移动n bits位。这样,汉明距离循环移位后的可能结果共有8种,且不存在结果重复的情况。
[0080] ROP防御机制的具体操作流程如下:
[0081] (1)在程序开始时,CPU3调用PUF模块401产生第一密钥和第二密钥,并且将其分别保存在第一密钥寄存器402和第二密钥寄存器404中。同时,第一密钥和第二密钥在加密过程中所使用到的长度len_1和len_2,将分别被保存至第一长度寄存器403和第二长度寄存器405中。其中第二密钥及其长度len_2将用于对jmp指令和call指令的汉明距离的计算。
[0082] (2)在程序执行过程当中,内存2实时地将程序指令传送给缓存1。CPU3从缓存1中读取指令,当读取的指令为非控制流指令时,CPU3直接执行该指令。当程序执行完毕时,程序正常退出。当读取的指令为jmp指令和call指令时,执行下列步骤。
[0083] (3)当程序执行call指令时,首先汉明距离编码模块407会计算call指令的返回地址与第一密钥之间的汉明距离,并将其编码,随后,将编码后的汉明距离作为参数存入栈中。之后,解压缩模块409将call指令的目的地址处的指令解压缩并匹配汉明距离,若汉明距离相同且指令能正常执行,则程序正常执行;若汉明距离不匹配,或者解压缩失败,则程序产生异常。
[0084] (4)当程序执行ret指令时,汉明距离解压模块会计算当前返回地址的汉明距离,并将栈中的编码过的汉明距离解码,随后对比两个汉明距离,若匹配,则程序正常执行;若不匹配,则程序产生异常。
[0085] JOP防御部分:
[0086] 为了防止攻击者通过程序中的间接jmp指令和间接call指令进行JOP攻击,本申请使用数据隐藏技术对程序中的jmp指令和call指令的目的地址处的指令进行指令级别的压缩。通过在压缩后的指令中隐藏汉明距离,并在程序执行时进行指令级别的解压缩和汉明距离的匹配的方式,来保证程序的控制流不被攻击者篡改。
[0087] 由于现有的操作系统在指令操作数部分提供的比特组合数远大于实际程序中出现的组合数。这使得在指令中某些特定的比特位插入隐藏信息的数据隐藏技术成为可能。例如,对于精简指令集(RISC)平台来说,其程序指令的长度为32比特。设x为程序中出现的独立指令的个数,那么这些长度为32比特的指令就可以被压缩成y比特,其中,x,y满足关系式(2)。
[0088]
[0089] 对于上述程序中的指令,每一条指令可隐藏(32-y)比特的数据。
[0090] 本申请提出在程序被加载到内存2前,对程序进行一个预处理,在这个预处理过程中,程序中所有的jmp指令和call指令的目标地址处的指令信息将会被收集。通过统计这些指令信息,针对jmp指令和call指令目标地址处的最有效的数据隐藏的方法将会被确定。
[0091] JOP防御机制的具体操作流程如下:
[0092] (1)在程序开始时,CPU3调用PUF模块401产生第一密钥和第二密钥,并且将其保存在第一密钥寄存器402和第二密钥寄存器404中。同时,第一密钥和第二密钥在加密过程中所使用到的长度len_1和len_2,将分别被保存至第一长度寄存器403和第二长度寄存器405中。其中第二密钥及其长度len_2将用于对jmp指令和call指令的汉明距离的计算。
[0093] (2)在程序被加载进内存2之前,使用软件对程序进行预处理,收集程序中所有的jmp指令和call指令目标地址处的指令信息,并将所有jmp指令和call指令目标地址处的指令的前len_2比特长度压缩至k比特(k<len_2),并生产查找表412。同时,在所有的跳转的目的地址处的指令前插入一条跳转到当前目的地址处的jmp指令。
[0094] (3)读取第二密钥寄存器404中的PUF响应第二密钥,计算原指令和第二密钥的汉明距离,并将得到的汉明距离嵌入压缩得到的(len_2-k)比特位中。并将嵌入有汉明距离的指令放回程序中原指令位置处。
[0095] (4)在所有的jmp指令和call指令的目的地址处的指令被处理完之后,程序被加载进内存2,并开始执行。
[0096] (5)在程序执行过程当中,内存2实时地将程序指令传送给缓存1。CPU3从缓存1中读取指令,当读取的指令为非控制流指令时,CPU3直接执行该指令。当程序执行完毕时,程序正常退出。当读取的指令为jmp指令和call指令时,执行下列步骤。
[0097] (6)程序跳转到jmp指令和call指令的目标地址处,当目标地址处的指令被加载进CPU3时,IR寄存器301中的内容将被传输到解压缩模块409中。
[0098] (7)解压缩模块409根据第二密钥寄存器404和第二长度寄存器405中的内容,取出从IR寄存器301中取出的指令的前len_2比特,根据查找表412查进行解压缩操作。如果查表失败,程序将异常终止并跳转到(11)。如果查表成功,将得到压缩前的原始指令以及隐藏的汉明距离,继续执行下列操作。
[0099] (8)解压缩模块409对(7)中解压缩得到的原始指令和第二密钥进行汉明距离的计算。将计算得到的汉明距离与(7)中解压缩提取出的汉明距离进行比较,如果不一致,这程序异常终止。如果一致,继续执行下列操作。
[0100] (9)解压缩模块409将解压缩后的原始指令返回给CPU3中的IR寄存器301。
[0101] (10)CPU3执行IR寄存器301中已解密的指令。如果该指令能够正常执行,跳转到(5),当该指令不能够正确执行时,程序将异常终止。当程序异常终止时,就可以判断出存在攻击行为,系统将产生警告并等待异常被处理。
[0102] 在压缩的过程中,本申请提出建立一个对应的查找表412(Look up table,LUT)来记录下压缩过程中的指令变化情况。假设通过预处理得到程序中所有jmp指令和call指令的目标地址处的独立的指令集合为S,取出S中所有指令的前L比特组成指令集合S’,S’中独立的指令数为L’,通过公式(2)可计算得到压缩后指令长度为k。则在查找表412开始的部分,建立两个L比特长度的位重映射掩码和隐藏数据掩码,位重映射掩码用于指示出在压缩和数据隐藏操作之后的指令的前L比特中的k比特被压缩后的数据。隐藏数据掩码用于指示出在压缩和数据隐藏操作中的指令的前L比特中的(n-k)比特被隐藏的数据。之后,查找表412中将包括一个由压缩后的k比特的已压缩指令和与之对应的压缩前的L位原始指令构成表结构,其中k位已压缩的操作数将作为表结构的索引。查找表412结构示意图如图4所示。
[0103] 假设指令的前6比特数据可以压缩成4比特,隐藏的数据位于比特数据中的前2比特数据。重映射掩码应设置为“001111…00”,隐藏数据掩码应设置为“1100…00”。假设原始指令为“110110”,压缩之后的指令为“1100”,那么在查找表412中需要添加一项数据“1100110110”。其中前4比特“1100”用作索引,用于查询压缩前原始数据“110110”。
[0104] 由于在数据压缩时,当k的值小于阈值k’时,压缩比例过大,造成实际指令组合数大于压缩后指令长度的组合数,进而造成压缩错误。所以压缩后的比特数k的取值应大于k’。这一点使得能够压缩出用于信息隐藏的比特位数有限。由于能够隐藏的比特位数有限,本申请仅选取隐藏的数据为jmp指令和call指令目标地址处的指令中的m位数据和第二密钥寄存器404中的前m位的汉明距离d。本申请将汉明距离d进行二进制编码后,将其隐藏进(len_2-k)比特中,其中k为压缩后的指令长度。在计算汉明距离时,k、m、len_2需满足关系式(3):
[0105] 2(len_2-k)≥m  (3)
[0106] 对于压缩及隐藏流程,假设需处理的目标地址处指令的长度为32比特,将前6比特压缩至4比特,并隐藏2比特汉明距离,如图5所示,其具体流程如下:
[0107] (1)截取32比特的原始指令的前6比特和后26比特;
[0108] (2)取(1)中输出的原始指令的前6比特中数据中的前四位与第二密钥寄存器404中PUF模块401产生的响应(第二密钥)中的前四位计算汉明距离并将其编码为二进制形式;
[0109] (3)取原始指令的前6比特,进行压缩操作,得到压缩后的4比特数据,同时修改并保存查找表412;
[0110] (4)将(3)中得到的4比特压缩后数据,结合(1)中得到的原始指令的后26比特数据,以及(2)中输出的2比特汉明距离组合得到压缩并隐藏汉明距离的指令。
[0111] 对于解压及汉明距离校验流程,假设需处理的目标地址处指令的长度为32比特,将前6比特压缩至4比特,并隐藏2比特汉明距离,如图6所示,其具体流程如下:
[0112] (1)截取32比特的被压缩指令的前6比特和后26比特;
[0113] (2)根据查找表412,读取出前6比特数据中的2比特汉明码和4比特压缩后的数据,并通过查找查找表412,得到压缩前的6比特原始指令;
[0114] (3)将(2)中得到的解压后的6比特原始数据中的前四位与第二密钥寄存器404中PUF产生的响应(第二密钥)中的前四位计算汉明距离;
[0115] (4)将(3)中得出汉明距离与(2)输出的2比特隐藏数据进行比较,如果一致,则说明解压正确,输出解压后的原始6比特指令,并确继续执行(5),如果不一致,则判断程序受到攻击并产生中断;
[0116] (5)将(4)输出的比特数据结合(1)中得到的后26比特数据,输出32比特的原数据。
[0117] 上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是局限性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,这些均属于本发明的保护范围之内。