CN116305173B - 一种整数漏洞查找方法、装置、计算机设备和存储介质 - Google Patents

一种整数漏洞查找方法、装置、计算机设备和存储介质 Download PDF

Info

Publication number
CN116305173B
CN116305173B CN202310590134.2A CN202310590134A CN116305173B CN 116305173 B CN116305173 B CN 116305173B CN 202310590134 A CN202310590134 A CN 202310590134A CN 116305173 B CN116305173 B CN 116305173B
Authority
CN
China
Prior art keywords
program
integer
vulnerability
variables
variable
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202310590134.2A
Other languages
English (en)
Other versions
CN116305173A (zh
Inventor
尹帮虎
唐见兵
焦鹏
段红
尹全军
唐涛
刘彦辰
宋海博
汪骁晗
杨铠铭
陈媚春
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
National University of Defense Technology
Original Assignee
National University of Defense Technology
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by National University of Defense Technology filed Critical National University of Defense Technology
Priority to CN202310590134.2A priority Critical patent/CN116305173B/zh
Publication of CN116305173A publication Critical patent/CN116305173A/zh
Application granted granted Critical
Publication of CN116305173B publication Critical patent/CN116305173B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02ATECHNOLOGIES FOR ADAPTATION TO CLIMATE CHANGE
    • Y02A50/00TECHNOLOGIES FOR ADAPTATION TO CLIMATE CHANGE in human health protection, e.g. against extreme weather
    • Y02A50/30Against vector-borne diseases, e.g. mosquito-borne, fly-borne, tick-borne or waterborne diseases whose impact is exacerbated by climate change
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

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

Description

一种整数漏洞查找方法、装置、计算机设备和存储介质
技术领域
本申请涉及整数漏洞查找领域,特别是涉及一种整数漏洞查找方法、装置、计算机设备和存储介质。
背景技术
近年来,随着新一代信息技术的发展,人们对安全攸关软件安全性和可靠性提出了更高要求。整数漏洞(包括整数上溢、整数下溢、符号错误和截断错误等)普遍存在且数量居高不下,影响广泛,涉及多个领域,危害严重。因此整数漏洞获得了学术界和工业界的广泛关注。
整数漏洞可大致分为两类:一是由加法、减法、乘法和左移等操作带来的算术溢出;二是类型转换错误,包括无符号和有符号数转换错误、高宽度转低宽度(截断错误)。这些漏洞产生的根源在于整型变量都只能表示有限范围。通过建立整数漏洞安全模型,当前的整数漏洞检测方法大致分为2类:
1)静态分析技术:在不直接运行程序的前提下,通过分析得到程序中整型变量的近似取值范围,即程序不变式。再基于程序不变式来判断是否满足触发整数漏洞的条件。
2)动态检测技术:在程序执行过程中,通过判定每个程序点源操作数的取值范围是否满足整数漏洞的触发条件来判定整数漏洞是否存在。在实现上,包括基于代码替换(如SafeInt,IntSafe)或代码插装(如RICH,IOC)实现的动态判定。
在漏洞动态检测技术中, Fuzzing 技术是一种快速并且有效的方式。其基本思想是通过变异算法提供各种非预期输入,启发程序执行更多的代码模块和路径,监视目标程序在处理该输入是否出现异常的动态测试方法。经过多年的发展,模糊测试可分为四大类型,包括:1)测试用例随机生成,如zzuf;2)基于目标静态数据结构信息生成测试用例,如基于已知文件格式和网络协议规范,代表性研究工作有Peach,Sulley等;3)基于遗传迭代的代码覆盖率反馈变异,代表工作有honggfuzz和AFL等;4)基于符号执行和求解生成用例,遍历程序执行路径,代表工作有KLEE,SAGE以及商用版本SpringField等。这些代表的模糊测试工作直接用于整数漏洞查找时存在自动化程度有限和效率不高等缺点。
以上传统的整数漏洞查找方法存在一些不足之处:
1、由于静态分析产生的不变式通常是一个上近似,得到的数值范围比较粗糙,其返回结果是在某些程序点可能会发生整数漏洞,即会产生很多误报。为了发现真正的整数漏洞还需要对可能的整数漏洞开展进一步分析,从而给整数漏洞检测人员带来很多误报排除的工作量。
2、动态检测技术一般是在每个程序点的每个源操作数及其数值操作处均开展整数漏洞触发条件的检测,给源程序的执行带来了较高的额外时间开销。
3、在现有的基于模糊测试的整数漏洞查找中,以分支或语句覆盖为引导产生的测试用例对于查找整数漏洞针对性不强,即测试用例生成的目的性不够明确,产生能够有效触发整数漏洞的测试用例效率较低。
发明内容
基于此,有必要针对上述技术问题,提供一种能够提高整数漏洞检测效率的整数漏洞查找方法、装置、计算机设备和存储介质。
一种整数漏洞查找方法,所述方法包括:
通过扩展整型变量长度对源程序进行变异,得到所述源程序的变异程序;
根据所述源程序和所述变异程序构造组合程序;所述组合程序中包括插桩的整数漏洞检测条件变量和整数漏洞检测条件语句;所述整数漏洞检测条件变量和所述整数漏洞检测条件语句用于在程序结束点处检测整数漏洞;
以执行所述整数漏洞检测条件语句为目标,对所述组合程序开展模糊测试,直至触发整数漏洞;
基于程序点状态比对法确定整数漏洞产生的根源位置信息。
在其中一个实施例中,还包括:获取源程序;
将所述源程序中全部64位的整型变量、32位整型变量、16位整型变量和8位整型变量分别扩展为128位有符号整型变量、64位有符号整型变量、32位有符号整型变量和16位有符号整型变量,得到所述源程序的变异程序。
在其中一个实施例中,还包括:若编译器中没有128位的整数变量类型,则定义一个包含两个64位整型变量的结构体作为128位整型变量;
当编译器中没有64位的整数变量类型,则定义一个包含两个32位整型变量的结构体作为64位整型变量。
在其中一个实施例中,还包括:在所述源程序和所述变异程序中选取整数漏洞检测的依赖变量;所述依赖变量包括程序返回变量、赋值后再未被使用的变量以及预先选取的其他变量;
基于程序插装法,通过引入全局变量的方式将不包括程序返回变量的依赖变量在程序执行即将结束处的取值保存在相应的全局变量中,将所述全局变量和所述程序返回变量作为整数漏洞检测条件变量,得到所述源程序和所述变异程序的插装版本;
构造只包含一个空的main函数的第一组合程序;
在所述第一组合程序的main函数中,根据传递给所述源程序和所述变异程序中被调主入口函数的形参,定义相应实参变量,并通过标准化输入对所述源程序对应的实参变量进行初始化,同时将所述源程序对应的实参变量赋值给所述变异程序对应的实参变量;
通过另开的第一线程调用源程序插装版本的主入口函数,其中,调用时的形参与所述源程序保持一致;
通过另开的第二线程调用变异程序插装版本的主入口函数,得到第二组合程序;
在所述第二组合程序中插入关于源程序整数漏洞检测条件变量与变异程序整数漏洞条件变量是否一一对应相等的条件判断语句,在所有对应变量均相等不成立的假分支插入触发整数漏洞的标记,得到最终的组合程序。
在其中一个实施例中,还包括:以所述组合程序为输入,设置模糊测试的引导策略为执行到触发整数漏洞的标记处;
利用模糊测试工具不断产生测试用例,执行所述组合程序,直至触发整数漏洞。
在其中一个实施例中,还包括:记录触发整数漏洞时的测试用例;
以所述测试用例为输入,分别执行所述源程序和所述变异程序,并记录每个程序点的变量取值状态;
若执行到程序点p时,首次发现所述源程序的变量取值状态和所述变异程序不一致,则标记所述程序点p为当前次整数漏洞产生的根源位置;
返回输出所述测试用例的信息和所述程序点p的位置信息。
在其中一个实施例中,还包括:所述模糊测试工具为AFLgo。
一种整数漏洞查找装置,所述装置包括:
变异程序生成模块,用于通过扩展整型变量长度对源程序进行变异,得到所述源程序的变异程序;
组合程序生成模块,用于根据所述源程序和所述变异程序构造组合程序;所述组合程序中包括插桩的整数漏洞检测条件变量和整数漏洞检测条件语句;所述整数漏洞检测条件变量和所述整数漏洞检测条件语句用于在程序结束点处检测整数漏洞;
模糊测试模块,用于以执行所述整数漏洞检测条件语句为目标,对所述组合程序开展模糊测试,直至触发整数漏洞;
整数漏洞确定模块,用于基于程序点状态比对法确定整数漏洞产生的根源位置信息。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
通过扩展整型变量长度对源程序进行变异,得到所述源程序的变异程序;
根据所述源程序和所述变异程序构造组合程序;所述组合程序中包括插桩的整数漏洞检测条件变量和整数漏洞检测条件语句;所述整数漏洞检测条件变量和所述整数漏洞检测条件语句用于在程序结束点处检测整数漏洞;
以执行所述整数漏洞检测条件语句为目标,对所述组合程序开展模糊测试,直至触发整数漏洞;
基于程序点状态比对法确定整数漏洞产生的根源位置信息。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
通过扩展整型变量长度对源程序进行变异,得到所述源程序的变异程序;
根据所述源程序和所述变异程序构造组合程序;所述组合程序中包括插桩的整数漏洞检测条件变量和整数漏洞检测条件语句;所述整数漏洞检测条件变量和所述整数漏洞检测条件语句用于在程序结束点处检测整数漏洞;
以执行所述整数漏洞检测条件语句为目标,对所述组合程序开展模糊测试,直至触发整数漏洞;
基于程序点状态比对法确定整数漏洞产生的根源位置信息。
上述整数漏洞查找方法、装置、计算机设备和存储介质,通过扩展整型变量长度对源程序进行变异,得到对应的变异程序,根据源程序和变异程序构造组合程序,组合程序中通过插桩的整数漏洞检测条件变量和整数漏洞检测条件语句在程序结束点处检测整数漏洞,以执行整数漏洞检测条件语句为目标,对组合程序开展模糊测试,直至触发整数漏洞;基于程序点状态比对法确定整数漏洞产生的根源位置信息。
本发明可以实现如下技术效果:
1)基于整型变量长度扩展的程序变异技术,能够简化整数漏洞查找模型;
2)相比在每个程序点的每个操作数及其操作处均开展整数漏洞条件检测的动态技术,本发明只需在程序结束点处检测整数漏洞是否发生即可,检测效率高;
3)本发明基于目标程序点执行的模糊测试引导策略,更有利于快速生成触发整数漏洞条件的测试用例。相比基于分支和语句覆盖的模糊测试引导策略,本发明采用基于目标程序点执行引导的模糊测试工具,可以增强测试用例生成的目标性,从而提高整数漏洞查找的效率。
附图说明
图1为一个实施例中整数漏洞查找方法的流程示意图;
图2为一个具体实施例中整数漏洞查找方法的流程示意图;
图3为一个实施例中整数漏洞查找装置的结构框图;
图4为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
在一个实施例中,如图1所示,提供了一种整数漏洞查找方法,包括以下步骤:
步骤102,通过扩展整型变量长度对源程序进行变异,得到源程序的变异程序。
本发明提出扩展整型变量长度对源程序进行变异,具体是将源程序中全部64位的整型变量、32位整型变量、16位整型变量和8位整型变量分别扩展为128位有符号整型变量、64位有符号整型变量、32位有符号整型变量和16位有符号整型变量。
步骤104,根据源程序和变异程序构造组合程序。
组合程序中包括插桩的整数漏洞检测条件变量和整数漏洞检测条件语句;整数漏洞检测条件变量和整数漏洞检测条件语句用于在程序结束点处检测整数漏洞。
具体地,本发明首先选取依赖变量,依赖变量包括三种:1)源程序和变异程序main函数的返回参数;2)基于数据流分析得到源程序中变量的def-use链,如果变量a被赋值以后再也未被使用,则将源程序中和变异程序中的a变量确定为依赖变量;3)用户选取的其他变量。基于程序插装技术,通过引入全局变量的方式将源程序和变异程序中的依赖变量(不包括程序返回变量)在程序执行即将结束处(即return语句前一个程序点)的取值保存在相应的全局变量中,得到源程序和变异程序的插装版本,这些全局变量称为整数漏洞检测条件变量。
构建的组合程序种,还插入了一条关于源程序整数漏洞检测条件变量与变异程序整数漏洞条件变量是否一一对应相等的条件判断语句,在假分支(即“所有对应变量均相等”不成立),插入触发整数漏洞的标记(对应模糊测试中的crash)。该条件判断语句即为整数漏洞检测条件语句,用于在程序执行即将结束处检测整数漏洞。
相比在每个程序点的每个操作数及其操作处均开展整数漏洞条件检测的动态技术,本发明只需在程序结束点处检测整数漏洞是否发生即可。
另外,本发明需要比对源程序整数漏洞检测条件变量与变异程序整数漏洞条件变量的值,但源程序和变异程序可以通过多线程技术同时执行,只增加了少量依赖变量状态采集,以及程序结束点处的整数漏洞触发条件检测,带来的额外开销较小,执行效率高。
步骤106,以执行整数漏洞检测条件语句为目标,对组合程序开展模糊测试,直至触发整数漏洞。
相比基于分支和语句覆盖的模糊测试引导策略,本发明以执行整数漏洞检测条件语句为目标,采用基于目标程序点执行引导的模糊测试工具,可以增强测试用例生成的目标性,从而提高整数漏洞查找的效率,降低时间开销。
步骤108,基于程序点状态比对法确定整数漏洞产生的根源位置信息。
本发明方案能够定位到的整数漏洞产生的根源,可支撑进一步判断所发现整数漏洞的危害性。
上述整数漏洞查找方法中,通过扩展整型变量长度对源程序进行变异,得到对应的变异程序,根据源程序和变异程序构造组合程序,组合程序中通过插桩的整数漏洞检测条件变量和整数漏洞检测条件语句在程序结束点处检测整数漏洞,以执行整数漏洞检测条件语句为目标,对组合程序开展模糊测试,直至触发整数漏洞;基于程序点状态比对法确定整数漏洞产生的根源位置信息。
本发明可以实现如下技术效果:
1)基于整型变量长度扩展的程序变异技术,能够简化整数漏洞查找模型;
2)相比在每个程序点的每个操作数及其操作处均开展整数漏洞条件检测的动态技术,本发明只需在程序结束点处检测整数漏洞是否发生即可,检测效率高;
3)本发明基于目标程序点执行的模糊测试引导策略,更有利于快速生成触发整数漏洞条件的测试用例。相比基于分支和语句覆盖的模糊测试引导策略,本发明采用基于目标程序点执行引导的模糊测试工具,可以增强测试用例生成的目标性,从而提高整数漏洞查找的效率。
在一个具体实施例中,如图2所示,提供一种基于程序变异和模糊测试的整数漏洞查找方法,包括:
步骤1:基于整数漏洞产生机理对源程序进行变异,得到源程序的变异版本,即变异程序;
步骤11:将源程序中64位的整型变量(记作int_64),如(Unsigned) Long long或Long,全部重新定义为128位有符号整型变量(记作int_128),得到变异程序版本1;
步骤12:将变异程序版本1中32位整型变量(记作int_32),如(Unsigned)Int,全部重新定义位64位有符号整型变量(即int_64),如Long,得到变异程序版本2;
步骤13:将变异程序版本2中16位整型变量(记作int_16),如(Unsigned)Short,全部重新定义位32位有符号整型变量(即int_32),如Int,得到变异程序版本3;
步骤14:将变异程序版本3中8位整型变量(记作int_8),如(Unsigned)Char,全部重新定义位16位有符号整型变量(即int_16),如Short,得到最终变异程序版本;
如果编译器中变量类型如果没有128位(或64位)的整数,将通过其他等价技术加以实现,具体方法是定义一个包含两个64位(或32位)整型变量的结构体,即:
struct int_128
{
int_64 a;
int_64 b;
};或
struct int_64
{
int_32 a;
int_32 b;
};
步骤2:基于源程序和变异程序构造一个组合程序,并在组合程序中插桩整数漏洞检测条件语句;
步骤21:在源程序和变异程序中选取整数漏洞检测的依赖变量。首先定义整数漏洞检测的依赖变量集合s为空集;如果源程序和变异程序main函数包括返回参数,则将返回参数对加入到s中;基于数据流分析得到源程序中变量的def-use链,再基于该分析结果选取依赖变量。具体方法是,如果变量a被赋值以后再也未被使用,则将源程序中和变异程序中的a变量对加入到s中;最后将用户选取的变量对加入到s中。
步骤22:基于程序插装技术,通过引入全局变量的方式将源程序和变异程序中的依赖变量(不包括程序返回变量)在程序执行即将结束处(即return语句前一个程序点)的取值保存在相应的全局变量中,得到源程序和变异程序的插装版本,这些全局变量和程序返回变量称为整数漏洞检测条件变量;
步骤23:构造一个只包含空的main函数的组合程序1;
步骤24:在组合程序1的main函数中,根据传递给源程序和变异程序中被调主入口函数的形参,定义相应实参变量,并通过标准化输入对源程序对应的实参变量进行初始化,同时将源程序对应的实参变量赋值给变异程序对应的实参变量。接下里,通过一个线程调用源程序插装版本的主入口函数(如main函数,为便于区分,将该函数重命名为main1),调用时的形参与源程序保持一致;通过另一个线程调用变异程序插装版本的主入口函数(如main函数,为便于区分,将该函数重命名为main2),得到组合程序2;
步骤25:在组合程序2中插入一条关于源程序整数漏洞检测条件变量与变异程序整数漏洞条件变量是否一一对应相等的条件判断语句,在假分支(即“所有对应变量均相等”不成立),插入触发整数漏洞的标记(对应模糊测试中的crash),从而得到最终的组合程序;
步骤3:以执行整数漏洞检测条件语句为目标,对组合程序开展模糊测试,直至触发整数漏洞;
步骤31:以组合程序为输入,设置模糊测试的引导策略为执行到触发整数漏洞的标记处(即触发crash);
步骤32:利用模糊测试工具AFLgo不断产生测试用例,执行组合程序,并检验标记的crash是否会触发。如果产生整数溢出对应的crash,则转入下一步骤,否则继续开展模糊测试,产生新的测试用例检验crash是否触发;
步骤4:基于程序点状态比对定位整数漏洞产生的根源。
步骤41:记录触发整数漏洞对应的crash时的具体测试用例;
步骤42:以该测试用例为输入,分别执行源程序和变异程序,并记录每个程序点的变量取值状态。如果执行到某个程序点p时,首次发现源程序执行到p点的变量状态和变异程序执行到p点的状态不一致,则说明程序点p是本次整数漏洞产生的根源,可进一步分析该整数漏洞的危害;
步骤43:返回触发该漏洞的输入用例和漏洞产生根源程序点p。
应该理解的是,虽然图1-2的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1-2中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图3所示,提供了一种整数漏洞查找装置,包括:变异程序生成模块302、组合程序生成模块304、模糊测试模块306和整数漏洞确定模块308,其中:
变异程序生成模块302,用于通过扩展整型变量长度对源程序进行变异,得到源程序的变异程序;
组合程序生成模块304,用于根据源程序和变异程序构造组合程序;组合程序中包括插桩的整数漏洞检测条件变量和整数漏洞检测条件语句;整数漏洞检测条件变量和整数漏洞检测条件语句用于在程序结束点处检测整数漏洞;
模糊测试模块306,用于以执行整数漏洞检测条件语句为目标,对组合程序开展模糊测试,直至触发整数漏洞;
整数漏洞确定模块308,用于基于程序点状态比对法确定整数漏洞产生的根源位置信息。
变异程序生成模块302还用于获取源程序;将源程序中全部64位的整型变量、32位整型变量、16位整型变量和8位整型变量分别扩展为128位有符号整型变量、64位有符号整型变量、32位有符号整型变量和16位有符号整型变量,得到源程序的变异程序。
变异程序生成模块302还用于若编译器中没有128位的整数变量类型,则定义一个包含两个64位整型变量的结构体作为128位整型变量;当编译器中没有64位的整数变量类型,则定义一个包含两个32位整型变量的结构体作为64位整型变量。
组合程序生成模块304还用于在源程序和变异程序中选取整数漏洞检测的依赖变量;依赖变量包括程序返回变量、赋值后再未被使用的变量以及预先选取的其他变量;基于程序插装法,通过引入全局变量的方式将不包括程序返回变量的依赖变量在程序执行即将结束处的取值保存在相应的全局变量中,将全局变量和程序返回变量作为整数漏洞检测条件变量,得到源程序和变异程序的插装版本;构造只包含一个空的main函数的第一组合程序;在第一组合程序的main函数中,根据传递给源程序和变异程序中被调主入口函数的形参,定义相应实参变量,并通过标准化输入对源程序对应的实参变量进行初始化,同时将源程序对应的实参变量赋值给变异程序对应的实参变量;通过另开的第一线程调用源程序插装版本的主入口函数,其中,调用时的形参与源程序保持一致;通过另开的第二线程调用变异程序插装版本的主入口函数,得到第二组合程序;在第二组合程序中插入关于源程序整数漏洞检测条件变量与变异程序整数漏洞条件变量是否一一对应相等的条件判断语句,在所有对应变量均相等不成立的假分支插入触发整数漏洞的标记,得到最终的组合程序。
模糊测试模块306还用于以组合程序为输入,设置模糊测试的引导策略为执行到触发整数漏洞的标记处;利用模糊测试工具不断产生测试用例,执行组合程序,直至触发整数漏洞。
整数漏洞确定模块308还用于记录触发整数漏洞时的测试用例;以测试用例为输入,分别执行源程序和变异程序,并记录每个程序点的变量取值状态;若执行到程序点p时,首次发现源程序的变量取值状态和变异程序不一致,则标记程序点p为当前次整数漏洞产生的根源位置;返回输出测试用例的信息和程序点p的位置信息。
关于整数漏洞查找装置的具体限定可以参见上文中对于整数漏洞查找方法的限定,在此不再赘述。上述整数漏洞查找装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图4所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种整数漏洞查找方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图4中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,该存储器存储有计算机程序,该处理器执行计算机程序时实现上述方法实施例中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述方法实施例中的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink) DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

