一种基于静态路径分析的导向符号执行方法

文档序号:6637543阅读:531来源:国知局
一种基于静态路径分析的导向符号执行方法
【专利摘要】本发明提供一种基于静态路径分析的导向符号执行方法,能够快速到达指定的代码的位置,并给出到达目的代码的测试输入。步骤一、首先通过静态分析确定检测的目标,找到目标程序中内存分配相关的代码或指令;步骤二、获取从程序起始点到指定代码点的路径相关函数和基本块,并依据路径可达性和距离对这些函数和基本块进行权值计算;步骤三、优先选择权值大的静态分析可达路径进行遍历;步骤四、静态路径分析;步骤五、将静态路径分析所得到的路径相关的函数和基本块信息放到Paths[funcs,bbs]中,所有要分析的目标指令存放到allocCallInst的Vector中,states中存放当前所有的路径状态,当符号执行引擎对目标程序进行执行分析,通过循环对程序中的指令进行逐条解释执行。
【专利说明】一种基于静态路径分析的导向符号执行方法

【技术领域】
[0001]本发明涉及一种导向符号执行方法,具体涉及一种基于静态路径分析的导向符号执行方法。

【背景技术】
[0002]符号执行是一种通过将输入数据看作符号值,并模拟程序执行,在执行的过程中将路径的约束条件使用无量词一阶公式形成约束表达式,从而实现对程序的分析。
[0003]尽管符号执行技术在三十年前就被提出,近年来大量的研宄人员对其充满热情,尤其是在软件安全分析方面,符号执行技术被用于产生高覆盖率的测试用例、查找程序中更深层的bug、攻击代码自动生成等等。符号执行技术已经在学术实验室和工业领域被应用到各种工具中。符号执行首先在代码检测中被用于提高代码的覆盖率,可以遍历尽可能多的代码路径,已经在多个工具中得到应用。理论上可控内存分配问题可以使用进行完整的检测。但符号执行所引起的路径爆炸导致无法完整的遍历完成整个程序。但我们的工作主要是搜索到达特定代码的路径,因此只需对部分代码进行遍历。
[0004]我们了解到已有一些工作对利用符号执行来到大某个特殊代码行的相关研宄,如执行综合,最短路径符号执行,综合信息控制流图等。其中ESD使用接近的导向符号执行来到达程序的指定代码行,但其工作并没有公开,我们无法重复其工作。而我们使用的是基于路径相关函数和基本块的权值实现的导向符号执行的。最短路径符号执行和后向符号执行是在一个过程间的控制流图上进行导向符号执行,可以通过计算到达目标代码行的最短距离来导向程序的执行,以及从指定目标代码行向调用该代码的函数进行后向执行来实现找到指定代码的可达路径探测。Domagoj在2011年提出了基于静态导向的动态测试用例生成,并设计了一个三步完成的思路。2013年,Caselden在其基础上又提出了综合信息控制流图的方法,可以对二进制程序构建一个特殊的控制流图,从而实现导向符号执行。基于循环扩展的符号执行对符号执行做了一定的优化,可以检测到因为符号值作为循环变量导致的缓冲区溢出,但其需要引入多个其他符号变量。而我们的符号执行优化主要是对整数相关的属性进行增强以及整数转换操作函数进行优化。虽然有效的提高了代码的覆盖率,但其对执行到指定代码处没有任何速度上的提高,且没有任何对路径爆炸的优化。
[0005]目前静态分析技术找到的路径很多,且并不一定实际可达。而符号执行技术受限与路径爆炸问题,难以快速到达指定的目标代码。


【发明内容】

