System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种处理Gadget之间数据依赖和副作用的ROP生成方法和装置制造方法及图纸_技高网

一种处理Gadget之间数据依赖和副作用的ROP生成方法和装置制造方法及图纸

技术编号:43500053 阅读:4 留言:0更新日期:2024-11-29 17:06
本发明专利技术属于自动化漏洞利用技术领域,涉及一种处理Gadget之间数据依赖和副作用的ROP生成方法和装置。该方法包括:设置漏洞利用初始状态;基于漏洞利用初始状态和漏洞利用过程描述,生成漏洞利用蓝图;提取程序中的Gadget语义信息,基于Gadget语义信息构建Gadget计算图;根据Gadget计算图和漏洞利用蓝图,依次构建各个阶段的ROP链,并解决Gadgets之间存在的数据依赖问题和副作用问题;根据各个阶段的ROP链生成完整的ROP链。本发明专利技术通过将整个漏洞利用过程分解为多个子目标,有效地减少了搜索空间,从而最大限度地提高了SMT求解器的效用,并解决了数据依赖性并消除副作用,提高了ROP生成过程的效率和成功率。

【技术实现步骤摘要】

本专利技术涉及自动化漏洞利用技术,针对返回导向编程(return-orientedprogramming,rop)的攻击载荷自动化生成过程,解决漏洞利用目标自动搜索和组合指令代码片段(gadget)过程中的数据依赖和副作用,实现rop利用载荷的生成。本方案重点研究如何使用包含内存操作和复杂算术运算语义的gadget,利用smt求解器识别和解决gadget之间的数据依赖和副作用问题,克服了现有gadget组合使用中的根本限制,提升了rop在gadget受限场景下的自动化生成能力。


技术介绍

1、return-oriented programming(rop)是一种常见的代码重用方式的漏洞利用技术,其通常基于劫持程序的控制流后重用程序中已有的指令代码,执行一系列短的指令代码片段(以“ret/jmp/call”指令结尾,称为"gadget")来引发任意的恶意行为。在现实的漏洞利用中,rop的利用目标通常包括:泄露程序基地址、栈迁移,任意函数调用,任意内存修改和任意命令执行等。在实现这些利用目标之前,我们首先需要在程序中搜索设置寄存器值和内存值的gadget,并将其链接起来形成指定的函数调用或者系统调用,然后通过执行不同的调用目标,最后达到目标利用效果。自2007年rop技术提出以来,它在实际攻击中仍然广泛使用。它不仅限于栈溢出类型的漏洞利用,也出现在与堆相关的漏洞利用中。

2、经典的rop构造过程通常包括三个关键步骤,而自动化rop工具实现的关键步骤亦同理:首先搜索gadget并识别其语义信息进行分类,然后基于利用需求选择具有指定语义的gadget进行组合,最后修复gadget依赖的数据来保证rop执行后到达利用目标状态。截止目前,学术界和工业界针对自动化rop生成的方案的研究主要可以分为三类,可以将其总结为:硬编码规则rop生成,启发式rop生成和探索式rop生成。基于硬编码规则的rop生成方案主要基于正则表达式规则来匹配和链接gadgets,他们只选择具有固定形式的gadget进行链接(如ropgadget和ropper)。启发式的rop生成方案主要通过识别gadget的语义信息进行分类,并基于分类信息搜索和选择gadget组合进行链接来生成rop(如angrop、ropium和exrop)。而探索式的rop自动生成方案,通过借助smt求解器或者符号执行的方式,探索从漏洞利用前的程序状态到目标利用状态的可达性求解,通过探索的方式求解一组gadgets集合作为可行解,他不需要考虑任何gadget分类和gadget的副作用,而是通过探索状态可达的可行gadget组合解来完成rop的自动化生成(如sgc和limbo)。