Claims (9)

1.一种整数漏洞查找方法,其特征在于,所述方法包括:
获取源程序,将所述源程序中全部64位的整型变量、32位整型变量、16位整型变量和8位整型变量分别扩展为128位有符号整型变量、64位有符号整型变量、32位有符号整型变量和16位有符号整型变量,得到所述源程序的变异程序;
根据所述源程序和所述变异程序构造组合程序;所述组合程序中包括插桩的整数漏洞检测条件变量和整数漏洞检测条件语句;所述整数漏洞检测条件变量和所述整数漏洞检测条件语句用于在程序结束点处检测整数漏洞;
以执行所述整数漏洞检测条件语句为目标,对所述组合程序开展模糊测试,直至触发整数漏洞;
基于程序点状态比对法确定整数漏洞产生的根源位置信息。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若编译器中没有128位的整数变量类型,则定义一个包含两个64位整型变量的结构体作为128位整型变量;
当编译器中没有64位的整数变量类型,则定义一个包含两个32位整型变量的结构体作为64位整型变量。
3.根据权利要求1所述的方法,其特征在于,根据所述源程序和所述变异程序构造组合程序;所述组合程序中包括插桩的整数漏洞检测条件变量和整数漏洞检测条件语句;所述整数漏洞检测条件变量和所述整数漏洞检测条件语句用于在程序结束点处检测整数漏洞,包括:
在所述源程序和所述变异程序中选取整数漏洞检测的依赖变量;所述依赖变量包括程序返回变量、赋值后再未被使用的变量以及预先选取的其他变量;
基于程序插装法,通过引入全局变量的方式将不包括程序返回变量的依赖变量在程序执行即将结束处的取值保存在相应的全局变量中,将所述全局变量和所述程序返回变量作为整数漏洞检测条件变量,得到所述源程序和所述变异程序的插装版本;
构造只包含一个空的主函数的第一组合程序;
在所述第一组合程序的主函数中,根据传递给所述源程序和所述变异程序中被调主入口函数的形参,定义相应实参变量,并通过标准化输入对所述源程序对应的实参变量进行初始化,同时将所述源程序对应的实参变量赋值给所述变异程序对应的实参变量;
通过另开的第一线程调用源程序插装版本的主入口函数,其中,调用时的形参与所述源程序保持一致;
通过另开的第二线程调用变异程序插装版本的主入口函数,得到第二组合程序;
在所述第二组合程序中插入关于源程序整数漏洞检测条件变量与变异程序整数漏洞条件变量是否一一对应相等的条件判断语句,在所有对应变量均相等不成立的假分支插入触发整数漏洞的标记,得到最终的组合程序。
4.根据权利要求3所述的方法,其特征在于,以执行所述整数漏洞检测条件语句为目标,对所述组合程序开展模糊测试,直至触发整数漏洞,包括:
以所述组合程序为输入,设置模糊测试的引导策略为执行到触发整数漏洞的标记处;
利用模糊测试工具不断产生测试用例,执行所述组合程序,直至触发整数漏洞。
5.根据权利要求4所述的方法,其特征在于,基于程序点状态比对法确定整数漏洞产生的根源位置信息,包括:
记录触发整数漏洞时的测试用例;
以所述测试用例为输入,分别执行所述源程序和所述变异程序,并记录每个程序点的变量取值状态;
若执行到程序点p时,首次发现所述源程序的变量取值状态和所述变异程序不一致,则标记所述程序点p为当前次整数漏洞产生的根源位置;
返回输出所述测试用例的信息和所述程序点p的位置信息。
6.根据权利要求1至5任意一项所述的方法,其特征在于,所述模糊测试工具为AFLgo。
7.一种整数漏洞查找装置,其特征在于,所述装置包括:
变异程序生成模块,用于获取源程序,将所述源程序中全部64位的整型变量、32位整型变量、16位整型变量和8位整型变量分别扩展为128位有符号整型变量、64位有符号整型变量、32位有符号整型变量和16位有符号整型变量,得到所述源程序的变异程序;
组合程序生成模块,用于根据所述源程序和所述变异程序构造组合程序;所述组合程序中包括插桩的整数漏洞检测条件变量和整数漏洞检测条件语句;所述整数漏洞检测条件变量和所述整数漏洞检测条件语句用于在程序结束点处检测整数漏洞;
模糊测试模块,用于以执行所述整数漏洞检测条件语句为目标,对所述组合程序开展模糊测试,直至触发整数漏洞;
整数漏洞确定模块,用于基于程序点状态比对法确定整数漏洞产生的根源位置信息。
8.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至6中任一项所述方法的步骤。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至6中任一项所述的方法的步骤。
CN202310590134.2A 2023-05-24 2023-05-24 一种整数漏洞查找方法、装置、计算机设备和存储介质 Active CN116305173B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310590134.2A CN116305173B (zh) 2023-05-24 2023-05-24 一种整数漏洞查找方法、装置、计算机设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310590134.2A CN116305173B (zh) 2023-05-24 2023-05-24 一种整数漏洞查找方法、装置、计算机设备和存储介质

