基于路径簇规约的并行符号执行方法

文档序号:6384246阅读:252来源:国知局
专利名称:基于路径簇规约的并行符号执行方法
技术领域
本发明涉及一种计算机软件安全性测试方法,尤其是涉及一种基于程序符号执行路径簇划分的并行测试方法。
背景技术
目前,符号执行技术在软件安全性测试领·域得到了日益广泛的关注和应用。符号执行和Fuzzing等随机生成测试用例的技术相比,能够更加深入地理解目标软件,显著提高软件测试的代码覆盖率,进而生成更有针对性的测试用例。但是符号执行的最大问题是,由于软件分支数目和循环次数巨大,存在着指数级增长的执行路径,导致符号执行在实际应用中具有路径爆炸的问题,这已成为符号执行应用的最大瓶颈。为了有效缓解或解决符号执行中路径空间爆炸的问题,可以利用计算能力更强的硬件体系架构实现,比如分布式多处理器、多核、众核、云计算等。这就需要将传统的符号执行改造成具有并行执行能力的技术。当前已有的并行符号执行技术,多是根据实际使用的分布式硬件平台特点,有效缓解了并行符号执行的分布式测试节点通信、负载调度等关键问题。但是在测试节点负载分配上多是采用了简单的路径拆分或随机将分支树迁移,由于没有深入理解程序内部结构,缺少对程序执行空间可并行化测试路径关系的分析。如果将可并行测试的路径分配到同一个测试节点测试,或者不适宜并行测试的路径分配到了不同的测试节点,就会造成无谓的通信开销和冗余测试,降低并行处理能力。

发明内容
本发明针对目前并行符号执行效率不高的问题,提出一种基于路径簇划分的并行符号执行方法。本发明所采用的技术方案
一种基于路径簇规约的并行符号执行方法,包括下述步骤
O使用反汇编工具将被测可执行程序进行反汇编,得到被测可执行程序的汇编代码;
2)将所述汇编代码转换为统一的中间汇编语言形式,以屏蔽底层具体汇编语言的差

升;
3)根据中间汇编语言形式,生成被测可执行程序的函数调用图和控制流 4)定义危险函数特征,通过对函数调用图的静态分析,找到危险函数;
5)定义输入函数特征,通过对函数调用图的静态分析,找到输入函数;
6)分别建立“程序进入点一调用输入函数”,“调用输入函数一调用危险函数”,“调用危险函数一程序结束点”两两之间的路径,并归约成路径簇;
7)将步骤6)的3组路径簇进行点到点的连接,形成“程序进入点 程序结束点”的完整路径簇链集合,形成覆盖输入函数和危险函数的完整程序执行路径;
8)以步骤7)形成的“程序进入点一程序结束点”一个完整路径簇链作为一个负载单位,分配到不同的分布式测试节点,生成相应的测试用例进行实际程序安全测试。所述的基于路径簇规约的并行符号执行方法,在步骤4)中,定义了 4类危险函数,分别是字符串拷贝、内存拷贝、格式化、格式转换。所述的基于路径簇规约的并行符号执行方法,在步骤5)中,定义了 6类输入函数,分别是文件读取、网络数据读取、管道及消息读取、用户输入、环境变量读取、连接函数。所述的基于路径簇规约的并行符号执行方法,在步骤3)中,通过编写反汇编工具插件,实现被测可执行程序控制流图和函数调用图的生成。所述的基于路径簇规约的并行符号执行方法,在步骤6)中,以分析被测可执行程序控制依赖和数据依赖关系为基础,分别对进行“程序进入点一调用输入函数”,“调用输入函数一调用危险函数”,“调用危险函数一程序结束点”3组点到点的多条路径进行规约,形成点到点的路径簇;被测可执行程序中两点之间的路径簇规约概述为2个步骤①确定与符号执行目标点结果符号值有数据依赖关系的程序语句集合&找到与①中语句集合有控制依赖关系的语句集合。 本发明的有益积极效果1、本发明基于路径簇规约的并行符号执行方法,能够切实提高并行符号执行处理的能力和测试效率。针对当前符号执行存在路径空间爆炸,对大型应用程序的代码测试覆盖率较低的问题,运用分布式测试平台进行并行符号执行,显著减少了符号执行的时间开销,提高了测试的覆盖率和执行路径深度。路径簇之间彼此独立进行程序的符号分析,同一路径簇内部共享控制依赖条件,据此可以将程序以路径簇为单位进行并行符号执行时的负载分配,切实提高了并行符号执行处理的能力和测试效率。2、本发明基于路径簇规约的并行符号执行方法,运用程序依赖分析技术进行路径簇划分,有效地改进了目前并行符号执行负载分配不均衡、并行效率不高的问题,在相同分布式硬件平台下,大大提高了并行处理能力和执行效率。本发明较好解决了单一依靠Fuzz动态测试带来的路径状态空间爆炸的问题,大大提高了路径覆盖的命中率和软件测试分析的效率。