[0006]本发明的目的在于提供一种基于静态路径分析的导向符号执行方法,能够快速到达指定的代码的位置,并给出到达目的代码的测试输入。
[0007]本发明的目的是通过以下技术方案实现:
[0008]一种基于静态路径分析的导向符号执行方法,包括以下步骤:
[0009]步骤一、首先通过静态分析确定检测的目标,找到目标程序中内存分配相关的代码或指令;
[0010]步骤二、获取从程序起始点到指定代码点的路径相关函数和基本块,并依据路径可达性和距离对这些函数和基本块进行权值计算,形成一个基于代码基本块的加权源-目标有向图;
[0011]步骤三、函数和基本块路径的权值确定后,通过符号执行寻找实际可达路径,优先选择权值大的静态分析可达路径进行遍历,减少路径探测引发的组合爆炸;
[0012]步骤四、静态路径分析:首先分析指定的起点和终点之间路径可达性关系,然后获取可达路径相关的函数和基本块信息,最后利用函数、基本块之间的可达性和路径距离进行权值设定;
[0013]步骤五、导向符号执行:将静态路径分析所得到的路径相关的函数和基本块信息放到Paths [funcs,bbs]中,所有要分析的目标指令存放到al 1cCal I Inst的Vector中,states中存放当前所有的路径状态,当符号执行引擎对目标程序进行执行分析,通过循环对程序中的指令进行逐条解释执行。
[0014]其中逐条解释执行采用以下方法:首先通过选择路径算法选择权值最大的路径优先执行,在符号执行的过程中,如果碰到退出或者发生错误将产生相应的测试用例并退出该路径,如果遇到函数调用指令,则判断是否是我们需要检测的目标指令,如果是则将进行检测,输出到达目标指令的路径并生成相应的测试输入;当执行到分支指令时,则对分支跳转的基本块进行判断,在符号求解之后检查可跳转的基本块是否在静态分析的相关路径的基本块中,如果是则加入要执行的路径状态,如果不是则不加入。从而实现路径相关的选择。
[0015]其中选择路径算法为在每次路径选择时,通过对当前所有的状态进行遍历,依据静态分析的结果来选择当前权值最大的基本块作为下一个执行的路径。
[0016]其中导向符号执行中还包括整数敏感的符号执行。
[0017]其中步骤四中静态路径分析具体包括以下步骤:
[0018](I)首先确定路径分析的起点和终点:main函数入口为起点,终点由用户指定,通过目标代码的位置,找到相应指令和函数位置;
[0019](2)通过函数调用关系图分析,获取从程序入口到达目标函数的路径,以函数名称和调用指令所在基本块作为路径节点;
[0020](3)在上述分析得到的路径基础上,在函数内以基本块为单位进行路径分析,获取从函数入口基本块到调用指令所在基本块函数内路径;
[0021](4)根据后面启发式符号执行所需要的信息,建立可达路径节点集合和不可达路径节点集合;集合中的节点由函数和基本块组成,可达路径集合包括前面所获取的路径上的所有节点,而不可达节点目前仅包含在前面获取的路径上的函数内,但不属于可达路径集合的节点。
[0022]本发明的有益效果:
[0023]本发明主要通过基于静态路径分析的导向符号执行来实现找到指定的路径,通过符号执行可以对程序代码进行遍历,但路径状态爆炸导致常规的符号执行无法实现指定路径的查找。本发明在静态路径分析的基础上,并结合针对符号执行的优化来实现执行路径的快速查找。

【专利附图】

【附图说明】
[0024]图1为一种基于静态路径分析的导向符号执行方法流程图。