Publications (2)

Publication Number Publication Date
CN116305173A CN116305173A (zh) 2023-06-23
CN116305173B true CN116305173B (zh) 2023-07-28

Family

ID=86785532

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310590134.2A Active CN116305173B (zh) 2023-05-24 2023-05-24 一种整数漏洞查找方法、装置、计算机设备和存储介质

Country Status (1)

Country Link
CN (1) CN116305173B (zh)

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112861134A (zh) * 2021-03-03 2021-05-28 国家计算机网络与信息安全管理中心 基于优化变异策略的漏洞检测方法、装置、设备及介质

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9245125B2 (en) * 2014-02-27 2016-01-26 Nec Laboratories America, Inc. Duleak: a scalable app engine for high-impact privacy leaks
CN110909358A (zh) * 2019-10-22 2020-03-24 上海安智信息科技有限公司 一种基于动静态分析的整形漏洞检测方法
CN112631901B (zh) * 2020-12-16 2023-08-08 中国科学院信息工程研究所 基于妨碍特征的模糊测试工具测试方法及电子装置
KR20220095986A (ko) * 2020-12-30 2022-07-07 한국전자통신연구원 임베디드 프로세서의 소스 코드의 컴파일링 방법 및 컴파일러
CN114626071B (zh) * 2022-03-21 2023-04-07 中国人民解放军国防科技大学 一种漏洞导向的模糊测试方法、系统和介质

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112861134A (zh) * 2021-03-03 2021-05-28 国家计算机网络与信息安全管理中心 基于优化变异策略的漏洞检测方法、装置、设备及介质

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
基于动静态程序分析的整形漏洞检测工具;陈平;韩浩;沈晓斌;殷新春;茅兵;谢立;;电子学报(08);全文 *
基于运行时类型分析的整形漏洞二进制检测和定位系统;肖海;陈平;茅兵;谢立;;计算机科学(01);全文 *

