一种面向多种补丁模式的差异分支识别方法及系统技术方案

技术编号:20160899 阅读:24 留言:0更新日期:2019-01-19 00:13
本发明专利技术提供一种面向多种补丁模式的差异分支识别方法,步骤包括:对补丁前后的二进制程序进行比对,识别出补丁后程序中的差异函数及其包含的差异块,该差异块为新增块或修改块;对于控制流补丁,如果差异块的后继结点中有一个是新增块,且该新增块包含另一侧基本块的所有指令,则将从差异块到该新增块的分支作为差异分支;如果差异块含有两个后继结点,则将从差异块到距离函数退出结点最近的后继结点的分支作为差异分支;对于数据流补丁,如果差异块的前驱结点和后继结点均为匹配块,且前驱结点含有两个后继结点,则将该前驱结点到差异块的分支作为差异分支。

【技术实现步骤摘要】
一种面向多种补丁模式的差异分支识别方法及系统
本专利技术涉及漏洞挖掘领域,主要关注基于补丁分析发现漏洞的方向,具体为一种面向多种补丁模式的差异分支识别方法及系统。
技术介绍
补丁发布是用于修复计算机程序漏洞的,它同时也透露了漏洞相关信息。漏洞研究者可根据补丁前后二进制代码的差异,结合分析调试,定位漏洞所在。因此基于补丁分析发现漏洞的研究是漏洞挖掘领域重要的组成部分。补丁分析研究主要集中在两个方面:1)如何对补丁前后二进制程序进行比对,从而提取出差异信息;2)如何通过分析差异构造出能验证补丁前程序中漏洞存在的输入。大部分现有研究的重心在于提高二进制补丁比对的准确性。而目前业界的BinDiff比对工具已经到达较高的准确率,因此,问题的关键在于如何基于比对结果和补丁模式来提取出能验证漏洞的输入需满足的条件,进而基于该条件生成输入、验证漏洞。现有技术APEG能一定程度解决上述问题,然而它只能针对一种添加输入检查的补丁模式,即只有输入满足检查后才会执行原来代码,从而避免了非法输入触发异常。APEG对于这种模式提取出的验证漏洞的输入条件为:输入不满足新添加检查,因为这样的输入往往是非法的,能触发并验证补丁前程序中的漏洞。由此可见,该方法不能自动应用于多种补丁模式。SPAIN用于识别安全补丁,并归纳出几种常见补丁模式。它首先找到补丁后程序中的局部轨迹,即由若干个差异块组成的序列;然后提取出补丁前程序中对应的轨迹;根据前后轨迹的语义差异确认是否为安全补丁,并使用污点分析跟踪安全补丁中新增语句对于程序的影响,从而归纳出五种漏洞和补丁模式,但是SPAIN没有解决上述涉及到的输入条件提取问题。综上,现有的基于补丁发现漏洞的研究未着重解决漏洞验证部分,而相关技术也只能处理某种补丁模式,没有普适性。
技术实现思路
为了克服现有技术不能应用于多种补丁模式,本专利技术提供一种面向多种补丁模式的差异分支识别方法及系统,该方法为通用的输入条件提取方法,以识别出差异分支。该差异分支一般为程序控制流图上的边,其满足的特性为:执行经过该分支的输入在补丁后程序中能正常运行,但会导致补丁前程序运行异常,从而验证该差异分支修补了补丁前程序中的漏洞。具体地,本专利技术通过对控制流及数据流补丁的多种模式进行分析,提取出差异分支的共同特征,并总结成识别规则,根据该规则识别出差异分支,以之作为输入生成的覆盖目标。本专利技术解决上述技术问题所采用的技术方案是:一种面向多种补丁模式的差异分支识别方法,步骤包括:对补丁前后的二进制程序进行比对,识别出补丁后程序中的差异函数及其包含的差异块,该差异块为新增块或修改块;对于控制流补丁,如果差异块的后继结点中有一个是新增块,且该新增块包含另一侧基本块的所有指令,则将从差异块到该新增块的分支作为差异分支;如果差异块含有两个后继结点,则将从差异块到距离函数退出结点最近的后继结点的分支作为差异分支;对于数据流补丁,如果差异块的前驱结点和后继结点均为匹配块,且前驱结点含有两个后继结点,则将该前驱结点到差异块的分支作为差异分支。其中,通过BinDiff对补丁前后的二进制程序进行比对,找出差异函数。其中,通过IDA对补丁后的差异函数的每个基本块进行分析,找出差异块。一种面向多种补丁模式的差异分支识别系统,包括存储器和处理器,该存储器存储计算机程序,该程序被配置为由该处理器执行,该程序包括用于执行上述方法中各步骤的指令。一种存储计算机程序的计算机可读存储介质,该计算机程序包括指令,该指令当由服务器的处理器执行时使得该服务器执行上述方法中的各个步骤。通过本专利技术方法,能够针对控制流补丁和数据流补丁的各种模式进行差异分支识别,识别准确率高,经实验可知,准确率高达83%。附图说明图1是实施例中的差异分支识别方法流程图。图2是实施例中的补丁后差异分支的控制流图。具体实施方式为使本专利技术的上述特征和优点能更明显易懂,下文特举实施例,并配合所附图作详细说明如下。本专利技术提供的差异分支识别方法,可以适用于控制流补丁和数据流补丁的多种补丁模式,具体说明如下:1)对于控制流补丁控制流补丁通过添加对输入的检查代码实现控制流层面的修补,即输入(不)满足该检查,则采取一定的操作。其中,对于检查代码的类型以及采取的操作,不同的程序会有不同的处理,本专利技术共总结出以下5种控制流补丁的模式。模式1:输入满足检查后走向异常处理分支并退出程序。差异分支为满足检查的分支,因为走该分支隐含着输入的非法性,易导致补丁前程序运行异常。模式2:输入只有满足检查才会执行原来的代码。差异分支为不满足检查的分支,因为走该分支的输入在补丁后不会执行原代码,说明了输入的非法性。模式3:当检查代码出现在循环中,若输入满足检查,则要么“break”退出循环,要么“continue”直接进入下一次循环。差异分支为满足检查的分支。模式4:补丁没有添加检查代码,而是修改检查条件,比如补丁前为if(i>n)则执行异常处理,而补丁修改为if(i>=n),经分析可知满足i==n的输入对补丁前而言是非法的。因此,该模式相当于模式1添加了对输入的非法判断,故差异分支与其一致,即满足检查的分支。模式5:输入满足检查后执行补丁新增的非异常退出代码。差异分支为满足检查的分支,因为在补丁后走该分支可能表示对非法输入先进行数据流相关的控制。对于控制流补丁的模式1-4,本专利技术的差异分支识别方法为;从差异块(即补丁前后相差异的基本块)出发,要求该差异块有两个后继结点,选择距离函数退出结点最近的分支为差异分支;而对于模式5,其差异分支应为距离函数退出结点最远的分支,本专利技术提取出如下识别特征:差异分支的目的结点(后继结点)是一个新增块(即补丁后新增的基本块),且包含另一侧基本块中的所有指令,则选择从差异块到该新增块的分支为差异分支。2)对于数据流补丁数据流补丁通过添加赋值等语句来实现数据流层面的修补。比如为UseAfterFree漏洞的补丁往往是在执行完free()操作后将指针置为空,避免后续再次访问该指针时触发异常。根据修补的对象,本专利技术共总结出了4种数据流补丁模式。模式1:添加变量赋值、修改变量赋值。差异分支为执行到差异块的分支,因为在补丁后走该分支会修改变量数值,产生差异,可能是对非法输入的异常处理。模式2:修改变量的类型、数组的大小,如int改成unsignedint。差异分支为执行到被修改变量引用点的分支,由于引用点处也会出现汇编指令的差异,从而被识别为差异块,因此选择能执行到差异的分支即可。模式3:修改调用的函数名,如strcpy改为strncpy。差异分支为执行到差异块的分支,因为走该分支输入在补丁前后会调用到不同的函数,产生差异。模式4:删除了一段代码。差异分支为执行到差异块的分支,因为走该分支输入在补丁前会执行被删除的语句,而补丁后不会,产生差异。对于数据流补丁的模式1-4,本专利技术的差异分支识别方法为:对于任意一个差异块,如果该基本块的前驱和后继结点均为匹配块(即补丁前后信息完全匹配的基本块),且某个前驱结点有两个后继结点,那么选择该前驱结点到差异块的分支为差异分支。针对本专利技术方法,以下列举一具体应用实例予以阐述:下述代码是整数溢出导致堆缓冲区越界读漏洞对应的补丁的典型例子,属于控制流补丁本文档来自技高网
...

【技术保护点】
1.一种面向多种补丁模式的差异分支识别方法,步骤包括:对补丁前后的二进制程序进行比对,识别出补丁后程序中的差异函数及其包含的差异块,该差异块为新增块或修改块;对于控制流补丁,如果差异块的后继结点中有一个是新增块,且该新增块包含另一侧基本块的所有指令,则将从差异块到该新增块的分支作为差异分支;如果差异块含有两个后继结点,则将从差异块到距离函数退出结点最近的后继结点的分支作为差异分支;对于数据流补丁,如果差异块的前驱结点和后继结点均为匹配块,且前驱结点含有两个后继结点,则将该前驱结点到差异块的分支作为差异分支。

【技术特征摘要】
1.一种面向多种补丁模式的差异分支识别方法,步骤包括:对补丁前后的二进制程序进行比对,识别出补丁后程序中的差异函数及其包含的差异块,该差异块为新增块或修改块;对于控制流补丁,如果差异块的后继结点中有一个是新增块,且该新增块包含另一侧基本块的所有指令,则将从差异块到该新增块的分支作为差异分支;如果差异块含有两个后继结点,则将从差异块到距离函数退出结点最近的后继结点的分支作为差异分支;对于数据流补丁,如果差异块的前驱结点和后继结点均为匹配块,且前驱结点含有两个后继结点,则将该前驱结点到差异块的分支作为差异分支。2.如权利要求1...

【专利技术属性】
技术研发人员:李丰彭佳琪刘丙昌许丽丽陈宏程刘炳宏霍玮邹维
申请(专利权)人:中国科学院信息工程研究所
类型:发明
国别省市:北京,11

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

1