CN114491566B - 一种基于代码相似性的模糊测试方法、装置及存储介质 - Google Patents

一种基于代码相似性的模糊测试方法、装置及存储介质 Download PDF

Info

Publication number
CN114491566B
CN114491566B CN202210401549.6A CN202210401549A CN114491566B CN 114491566 B CN114491566 B CN 114491566B CN 202210401549 A CN202210401549 A CN 202210401549A CN 114491566 B CN114491566 B CN 114491566B
Authority
CN
China
Prior art keywords
code
similar
information
codes
fuzzy test
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
CN202210401549.6A
Other languages
English (en)
Other versions
CN114491566A (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.)
China Three Gorges Corp
Original Assignee
China Three Gorges Corp
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 China Three Gorges Corp filed Critical China Three Gorges Corp
Priority to CN202210401549.6A priority Critical patent/CN114491566B/zh
Publication of CN114491566A publication Critical patent/CN114491566A/zh
Application granted granted Critical
Publication of CN114491566B publication Critical patent/CN114491566B/zh
Priority to JP2022182775A priority patent/JP7290784B1/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/22Matching criteria, e.g. proximity measures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • G06F8/751Code clone detection
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Data Mining & Analysis (AREA)
  • Artificial Intelligence (AREA)
  • Computing Systems (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Evolutionary Biology (AREA)
  • Evolutionary Computation (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种基于代码相似性的模糊测试方法、装置及存储介质,该方法包括:对待测代码中选择的语句进行模糊测试,得到触发的异常崩溃的位置代码;基于相似度分析,确定待测代码中的相似代码信息;基于相似代码信息重新进行模糊测试,得到相似代码信息中的异常崩溃的位置代码;最终确定待测代码中的漏洞信息。通过实施本发明,以相似代码信息为引导,通过对待测代码和相似代码信息进行模糊测试,其中代码相似度分析属于静态方法,模糊测试属于动态方法,将两种方法结合,代码相似度的计算为模糊测试提供了目标,模糊测试为代码相似度的计算提供了样本,由此实现了将代码重用拷贝导致的漏洞尽可能的找出的效果。

Description

一种基于代码相似性的模糊测试方法、装置及存储介质
技术领域
本发明涉及计算机安全技术领域,具体涉及一种基于代码相似性的模糊测试方法、装置及存储介质。
背景技术
软件克隆,即通过复制和粘贴源代码进行重用。有时会对这些克隆进行少量修改以使其适应新的环境或用途。代码克隆的问题在于,必须在每个副本中修改原始文档中的错误,由此,如果进行扩展或调整等更改也需要多次进行。但是,编写者通常不去记录代码复制的位置。在这种情况下,需要检测它们十分困难。
由于代码的重用,软件系统中会出现多份相似的代码,由此很难修补软件系统中的所有漏洞 ,即漏洞可能在多个软件程序中存在,而没有得到充分跟踪。这就会导致相似的漏洞潜藏在程序中的不同地方。不能简单地通过使用修补程序来解决所有漏洞,因为它们通常不能涵盖所有漏洞实例。虽然跟踪代码重用听起来很简单,但由于程序数量众多,实际上是无法管理的。
发明内容
有鉴于此,本发明实施例提供了涉及一种基于代码相似性的模糊测试方法、装置及存储介质,以解决现有技术中代码重用导致软件系统中进行全部漏洞检测的效率较低的技术问题。
本发明提出的技术方案如下:
本发明实施例第一方面提供一种基于代码相似性的模糊测试方法,包括:对待测代码中选择的语句进行模糊测试,得到触发的异常崩溃的位置代码;基于相似度分析,确定待测代码中的相似代码信息,所述相似代码信息包括待测代码中的相似代码、异常崩溃的位置代码中的相似代码以及待测代码中与漏洞库代码相似的代码;基于所述相似代码信息重新进行模糊测试,得到相似代码信息中的异常崩溃的位置代码;根据所述待测代码中异常崩溃的位置代码和相似代码信息中的异常崩溃的位置代码确定待测代码中的漏洞信息。
可选地,对待测代码中选择的语句进行模糊测试,得到触发的异常崩溃的位置代码,包括:基于灰盒模糊测试算法对待测代码中选择的语句进行模糊测试,得到触发的异常崩溃的位置代码。
可选地,基于灰盒模糊测试算法对待测代码中选择的语句进行模糊测试,得到触发的异常崩溃的位置代码,包括:采用资源调度算法选择待测代码中进行模糊测试的条件语句;对初始种子进行污点追踪,得到所述初始种子中影响进入条件语句的关键字节;采用梯度下降算法对所述关键字节进行变异,得到变异种子;将变异种子输入至待测代码中执行,直至得到能进入待测代码中条件语句的解;将得到的解输入至下一条选择得到的进行模糊测试的语句中,重复上述污点追踪、种子变异以及执行的过程,直至预设时间内无法触发异常崩溃。
可选地,基于相似度分析,确定待测代码中的相似代码信息,包括:将待测代码切分为代码行级别的代码文件以及代码块级别的代码文件;将代码行级别的代码文件进行相似度分析,得到第一相似代码;将代码块级别的代码文件进行相似度分析,得到第二相似代码;根据第一相似代码和第二相似代码得到待测代码中的相似代码信息。
可选地,基于相似度分析,确定待测代码中的相似代码信息,还包括:将异常崩溃的位置代码在代码行以及代码块级别与待测代码进行相似度分析,得到异常崩溃的位置代码中的代码行相似代码以及代码块相似代码;将待测代码和预设漏洞库中的代码进行相似度分析,得到待测代码中与漏洞库代码相似的代码。
可选地,基于所述相似代码信息重新进行模糊测试,得到相似代码信息中的异常崩溃的位置代码,包括:计算代码块级别中的代码块与相似代码信息中的代码之间的距离;计算灰盒模糊测试中每个种子走过的代码块对应距离的平均值;选择平均值最小时对应的种子进行变异后输入待测代码重新进行模糊测试,得到相似代码信息中的异常崩溃的位置代码。
可选地,选择平均值最小时对应的种子进行变异后输入待测代码重新进行模糊测试,得到相似代码信息中的异常崩溃的位置代码,包括:根据每个种子对应的平均值选择平均值最小时对应的种子作为相似代码信息模糊测试的测试种子;采用梯度下降算法对所述测试种子进行变异,得到变异种子;基于灰盒模糊测试算法,采用变异种子输入待测代码重新进行模糊测试,得到相似代码信息中的异常崩溃的位置代码。
可选地,采用如下公式计算代码块级别中的代码块与相似代码信息中的代码之间的距离:
Figure DEST_PATH_IMAGE001
式中,代码块级目标距离
Figure 313172DEST_PATH_IMAGE002
表示代码块级别中的代码块
Figure DEST_PATH_IMAGE003
与相似代码 信息中的代码之间的距离,
Figure 246012DEST_PATH_IMAGE004
表示相似代码信息中的代码集合,
Figure DEST_PATH_IMAGE005
表示代码块
Figure 613539DEST_PATH_IMAGE003
所调用 的函数
Figure 324006DEST_PATH_IMAGE006
的控制流图
Figure DEST_PATH_IMAGE007
中代码块的集合,
Figure 536813DEST_PATH_IMAGE008
是放大函数级距离的常数,
Figure DEST_PATH_IMAGE009
表示代码块
Figure 914705DEST_PATH_IMAGE003
调用的函数的集合;其中,
Figure 718712DEST_PATH_IMAGE010
式中,
Figure 916476DEST_PATH_IMAGE011
是表示函数调用图中从函数
Figure 464132DEST_PATH_IMAGE012
可达的所有目标函数的集合;
采用如下公式计算灰盒模糊测试中每个种子走过的代码块对应距离的平均值:
Figure 430951DEST_PATH_IMAGE013
式中,
Figure 671439DEST_PATH_IMAGE014
是一个种子
Figure 90919DEST_PATH_IMAGE015
的执行轨迹,包含了所有的执行过的代码块。
本发明实施例第二方面提供一种基于代码相似性的模糊测试装置,包括:第一测试模块,用于对待测代码中选择的语句进行模糊测试,得到触发的异常崩溃的位置代码;相似分析模块,用于基于相似度分析,确定待测代码中的相似代码信息,所述相似代码信息包括待测代码中的相似代码、异常崩溃的位置代码中的相似代码以及待测代码中与漏洞库代码相似的代码;第二测试模块,用于基于所述相似代码信息重新进行模糊测试,得到相似代码信息中的异常崩溃的位置代码;漏洞确定模块,用于根据所述待测代码中异常崩溃的位置代码和相似代码信息中的异常崩溃的位置代码确定待测代码中的漏洞信息。
本发明实施例第三方面提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使所述计算机执行如本发明实施例第一方面及第一方面任一项所述的基于代码相似性的模糊测试方法。
本发明实施例第四方面提供一种电子设备,包括:存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行如本发明实施例第一方面及第一方面任一项所述的基于代码相似性的模糊测试方法。
本发明提供的技术方案,具有如下效果:
本发明实施例提供的基于代码相似性的模糊测试方法、装置及存储介质,以相似代码信息为引导,通过对待测代码和相似代码信息进行模糊测试,其中代码相似度分析属于静态方法,模糊测试属于动态方法,该模糊测试方法将两种方法结合,代码相似度的计算为模糊测试提供了目标,模糊测试为代码相似度的计算提供了样本,通过两种方法的结合实现了将代码重用拷贝导致的漏洞尽可能的找出的效果。并且,在程序编写者编写大型项目代码程序过程中,往往会进行代码的拷贝和重用,这种现象导致了程序的不安全性。该方法通过引入代码相似性,对程序代码进行了多角度的相似性研究,比较全面的将其中的潜在隐患代码找出,一方面使得发现软件漏洞的可能性大大的提高,另一方面加快了模糊测试发现漏洞的速度,使模糊测试的效率得到有效的提高。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据本发明实施例的基于代码相似性的模糊测试方法的流程图;
图2是根据本发明另一实施例的基于代码相似性的模糊测试方法的流程图;
图3是根据本发明另一实施例的基于代码相似性的模糊测试方法的流程图;
图4是根据本发明另一实施例的基于代码相似性的模糊测试方法的流程图;
图5是根据本发明实施例的基于代码相似性的模糊测试装置的结构框图;
图6是根据本发明实施例提供的计算机可读存储介质的结构示意图;
图7是根据本发明实施例提供的电子设备的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
根据本发明实施例,提供了一种基于代码相似性的模糊测试方法,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
在本实施例中提供了一种基于代码相似性的模糊测试方法,可用于电子设备,如电脑、手机、平板电脑等,图1是根据本发明实施例基于代码相似性的模糊测试方法的流程图,如图1所示,该方法包括如下步骤:
步骤S101:对待测代码中选择的语句进行模糊测试,得到触发的异常崩溃的位置代码。具体地,对待测代码进行模糊测试时,先选定初始种子并使用资源调度算法选择条件语句,然后将初始种子输入待测代码中进行执行。在执行过程中,如果检测到异常崩溃则认为发现了程序漏洞。由此,为了确定漏洞信息,则可以收集模糊测试时待测代码中触发的异常崩溃的位置代码。
步骤S102:基于相似度分析,确定待测代码中的相似代码信息,所述相似代码信息包括待测代码中的相似代码、异常崩溃的位置代码中的相似代码以及待测代码中与漏洞库代码相似的代码。
具体地,由于代码的重用,则软件系统中可能包括多份相似或相同的代码。为了更高效全面的检测软件系统中代码的所有漏洞,可以对待测代码进行相似性分析,获取待测代码中所有相似代码。同时将待测代码和已检测出存在漏洞的代码进行相似分析,得到的相似代码信息能够指导后续的模糊测试过程,提高模糊测试的效率。
其中,相似代码信息确定具体包括:将待测代码切分为代码行级别的代码文件以及代码块级别的代码文件;将代码行级别的代码文件进行相似度分析,得到第一相似代码;将代码块级别的代码文件进行相似度分析,得到第二相似代码;根据第一相似代码和第二相似代码得到待测代码中的相似代码信息。将异常崩溃的位置代码在代码行以及代码块级别与待测代码进行相似度分析,得到异常崩溃的位置代码中的代码行相似代码以及代码块相似代码;将待测代码和预设漏洞库中的代码进行相似度分析,得到待测代码中与漏洞库代码相似的代码。
对于待测代码进行相似性分析时,将切分为两个级别即代码行级别和代码块级别。代码行级别的代码文件中包括多个代码行文件,将多个代码行文件进行相似度分析,确定多个代码行中的相似代码;同理,代码块文件中包含的多个代码块进行相似度分析也能够得到多个相似的代码块。对于检测得到的异常崩溃的位置代码也进行代码行级别以及代码块级别的相似信息。此外仅考虑待测代码可能无法准确检测出所有存在漏洞的位置代码,由此还可以将待测代码和预设漏洞库中的代码进行相似度分析。其中,该预设漏洞库可以现有已知的漏洞库,如CVE(Common Vulnerabilities & Exposures,通用漏洞和风险)漏洞库以及漏洞修补程序数据库(VPD,Virtural Private Database)等。
在进行相似度分析时,可以选择现有的相似度分析工具实现,例如采用sim工具,也可以采用其他工具或算法进行相似度分析。当采用sim工具进行相似度分析时,其主要分析流程包括:将输入转化为令牌,循环读取获得令牌序列,使用哈希表构建前向引用表进行匹配。
步骤S103:基于所述相似代码信息重新进行模糊测试,得到相似代码信息中的异常崩溃的位置代码。具体地,当采用上述步骤确定待测代码中所有的代码相似信息后,以该相似代码作为新的待测代码继续进行模糊测试,得到该相似代码信息中的异常崩溃的位置代码。
步骤S104:根据所述待测代码中异常崩溃的位置代码和相似代码信息中的异常崩溃的位置代码确定待测代码中的漏洞信息。在进行模糊测试时,发生异常崩溃则认为发现了程序漏洞,因此,收集待测代码中异常崩溃的位置代码和利用相似代码信息后发现的异常崩溃的位置代码则可以确定待测代码中的程序漏洞。
本发明实施例提供的基于代码相似性的模糊测试方法,以相似代码信息为引导,通过对待测代码和相似代码信息进行模糊测试,其中代码相似度分析属于静态方法,模糊测试属于动态方法,该模糊测试方法将两种方法结合,代码相似度的计算为模糊测试提供了目标,模糊测试为代码相似度的计算提供了样本,通过两种方法的结合实现了将代码重用拷贝导致的漏洞尽可能的找出的效果。并且,在程序编写者编写大型项目代码程序过程中,往往会进行代码的拷贝和重用,这种现象导致了程序的不安全性。该方法通过引入代码相似性,对程序代码进行了多角度的相似性研究,比较全面的将其中的潜在隐患代码找出,一方面使得发现软件漏洞的可能性大大的提高,另一方面加快了模糊测试发现漏洞的速度,使模糊测试的效率得到有效的提高。
在一方式中,对待测代码中选择的语句进行模糊测试,得到触发的异常崩溃的位置代码,包括:基于灰盒模糊测试算法对待测代码中选择的语句进行模糊测试,得到触发的异常崩溃的位置代码。具体地,采用灰盒模糊测试时,可以采用灰盒测试工具Angora实现具体的模糊测试过程,也可以采用其他的模糊测试工具。而Angora的主要目标是通过非符号执行的手段来解决路径约束,从而增加访问的代码覆盖范围。为了有效地解决路径约束,Angora测试工具主要引入了如下几个关键技术:高效的字节级污点跟踪,上下文敏感的路径分支检测,基于梯度下降的搜索和输入长度的智能修改等。
其中,如图2所示,基于灰盒模糊测试算法对待测代码中选择的语句进行模糊测试,得到触发的异常崩溃的位置代码,包括如下步骤:
步骤S201:采用资源调度算法选择待测代码中进行模糊测试的条件语句。其中,当选择灰盒模糊测试算法时,可以在Angora中使用资源调度算法从待测代码中选择模糊测试的代码语句。即选择让种子进入哪个条件语句。采用资源调度算法使得Angora总能最大概率的在待测代码中找到新的未被发现的代码块。具体地,对于资源调度算法可以选择现有已知的算法实现,本发明实施例在此不再赘述。
步骤S202:对初始种子进行污点追踪,得到所述初始种子中影响进入条件语句的关键字节。具体地,初始种子可以在进行灰盒模糊测试之前预先确定。当选择出代码语句后,将初始种子输入,然后采用污点追踪算法得到初始种子中影响进入条件语句的关键字节。其中,分支条件语句为待测代码中判断语句的判断条件,例如程序中的if、switch等等。通过污点追踪能够实现初始种子中关键部分的筛选,对于具体的污点追踪方法可以采用现有已知的方法。
步骤S203:采用梯度下降算法对所述关键字节进行变异,得到变异种子。对于初始种子中筛选出来的关键字节,可以采用梯度下降算法对其进行变异,得到变异种子。同上,该梯度下降算法也可以采用现有已知算法。
步骤S204:将变异种子输入至待测代码中执行,直至得到能进入待测代码中条件语句的解。其中,将变异种子输入至待测代码中执行,如果执行了条件语句后接的代码块即找到了进入条件语句的解。该解即为输入的变异种子。
步骤S205:将得到的解输入至下一条选择的进行模糊测试的条件语句中,重复上述污点追踪、种子变异以及执行的过程,直至预设时间内无法触发异常崩溃。具体地,当得到相应的解后,继续重复上述步骤,选择下一条模糊测试的语句,将得到的解或者说相应的变异种子输入至该语句中,重复上述步骤的污点追踪、种子变异以及获取解的过程;然后将得到的解继续输入下一条模糊测试语句,不断重复上述过程,直至在预设时间内无法触发异常崩溃,则可以结束该过程。其中,该预设时间根据实际情况确定。
在一实施方式中,如图3所示,基于所述相似代码信息重新进行模糊测试,得到相似代码信息中的异常崩溃的位置代码,包括如下步骤:
步骤S301:计算代码块级别中的代码块与相似代码信息中的代码之间的距离。具体地,为了更快速的确定待测代码中异常崩溃的位置代码,可以通过定向计算的方式缩短相应的过程。首先,计算上述划分得到的代码块与确定的相似代码信息中代码之间的距离。其中,在计算该距离时,可以在静态处理过程中计算,即在非执行过程中进行相应距离的计算。
具体地,上述划分得到的代码块与确定的相似代码信息中代码之间的距离由程序控制流图中两个代码块之间的距离确定。其中,程序控制流图也叫控制流程图,是一个过程或程序的抽象表现,是用在编译器中的一个抽象数据结构,由编译器在内部维护,代表了一个程序执行过程中会遍历到的所有路径。它用图的形式表示一个过程内所有基本块执行的可能流向, 也能反映一个过程的实时执行过程。
代码块级别中的代码块与相似代码信息中的代码之间的距离,也可称为代码块级 目标距离
Figure 645528DEST_PATH_IMAGE016
,其定义为一个代码块
Figure 463924DEST_PATH_IMAGE017
到相似代码信息中的代码即目标代码块集 合
Figure 140893DEST_PATH_IMAGE018
之间的距离,其计算公式表示如下:
Figure 516511DEST_PATH_IMAGE019
根据上述公式可知,如果代码块
Figure 405969DEST_PATH_IMAGE017
在目标代码块集合
Figure 550643DEST_PATH_IMAGE018
中,代码块级目标距离 定义为0。
Figure 929672DEST_PATH_IMAGE020
为代码块
Figure 323744DEST_PATH_IMAGE017
所调用的函数
Figure 220156DEST_PATH_IMAGE021
的控制流图
Figure 16073DEST_PATH_IMAGE022
中代码块的集合。
Figure 100002_DEST_PATH_IMAGE023
是放大 函数级距离的常数。
Figure 82117DEST_PATH_IMAGE024
是代码块
Figure 963485DEST_PATH_IMAGE017
调用的函数的集合,即
Figure 100002_DEST_PATH_IMAGE025
。如果
Figure 194746DEST_PATH_IMAGE017
Figure 845170DEST_PATH_IMAGE020
中,代码块级目标距离定义为调用函数的函数级目标距离的倍数。其他情况下,代码块 级目标距离定义为代码块
Figure 503685DEST_PATH_IMAGE017
到T中的代码块距离加上T中代码块距离到目标代码块集合
Figure 606770DEST_PATH_IMAGE026
距离之和。
在计算代码块级目标距离时使用到的函数级目标距离
Figure 100002_DEST_PATH_IMAGE027
由函数调用图 中一个函数到所有目标函数的距离确定。函数级目标距离
Figure 107634DEST_PATH_IMAGE027
定义为
Figure 878144DEST_PATH_IMAGE028
与任意可达 目标函数
Figure DEST_PATH_IMAGE029
之间的函数距离的调和平均。函数距离
Figure 176401DEST_PATH_IMAGE030
为调用图中函数
Figure 32362DEST_PATH_IMAGE028
Figure DEST_PATH_IMAGE031
之间沿着最短路径的边的数目。
函数级目标距离计算公式表示如下:
Figure 808688DEST_PATH_IMAGE032
其中,
Figure DEST_PATH_IMAGE033
是调用图中从
Figure 105808DEST_PATH_IMAGE028
可达的所有目标函数的集合。
步骤S302:计算灰盒模糊测试中每个种子走过的代码块对应距离的平均值。其中,在上述步骤S201至步骤S205中,通过计算,得到了多个解或者说多个变异种子,这些变异种子在上述步骤中分别输入了待测代码中执行,分别确定每个变异种子在待测代码中执行时走过的代码块,每个代码块使用步骤S301中计算均能计算得到一个距离,然后将每个变异种子走过的代码块对应距离加和求平均值,从而每个变异种子均可以得到一个距离值(对应的平均值)。
具体计算公式如下:
Figure 371704DEST_PATH_IMAGE034
Figure DEST_PATH_IMAGE035
是一个种子
Figure 918223DEST_PATH_IMAGE036
的执行轨迹,包含了所有的执行过的代码块。
步骤S303:选择平均值最小时对应的种子进行变异后输入待测代码重新进行模糊测试,得到相似代码信息中的异常崩溃的位置代码。具体地,通过上述计算得到每个变异种子对应的距离值,然后比较这些距离值,选出距离值最小时对应的变异种子,通过将该变异种子进行变异后输入执行程序就可以定位到相应的目标代码处(相似代码信息)。其中,变异时也可以采用梯度下降算法实现,之后再基于灰盒模糊测试算法,采用变异种子输入待测代码重新进行模糊测试,得到相似代码信息中的异常崩溃的位置代码。
在一实施方式中,如图4所示,该基于代码相似性的模糊测试方法采用如下流程实现:将初始种子进行变异后输入至被测或待测程序在Angora中进行灰盒模糊测试,然后将灰盒模糊测试中得到的异常崩溃的位置代码采用相似度分析工具进行分析,得到部分相似代码信息;同时,对于待测程序采用代码切分工具切分得到多级别代码文件(包括代码块级别的代码文件以及代码行级别的代码文件),对于切分得到的多级别代码文件和预设漏洞库也采用相似度分析工具进行分析,得到部分相似代码信息,对于切分得到的多级别代码文件也加入到相似代码信息中得到完成的相似代码信息。对于得到的相似代码信息通过定向计算(计算距离和平均值),并基于Angora进行模糊测试,最终得到待测代码中异常崩溃的位置代码。
本发明实施例还提供一种基于代码相似性的模糊测试装置,如图5所示,该装置包括:
第一测试模块,用于对待测代码中选择的语句进行模糊测试,得到触发的异常崩溃的位置代码;具体内容参见上述方法实施例对应部分,在此不再赘述。
相似分析模块,用于基于相似度分析,确定待测代码中的相似代码信息,所述相似代码信息包括待测代码中的相似代码、异常崩溃的位置代码中的相似代码以及待测代码中与漏洞库代码相似的代码;具体内容参见上述方法实施例对应部分,在此不再赘述。
第二测试模块,用于基于所述相似代码信息重新进行模糊测试,得到相似代码信息中的异常崩溃的位置代码;具体内容参见上述方法实施例对应部分,在此不再赘述。
漏洞确定模块,用于根据所述待测代码中异常崩溃的位置代码和相似代码信息中的异常崩溃的位置代码确定待测代码中的漏洞信息。具体内容参见上述方法实施例对应部分,在此不再赘述。
本发明实施例提供的基于代码相似性的模糊测试装置,以相似代码信息为引导,通过对待测代码和相似代码信息进行模糊测试,其中代码相似度分析属于静态方法,模糊测试属于动态方法,该模糊测试装置将两种方法结合,代码相似度的计算为模糊测试提供了目标,模糊测试为代码相似度的计算提供了样本,通过两种方法的结合实现了将代码重用拷贝导致的漏洞尽可能的找出的效果。并且,在程序编写者编写大型项目代码程序过程中,往往会进行代码的拷贝和重用,这种现象导致了程序的不安全性。该装置通过引入代码相似性,对程序代码进行了多角度的相似性研究,比较全面的将其中的潜在隐患代码找出,一方面使得发现软件漏洞的可能性大大的提高,另一方面加快了模糊测试发现漏洞的速度,使模糊测试的效率得到有效的提高。
本发明实施例提供的基于代码相似性的模糊测试装置的功能描述详细参见上述实施例中基于代码相似性的模糊测试方法描述。
本发明实施例还提供一种存储介质,如图6所示,其上存储有计算机程序601,该指令被处理器执行时实现上述实施例中基于代码相似性的模糊测试方法的步骤。该存储介质上还存储有音视频流数据,特征帧数据、交互请求信令、加密数据以及预设数据大小等。其中,存储介质可为磁碟、光盘、只读存储记忆体 (Read-Only Memory,ROM)、随机存储记忆体(Random Access Memory,RAM)、快闪存储器(Flash Memory)、硬盘(Hard Disk Drive,缩写:HDD)或固态硬盘 (Solid-State Drive,SSD)等;所述存储介质还可以包括上述种类的存储器的组合。
本领域技术人员可以理解,实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)、随机存储记忆体(Random AccessMemory,RAM)、快闪存储器(Flash Memory)、硬盘(Hard Disk Drive,缩写:HDD)或固态硬盘(Solid-State Drive,SSD)等;所述存储介质还可以包括上述种类的存储器的组合。
本发明实施例还提供了一种电子设备,如图7所示,该电子设备可以包括处理器51和存储器52,其中处理器51和存储器52可以通过总线或者其他方式连接,图7中以通过总线连接为例。
处理器51可以为中央处理器(Central Processing Unit,CPU)。处理器51还可以为其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等芯片,或者上述各类芯片的组合。
存储器52作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序、非暂态计算机可执行程序以及模块,如本发明实施例中的对应的程序指令/模块。处理器51通过运行存储在存储器52中的非暂态软件程序、指令以及模块,从而执行处理器的各种功能应用以及数据处理,即实现上述方法实施例中的基于代码相似性的模糊测试方法。
存储器52可以包括存储程序区和存储数据区,其中,存储程序区可存储操作装置、至少一个功能所需要的应用程序;存储数据区可存储处理器51所创建的数据等。此外,存储器52可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施例中,存储器52可选包括相对于处理器51远程设置的存储器,这些远程存储器可以通过网络连接至处理器51。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
所述一个或者多个模块存储在所述存储器52中,当被所述处理器51执行时,执行如图1-4所示实施例中的基于代码相似性的模糊测试方法。
上述电子设备具体细节可以对应参阅图1至图4所示的实施例中对应的相关描述和效果进行理解,此处不再赘述。
虽然结合附图描述了本发明的实施例,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下做出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。

Claims (7)

1.一种基于代码相似性的模糊测试方法,其特征在于,包括:
对待测代码中选择的语句进行模糊测试,得到触发的异常崩溃的位置代码;
基于相似度分析,确定待测代码中的相似代码信息,所述相似代码信息包括待测代码中的相似代码、异常崩溃的位置代码中的相似代码以及待测代码中与漏洞库代码相似的代码;
基于所述相似代码信息重新进行模糊测试,得到相似代码信息中的异常崩溃的位置代码;
根据所述待测代码中异常崩溃的位置代码和相似代码信息中的异常崩溃的位置代码确定待测代码中的漏洞信息;
基于相似度分析,确定待测代码中的相似代码信息,包括:
将待测代码切分为代码行级别的代码文件以及代码块级别的代码文件;
将代码行级别的代码文件进行相似度分析,得到第一相似代码;
将代码块级别的代码文件进行相似度分析,得到第二相似代码;
根据第一相似代码和第二相似代码得到待测代码中的相似代码信息;
将异常崩溃的位置代码在代码行以及代码块级别与待测代码进行相似度分析,得到异常崩溃的位置代码中的代码行相似代码以及代码块相似代码;
将待测代码和预设漏洞库中的代码进行相似度分析,得到待测代码中与漏洞库代码相似的代码;
基于所述相似代码信息重新进行模糊测试,得到相似代码信息中的异常崩溃的位置代码,包括:
计算代码块级别中的代码块与相似代码信息中的代码之间的距离;
计算灰盒模糊测试中每个种子走过的代码块对应距离的平均值;
选择平均值最小时对应的种子进行变异后输入待测代码重新进行模糊测试,得到相似代码信息中的异常崩溃的位置代码;
采用如下公式计算代码块级别中的代码块与相似代码信息中的代码之间的距离:
Figure DEST_PATH_IMAGE002
式中,代码块级目标距离
Figure DEST_PATH_IMAGE004
表示代码块级别中的代码块m与相似代码信息中的代码之间的距离,Tb表示相似代码信息中的代码集合,T表示代码块m所调用的函数
Figure DEST_PATH_IMAGE006
的控制流图Gi中代码块的集合,c是放大函数级距离的常数,N(m)表示代码块m调用的函数的集合;其中,
Figure DEST_PATH_IMAGE008
式中,
Figure DEST_PATH_IMAGE010
表示函数级目标距离,
Figure DEST_PATH_IMAGE012
是表示函数调用图中从函数n可达的所有目标函数的集合,
Figure DEST_PATH_IMAGE013
Figure DEST_PATH_IMAGE015
表示不同的含义,其中,
Figure DEST_PATH_IMAGE017
即tf
Figure DEST_PATH_IMAGE018
集合中的任一项;
采用如下公式计算灰盒模糊测试中每个种子走过的代码块对应距离的平均值:
Figure DEST_PATH_IMAGE020
式中,
Figure DEST_PATH_IMAGE022
是一个种子s的执行轨迹,包含了所有的执行过的代码块。
2.根据权利要求1所述的基于代码相似性的模糊测试方法,其特征在于,对待测代码中选择的语句进行模糊测试,得到触发的异常崩溃的位置代码,包括:
基于灰盒模糊测试算法对待测代码中选择的语句进行模糊测试,得到触发的异常崩溃的位置代码。
3.根据权利要求2所述的基于代码相似性的模糊测试方法,其特征在于,基于灰盒模糊测试算法对待测代码中选择的语句进行模糊测试,得到触发的异常崩溃的位置代码,包括:
采用资源调度算法选择待测代码中进行模糊测试的条件语句;
对初始种子进行污点追踪,得到所述初始种子中影响进入条件语句的关键字节;
采用梯度下降算法对所述关键字节进行变异,得到变异种子;
将变异种子输入至待测代码中执行,直至得到能进入待测代码中条件语句的解;
将得到的解输入至下一条选择进行模糊测试的语句中,重复上述污点追踪、种子变异以及执行的过程,直至预设时间内无法触发异常崩溃。
4.根据权利要求1所述的基于代码相似性的模糊测试方法,其特征在于,选择平均值最小时对应的种子进行变异后输入待测代码重新进行模糊测试,得到相似代码信息中的异常崩溃的位置代码,包括:
根据每个种子对应的平均值选择平均值最小时对应的种子作为相似代码信息模糊测试的测试种子;
采用梯度下降算法对所述测试种子进行变异,得到变异种子;
基于灰盒模糊测试算法,采用变异种子输入待测代码重新进行模糊测试,得到相似代码信息中的异常崩溃的位置代码。
5.一种基于代码相似性的模糊测试装置,其特征在于,包括:
第一测试模块,用于对待测代码中选择的语句进行模糊测试,得到触发的异常崩溃的位置代码;
相似分析模块,用于基于相似度分析,确定待测代码中的相似代码信息,所述相似代码信息包括待测代码中的相似代码、异常崩溃的位置代码中的相似代码以及待测代码中与漏洞库代码相似的代码;
第二测试模块,用于基于所述相似代码信息重新进行模糊测试,得到相似代码信息中的异常崩溃的位置代码;
漏洞确定模块,用于根据所述待测代码中异常崩溃的位置代码和相似代码信息中的异常崩溃的位置代码确定待测代码中的漏洞信息;
基于相似度分析,确定待测代码中的相似代码信息,包括:
将待测代码切分为代码行级别的代码文件以及代码块级别的代码文件;
将代码行级别的代码文件进行相似度分析,得到第一相似代码;
将代码块级别的代码文件进行相似度分析,得到第二相似代码;
根据第一相似代码和第二相似代码得到待测代码中的相似代码信息;
将异常崩溃的位置代码在代码行以及代码块级别与待测代码进行相似度分析,得到异常崩溃的位置代码中的代码行相似代码以及代码块相似代码;
将待测代码和预设漏洞库中的代码进行相似度分析,得到待测代码中与漏洞库代码相似的代码;
基于所述相似代码信息重新进行模糊测试,得到相似代码信息中的异常崩溃的位置代码,包括:
计算代码块级别中的代码块与相似代码信息中的代码之间的距离;
计算灰盒模糊测试中每个种子走过的代码块对应距离的平均值;
选择平均值最小时对应的种子进行变异后输入待测代码重新进行模糊测试,得到相似代码信息中的异常崩溃的位置代码;
采用如下公式计算代码块级别中的代码块与相似代码信息中的代码之间的距离:
Figure DEST_PATH_IMAGE002A
式中,代码块级目标距离
Figure DEST_PATH_IMAGE023
表示代码块级别中的代码块m与相似代码信息中的代码之间的距离,Tb表示相似代码信息中的代码集合,T表示代码块m所调用的函数
Figure 156521DEST_PATH_IMAGE006
的控制流图Gi中代码块的集合,c是放大函数级距离的常数,N(m)表示代码块m调用的函数的集合;其中,
Figure 276924DEST_PATH_IMAGE008
式中,
Figure DEST_PATH_IMAGE024
表示函数级目标距离,
Figure 994344DEST_PATH_IMAGE012
是表示函数调用图中从函数n可达的所有目标函数的集合,
Figure DEST_PATH_IMAGE025
Figure DEST_PATH_IMAGE026
表示不同的含义,其中,
Figure 592816DEST_PATH_IMAGE017
即tf
Figure 610450DEST_PATH_IMAGE018
集合中的任一项;
采用如下公式计算灰盒模糊测试中每个种子走过的代码块对应距离的平均值:
Figure DEST_PATH_IMAGE027
式中,
Figure 901754DEST_PATH_IMAGE022
是一个种子s的执行轨迹,包含了所有的执行过的代码块。
6.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使所述计算机执行如权利要求1-4任一项所述的基于代码相似性的模糊测试方法。
7.一种电子设备,其特征在于,包括:存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行如权利要求1-4任一项所述的基于代码相似性的模糊测试方法。
CN202210401549.6A 2022-04-18 2022-04-18 一种基于代码相似性的模糊测试方法、装置及存储介质 Active CN114491566B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202210401549.6A CN114491566B (zh) 2022-04-18 2022-04-18 一种基于代码相似性的模糊测试方法、装置及存储介质
JP2022182775A JP7290784B1 (ja) 2022-04-18 2022-11-15 コード類似性に基づくファジーテスト方法、装置及び記憶媒体

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210401549.6A CN114491566B (zh) 2022-04-18 2022-04-18 一种基于代码相似性的模糊测试方法、装置及存储介质

Publications (2)

Publication Number Publication Date
CN114491566A CN114491566A (zh) 2022-05-13
CN114491566B true CN114491566B (zh) 2022-07-05

Family

ID=81489633

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210401549.6A Active CN114491566B (zh) 2022-04-18 2022-04-18 一种基于代码相似性的模糊测试方法、装置及存储介质

Country Status (2)

Country Link
JP (1) JP7290784B1 (zh)
CN (1) CN114491566B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116383834B (zh) * 2023-06-02 2023-08-08 北京邮电大学 针对源码漏洞检测工具异常的检测方法以及相关设备
CN117033171B (zh) * 2023-06-28 2024-03-26 清华大学 触发软件漏洞的输入数据的复现方法、装置、设备及介质
CN117290856B (zh) * 2023-11-14 2024-02-23 广州红海云计算股份有限公司 基于软件自动化测试技术的智能测试管理系统
CN118132453B (zh) * 2024-05-10 2024-08-27 中移(杭州)信息技术有限公司 固件测试方法及装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109635568A (zh) * 2018-11-26 2019-04-16 华中科技大学 一种基于静态分析和模糊测试相结合的并发漏洞检测方法
CN110008710A (zh) * 2019-04-15 2019-07-12 上海交通大学 基于深度强化学习和程序路径插桩的漏洞检测方法
CN111831562A (zh) * 2020-07-08 2020-10-27 信联科技(南京)有限公司 一种基于机器学习的模糊测试用例生成方法及运行该方法的计算机设备与可读存储介质
CN112800423A (zh) * 2021-01-26 2021-05-14 北京航空航天大学 一种二进制代码授权漏洞检测方法
CN113901474A (zh) * 2021-09-13 2022-01-07 四川大学 一种基于函数级代码相似性的漏洞检测方法

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5574837A (en) * 1995-01-17 1996-11-12 Lucent Technologies Inc. Method of generating a browser interface for representing similarities between segments of code
JP2004062394A (ja) * 2002-07-26 2004-02-26 Toshiba Corp 類似修正箇所検索方法とそのためのプログラム
US9098352B2 (en) * 2013-07-17 2015-08-04 Deja Vu Security, Llc Metaphor based language fuzzing of computer code
JP6309795B2 (ja) * 2014-03-18 2018-04-11 株式会社東芝 情報処理装置、情報処理方法およびプログラム
JP6789844B2 (ja) * 2017-02-22 2020-11-25 三菱電機株式会社 類似関数抽出装置および類似関数抽出プログラム
US10664383B2 (en) * 2018-08-22 2020-05-26 Fujitsu Limited Automated software program repair of similar code snippets

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109635568A (zh) * 2018-11-26 2019-04-16 华中科技大学 一种基于静态分析和模糊测试相结合的并发漏洞检测方法
CN110008710A (zh) * 2019-04-15 2019-07-12 上海交通大学 基于深度强化学习和程序路径插桩的漏洞检测方法
CN111831562A (zh) * 2020-07-08 2020-10-27 信联科技(南京)有限公司 一种基于机器学习的模糊测试用例生成方法及运行该方法的计算机设备与可读存储介质
CN112800423A (zh) * 2021-01-26 2021-05-14 北京航空航天大学 一种二进制代码授权漏洞检测方法
CN113901474A (zh) * 2021-09-13 2022-01-07 四川大学 一种基于函数级代码相似性的漏洞检测方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
基于神经网络与代码相似性的静态漏洞检测;夏之阳等;《计算机工程》;20191231(第12期);全文 *
安全软件模糊测试中多种群遗传算法的研究;杜晓军等;《山东大学学报(理学版)》;20130730(第07期);全文 *

Also Published As

Publication number Publication date
JP7290784B1 (ja) 2023-06-13
CN114491566A (zh) 2022-05-13
JP2023158623A (ja) 2023-10-30

Similar Documents

Publication Publication Date Title
CN114491566B (zh) 一种基于代码相似性的模糊测试方法、装置及存储介质
Cao et al. MVD: memory-related vulnerability detection based on flow-sensitive graph neural networks
KR101568224B1 (ko) 소프트웨어 취약점 분석방법 및 분석장치
Pham et al. Detection of recurring software vulnerabilities
CN111104335B (zh) 一种基于多层次分析的c语言缺陷检测方法及装置
CN112035359A (zh) 程序测试方法、装置、电子设备及存储介质
Malhotra et al. Prediction & assessment of change prone classes using statistical & machine learning techniques
EP3682324A1 (en) Method and apparatus for finding long methods in code
US20080127043A1 (en) Automatic Extraction of Programming Rules
CN113918951B (zh) 基于抽象语法树的恶意代码检测方法、装置及电子设备
US20190361788A1 (en) Interactive analysis of a security specification
CN109241737B (zh) 一种面向多种补丁模式的差异分支识别方法及系统
CN115098292B (zh) 应用程序崩溃根原因识别方法、装置及电子设备
WO2021109874A1 (zh) 拓扑图生成方法、异常检测方法、装置、设备及存储介质
CN108399321B (zh) 基于动态指令依赖图胎记的软件局部抄袭检测方法
CN114238980B (zh) 一种工控设备漏洞挖掘方法、系统、设备及存储介质
CN117633808A (zh) 用于漏洞检测的方法、处理器及机器可读存储介质
Lam et al. BIGMAC: breaking inaccurate genomes and merging assembled contigs for long read metagenomic assembly
CN108804308B (zh) 新版本程序缺陷检测方法及装置
Harzevili et al. Automatic Static Vulnerability Detection for Machine Learning Libraries: Are We There Yet?
Xiaomeng et al. A survey on source code review using machine learning
Xiang et al. Critical Code Guided Directed Greybox Fuzzing for Commits
Yadavally et al. A Learning-Based Approach to Static Program Slicing
CN112860544B (zh) 一种代码检测方法、装置、设备和计算机可读存储介质
CN117520199B (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