Also Published As

Publication number Publication date
CN116305173A (zh) 2023-06-23

Similar Documents

Publication Publication Date Title
CN109308415B (zh) 一种面向二进制的导向性模糊测试方法与系统
KR101981028B1 (ko) 바이너리 기반 보안 취약점 탐색 시스템, 그 방법 및 프로그램
CN101964036B (zh) 漏洞检测方法及装置
CN107193732B (zh) 一种基于路径比对的校验函数定位方法
CN111832026B (zh) 一种漏洞利用定位方法、系统、装置及介质
EP3264274B1 (en) Input discovery for unknown program binaries
CN112016099B (zh) 二进制程序过程间静态污点分析方法及系统
CN113468525A (zh) 针对二进制程序的相似漏洞检测方法及装置
CN114389978B (zh) 一种基于静态污点分析的网络协议侧信道检测方法和系统
CN109214149B (zh) 一种mips固件基地址自动化检测方法
CN107085687A (zh) 基于二进制熵的模糊测试加解密函数定位方法
CN112506564B (zh) 一种用于建立控制流图的方法、系统和介质
CN116305173B (zh) 一种整数漏洞查找方法、装置、计算机设备和存储介质
CN103744776A (zh) 一种基于符号化函数摘要的静态分析方法及系统
CN115658542B (zh) 一种代码密码算法类型识别与参数误用检测方法与系统
CN114741700B (zh) 基于符号化污点分析的公共组件库漏洞可利用性分析方法及装置
CN113918959A (zh) 一种漏洞挖掘方法、装置、电子设备及介质
CN111191245B (zh) 基于路径感知变异策略的模糊测试方法
CN114065202A (zh) 一种恶意代码检测方法、装置、电子设备及存储介质
CN114462043A (zh) 基于强化学习的Java反序列化漏洞检测系统及方法
CN113836539A (zh) 基于精准测试的电力工控系统漏洞全流程处置系统及方法
CN108415836B (zh) 利用应用程序检测计算机系统性能变化的方法和系统
CN114527963A (zh) C++二进制文件中的类继承关系识别方法及电子装置
Yang et al. Source Code Vulnerability Detection Using Vulnerability Dependency Representation Graph
CN115510450B (zh) 一种面向计算机二进制程序的比对依赖识别方法与系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant