一种整数漏洞查找方法、装置、计算机设备和存储介质制造方法及图纸

技术编号:37973541 阅读:12 留言:0更新日期:2023-06-30 09:48
本申请涉及一种整数漏洞查找方法、装置、计算机设备和存储介质。所述方法包括:通过扩展整型变量长度对源程序进行变异,得到对应的变异程序,根据源程序和变异程序构造组合程序,组合程序中通过插桩的整数漏洞检测条件变量和整数漏洞检测条件语句在程序结束点处检测整数漏洞,以执行整数漏洞检测条件语句为目标,对组合程序开展模糊测试,直至触发整数漏洞;基于程序点状态比对法确定整数漏洞产生的根源位置信息。本发明专利技术基于整型变量长度扩展的程序变异技术,能够简化整数漏洞查找模型;只需在程序结束点处检测整数漏洞是否发生即可,检测效率高;基于目标程序点执行的模糊测试引导策略,更有利于快速生成触发整数漏洞条件的测试用例。测试用例。测试用例。

【技术实现步骤摘要】
一种整数漏洞查找方法、装置、计算机设备和存储介质


[0001]本申请涉及整数漏洞查找领域,特别是涉及一种整数漏洞查找方法、装置、计算机设备和存储介质。

技术介绍

[0002]近年来,随着新一代信息技术的发展,人们对安全攸关软件安全性和可靠性提出了更高要求。整数漏洞(包括整数上溢、整数下溢、符号错误和截断错误等)普遍存在且数量居高不下,影响广泛,涉及多个领域,危害严重。因此整数漏洞获得了学术界和工业界的广泛关注。
[0003]整数漏洞可大致分为两类:一是由加法、减法、乘法和左移等操作带来的算术溢出;二是类型转换错误,包括无符号和有符号数转换错误、高宽度转低宽度(截断错误)。这些漏洞产生的根源在于整型变量都只能表示有限范围。通过建立整数漏洞安全模型,当前的整数漏洞检测方法大致分为2类:1)静态分析技术:在不直接运行程序的前提下,通过分析得到程序中整型变量的近似取值范围,即程序不变式。再基于程序不变式来判断是否满足触发整数漏洞的条件。
[0004]2)动态检测技术:在程序执行过程中,通过判定每个程序点源操作数的取值范围是否满足整数漏洞的触发条件来判定整数漏洞是否存在。在实现上,包括基于代码替换(如SafeInt,IntSafe)或代码插装(如RICH,IOC)实现的动态判定。
[0005]在漏洞动态检测技术中, Fuzzing 技术是一种快速并且有效的方式。其基本思想是通过变异算法提供各种非预期输入,启发程序执行更多的代码模块和路径,监视目标程序在处理该输入是否出现异常的动态测试方法。经过多年的发展,模糊测试可分为四大类型,包括:1)测试用例随机生成,如zzuf;2)基于目标静态数据结构信息生成测试用例,如基于已知文件格式和网络协议规范,代表性研究工作有Peach,Sulley等;3)基于遗传迭代的代码覆盖率反馈变异,代表工作有honggfuzz和AFL等;4)基于符号执行和求解生成用例,遍历程序执行路径,代表工作有KLEE,SAGE以及商用版本SpringField等。这些代表的模糊测试工作直接用于整数漏洞查找时存在自动化程度有限和效率不高等缺点。
[0006]以上传统的整数漏洞查找方法存在一些不足之处:1、由于静态分析产生的不变式通常是一个上近似,得到的数值范围比较粗糙,其返回结果是在某些程序点可能会发生整数漏洞,即会产生很多误报。为了发现真正的整数漏洞还需要对可能的整数漏洞开展进一步分析,从而给整数漏洞检测人员带来很多误报排除的工作量。
[0007]2、动态检测技术一般是在每个程序点的每个源操作数及其数值操作处均开展整数漏洞触发条件的检测,给源程序的执行带来了较高的额外时间开销。
[0008]3、在现有的基于模糊测试的整数漏洞查找中,以分支或语句覆盖为引导产生的测试用例对于查找整数漏洞针对性不强,即测试用例生成的目的性不够明确,产生能够有效触发整数漏洞的测试用例效率较低。

技术实现思路