图1为本发明基于路径簇规约的并行符号执行方法流程方块 图2为基于程序控制依赖分析的路径簇规约方法流程图。
具体实施例方式实施例一参见图1,本发明基于路径簇规约的并行符号执行方法,具体包括下述步骤1)使用反汇编工具将被测可执行程序进行反汇编,得到被测可执行程序的汇编代码;
2)将所述汇编代码转换为统一的中间汇编语言形式,以屏蔽底层具体汇编语言的差

升;
3)根据中间汇编语言形式,生成被测可执行程序的函数调用图和控制流 4)定义危险函数特征,通过对函数调用图的静态分析,找到危险函数;
5)定义输入函数特征,通过对函数调用图的静态分析,找到输入函数; 6)分别建立“程序进入点一调用输入函数”,“调用输入函数一调用危险函数”,“调用危险函数一程序结束点”两两之间的路径,并归约成路径簇;
7)将步骤6)的3组路径簇进行点到点的连接,形成“程序进入点一程序结束点”的完整路径簇链集合,形成覆盖输入函数和危险函数的完整程序执行路径;
8)以步骤7)形成的“程序进入点一程序结束点”一个完整路径簇链作为一个负载单位,分配到不同的分布式测试节点,生成相应的测试用例进行实际程序安全测试。实施例二 本实施例的基于路径簇规约的并行符号执行方法,与实施例一不同的是,进一步的,在步骤4)中,定义了 4类危险函数,分别是字符串拷贝、内存拷贝、格式化、格式转换等。在步骤5)中,定义了 6类输入函数,分别是文件读取、网络数据读取、管道及消息读取、用户输入、环境变量读取、连接函数等。实施例三参见图2,本实施例的基于路径簇规约的并行符号执行方法,与实施例二不同的是,进一步的,在步骤6)中,以分析程序控制依赖和数据依赖关系为基础,分别对进行“程序进入点一调用输入函数”,“调用输入函数一调用危险函数”,“调用危险函数一程序结束点” 3组点到点的多条路径进行规约,形成点到点的路径簇。程序中两点之间的路径簇规约的可以概述为2个步骤:①确定与符号执行目标点结果符号值有数据依赖关系的程序语句集合;②找到与①中语句集合有控制依赖关系的语句集合。本发明基于路径簇规约的并行符号执行方法,在步骤3)中,通过编写反汇编器插件,实现被测程序控制流图和函数调用图(CG)的生成。实施例四本实施例结合附图,进一步说明本发明基于路径簇规约的并行符号执行方法的具体实现方式。参见图1、图2。本发明基于路径簇规约的并行符号执行方法,实现的流程包括
步骤一将被测可执行程序进行反汇编,并将汇编代码转换为统一的中间汇编语言形式,从而构建二进制文件的控制流图和调用 步骤二 根据危险函数(敏感点)和输入函数特征,搜寻敏感点及输入点所处函数位
置;
步骤三进行路径簇的规约与链接,形成路径簇链,以路径簇链为单位进行分布式并行符号执行测试。下面详细说明步骤一、步骤二、步骤三所包含的相关内容
步骤一将可执行文件输入反汇编器中,反汇编器识别二进制文件编译的机器语言,将其反汇编成对应的X86。中间汇编翻译模块将反汇编代码转换成统一形式的中间汇编语言。中间汇编语言设计的主要原则如下(I)精简指令集的设计思想;(2)足够多的寄存器数量以适应各种硬件体系结构;(3)尽量简单的寻址方式,去除不利于阅读的复杂寻址方式;(4) 3-操作数指令格式。步骤二 在二进制目标代码分析过程中,由外部输入引发的异常是分析和检测的重点,因为这种系统或者程序的异常都是不可信数据检查不完备,很有可能被恶意利用。非法用户通常利用程序处理外部输入过程中存在的漏洞,构造畸形输入对程序的关键内存区域,如栈、跳转目的地址、函数返回地址等进行改写,依此劫持程序的执行路径,在获得程序控制权后使得非法输入中的恶意代码如shellcode得到执行。鉴于上述原因,软件安全测试将关注的输入函数和危险函数作为分析的重点。因此,本发明将同时覆盖输入函数和危险函数的关键路径作为测试对象,并以此进行并行符号执行时的负载分配。1.危险函数的定义
危险就是系统的脆弱点,这里定义了 4类敏感点,分别是分别是字符串拷贝、内存拷贝、格式化、格式转换等。反汇编器提供了方便的接口,用于获取下表等库函数的调用位置。
权利要求
1.一种基于路径簇规约的并行符号执行方法,其特征是包括下述步骤1)使用反汇编工具将被测可执行程序进行反汇编,得到被测可执行程序的汇编代码;2)将所述汇编代码转换为统一的中间汇编语言形式,以屏蔽底层具体汇编语言的差异3)根据中间汇编语言形式,生成被测可执行程序的函数调用图和控制流图;4)定义危险函数特征,通过对函数调用图的静态分析,找到危险函数;5)定义输入函数特征,通过对函数调用图的静态分析,找到输入函数;6)分别建立“程序进入点一调用输入函数”,“调用输入函数一调用危险函数”,“调用危险函数一程序结束点”两两之间的路径,并归约成路径簇;7)将步骤6)的3组路径簇进行点到点的连接,形成“程序进入点一程序结束点”的完整路径簇链集合,形成覆盖输入函数和危险函数的完整程序执行路径;8)以步骤7)形成的“程序进入点一程序结束点”一个完整路径簇链作为一个负载单位,分配到不同的分布式测试节点,生成相应的测试用例进行实际程序安全测试。
2.根据权利要求1所述的基于路径簇规约的并行符号执行方法,其特征是,在步骤4)中,定义了 4类危险函数,分别是字符串拷贝、内存拷贝、格式化、格式转换。
3.根据权利要求2所述的基于路径簇规约的并行符号执行方法,其特征是,在步骤5)中,定义了 6类输入函数,分别是文件读取、网络数据读取、管道及消息读取、用户输入、环境变量读取、连接函数。
4.根据权利要求1所述的基于路径簇规约的并行符号执行方法,其特征是,在步骤5)中,定义了 6类输入函数,分别是文件读取、网络数据读取、管道及消息读取、用户输入、环境变量读取、连接函数。
5.根据权利要求1 4任一项所述的基于路径簇规约的并行符号执行方法,其特征是,在步骤3)中,通过编写反汇编工具插件,实现被测可执行程序控制流图和函数调用图的生成。
6.根据权利要求5所述的基于路径簇规约的并行符号执行方法,其特征是,在步骤6)中,以分析被测可执行程序控制依赖和数据依赖关系为基础,分别对进行“程序进入点一调用输入函数”,“调用输入函数一调用危险函数”,“调用危险函数一程序结束点” 3组点到点的多条路径进行规约,形成点到点的路径簇;被测可执行程序中两点之间的路径簇规约概述为2个步骤①确定与符号执行目标点结果符号值有数据依赖关系的程序语句集合, 找到与Φ中浯句集合有控制依赖关系的语句集合。
全文摘要
本发明涉及一种基于程序符号执行路径簇划分的计算机软件安全性测试方法。一种基于路径簇规约的并行符号执行方法,将被测可执行程序进行反汇编;得到被测可执行程序的汇编代码,并转换为统一的中间汇编语言形式;然后根据中间汇编语言形式生成被测可执行程序的函数调用图和控制流图;通过对函数调用图的静态分析,找到危险函数和输入函数;分别建立“程序进入点、调用输入函数、调用危险函数、程序结束点”两两之间的路径,并归约成路径簇;将得到的路径簇进行点到点的连接形成“程序进入点→程序结束点”的完整路径簇链集合;以前述步骤形成的“程序进入点→程序结束点”一个完整路径簇链作为一个负载单位,生成相应的测试用例进行实际程序安全测试。
文档编号G06F11/36GK103049377SQ201210542210
公开日2013年4月17日 申请日期2012年12月14日 优先权日2012年12月14日
发明者吴世忠, 郭涛, 张普含, 王嘉捷 申请人:中国信息安全测评中心
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1