3、在现有的启发式rop自动化生成方案中,以q、angrop、ropium、exrop和riscyrop工具最具代表,他们在自动化链接rop中都遵循三个步骤。第一步:gadget语义识别与分类。基于启发式的方法借助有向的依赖图、符号执行等方法来描述gadget的语义信息,并完成对gadget的分类。在这个步骤中对gadget定义一个完备的语义分类列表是比较关键一环。第二步:gadget的选择与组合。基于已完成分类的gadget,启发式的自动化工具会依据用户描述的利用目标,依次选择和组合匹配的语义信息的gadget来完成rop生成。语义匹配是选择gadget的线索之一,但当无法找到完全匹配语义的gadget时,需要通过组合多个gadget的语义来实现所需功能。例如,angrop等工具采用构建mov连接图的方法来寻找这些组合。在这种方法中,包含mov指令的gadget被识别出来,并将它们的mov源操作数和目的操作数作为图的节点,mov指令的方向则表示为图中的边。通过在mov连接图中遍历路径的方式即可找到更多满足数据传输语义的gadget组合。不同的自动化rop工具在此步骤中最主要的区别在他们的gadget选择策略中是否支持使用包含复杂语义的小工具。angrop、riscyrop和exrop只考虑了包含如add和sub简单的算术运算指令、仅cmp指令下的条件分支指令以及目标地址存储在寄存器中的直接跳转指令。除此之外,ropium还可以额外支持使用包含内存写入操作或者在立即数上操作语义gadget的使用。然而,一些包含复杂语义的gadget,如复杂的内存读写操作、条件分支和复杂的算术运算,由于数据依赖问题和副作用的存在,往往无法被使用。这个挑战限制了可用gadget的应用范围,降低了在gadget数量较少时的rop构造成功率。第三步,借助一些定制化的修复技术来消除和解决在第二个步骤中产生的副作用和数据依赖问题。例如,angrop通过维护每个gadget组合可控制的寄存器列表,防止后续的gadget篡改已设置好的值,但这个方案会丢失某些组合。而这些方案都是临时的,他们没有考虑内存写入操作gadget之间的冲突,尤其是对于堆栈内存的修改。

4、与依赖于gadget分类的启发式方式不同,探索式方案大量使用混合符号执行和smt求解器来链接gadget。limbo为具有控制流完整性保护的程序生成rop链。它允许用户指定寄存器和存储单元的初始状态,然后选择符合cfi策略的小工具进行符号执行。通过最小化目标状态与执行小工具后的状态之间的距离,limbo逐步构建满足利用目标的rop链。sgc将小工具的语义和副作用转换为约束。通过设定rop链长度后,它随机选择gadget组合为完整rop链。通过查询sat/smt求解器,sgc确定该rop链是否可以成功地将初始状态转换到目标可利用状态。这些探索性方法遵循假设检验过程。在探索过程中,他们会不断尝试,直到超时或找到可行的解决方案。尽管gadget链长度和可选gadget的数量存在阈值,但约束表达式的规模和求解时间依然呈指数级增长。因此,探索性方法更适合gadget有限的小程序,否则性能开销会成为这类方法的成功瓶颈。

5、因此总的来说,在该领域工作中,当前先进的自动化工具从根本技术方案上仍然存在限制,使得他们在一些应用场景中无法生成rop。主要存在三个缺点:

6、(1)现有工作无法使用涉及内存操作和复杂算术的gadget进行rop链接,从而错过了有价值的gadget。

7、(2)一些探索式的方法严重依赖符号执行和smt求解器,在处理包含大量候选gadget的大型程序时很容易由于超时而生成失败。

8、(3)在构建rop链时,现有的最先进工具没有采用全面系统设计,而是依赖于临时解决方案来处理数据依赖性和消除小工具(gadget)之间的副作用,导致效果不佳。


技术实现思路

1、为了迭代地解决gadget的数据依赖和副作用问题来支持更多gadget的使用,同时保证高效且更系统地搜索gadget组合方案,完成rop自动化链接,本专利技术设计并实现了tgrop(top gun of return-oriented programming automation,自动化面向返回导向编程的强者)。

2、本专利技术的技术本文档来自技高网...

【技术保护点】

1.一种处理Gadget之间数据依赖和副作用的ROP生成方法,其特征在于,包括以下步骤:

2.根据权利要求1所述的方法,其特征在于,所述漏洞利用初始状态是漏洞在劫持控制流时刻的寄存器状态和内存状态。

3.根据权利要求1所述的方法,其特征在于,所述提取程序中的Gadget语义信息,基于Gadget语义信息构建Gadget计算图,包括:分析目标程序中的所有Gadget,通过符号执行将每个Gadget的语义使用逻辑表达式进行描述,依据不同的逻辑表达式将Gadget进行分类,以描述Gadget执行中潜在的数据流操作,其中数据流方向用于构建Gadget计算图中的边,不同的操作数作为Gadget计算图中的节点,由此构建出一个可描述程序中所有Gadget之间的数据流关系图,该图中的路径表示不同Gadget组合起来后的数据传输效果。

4.根据权利要求3所述的方法,其特征在于,所述Gadget计算图根据潜在的数据流语义信息系统地组织程序中的所有Gadget,利用Gadget计算图作为线索来搜索设置寄存器和内存的单个Gadget或Gadget组合,寄存器和内存值用作函数调用和系统调用的参数,或者用于解决数据依赖问题并消除副作用。

5.根据权利要求1所述的方法,其特征在于,所述漏洞利用蓝图将复杂的漏洞利用过程分解为多个子目标和阶段;每个子目标对应于五个接口:寄存器设置,内存读,内存写,函数调用,系统调用;每个阶段通过函数调用或系统调用来界定;以所述漏洞利用蓝图作为执行指南,指导每个阶段的ROP链的构造,同时针对每个子目标中的Gadget解决数据依赖和副作用问题。

6.根据权利要求1所述的方法,其特征在于,所述依次构建各个阶段的ROP链,其中每个阶段包含四个步骤:

7.根据权利要求1所述的方法,其特征在于,为每个阶段都生成一组ROP链,优先选择使用较短的ROP链。

8.一种处理Gadget之间数据依赖和副作用的ROP生成装置,其特征在于,包括:

9.一种计算机设备,其特征在于,包括存储器和处理器,所述存储器存储计算机程序,所述计算机程序被配置为由所述处理器执行,所述计算机程序包括用于执行权利要求1~7中任一项所述方法的指令。

10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储计算机程序,所述计算机程序被计算机执行时,实现权利要求1~7中任一项所述的方法。

...

【技术特征摘要】

1.一种处理gadget之间数据依赖和副作用的rop生成方法,其特征在于,包括以下步骤:

2.根据权利要求1所述的方法,其特征在于,所述漏洞利用初始状态是漏洞在劫持控制流时刻的寄存器状态和内存状态。

3.根据权利要求1所述的方法,其特征在于,所述提取程序中的gadget语义信息,基于gadget语义信息构建gadget计算图,包括:分析目标程序中的所有gadget,通过符号执行将每个gadget的语义使用逻辑表达式进行描述,依据不同的逻辑表达式将gadget进行分类,以描述gadget执行中潜在的数据流操作,其中数据流方向用于构建gadget计算图中的边,不同的操作数作为gadget计算图中的节点,由此构建出一个可描述程序中所有gadget之间的数据流关系图,该图中的路径表示不同gadget组合起来后的数据传输效果。

4.根据权利要求3所述的方法,其特征在于,所述gadget计算图根据潜在的数据流语义信息系统地组织程序中的所有gadget,利用gadget计算图作为线索来搜索设置寄存器和内存的单个gadget或gadget组合,寄存器和内存值用作函数调用和系统调用的参数,或者用于解决数据依赖问题...

【专利技术属性】
技术研发人员:钟楠宇邹燕燕董津玮鲜槟丞赵佳旭霍玮
申请(专利权)人:中国科学院信息工程研究所
类型:发明
国别省市:

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

1