一种漏洞PoC驱动的双回路模糊测试方法及系统技术方案

技术编号:39304905 阅读:11 留言:0更新日期:2023-11-12 15:54
本发明专利技术提出一种漏洞PoC驱动的双回路模糊测试方法,包括:外回路步骤,根据漏洞PoC的执行状态提取漏洞的特征向量,构建特征向量库;内回路步骤,从种子库中选取种子;将该种子变异产生多个测试用例,以这些测试用例对目标程序进行模糊测试,监测并报告该目标程序出现的崩溃或新程序状态,并将能触发目标程序新程序状态的测试用例加入该种子库。本发明专利技术还提出一种漏洞PoC驱动的双回路模糊测试系统,以及一种用于实现漏洞PoC驱动的双回路模糊测试的数据处理装置。据处理装置。据处理装置。

【技术实现步骤摘要】
一种漏洞PoC驱动的双回路模糊测试方法及系统


[0001]本专利技术属于网络安全领域,特别是涉及一种漏洞PoC驱动的双回路模糊测试方法及系统。

技术介绍

[0002]随着应用需要,软件系统变得越来越复杂,巨大的代码规模以及模块之间复杂的交互关系增加了程序员出错的概率,导致了软件漏洞的存在。漏洞给恶意用户创造了攻击网络中其他设备的机会,这使得人们在享受网络所带来的便利的同时,也承受着来自恶意用户的安全威胁。软件漏洞之所以会造成巨大的危害,根源在于其所在软件具有海量的用户。为了保护计算机系统免受攻击,需要先于攻击者发现软件中的漏洞并对其进行修补,以阻止攻击、减少损失,这一工作对于具有海量用户的大型软件来讲尤为重要。一般情况下,具有海量用户的软件大都是由大型软件企业或组织开发的。这些企业和组织内部有着极为严谨的质量把控手段,包括严格的设计和编码规范、严格的文档代码审查制度,同时他们还会对软件产品进行充分的测试,例如详尽的单元测试、集成测试、回归测试和模糊测试等。因此,他们发布的软件产品具有很高的代码质量。另外,这些具有海量用户的软件也是全世界计算机安全人员进行漏洞挖掘的重要对象。随着时间的推移,这些软件中的漏洞会被逐步发现且修复。因此,那些易被挖掘的浅层次漏洞变得越来越少,对其进行漏洞挖掘的难度也变得越来越大。
[0003]通过对近些年大型软件的漏洞进行深入分析,这类漏洞具有如下两个特点:1)漏洞是由目标程序中两个或多个函数的细微缺陷组合起来导致的(为了便于描述,下面将导致漏洞的函数称为成因函数);2)成因函数处于不同的文件甚至属于不同的模块。要触发这类漏洞,需要特定的输入给目标程序的关键变量注入特定的值,引导程序按照特定的顺序依次执行成因函数,因而触发这类漏洞极为困难。对于成因在一个函数或者一个文件中的漏洞,可以称之为浅层次漏洞。对于成因来自于多个函数,且这些函数还处于不同文件甚至不同模块的漏洞,可以称之为深层次漏洞。深层次漏洞潜伏时间长,攻击面广,危害性大,因此挖掘深层次漏洞非常重要。
[0004]模糊测试技术在漏洞挖掘方面发挥了重要的作用。模糊测试技术通过生成大量测试用例,利用计算资源对目标程序进行反复测试,从而触发漏洞。模糊测试执行模式为一个回路,包括变异

执行

选种三个模块,并在过程中维护两个全局数据状态,分别是种子队列和全局覆盖位图(Bitmap)。一轮测试包括:首先,从种子队列中,获取一个种子,交给变异模块,按照预定的策略对种子进行随机变异产生若干个测试用例;然后,将测试用例交给执行器,以该测试用例为输入运行目标程序,记录每个测试用例执行后的位图;最后,选种模块通过比对单次测试用例执行产生的覆盖位图和全局覆盖位图的差异,依据选种策略选出有价值的种子,一般是判断是否发现新的程序状态或者导致目标程序崩溃。如果发现新的程序状态,将该测试用例加入种子队列;如果导致目标程序,将该测试用例作为潜在漏洞触发用例,输出给安全人员。这样反复迭代,以期触发目标程序中的错误。为了支撑上述功能,模
糊测试系统在测试之前,需要对目标程序进行插桩,例如模糊测试采用以边覆盖为反馈的选种策略时,需要在目标程序的每个基本块(Basic Block,BB)前插入桩代码,桩代码的逻辑是在覆盖位图中标记前一个执行的基本块和该基本块组成的边已被执行。
[0005]针对模糊测试的研究工作主要集中在四个方面:1)提升模糊测试的执行速度;2)扩大测试中的代码覆盖率;3)提升模糊测试的代码深度;4)针对代码中的某一目标进行导向选种。下面从这四个方面介绍相关技术:
[0006]1)提升模糊测试的执行速度;弗吉尼亚理工学院提出了Full

speedFuzzing,他们发现大部分测试都不会执行新路径,因此通过插桩int3指令捕捉新路径,以降低插桩代码引入的开销,提升测试的效率,但这种方法会降低插桩的精度,不利于精确统计所覆盖的代码。
[0007]2)扩大测试中的代码覆盖率;模糊测试的随机性会导致测试工具反复执行已覆盖的代码,造成算力上的浪费,特别是长时间测试时,覆盖率增长到一定程度就不再增长了,从而形成覆盖率的天花板困境。为了缓解该问题,佐治亚理工大学设计的QSYM,利用符号执行技术求解分支条件,突破校验检查和魔数检查等限制,以实现覆盖率增长。但符号执行开销大,不适用于大型程序。为了减少不必要的符号执行引起的性能开销,美国东北大学设计了SAVIOR测试框架,将符号执行和模糊测试相结合,首先静态分析代码并插桩,然后在模糊测试过程中记录执行路径,对于潜在有问题的代码块和分支块进行符号执行,并生成验证代码,从而有效地提升测试效率。
[0008]3)提升模糊测试的代码深度;字节跳动AI实验室提出Matryoshka方法,针对模糊测试难以触及目标程序中深度嵌套代码的问题,通过分析目标条件分支所依赖的控制流和数据流,生成可以同时满足深度嵌套的所有分支条件的测试用例。清华大学提出的PATA通过解决污点分析技术在循环中变量的过污染和欠污染问题,求解程序状态依赖的分支,提升模糊测试在循环代码上的探索能力。
[0009]4)针对代码中的某一目标进行导向性选种;新加坡国立大学提出的AFLGo和南洋理工大学提出的Hawkeye基于人工分析时发现的补丁代码附近存在缺陷的概率比较大这一经验,有针对性地对这部分代码进行测试。他们计算每个种子引导目标程序执行的情况,计算与目标代码的距离,通过合理地选种,以逐步逼近目标代码。澳大利亚莫纳什大学的研究人员通过分析不同程序的近期修改发现,有大量的漏洞来源于近期的回归测试和补丁,特别是近期反复打补丁的内容。基于这一发现,他们提出了回归灰盒模糊测试(RGF),自动测试近期修改的目标代码。
[0010]随着漏洞的重要性愈发凸显,对高效的模糊测试技术的需求也日益迫切。尤其对于大型的软件程序而言,爆发出来的漏洞基本都是深层次漏洞。深层次漏洞的触发条件十分苛刻,需要输入数据能够引导目标程序按照特定路径执行处于不同文件/模块中的成因函数,并且该输入能将目标程序中的关键变量设成特定的值,这样的输入很难通过随机的方式产生。目前,深层次漏洞的挖掘主要还是依赖于人工审计。若想触发深层次漏洞,所构造的输入要同时满足:1)使程序能够依据某个特定顺序执行各个成因函数;2)数据流需满足触发漏洞所需的特定形式;3)在内存中产生触发漏洞的特定数据。目前的模糊测试工具包含由种子变异、插桩执行、收集覆盖率信息和筛选种子构成的回路。这种方式对于由单一成因函数导致的漏洞有较好的效果,但对于深层次漏洞来讲,因缺乏必要的反馈选种策略,
效果不佳。
[0011]漏洞PoC也叫漏洞验证程序(Proof of Concept),表现形式为漏洞程序的一个特定输入。PoC能够触发漏洞,最终产生一个错误的输出,其形式可能是访存异常导致程序的崩溃,也可能是逻辑层面的元数据的差异。PoC往往用来验证漏洞的存在,但是PoC和漏洞成因并不等价,因为当PoC导致程序产生异常行为时,产生程序异常行为的代码与本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种漏洞PoC驱动的双回路模糊测试方法,其特征在于,包括:外回路步骤,根据漏洞PoC的执行状态提取漏洞的特征向量,构建特征向量库;内回路步骤,基于该特征向量库从种子库中选取种子;使用该种子变异产生的多个测试用例对目标程序进行模糊测试,监测并报告该目标程序出现的崩溃或新程序状态,选取触发该新程序状态的测试用例加入该种子库。2.如权利要求1所述的双回路模糊测试方法,其特征在于,该内回路步骤包括:变异步骤,将该种子按照预定变异策略随机变异产生多个测试用例;执行步骤,以该测试用例作为输入运行该目标程序,记录每个该测试用例在执行后的覆盖位图;选种步骤,将该覆盖位图与该目标程序的全局覆盖位图进行比较,以获取模糊测试结果,并依据预定选种策略从该测试用例中选出新的种子。3.如权利要求2所述的双回路模糊测试方法,其特征在于,该外回路步骤包括:成因分析步骤,获取该测试用例在该目标程序的执行状态,若该测试用例在该目标程序中触发崩溃或新程序状态,则将该测试用例在该目标程序中的执行路径划分至第一路径集,反之则划分至第二路径集;获取该第一路径集的所有执行路径共同执行函数的交集,构成第一函数集;获取该第二路径集的所有执行路径共同执行函数的交集,构成第二函数集;以该第二路径集关于该第一函数集的相对补集在无环调用图上进行拓扑排序后的集合为第三函数集,通过比对该第一函数集和该第二函数集,在该第三函数集中定位首个漏洞成因函数,以该第三函数集中该首个漏洞成因函数之后的所有函数作为成因函数,构建漏洞成因关键函数集;特征泛化步骤,采用NLP模型提取该成因函数中每条语句的语义信息;通过代码块向量和控制流图结构生成该成因函数的结构信息,并采用消息传递神经网络模型编码该结构信息得到结构信息向量;提取控制流图的有向图结构特征,形成顺序信息向量;将该语义信息、该结构信息向量和该顺序信息向量拼接整合后,生成该成因函数的高维向量描述作为该特征向量。4.如权利要求2所述的双回路模糊测试方法,其特征在于,该选种步骤包括:根据该目标程序的控制流图和函数调用图,计算该执行用例的执行路径与目标路径的重合程度和距离,得到第一评分;根据该执行用例是否触发新的代码,以及触发的代码复杂度计算得到第二评分;根据该第一评分和该第二评分获得该执行用例的综合评分,选取综合评分处于选种范围内的测试用例作为新的种子。5.一种漏洞PoC驱动的双回路模糊测试系统,其特征在于,包括:外回路模块,用于根据漏洞PoC的执行状态提取漏洞的特征向量,构建特征向量库;内回路模块,用于进行模糊测试,包括:基于该特征向量库从种子库中选取种子;使用该种子变异产生的...

【专利技术属性】
技术研发人员:武成岗康妍胡宇浩孙越王继铭
申请(专利权)人:中国科学院计算技术研究所
类型:发明
国别省市:

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

1