【具体实施方式】
[0025]下面结合具体实施例详细说明本发明,但本发明并不仅限于此。
[0026]首先需要通过静态分析确定检测的目标,即找到目标程序中内存分配相关的代码(或指令)。为此需要获取从程序起始点到指定代码点的路径相关函数和基本块,并依据路径可达性和距离对这些函数和基本块进行权值计算,形成一个基于代码基本块的加权源-目标有向图。
[0027]当函数/基本块路径的权值确定后,再通过符号执行寻找实际可达路径。通过采用启发式的导向符号执行技术,可优先选择权值大的静态分析可达路径进行遍历,减少路径探测引发的组合爆炸,从而可有效的实现可达路径的探测。
[0028]静态路径分析:首先分析指定的起点(一般是main函数入口)和终点(指定的目标代码)之间路径可达性关系,获取可达路径相关的函数和基本块信息,并利用函数、基本块之间的可达性和路径距离进行权值设定。主要包括下述4个阶段:
[0029](I)首先确定路径分析的起点和终点。一般是main函数入口为起点,终点由用户指定。通过目标代码的位置,找到相应指令和函数位置。
[0030](2)通过函数调用关系图分析,获取从程序入口到达目标函数的路径,以函数名称和调用指令所在基本块(Basic Block,简称BB)作为路径节点。这里不考虑函数中的递归调用关系。
[0031](3)在第2阶段分析得到的路径基础上,在函数内以基本块为单位进行路径分析,获取从函数入口基本块到调用指令所在基本块函数内路径。
[0032](4)在前面所获取的路径信息的基础上,根据后面启发式符号执行所需要的信息,将建立可达路径节点集合和不可达路径节点集合。集合中的节点由函数和基本块组成。可达路径集合包括前面所获取的路径上的所有节点。而不可达节点目前仅包含在前面获取的路径上的函数内,但不属于可达路径集合的节点。对于静态路径分析中没有获取到的函数,目前我们不能断定就是不可达路径集合中的节点。
[0033]导向符号执行:传统的符号执行通过各种不同的路径搜索策略试图遍历所有的程序路径,然而程序复杂性、循环、递归等导致常用的路径搜索算法无法执行更多的代码,如深度优先、广度优先。使用了多种随机搜索策略来跳过循环,执行更多的代码。本文将提出一种启发式的导向符号执行技术,可以更有效的到达指定的终点,也就是我们需要检测的内存分配的代码。
[0034]首先我们将静态分析所得到的路径相关的函数和基本块信息放到PathS[funcS,bbs]中,所有要分析的目标指令存放到allocCalllnst的Vector中,states中存放当前所有的路径状态。当符号执行引擎对目标程序进行执行分析,主要通过一个循环对程序中的指令进行逐条解释执行(5-30行)。首先通过selectState (31-40行)算法选择权值最大的路径(在我们的符号执行中用state表示路径)优先执行,selectState算法将在后面进行详细介绍。在符号执行的过程中,如果碰到退出或者发生错误将产生相应的测试用例并退出该路径(8-11行)。如果遇到函数调用指令,则判断是否是我们需要检测的目标指令,如果是则将进行检测,输出到达目标指令的路径并生成相应的测试输入(13-17行);当执行到分支指令时,我们将对分支跳转的基本块进行判断,在符号求解之后检查可跳转的基本块是否在静态分析的相关路径的基本块中(21-26行)。如果是则加入要执行的路径状态(22,25行),如果不是则不加入。从而实现路径相关的选择。对于符号执行过程中如何优先选择权值更大的基本块进行执行则在selectState (31-40行)中完成,即在每次路径选择时,通过对当前所有的状态进行遍历,依据静态分析的结果来选择当前权值最大的基本块作为下一个执行的路径。
[0035]整数敏感的符号执行:为了进一步扩展和优化符号执行,提出了整数敏感的符号执行优化技术;一方面,除了外部的输入数据直接影响内存分配的关键因素,我们还发现外部输入数据的属性也可能影响内存分配的大小。而在传统的符号执行中没有将这些因素考虑。通过直接添加约束来实现针对输入数据属性的符号化技术。另一方面,由于原始的klee在处理整数转换(atoi)的时候,由于直接调用了 uclibc中的实现,如果转换的字符串是符号化数据,将会在调用atoi的时候产生新的路径,从而加剧不必要的路径增长。据我们实验统计,调用atoi转换一个字符的时候将产生7条路径,转换两个字符时将产生25条路径。为降低这种转换所带来的路径增长,实现了 atoi直接符号转换算法,根据符号化数据的长度直接转换为相应的整数表达式,通过实验,该方法针对多个处理整数的程序大大降低了路径的数据,同时达到了相同的代码覆盖率。除了 atoi函数以外,还对atoi, strtol, strtoul等类似函数进行了处理。
[0036]虽然参考优选实施例对本发明进行描述,但以上所述实例并不构成本发明保护范围的限定,任何在本发明的精神及原则内的修改、等同替换和改进等,均应包含在本发明的权利要求保护范围内。
【权利要求】
1.一种基于静态路径分析的导向符号执行方法,其特征在于,包括以下步骤: 步骤一、首先通过静态分析确定检测的目标,找到目标程序中内存分配相关的代码或指令; 步骤二、获取从程序起始点到指定代码点的路径相关函数和基本块,并依据路径可达性和距离对这些函数和基本块进行权值计算,形成一个基于代码基本块的加权源-目标有向图; 步骤三、函数和基本块路径的权值确定后,通过符号执行寻找实际可达路径,优先选择权值大的静态分析可达路径进行遍历,减少路径探测引发的组合爆炸; 步骤四、静态路径分析:首先分析指定的起点和终点之间路径可达性关系,然后获取可达路径相关的函数和基本块信息,最后利用函数、基本块之间的可达性和路径距离进行权值设定; 步骤五、导向符号执行:将静态路径分析所得到的路径相关的函数和基本块信息放到1^138]中,所有要分析的目标指令存放到 3110(^(^1111181:的 ^6(31:0;^ 中,81:81:68中存放当前所有的路径状态,当符号执行引擎对目标程序进行执行分析,通过循环对程序中的指令进行逐条解释执行。
2.如权利要求1所述的一种基于静态路径分析的导向符号执行方法,其特征在于,其中逐条解释执行采用以下方法:首先通过选择路径算法选择权值最大的路径优先执行,在符号执行的过程中,如果碰到退出或者发生错误将产生相应的测试用例并退出该路径,如果遇到函数调用指令,则判断是否是我们需要检测的目标指令,如果是则将进行检测,输出到达目标指令的路径并生成相应的测试输入;当执行到分支指令时,则对分支跳转的基本块进行判断,在符号求解之后检查可跳转的基本块是否在静态分析的相关路径的基本块中,如果是则加入要执行的路径状态,如果不是则不加入,从而实现路径相关的选择。
3.如权利要求2所述的一种基于静态路径分析的导向符号执行方法,其特征在于,其中选择路径算法为在每次路径选择时,通过对当前所有的状态进行遍历,依据静态分析的结果来选择当前权值最大的基本块作为下一个执行的路径。
4.如权利要求1或2或3所述的一种基于静态路径分析的导向符号执行方法,其特征在于,其中导向符号执行中还包括整数敏感的符号执行。
5.如权利要求1或2或3所述的一种基于静态路径分析的导向符号执行方法,其特征在于,其中步骤四中静态路径分析具体包括以下步骤: (1)首先确定路径分析的起点和终点函数入口为起点,终点由用户指定,通过目标代码的位置,找到相应指令和函数位置; (2)通过函数调用关系图分析,获取从程序入口到达目标函数的路径,以函数名称和调用指令所在基本块作为路径节点; (3)在上述分析得到的路径基础上,在函数内以基本块为单位进行路径分析,获取从函数入口基本块到调用指令所在基本块函数内路径; (4)根据后面启发式符号执行所需要的信息,建立可达路径节点集合和不可达路径节点集合;集合中的节点由函数和基本块组成,可达路径集合包括前面所获取的路径上的所有节点,而不可达节点目前仅包含在前面获取的路径上的函数内,但不属于可达路径集合的节点。
【文档编号】G06F11/36GK104503901SQ201410738073
【公开日】2015年4月8日 申请日期:2014年12月4日 优先权日:2014年12月4日
【发明者】肖奇学, 陈渝, 张知皦, 史元春, 郭世泽, 茅俊杰, 吴志勇, 肖络元, 赵静 申请人:中国人民解放军总参谋部第五十四研究所, 清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1