一种基于代码复用编程防御SGX侧信道攻击的方法及装置制造方法及图纸

技术编号:21247558 阅读:26 留言:0更新日期:2019-06-01 07:43
本发明专利技术提供一种基于代码复用编程防御SGX侧信道攻击的方法及装置。该方法包括:构建代码基,代码基包含与指令模板对应的多个指令序列,指令模板表示用于实现特定业务的指令流,每个指令序列尾部附有标志指令;根据指令流和代码基生成执行逻辑,执行逻辑表示连接代码基内各指令序列以实现特定业务的控制逻辑;根据执行逻辑从代码基中读取相应的指令序列,并将各指令序列连接起来,形成指令流以完成业务。该装置包括:指令模板模块、翻译引擎模块、代码基模块、执行逻辑模块和执行引擎模块。本发明专利技术提出一种代码复用编程思想,从而使SGX程序具有代码不变而控制流发生改变的特点,干扰SGX侧信道分析,极大提高SGX侧信道攻击的难度。

A Method and Device for Defending SGX Side Channel Attack Based on Code Reuse Programming

The invention provides a method and device for defending SGX side channel attack based on code reuse programming. The method includes: building a code base, which contains multiple instruction sequences corresponding to instruction templates, and instruction templates represent instruction streams for specific services, with flag instructions at the end of each instruction sequence; generating execution logic according to instruction streams and code bases, and execution logic expressing control logic connecting instruction sequences within the code base to achieve specific services; Logic reads the corresponding sequence of instructions from the code base and connects the sequence of instructions to form an instruction stream to complete the business. The device includes instruction template module, translation engine module, code base module, execution logic module and execution engine module. The invention provides a code reuse programming idea, which makes SGX program have the characteristics of unchanged code and changed control flow, interferes with channel analysis on SGX side, and greatly improves the difficulty of channel attack on SGX side.