[0009]基于此,有必要针对上述技术问题,提供一种能够提高整数漏洞检测效率的整数漏洞查找方法、装置、计算机设备和存储介质。
[0010]一种整数漏洞查找方法,所述方法包括:通过扩展整型变量长度对源程序进行变异,得到所述源程序的变异程序;根据所述源程序和所述变异程序构造组合程序;所述组合程序中包括插桩的整数漏洞检测条件变量和整数漏洞检测条件语句;所述整数漏洞检测条件变量和所述整数漏洞检测条件语句用于在程序结束点处检测整数漏洞;以执行所述整数漏洞检测条件语句为目标,对所述组合程序开展模糊测试,直至触发整数漏洞;基于程序点状态比对法确定整数漏洞产生的根源位置信息。
[0011]在其中一个实施例中,还包括:获取源程序;将所述源程序中全部64位的整型变量、32位整型变量、16位整型变量和8位整型变量分别扩展为128位有符号整型变量、64位有符号整型变量、32位有符号整型变量和16位有符号整型变量,得到所述源程序的变异程序。
[0012]在其中一个实施例中,还包括:若编译器中没有128位的整数变量类型,则定义一个包含两个64位整型变量的结构体作为128位整型变量;当编译器中没有64位的整数变量类型,则定义一个包含两个32位整型变量的结构体作为64位整型变量。
[0013]在其中一个实施例中,还包括:在所述源程序和所述变异程序中选取整数漏洞检测的依赖变量;所述依赖变量包括程序返回变量、赋值后再未被使用的变量以及预先选取的其他变量;基于程序插装法,通过引入全局变量的方式将不包括程序返回变量的依赖变量在程序执行即将结束处的取值保存在相应的全局变量中,将所述全局变量和所述程序返回变量作为整数漏洞检测条件变量,得到所述源程序和所述变异程序的插装版本;构造只包含一个空的main函数的第一组合程序;在所述第一组合程序的main函数中,根据传递给所述源程序和所述变异程序中被调主入口函数的形参,定义相应实参变量,并通过标准化输入对所述源程序对应的实参变量进行初始化,同时将所述源程序对应的实参变量赋值给所述变异程序对应的实参变量;通过另开的第一线程调用源程序插装版本的主入口函数,其中,调用时的形参与所述源程序保持一致;通过另开的第二线程调用变异程序插装版本的主入口函数,得到第二组合程序;在所述第二组合程序中插入关于源程序整数漏洞检测条件变量与变异程序整数漏洞条件变量是否一一对应相等的条件判断语句,在所有对应变量均相等不成立的假分支插入触发整数漏洞的标记,得到最终的组合程序。
[0014]在其中一个实施例中,还包括:以所述组合程序为输入,设置模糊测试的引导策略为执行到触发整数漏洞的标记处;利用模糊测试工具不断产生测试用例,执行所述组合程序,直至触发整数漏洞。
[0015]在其中一个实施例中,还包括:记录触发整数漏洞时的测试用例;
以所述测试用例为输入,分别执行所述源程序和所述变异程序,并记录每个程序点的变量取值状态;若执行到程序点p时,首次发现所述源程序的变量取值状态和所述变异程序不一致,则标记所述程序点p为当前次整数漏洞产生的根源位置;返回输出所述测试用例的信息和所述程序点p的位置信息。
[0016]在其中一个实施例中,还包括:所述模糊测试工具为AFLgo。
[0017]一种整数漏洞查找装置,所述装置包括:变异程序生成模块,用于通过扩展整型变量长度对源程序进行变异,得到所述源程序的变异程序;组合程序生成模块,用于根据所述源程序和所述变异程序构造组合程序;所述组合程序中包括插桩的整数漏洞检测条件变量和整数漏洞检测条件语句;所述整数漏洞检测条件变量和所述整数漏洞检测条件语句用于在程序结束点处检测整数漏洞;模糊测试模块,用于以执行所述整数漏洞检测条件语句为目标,对所述组合程序开展模糊测试,直至触发整数漏洞;整数漏洞确定模块,用于基于程序点状态比对法确定整数漏洞产生的根源位置信息。
[0018]一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:通过扩展整型变量长度对源程序进行变异,得到所述源程序的变异程序本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种整数漏洞查找方法,其特征在于,所述方法包括:通过扩展整型变量长度对源程序进行变异,得到所述源程序的变异程序;根据所述源程序和所述变异程序构造组合程序;所述组合程序中包括插桩的整数漏洞检测条件变量和整数漏洞检测条件语句;所述整数漏洞检测条件变量和所述整数漏洞检测条件语句用于在程序结束点处检测整数漏洞;以执行所述整数漏洞检测条件语句为目标,对所述组合程序开展模糊测试,直至触发整数漏洞;基于程序点状态比对法确定整数漏洞产生的根源位置信息。2.根据权利要求1所述的方法,其特征在于,通过扩展整型变量长度对源程序进行变异,得到所述源程序的变异程序,包括:获取源程序;将所述源程序中全部64位的整型变量、32位整型变量、16位整型变量和8位整型变量分别扩展为128位有符号整型变量、64位有符号整型变量、32位有符号整型变量和16位有符号整型变量,得到所述源程序的变异程序。3.根据权利要求2所述的方法,其特征在于,所述方法还包括:若编译器中没有128位的整数变量类型,则定义一个包含两个64位整型变量的结构体作为128位整型变量;当编译器中没有64位的整数变量类型,则定义一个包含两个32位整型变量的结构体作为64位整型变量。4.根据权利要求1所述的方法,其特征在于,根据所述源程序和所述变异程序构造组合程序;所述组合程序中包括插桩的整数漏洞检测条件变量和整数漏洞检测条件语句;所述整数漏洞检测条件变量和所述整数漏洞检测条件语句用于在程序结束点处检测整数漏洞,包括:在所述源程序和所述变异程序中选取整数漏洞检测的依赖变量;所述依赖变量包括程序返回变量、赋值后再未被使用的变量以及预先选取的其他变量;基于程序插装法,通过引入全局变量的方式将不包括程序返回变量的依赖变量在程序执行即将结束处的取值保存在相应的全局变量中,将所述全局变量和所述程序返回变量作为整数漏洞检测条件变量,得到所述源程序和所述变异程序的插装版本;构造只包含一个空的主函数的第一组合程序;在所述第一组合程序的主函数中,根据传递给所述源程序和所述变异程序中被调主入口函数的形参,定义相应实参变量,并通过标准化输入对所述源程序对应的实参变量进行初始化,同时将所述源程序对应的实参变量赋值给所述变异程序对应的实参变量;通过另开的第一线程调用源程序插装版...

【专利技术属性】
技术研发人员:尹帮虎唐见兵焦鹏段红尹全军唐涛刘彦辰宋海博汪骁晗杨铠铭陈媚春
申请(专利权)人:中国人民解放军国防科技大学
类型:发明
国别省市:

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

1