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侧信道攻击效果有限。这是因为,这种控制流混乱相当于:程序开发者完成一份编码工作,可以编译生成多个可执行程序(这 ...
【技术保护点】
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
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。