【技术实现步骤摘要】
一种基于代码复用编程防御SGX侧信道攻击的方法及装置
本专利技术涉及计算机操作系统
,尤其涉及一种基于代码复用编程防御SGX侧信道攻击的方法及装置。
技术介绍
在传统的SGX攻击方法中,攻击者需要往计算机系统内注入恶意代码,这使得只要检测计算机系统内出现的未知不明代码,就可以发现此类攻击。为此,攻击者提出代码复用攻击,代码复用攻击是指不需要在计算机系统注入恶意代码,而是利用计算机现有的代码,从中抽取少量特定的指令片段,通过某种手段将其“编织”在一起,从而使原来无害的代码变成攻击代码。这方面有代表性的是ROP攻击。具体来讲,ROP攻击所依赖的指令片段是指以ret指令为结尾的指令片段(英文称之为gadget),通过在现有代码中查找所需求的gadget,并且重新设置程序栈中的数据,从而多个gadget连接起来,进而实现执行特定系统调用等复杂的攻击目的。实质上,侧信道攻击是指攻击者通过观测SGX程序执行过程,发现SGX程序数据流与控制流之间的关系,可以间接推断SGX程序数据。为了避免这种攻击,就必须打乱SGX程序数据流与控制流之间的关系。现在常采用的方法是控制流混乱技术。当SGX侧信道攻击出现时,研究人员希望通过控制流混乱技术,打乱软件控制流和数据流之间的关系。控制流混乱技术一般是在软件里添加一些无用的代码块、跳转分支等策略,使软件运行后呈现不同的控制流。这样固然可以打破软件控制流和数据流之间的关系,但是控制流混乱一般是在编译环节完成,对于防止SGX侧信道攻击效果有限。这是因为,这种控制流混乱相当于:程序开发者完成一份编码工作,可以编译生成多个可执行程序(这些可执行程序完成同样的功能)。不过,对于SGX侧信道攻击者而言,其攻击对象仍然是一个可执行程序,并没有从根本上解决这一问题。但是,除了自修改程序,现有大多数程序一旦编译完成后,其指令就不允许修改。特别是SGX程序运行在一个不可信的操作系统之上,操作系统完全可以不允许其修改代码。如何在不修改SGX程序的前提下,仍然改变SGX程序的控制流,使SGX程序数据流与控制流不存在必然的联系,从而使上述侧信道攻击行为失效。这正是本专利技术要解决的问题。
技术实现思路
为解决现有技术中存在的上述问题,本专利技术提供一种基于代码复用编程防御SGX侧信道攻击的方法,提出一种代码复用编程思想,从而使SGX程序具有代码不变而控制流发生改变的特点,进而干扰SGX侧信道分析,极大提高SGX侧信道攻击的难度。本专利技术提供一种基于代码复用编程防御SGX侧信道攻击的方法,该方法包括:步骤1、判断是否已构建代码基,若是则执行步骤2,若否则构建代码基;其中,所述代码基包含与指令模板对应的多个指令序列,所述指令模板表示按照传统方式编程得到的用于实现特定业务的指令流,每个所述指令序列尾部均附有用于与其他所述指令序列进行连接的标志指令;步骤2、根据所述指令流和所述代码基生成执行逻辑,所述执行逻辑表示连接代码基内各指令序列以实现所述特定业务的控制逻辑;步骤3、根据所述执行逻辑从代码基中读取相应的指令序列,并将各指令序列连接起来,以完成所述特定业务。进一步地,在步骤1之前还包括:分析所述指令流,将所述指令流分解为多个指令片段。进一步地,所述步骤1具体包括:步骤1.1、构建空单链表;步骤1.2、从指令模板中读取需要进入所述代码基的指令片段,并执行步骤1.2.1至步骤1.2.4:其中,所述步骤1.2.1至步骤1.2.4具体为:步骤1.2.1、遍历单链表,判断所述单链表是否包含当前指令片段,若不包含则执行步骤1.2.2;反之则读取下一个指令片段;步骤1.2.2、生成随机数random_1作为当前指令片段的副本数量,其中,n_min<random_1<n_max,n_min表示指令片段的副本数最小值,n_max表示指令片段的副本数最大值;步骤1.2.3、所述单链表增加一个节点,所述节点包括:当前指令片段和当前指令片段的副本数量;步骤1.2.4、重复步骤1.2.1至步骤1.2.3,直至所有指令片段处理完毕,则执行步骤1.3;步骤1.3、初始化单链表节点数量为n和计步器k=0,并执行步骤1.3.1至步骤1.3.4:其中,所述步骤1.3.1至步骤1.3.4具体为:步骤1.3.1、生成随机数x;步骤1.3.2、以当前节点为起点,顺序遍历单链表,遍历一个节点计步长为1,确定单链表下一个待处理节点,所述下一个待处理节点为距离当前节点的步长为ki+1=ki+xmodn的节点,i为迭代次数;步骤1.3.3、在所述待处理节点对应的指令片段尾部添加标志指令后形成指令序列并写入代码基,所述待处理节点对应的副本数量减1,若当前副本数量为0,则从单链表中删除所述待处理节点,且单链表节点数n减1;步骤1.3.4、重复步骤1.3.1至步骤1.3.3,直至单链表为空表。。进一步地,所述步骤2具体包括:步骤2.1、读取指令模板中的指令片段;步骤2.2、对每个指令片段执行步骤2.2.1至步骤2.2.6,其中,所述步骤2.2.1至步骤2.2.6具体为:步骤2.2.1、生成随机数random_2;步骤2.2.2、设置计数器j=random_2+seed,seed为设定的随机因子;步骤2.2.3、在代码基当前位置查找目标指令序列;步骤2.2.4、若查找到目标指令序列,则更新计数器ji+1=ji-1,i为迭代次数;步骤2.2.5、若当前计数器j=0,则定位当前目标指令序列,输出执行逻辑;若当前计数器j>0,则查找下一个目标指令序列;步骤2.2.6、重复步骤2.2.1至步骤2.2.5,直至指令模板中的所有指令片段均处理完毕,则执行步骤2.3;步骤2.3、生成随机数作为下一次运行时的随机因子seed。另一方面,本专利技术提供一种基于代码复用编程防御SGX侧信道攻击的装置,该装置包括:指令模板模块、翻译引擎模块、代码基模块、执行逻辑模块和执行引擎模块;所述指令模板模块,用于存储指令模板,所述指令模板表示按照传统方式编程得到的用于实现特定业务的指令流;所述翻译引擎模块,用于构建代码基,所述代码基包含与所述指令模板对应的多个指令序列,每个所述指令序列尾部均附有用于与其他所述指令序列进行连接的标志指令;以及根据所述指令流和所述代码基生成执行逻辑,所述执行逻辑表示连接代码基内各指令序列以实现所述特定业务的控制逻辑;所述代码基模块,用于存储翻译引擎模块构建的代码基;所述执行逻辑模块,用于存储翻译引擎模块生成的执行逻辑;所述执行引擎模块,用于根据所述执行逻辑从代码基中读取相应的指令序列,并将各指令序列连接起来,以完成所述特定业务。进一步地,所述翻译引擎模块还用于:分析所述指令流,将所述指令流分解为多个指令片段。进一步地,所述翻译引擎模块具体包括:初始化单元,用于构建空单链表;指令片段分析单元,用于从指令模板中读取需要进入所述代码基的指令片段,并执行步骤a1至步骤a4:其中,所述步骤a1至步骤a4具体为:步骤a1、遍历单链表,判断所述单链表是否包含当前指令片段,若不包含则执行步骤a2;反之则读取下一个指令片段;步骤a2、生成随机数random_1作为当前指令片段的副本数量,其中,n_min<random_1<n_max,n_min表示指令片段的副本文档来自技高网
...

