一种基于二进制程序的测试数据生成器和方法,其主要技术是对所述引导路径和初始测试数据对应的二进制程序的状态信息,运行动态符号执行程序,根据运行结果获得相应的条件跳转地址信息;基于所获得的条件跳转地址信息,将初始测试数据对应的实际运行路径与引导路径进行匹配;生成与所述引导路径相匹配的实际运行路径对应的测试数据。本发明专利技术结合静态分析与动态分析的优点,能提高符号执行的有效性和准确性,提高生成测试数据的准确度;还能生成用于对关键代码段进行路径敏感分析的测试数据,从而能有效缓解符号执行中遇到的路径爆炸问题。
【技术实现步骤摘要】
本专利技术涉及通信和计算机领域,尤其涉及一种软件安全分析领域。
技术介绍
目前,在软件安全研究领域中,经常会对软件进行安全分析,在安全分析过程中一个主要问题是生成具有一定覆盖度的测试数据。无论是学术界还是产业界,普遍的安全分析方法分为动态分析方法和静态分析方法两种。 动态分析的方法通过运行所要分析的目标程序,通过人为设置不同的输入参数,使目标程序运行于不同的状态,从而观察程序内部情况或运行中产生的错误情况,以便发现安全缺陷。动态分析中最常用的方法就是FuzzTesting(模糊测试,又称之为随机数黑盒暴力测试法)。动态分析的方法自动产生测试数据,测试结果准确,适用范围广,但是效率较低,对人工依赖较大,实施过程中的不确定因素较多。 静态分析的对象可以是源代码,也可以是二进制可执行程序,一般对源代码或二进制可执行程序进行结构上或语法上的解析后,将结构化表示的内容在特定规则的情况下进行匹配识别。静态分析常用于对源代码的安全审查,也用于二进制程序,但情况较少。目前比较常用的静态分析技术是符号执行分析技术。符号执行分析是通过符号表达式来执行程序的,也就是说程序的执行用符号来模拟使用符号值,而不是实际数据,作为输入;将程序变量的值表示为符号表达式;程序计算的输出表达为输入符号值的函数。利用符号执行分析技术进行静态分析时,首先将程序抽象化,用符号来表示;然后构造所有可能的输入,以每个可能输入值作为输入,开始执行,执行的每一步的结果以输入值、常量和其它变量的逻辑或数学表达式来表示,直到程序结束的返回语句或者预定义的分析跳出条件被满足。 一些漏洞挖掘工具常常采用符号执行分析技术,如EXE (Execution generatedExecutions)漏洞挖掘工具和KLEE(EXE的改进版本)漏洞挖掘工具,并取得了良好的效果。符号执行分析技术的优点是分析是路径敏感的;因为没有对路径、状态做近似,结果精确;适合做状态检查、时序检查;对并发类型的错误十分有效;缺点有对系统的行为进行近似,可能导致这类结果不精确;对所有可能的状态进行穷举搜索,开销大;在边界处对路径、时序属性近似困难,故复合困难。 综合上述,目前主流的静态分析技术和动态分析技术基本都存在一些问题(l)动态测试自动生成测试数据,但测试的不确定因素较多,具有一定的盲目性,(2)静态分析效率较高,分析是路径敏感的,但在理论上存在较高的漏报率和误报率,难于准确定位漏洞;静态分析大多需要在获得源代码的基础上进行分析,针对二进制程序的符号执行技术复杂;符号执行可以自动生成测试数据进行路径遍历,但执行的路径没有针对性,且存在路径爆炸难题,自动生成测试数据进行完备的路径敏感分析不太现实。可见,二进制程序路径敏感分析还迫切需要新的突破技术。
技术实现思路
本专利技术的目的是提供一种,通过本发 明,能够提高测试数据的准确度。 本专利技术的目的是通过以下技术方案实现的 本专利技术提供一种基于二进制程序的测试数据生成方法,其包括 获取所述初始测试数据对应的二进制程序的状态信息,并获取引导路径; 对所述引导路径和所述初始测试数据对应的二进制程序的状态信息,运行动态符号执行程序,根据运行结果获得相应的条件跳转地址信息; 基于所获得的条件跳转地址信息,将初始测试数据对应的实际运行路径与引导路 径进行匹配; 生成与所述引导路径相匹配的实际运行路径对应的测试数据。 其中,更进一步优选的,所述基于二进制程序的测试数据生成方法,还包括 对所述引导路径和所述初始测试数据对应的二进制程序的状态信息,运行动态符 号执行程序,根据运行结果获得相应的路径约束条件信息; 对不能与所述弓I导路径匹配的实际运行路径对应的路径约束条件信息,进行修改; 对修改后路径约束条件信息求解,将求得的解,作为新的测试数据输入,运行动态 符号执行程序。其中,更进一步优选的,所述基于二进制程序的测试数据生成方法,还包括 获得目标代码段;以及,通过IDA插件获得二进制程序的基本块信息和函数调用 信息,通过静态分析获得二进制程序的数据流和控制流信息; 根据所获得的二进制程序的数据流和控制流信息,从所述目标代码段所在的基本块开始追溯到读取所述初始测试数据函数所在的基本块,确定出从所述初始测试数据的输入点到所述目标代码段的路径; 从所确定出的路径中确定出弓|导路径。 其中,更进一步优选的,所述从所确定出的路径中确定出引导路径的过程,包括 判断所确定出的路径中是否存在未处理的路径;若有,则从中选择一个作为引导 路径;否则,则转入获得目标代码段的过程。其中,更进一步优选的,所述获得目标代码段的过程,包括 通过IDA插件获得危险函数代码段或危险操作代码段;根据所述危险函数代码段 或危险操作代码段,设定目标代码段; 或者, 获取用户输入的目标代码段。本专利技术还提供一种基于二进制程序的测试数据生成器,其包括 动态符号执行模块,用于所述初始测试数据对应的二进制程序的状态信息和引导路径;对所述引导路径和所述初始测试数据对应的二进制程序的状态信息,运行动态符号执行程序,根据运行结果获得相应的条件跳转地址信息; 路径引导模块,用于基于所获得的条件跳转地址信息,将初始测试数据对应的实 际运行路径与引导路径进行匹配; 测试数据生成模块,用于生成与所述引导路径相匹配的实际运行路径对应的测试数据。 其中,更进一步优选的,所述动态符号执行模块,还用于对所述引导路径和所述初 始测试数据对应的二进制程序的状态信息运行动态符号执行程序,根据运行结果获得相应 的路径约束条件信息; 所述基于二进制程序的测试数据生成器,还包括路径修订模块,用于对不能与所 述引导路径匹配的实际运行路径对应的路径约束条件信息,进行修改;对修改后的路径约 束条件信息求解,将求得的解作为新的测试数据输出给所述动态符号执行模块。 其中,更进一步优选的,所述基于二进制程序的测试数据生成器,还包括 用户接口模块,用于获得目标代码段; 路径确定模块,用于获得二进制程序的基本块信息和函数调用信息,通过静态分 析获得二进制程序的数据流和控制流信息;根据所获得的二进制程序的数据流和控制流 信息,从所述目标代码段所在的基本块开始追溯到读取所述初始测试数据函数所在的基本 块,确定出从所述初始测试数据的输入点到所述目标代码段的路径;从所确定出的路径中 确定出引导路径。 其中,更进一步优选的,所述路径确定模块,包括 路径回溯单元,用于根据所获得的二进制程序的数据流和控制流信息,从所述目 标代码段所在的基本块开始追溯到所述初始测试数据所在的基本块,确定出从所述初始测 试数据的输入点到所述目标代码段的路径; 引导路径确定单元,用于判断所确定出的路径中是否存在未处理的路径;若有,则 从中选择一个作为引导路径;否则,触发所述用户接口模块。 其中,更进一步优选的,所述基于二进制程序的测试数据生成器,还包括 调试器,负责加载二进制程序使其处于调试运行状态,并解析初始测试数据,得到与所述初始测试数据对应的二进制程序的状态信息,并将与所述初始测试数据对应的二进制程序的状态信息提供给所述动态符号执行模块。 由上述本专利技术提供的技术方案可以看出,本专利技术由于结合了静态分析与动态分析 的优点,采用了动态执行的方法获得实际执本文档来自技高网...
【技术保护点】
一种基于二进制程序的测试数据生成方法,其特征在于,包括:获取初始测试数据对应的二进制程序的状态信息,并获取引导路径;对所述引导路径和所述初始测试数据对应的二进制程序的状态信息,运行动态符号执行程序,根据运行结果获得相应的条件跳转地址信息;基于所获得的条件跳转地址信息,将初始测试数据对应的实际运行路径与引导路径进行匹配;生成与所述引导路径相匹配的实际运行路径对应的测试数据。
【技术特征摘要】
【专利技术属性】
技术研发人员:崔宝江,王禹,洪海,
申请(专利权)人:北京邮电大学,
类型:发明
国别省市:11[中国|北京]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。