【技术保护点】
1.一种基于代码复用编程防御SGX侧信道攻击的方法,其特征在于,包括:步骤1、判断是否已构建代码基,若是则执行步骤2,若否则构建代码基;其中,所述代码基包含与指令模板对应的多个指令序列,所述指令模板表示按照传统方式编程得到的用于实现特定业务的指令流,每个所述指令序列尾部均附有用于与其他所述指令序列进行连接的标志指令;步骤2、根据所述指令流和所述代码基生成执行逻辑,所述执行逻辑表示连接代码基内各指令序列以实现所述特定业务的控制逻辑;步骤3、根据所述执行逻辑从代码基中读取相应的指令序列,并将各指令序列连接起来,以完成所述特定业务。

【技术特征摘要】
1.一种基于代码复用编程防御SGX侧信道攻击的方法,其特征在于,包括:步骤1、判断是否已构建代码基,若是则执行步骤2,若否则构建代码基;其中,所述代码基包含与指令模板对应的多个指令序列,所述指令模板表示按照传统方式编程得到的用于实现特定业务的指令流,每个所述指令序列尾部均附有用于与其他所述指令序列进行连接的标志指令;步骤2、根据所述指令流和所述代码基生成执行逻辑,所述执行逻辑表示连接代码基内各指令序列以实现所述特定业务的控制逻辑;步骤3、根据所述执行逻辑从代码基中读取相应的指令序列,并将各指令序列连接起来,以完成所述特定业务。2.根据权利要求1所述的方法,其特征在于,在步骤1之前还包括:分析所述指令流,将所述指令流分解为多个指令片段。3.根据权利要求2所述的方法,其特征在于,步骤1中的所述构建代码基具体包括:步骤1.1、构建空单链表;步骤1.2、从指令模板中读取需要进入所述代码基的指令片段,并执行步骤1.2.1至步骤1.2.4:其中,所述步骤1.2.1至步骤1.2.4具体为:步骤1.2.1、遍历单链表,判断所述单链表是否包含当前指令片段,若不包含则执行步骤1.2.2;反之则读取下一个指令片段;步骤1.2.2、生成随机数random_1作为当前指令片段的副本数量,其中,n_min<random_1<n_max,n_min表示指令片段的副本数最小值,n_max表示指令片段的副本数最大值;步骤1.2.3、所述单链表增加一个节点,所述节点包括:当前指令片段和当前指令片段的副本数量;步骤1.2.4、重复步骤1.2.1至步骤1.2.3,直至所有指令片段处理完毕,则执行步骤1.3;步骤1.3、初始化单链表节点数量为n和计步器k=0,并执行步骤1.3.1至步骤1.3.4:其中,所述步骤1.3.1至步骤1.3.4具体为:步骤1.3.1、生成随机数x;步骤1.3.2、以当前节点为起点,顺序遍历单链表,遍历一个节点计步长为1,确定单链表下一个待处理节点,所述下一个待处理节点为距离当前节点的步长为ki+1=ki+xmodn的节点,i为迭代次数;步骤1.3.3、在所述待处理节点对应的指令片段尾部添加标志指令后形成指令序列并写入代码基,所述待处理节点对应的副本数量减1,若当前副本数量为0,则从单链表中删除所述待处理节点,且单链表节点数n减1;步骤1.3.4、重复步骤1.3.1至步骤1.3.3,直至单链表为空表。4.根据权利要求2所述的方法,其特征在于,所述步骤2具体包括:步骤2.1、读取指令模板中的指令片段;步骤2.2、对每个指令片段执行步骤2.2.1至步骤2.2.6,其中,所述步骤2.2.1至步骤2.2.6具体为:步骤2.2.1、生成随机数random_2;步骤2.2.2、设置计数器j=random_2+seed,seed为设定的随机因子;步骤2.2.3、在代码基当前位置查找目标指令序列;步骤2.2.4、若查找到目标指令序列,则更新计数器ji+1=ji-1,i为迭代次数;步骤2.2.5、若当前计数器j=0,则定位当前目标指令序列,输出执行逻辑;若当前计数器j>0,则查找下一个目标指令序列;步骤2.2.6、重复步骤2.2.1至步骤2.2.5,直至指令模板中的所有指令片段均处理完毕,则执行步骤2.3;步骤2.3、生成随机数作为下一次运行时的随机因子seed。5....

【专利技术属性】
技术研发人员:周洪伟原锦辉张玉臣汪永伟孙怡峰张畅胡浩
申请(专利权)人:中国人民解放军战略支援部队信息工程大学
类型:发明
国别省市:河南,41

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

1