CN115292206B - 软件漏洞检测方法、装置、电子设备及存储介质 - Google Patents
软件漏洞检测方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN115292206B CN115292206B CN202211221634.0A CN202211221634A CN115292206B CN 115292206 B CN115292206 B CN 115292206B CN 202211221634 A CN202211221634 A CN 202211221634A CN 115292206 B CN115292206 B CN 115292206B
- Authority
- CN
- China
- Prior art keywords
- path
- target
- branch
- executed
- branches
- 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
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 292
- 238000012360 testing method Methods 0.000 claims abstract description 76
- 238000000034 method Methods 0.000 claims abstract description 32
- 230000008859 change Effects 0.000 claims description 53
- 230000014509 gene expression Effects 0.000 claims description 38
- 238000004590 computer program Methods 0.000 claims description 8
- 230000002829 reductive effect Effects 0.000 abstract description 12
- 238000012545 processing Methods 0.000 description 13
- 238000010586 diagram Methods 0.000 description 11
- 238000004891 communication Methods 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 5
- 238000004364 calculation method Methods 0.000 description 4
- 230000002159 abnormal effect Effects 0.000 description 3
- 230000000670 limiting effect Effects 0.000 description 3
- 238000005065 mining Methods 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 230000002441 reversible effect Effects 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 230000015556 catabolic process Effects 0.000 description 2
- 238000000605 extraction Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012544 monitoring process Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 239000000126 substance Substances 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 238000007792 addition Methods 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000005484 gravity Effects 0.000 description 1
- 230000035772 mutation Effects 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 238000011022 operating instruction Methods 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000036961 partial effect Effects 0.000 description 1
- 230000001737 promoting effect Effects 0.000 description 1
- 238000005215 recombination Methods 0.000 description 1
- 230000006798 recombination Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3692—Test management for test results analysis
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请提供了一种软件漏洞检测方法、装置、电子设备及存储介质,方法包括:获取目标路径的路径特征,目标路径包括目标代码中至少一条未被执行模糊测试的路径分支;根据目标路径的路径特征,确定目标代码的漏洞检测方式,其中,漏洞检测方式包括符号执行或随机变异;利用漏洞检测方式对目标代码进行模糊测试。采用本申请的技术方案,可以根据路径的路径特征确定漏洞检测方式,实现随机变异与符号执行相结合,减少符号执行的次数,从而减少约束求解的次数,以使软件漏洞检测的性能得以提升。
Description
技术领域
本申请涉及自动驾驶技术领域,具体涉及一种软件漏洞检测方法、装置、电子设备及存储介质。
背景技术
目前,智能网联汽车,(Intelligent Connected Vehicle,ICV),是指车联网与智能车的有机联合,是搭载先进的车载传感器、控制器、执行器等装置,并融合现代通信与网络技术,实现车与人、路、后台等智能信息交换共享,实现安全、舒适、节能、高效行驶,并最终可替代人来操作的新一代汽车。由于汽车对安全的可靠性要求很高,因此,对应用在智能网联汽车上的软件的要求也高。
其中,软件漏洞就是软件制作时期未能完善的部分程序,这些程序容易让一些软件高手找出并进行软件内部的破解与破坏。由于大多数车用软件系统都会受到软件漏洞的影响,因此对于软件漏洞的挖掘检测尤为重要。近年来,模糊测试(Fuzz Testing)技术在软件系统漏洞挖掘问题上取得了优异成绩。
现有的模糊测试技术在进行软件漏洞挖掘时,通常采用符号执行的漏洞检测方法对软件类库代码中的所有路径进行遍历,产生路径约束,从而通过路径约束进行约束求解,以确定软件漏洞测试输入值。但是所有路径均利用符号执行遍历,符号执行次数较多,那么约束求解的次数较多,从而影响软件漏洞检测的性能。
发明内容
有鉴于此,本申请实施例致力于提供一种软件漏洞检测方法、装置、电子设备及存储介质,以解决现有技术中符号执行次数较多,以使约束求解的次数较多,从而影响软件漏洞检测性能的问题。
本申请一方面提供了一种软件漏洞检测方法,包括:
获取目标路径的路径特征,所述目标路径包括目标代码中至少一条未被执行模糊测试的路径分支;
根据所述目标路径的路径特征,确定所述目标代码的漏洞检测方式,其中,所述漏洞检测方式包括符号执行或随机变异;
利用所述漏洞检测方式对所述目标代码进行模糊测试。
本申请可以根据目标路径的路径特征确定漏洞检测方式,实现随机变异与符号执行相结合,减少符号执行的次数,从而减少约束求解的次数,以使软件漏洞检测的性能得以提升。
在一个实施例中,所述获取目标路径的路径特征,包括:
根据所述目标路径中各路径分支的被执行次数,以及各路径分支对应的关联分支的被执行次数,计算所述目标路径上所有路径分支的被执行概率;所述路径分支对应的关联分支与所述路径分支为同一语句块下的分支;
根据所述目标路径上所有路径分支的被执行概率,确定所述目标路径的路径困难值,并将所述路径困难值作为第一路径特征。
本申请通过目标路径中各路径分支的被执行次数,以及各路径分支对应的关联分支的被执行次数计算目标路径的路径困难值,保证路径困难值确定的准确度。
在一个实施例中,所述获取目标路径的路径特征,包括:
根据所述目标路径中各路径分支的被执行情况,确定所述目标路径中未被执行的路径分支;
对所述未被执行的路径分支的被执行概率与预设执行概率进行比较,确定所述未被执行的路径分支是否为狭窄分支,得到所述目标路径的路径分支狭窄信息作为第二路径特征。
本申请通过目标路径中未被执行的路径分支中是否存在被执行概率低于预设执行概率的分支,实现了目标路径的路径分支狭窄信息的确定。
在一个实施例中,所述获取目标路径的路径特征,包括:
根据所述目标路径中各路径分支的被执行情况,检测预设时长内所述目标路径中被执行的路径分支是否增加,得到所述目标路径的路径被执行变化信息作为第三路径特征。
本申请通过检测预设时长内所述目标路径中被执行的路径分支是否增加,实现了目标路径的路径被执行变化信息的确定。
在一个实施例中,根据所述目标路径的路径特征,确定所述目标代码的漏洞检测方式,包括:
在所述路径特征符合预先设置的符号执行条件中的任意一项的情况下,确定漏洞检测方式为符号执行;
其中,所述符号执行条件包括:路径困难值达到预设困难阈值、路径被执行变化信息表示被执行路径分支未增加,以及路径分支狭窄信息表示存在狭窄分支。
在一个实施例中,根据所述目标路径的路径特征,确定所述目标代码的漏洞检测方式,还包括:
在所述路径特征不符合预先设置的符号执行条件中的任意一项的情况下,确定漏洞检测方式为随机变异。
本申请通过目标路径的路径特征,来确定漏洞检测方式为随机变异还是符号执行,实现了软件漏洞检测过程中,随机变异与符号执行的结合,减少了符号执行的次数。
在一个实施例中,利用所述漏洞检测方式对所述目标代码进行模糊测试,包括:
根据各个所述目标路径的路径特征,从所有所述目标路径中选取目标检测路径;
根据所述目标检测路径中各路径分支的被执行情况和所述目标检测路径的路径特征,利用符号执行方式对所述目标检测路径进行取反分支,得到对应的约束表达式;
根据所述约束表达式进行约束求解,得到漏洞检测的测试用例;
将所述测试用例输入到所述目标代码对应的程序中执行,根据输出结果对预先构建的漏洞报告进行更新。
本申请在采用符号执行的方式计算漏洞检测的测试用例时,从所有目标路径中选取目标检测路径,对该目标检测路径进行取反分支得到约束表达式,以便对约束表达式进行约束求解,得到针对目标检测路径的测试用例,提高了测试用例对目标检测路径进行漏洞检测的准确度与检测效率。
在一个实施例中,根据各个所述目标路径的路径特征,从所有所述目标路径中选取目标检测路径,包括:
通过比较各个所述目标路径的路径特征中的相同特征项,从所有所述目标路径中选取目标检测路径。
本申请根据各个所述目标路径的路径特征中的相同特征项的比较结果来选取目标检测路径,提高了选择目标检测路径的准确度。
在一个实施例中,通过比较各个所述目标路径的路径特征中的相同特征项,从所有所述目标路径中选取目标检测路径,包括:
从所有所述目标路径中的,路径困难值大于预设困难阈值的路径中,选取目标检测路径;
或者,从所有所述目标路径中的,路径被执行变化信息表示被执行路径分支未增加的路径中,选取目标检测路径;
或者,从所有所述目标路径中的,路径分支狭窄信息表示存在狭窄分支的路径中,选取目标检测路径。
本申请根据待检测路径的路径特征包含的信息为不同情况,采用了目标检测路径的不同选择方式,提高了选择目标检测路径的准确度。
在一个实施例中,根据所述目标检测路径中各路径分支的被执行情况和所述目标检测路径的路径特征,利用符号执行方式对所述目标检测路径进行取反分支,得到对应的约束表达式,包括:
根据所述目标检测路径中各路径分支的被执行情况,确定所述目标检测路径中未被执行的路径分支;
基于所述目标检测路径的路径特征,从所述目标检测路径的未被执行的路径分支中选取待约束路径分支;
基于预先设置的取反分支数量阈值,确定所述待约束路径分支的约束表达式,并将所述约束表达式作为所述目标检测路径对应的约束表达式。
本申请通过设置取反分支数量阈值来限制进行取反的分支数量,减少了约束表达式的数量,从而提高了约束求解的效率,以及漏洞检测的性能。
在一个实施例中,基于所述目标检测路径的路径特征,从所述目标检测路径的未被执行的路径分支中选取待约束路径分支,包括:
在所述目标检测路径为所述目标路径中路径困难值大于预设困难阈值的路径的情况下,将所述目标检测路径中所有未被执行的路径分支作为待约束路径分支;
在所述目标检测路径为路径被执行变化信息表示被执行路径分支未增加的路径的情况下,将所述目标检测路径的未被执行路径分支中、与已执行路径分支相连的路径分支,作为待约束路径分支;
在所述目标检测路径为路径分支狭窄信息表示存在狭窄分支的路径的情况下,将所述目标检测路径的未被执行路径分支中的狭窄分支作为待约束路径分支。
本申请根据选择目标检测路径的不同方式,采用了不同的提取方式提取待约束路径分支,提高了待约束路径分支的提取准确度。
本申请另一方面提供了一种软件漏洞检测装置,包括:
路径特征获取模块,用于获取目标路径的路径特征,所述目标路径包括目标代码中至少一条未被执行模糊测试的路径分支;
漏洞检测方式确定模块,用于根据所述目标路径的路径特征,确定所述目标代码的漏洞检测方式,其中,所述漏洞检测方式包括:符号执行或随机变异;
漏洞检测模块,用于利用所述漏洞检测方式对所述目标代码进行模糊测试。
本申请另一方面提供了一种电子设备,其特征在于,包括:存储器和处理器;
其中,所述存储器与所述处理器连接,用于存储程序;
所述处理器,用于通过运行所述存储器中的程序,实现上述软件漏洞检测方法。
本申请另一方面提供了一种存储介质,所述存储介质上存储有计算机程序,所述计算机程序被处理器执行时,实现上述软件漏洞检测方法。
本申请的软件漏洞检测方法,获取目标路径的路径特征,目标路径包括目标代码中至少一条未被执行模糊测试的路径分支;根据目标路径的路径特征,确定目标代码的漏洞检测方式,其中,漏洞检测方式包括符号执行或随机变异;利用漏洞检测方式对目标代码进行模糊测试。采用本申请的技术方案,可以根据路径的路径特征确定漏洞检测方式,实现随机变异与符号执行相结合,减少符号执行的次数,从而减少约束求解的次数,以使软件漏洞检测的性能得以提升。
附图说明
图1是本申请实施例提供的一种软件漏洞检测方法的应用系统示意图。
图2是本申请实施例提供的一种软件漏洞检测方法的流程示意图。
图3是本申请实施例提供的一种目标代码对应的路径分支示意图。
图4是本申请实施例提供的漏洞检测方式为符号执行时,对目标代码进行模糊测试的处理流程示意图。
图5是本申请实施例提供的一种软件漏洞检测装置的结构示意图。
图6是本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
申请概述
随着智能网联汽车的快速发展,数字化等技术正在推动汽车加速向不断进化的移动第三空间演变,自动驾驶既能提升用户的驾驶体验,又有望降低路上的事故发生率,智能网联汽车融合了现代通信与网联技术,可以实现车与人、路、后台等智能信息交换共享,为自动驾驶提供有力的驾驶信息,从而保证自动驾驶的准确性与安全性。因此,自动驾驶软件系统是智能网联汽车的重要组成部分。而自动驾驶软件系统是由若干实现自动驾驶的软件类库代码组成,各种车用软件系统也是由实现其对应的车用功能的软件类库代码组成,因此,自动驾驶软件系统以及各种车用软件系统均如同其他任何软件系统一样,会受到软件漏洞的影响,往往导致灾难性后果。
近年来模糊测试(Fuzz Testing)技术在软件系统漏洞挖掘问题上取得了优异成绩。模糊测试是指自动或半自动的生成随机数据输入到一个程序中,并监视程序异常,如崩溃、断言(assertion)失败,以发现可能的程序错误,比如内存泄漏。
以往的模糊测试是利用随机变异的方式随机生成输入数据,以对程序进行漏洞检测,但是随机变异生成的输入数据遍历所有程序路径的效率太低或者无法完整所有程序路径的遍历。因此,现有的模糊测试结合符号执行的方式对所有程序路径进行遍历,确定每条路径的路径约束,通过约束求解的方式计算每条路径对应的输入数据,这样可以快速的完成所有程序路径的遍历,但是每条路径均利用符号执行的方式确定输入数据,符号执行的次数较多,那么约束求解的次数较多,便会导致严重的性能消耗。
因此,如何减少符号执行的次数,从而减少约束求解的次数,以使软件漏洞检测的性能得以提升是本领域技术人员亟需解决的技术问题。
鉴于上述的现有技术的不足以及现实存在的符号执行的次数较多,以使约束求解的次数较多,导致严重的性能消耗的问题,本申请发明人经过研究和试验,提出一种软件漏洞检测方法,该方法能够减少符号执行的次数,从而减少约束求解的次数,以使软件漏洞检测的性能得以提升。
示例性系统
图1是本申请实施例提供的一种软件漏洞检测方法的应用系统示意图。如图1所示,软件漏洞检测方法的应用系统包括:用户设备1、网络2和服务器3。服务器3包括:数据库31和处理引擎32。用户设备1通过网络2与服务器3进行数据交互。处理引擎32与数据库31之间进行数据交互。网络2用以在用户设备1和服务器3之间提供通信链路的介质。网络2包括各种连接类型,例如有线、无线通信链路或者光纤电缆等。用户设备1可以是具有显示屏的各种电子设备,包括但不限于智能手机、平板电脑、便携式计算机和台式计算机等,用户设备1也可以是车机设备和车载设备等,用户设备1还可以为服务器。服务器3可以是提供各种服务的服务器。这样,用户可以使用用户设备1通过网络2与服务器3交互,以接收或发送消息。
用户可以将需要进行漏洞检测的软件类库代码输入到用户设备1中,用户设备1获取用户发送的软件类库代码,并通过网络2将软件类库代码发送给服务器3,服务器3可以将软件类库代码以及该软件类库代码对应的模糊测试目标代码均存储到服务器3中的数据库31,服务器3还将软件类库代码对应的模糊测试目标代码传入处理引擎32,处理引擎32可以对该软件类库代码对应的模糊测试目标代码进行模糊测试,并将模糊测试后的漏洞报告存储到数据库31,以及通过网络2将漏洞报告发送给用户设备1,以使用户通过用户设备1查看模糊测试得到的漏洞报告。
本申请实施例中,可以进行漏洞检测的软件类库代码可以但不限于为自动驾驶软件类库代码,即,本申请实施例提供的软件漏洞检测方法可以对自动驾驶软件相关的各种类库代码进行漏洞检测。
本申请实施例提供的软件漏洞检测方法有服务器3中的处理引擎32执行,相应地,软件漏洞检测装置设置与服务器3的处理引擎32中。
应当理解,图1所示的用户设备1、网络2和服务器3的数目仅仅是示意性的。根据实际需要,可以设置任意数目的用户设备1、网络2和服务器3。比如,服务器3可以是多个服务器组成的服务器集群。
示例性应用场景
本申请实施例提供的一种软件漏洞检测方法可以应用在自动驾驶场景,对于自动驾驶软件相关的各种类库代码,该软件漏洞检测方法均可对其进行模糊测试。即,用户可以将自动驾驶软件中需要进行漏洞检测的自动驾驶软件类库代码输入到用户设备1中,用户设备1获取用户发送的自动驾驶软件类库代码,并通过网络2将自动驾驶软件类库代码发送给服务器3,服务器3可以将自动驾驶软件类库代码以及该自动驾驶软件类库代码对应的模糊测试目标代码均存储到服务器3中的数据库31,服务器3还将自动驾驶软件类库代码对应的模糊测试目标代码传入处理引擎32,处理引擎32可以对该自动驾驶软件类库代码对应的模糊测试目标代码进行模糊测试,并将模糊测试后的漏洞报告存储到数据库31,以及通过网络2将漏洞报告发送给用户设备1,以使用户通过用户设备1查看模糊测试得到的漏洞报告。其中,自动驾驶场景中,进行漏洞检测的软件类库代码可以为自动驾驶软件中的驾驶速度控制代码、驾驶方向控制代码等各类代码。
示例性方法
图2是本申请实施例提供的一种软件漏洞检测方法的流程示意图。本实施例可以应用在服务器3的处理引擎32上,如图2所示,本实施例的软件漏洞检测方法,包括:
S201、获取目标路径的路径特征。
具体的,服务器3中的处理引擎32在接收到需要进行软件漏洞检测的软件类库代码对应的模糊测试目标代码后,对该目标代码进行路径分支执行情况分析。其中,目标代码为一段接受字节流输入并调用被测代码的程序。路径分支执行情况分析具体是对目标代码中各个可执行语句对应的语句块进行分析,检测各个语句块是否被覆盖,也就是对目标代码进行语句覆盖的检测,即度量目标代码中的可执行语句是否被执行到了。如果目标代码中的某可执行语句未被执行,则说明该可执行语句对应的语句块未被覆盖。被覆盖的语句块对应的路径分支为被执行的路径分支,未被覆盖的语句块对应的路径分支为未被执行的路径分支,因此,可以根据对各个语句块的覆盖情况进行分析,可以分析出路径分支的执行情况。本实施例需要确定目标代码中所有未被覆盖的语句块,并确定各个未被覆盖的语句块对应的路径分支,这些路径分支即为未被执行的路径分支。然后将目标代码中存在至少一条未被执行模糊测试的路径分支的路径提取出来,作为目标路径。
图3是本申请实施例提供的一种目标代码对应的路径分支示意图,以图3所示的目标代码对应的路径分支示意图为例,A、B、C、D、E、F、G、H、I、J、K、L、M、N均为目标代码中的语句块,假设A-B-D-H-N路径已经被执行,则说明语句块A、语句块B、语句块D、语句块H和语句块N均被覆盖,此时检测出的未被覆盖的语句块有C、E、F、G、I、J、K、L、M,那么各个未被覆盖的语句块对应的未被执行的路径分支有:D-G、B-E、E-I、I-N、A-C、C-F、F-J、F-K、F-L、F-M。根据未被执行的路径分支,提取出目标代码中存在这些未被执行的路径分支的路径,即路径A-B-D-G中包含未被执行的路径分支D-G,路径A-B-E-I-N中包含未被执行的路径分支B-E、E-I、I-N,路径A-C-F-J中包含未被执行的路径分支A-C、C-F、F-J,路径A-C-F-K中包含未被执行的路径分支A-C、C-F、F-K,路径A-C-F-L中包含未被执行的路径分支A-C、C-F、F-L,路径A-C-F-M中包含未被执行的路径分支A-C、C-F、F-M,因此,路径A-B-D-G、路径A-B-E-I-N、路径A-C-F-J、路径A-C-F-K、路径A-C-F-L、路径A-C-F-M均为目标路径。
分析出目标代码中存在未被执行的路径分支的目标路径后,需要根据目标路径中各路径分支的被执行情况,确定该目标路径的路径特征。其中,各路径分支的被执行情况包括:各路径分支是否被执行,以及被执行次数等。
进一步地,路径特征可以包括路径困难值、路径分支狭窄信息、路径被执行变化信息中的至少一种。其中,路径困难值是基于路径分支被执行概率而确定的路径被执行的难度,路径分支狭窄信息表示路径分支被执行概率是否低于预设概率,路径被执行变化信息表示预设时长内路径中被执行路径分支的变化信息,其中,预设时长可以根据实际情况设置,本实施例中优选设置为24h。
进一步地,如果路径特征包括路径困难值,那么本步骤具体包括:
第一,根据目标路径中各路径分支的被执行次数,以及各路径分支对应的关联分支的被执行次数,计算目标路径上所有路径分支的被执行概率。
每个路径分支的被执行概率需要根据该路径分支的被执行次数以及该路径分支对应的关联分支的被执行次数进行确定,其中,路径分支对应的关联分支为与该路径分支具有共同前继语句的分支,也就是说路径分支与该路径分支对应的关联分支为同一语句块下的分支。例如,同一个分支语句(即语句块)的true分支与false分支即互为关联分支。具体的,当路径分支对应的关联分支的被执行次数未超过预设次数时,该路径分支被执行概率的计算结果不准确,此时则不计算该路径分支的被执行概率。当路径分支对应的关联分支的被执行次数超过了预设次数时,对该路径分支的被执行概率进行计算。其中,预设次数可以根据实际情况设置,本实施例中优选设置为30。
对路径分支的被执行概率计算,首先需要确定该路径分支的被执行次数是否为零,如果该路径分支的被执行次数不为零,则将该路径分支的被执行次数除以该路径分支的被执行次数与该路径分支对应的关联分支的被执行次数之和得到的值作为该路径分支的被执行概率。如果该路径分支的被执行次数为零,即该路径分支从未被执行过,那么需要利用比例运算法推算该路径分支的被执行概率。其中,比例运算法表示当一个事件在n次抽样中都未出现,那么,其出现的概率区间为[0,3/n]的置信度为95%。因此,路径分支的被执行次数为零时,该路径分支的被执行概率为3除以该路径分支对应的关联分支的被执行次数。具体的,当路径分支对应的关联分支的被执行次数超过了预设次数时,路径分支执行概率的计算公式如下:
第二,根据目标路径上所有路径分支的被执行概率,确定目标路径的路径困难值,并将路径困难值作为第一路径特征。
通过上述步骤计算出目标路径中所有路径分支的被执行概率后,将所有路径分支的被执行概率进行乘操作得到该目标路径的被执行概率,将该目标路径的被执行概率的相反数作为该目标路径的路径困难值。如果目标路径的被执行概率越大,也就是该目标路径被执行到的概率越大,那么该目标路径的路径困难值则越小,相反的,如果目标路径的被执行概率越小,也就是该目标路径被执行到的概率越小,目标路径的路径困难值则越大。
具体的,目标路径的路径困难值的计算公式如下:
进一步地,如果路径特征包括路径分支狭窄信息,那么本步骤具体包括:
第一,根据目标路径中各路径分支的被执行情况,确定目标路径中未被执行的路径分支。
根据目标路径中各个路径分支的被执行情况,确定各个路径分支是否被执行,并提取出目标路径中未被执行的路径分支。
第二,对未被执行的路径分支的被执行概率与预设执行概率进行比较,确定未被执行的路径分支是否为狭窄分支,得到目标路径的路径分支狭窄信息作为第二路径特征。
若目标路径的未被执行的路径分支中存在被执行概率低于预设概率的分支,则确定目标路径的路径分支狭窄信息表示存在狭窄分支;若目标路径的未被执行的路径分支中不存在被执行概率低于预设概率的分支,则确定目标路径的路径分支狭窄信息表示不存在狭窄分支。
本实施例可以根据目标路径中未被执行的路径分支的执行条件,确定该未被执行的路径分支的被执行概率,如果未被执行的路径分支的执行条件涉及的范围较宽,那么该未被执行的路径分支的被执行概率则较大,如果未被执行的路径分支的执行条件涉及的范围较窄,那么该未被执行的路径分支的被执行概率则较小。当未被执行的路径分支的被执行概率低于预设概率时,那么该未被执行的路径分支则为狭窄分支。如果目标路径的未被执行的路径分支中存在被执行概率低于预设概率的分支,则说明目标路径中存在狭窄分支,确定目标路径的路径分支狭窄信息表示存在狭窄分支。
以下述语句为例:
void foo(int a){
if(a==100){
……
}
if(a>0){
……
}
……
}
如果通过随机变异的方式生成测试用例,对于一个32位的整型变量a,测试用例能够通过分支if(a==100)的概率仅为1/322。也就是指路径分支if(a==100)的被执行概率为1/322。那么此时路径分支if(a==100)为狭窄分支。
进一步地,如果路径特征包括路径被执行变化信息,本步骤具体包括:
第一,根据目标路径中各路径分支的被执行情况,检测预设时长内目标路径中被执行的路径分支是否增加,得到目标路径的路径被执行变化信息作为第三路径特征。
本实施例实时监测目标代码中各个语句块的覆盖情况,那么也实现了实时监测各路径分支的被执行情况,因此,本实施例可以检测出预设时长内,目标路径中被执行的路径分支是否增加,即预设时长内目标路径中是否有未被执行过的路径分支被执行了。其中,预设时长可以根据实际情况设置,本实施例中优选设置为24h。
若预设时长内目标路径中被执行的路径分支增加,则确定目标路径的路径被执行变化信息表示被执行路径分支增加;若预设时长内目标路径中被执行的路径分支未增加,则确定目标路径的路径被执行变化信息表示被执行路径分支未增加。
S202、根据目标路径的路径特征,确定目标代码的漏洞检测方式。
具体的,本实施例中,如果目标路径的路径困难值较高,那么该目标路径被执行的概率便会偏低,采用符号执行的方式进行漏洞检测的必要性较高。如果目标路径预设时长内被执行的路径分支的数量并未增加,那么该目标路径处于受困状态,此时需要采用符号执行的方式来确定可以通过受困的路径分支的测试用例。如果目标路径中未被执行的路径分支中存在狭窄分支,那么该狭窄分支被执行的概率偏低,需要采用符号执行的方式来确定可以使该狭窄分支被执行的测试用例。
因此,本实施例预先设置了符号执行条件,该符号执行条件包括:路径困难值达到预设困难阈值、路径被执行变化信息表示被执行路径分支未增加,以及路径分支狭窄信息表示存在狭窄分支。本实施例需要根据目标路径的路径特征以及预先设置的符号执行条件,确定所有目标路径中是否具有需要采用符号执行的目标路径,如果目标路径中有需要采用符号执行的目标路径,则确定目标代码的漏洞检测方式为符号执行,如果目标路径中没有需要采用符号执行的目标路径,则确定目标代码的漏洞检测方式为随机变异。
进一步地,该步骤具体包括:
第一,在路径特征符合预先设置的符号执行条件中的任意一项的情况下,则确定漏洞检测方式为符号执行。
如果所有目标路径中,存在至少一条目标路径的路径特征符合预先设置的符号执行条件中的任意一项,则确定漏洞检测方式为符号执行。
具体的,当路径特征仅包括路径困难值时,如果所有目标路径中,存在至少一条目标路径的路径困难值达到预设困难阈值,则确定漏洞检测方式为符号执行。当路径特征仅包括路径被执行变化信息时,如果所有目标路径中,存在至少一条目标路径的路径被执行变化信息表示被执行路径分支未增加,则确定漏洞检测方式为符号执行。当路径特征仅包括路径分支狭窄信息时,如果所有目标路径中,存在至少一条目标路径的路径分支狭窄信息表示存在狭窄分支,则确定漏洞检测方式为符号执行。
当路径特征仅包括:路径困难值和路径被执行变化信息时,如果所有目标路径中,存在至少一条目标路径的路径困难值达到预设困难阈值或者存在至少一条目标路径的路径被执行变化信息表示被执行路径分支未增加,则确定漏洞检测方式为符号执行。
当路径特征仅包括:路径困难值和路径分支狭窄信息时,如果所有目标路径中,存在至少一条目标路径的路径困难值达到预设困难阈值或者存在至少一条目标路径的路径分支狭窄信息表示存在狭窄分支,则确定漏洞检测方式为符号执行。
当路径特征仅包括:路径被执行变化信息和路径分支狭窄信息时,如果所有目标路径中,存在至少一条目标路径的路径被执行变化信息表示被执行路径分支未增加或者存在至少一条目标路径的路径分支狭窄信息表示存在狭窄分支,则确定漏洞检测方式为符号执行。
当路径特征包括:路径困难值、路径被执行变化信息和路径分支狭窄信息时,如果所有目标路径中,存在至少一条目标路径的路径困难值达到预设困难阈值,或者存在至少一条目标路径的路径被执行变化信息表示被执行路径分支未增加,或者,存在至少一条目标路径的路径分支狭窄信息表示存在狭窄分支,则确定漏洞检测方式为符号执行。
第二,在路径特征不符合预先设置的符号执行条件中的任意一项的情况下,则确定漏洞检测方式为随机变异。
如果所有目标路径的路径特征均不符合符号执行条件中的任意一项,则确定漏洞检测方式为随机变异。
具体的,当路径特征仅包括路径困难值时,如果所有目标路径的路径困难值均未达到预设困难阈值,则确定漏洞检测方式为随机变异。当路径特征仅包括路径被执行变化信息时,如果所有目标路径的路径被执行变化信息均表示被执行路径分支增加,则确定漏洞检测方式为随机变异。当路径特征仅包括路径分支狭窄信息时,如果所有目标路径的路径分支狭窄信息均表示不存在狭窄分支,则确定漏洞检测方式为随机变异。
当路径特征仅包括:路径困难值和路径被执行变化信息时,如果所有目标路径的路径困难值均未达到预设困难阈值,且所有目标路径的路径被执行变化信息均表示被执行路径分支增加,则确定漏洞检测方式为随机变异。
当路径特征仅包括:路径困难值和路径分支狭窄信息时,如果所有目标路径的路径困难值均未达到预设困难阈值,且所有目标路径的路径分支狭窄信息均表示不存在狭窄分支,则确定漏洞检测方式为随机变异。
当路径特征仅包括:路径被执行变化信息和路径分支狭窄信息时,如果所有目标路径的路径被执行变化信息均表示被执行路径分支增加,且所有目标路径的路径分支狭窄信息均表示不存在狭窄分支,则确定漏洞检测方式为随机变异。
当路径特征包括:路径困难值、路径被执行变化信息和路径分支狭窄信息时,如果所有目标路径的路径困难值均未达到预设困难阈值,且所有目标路径的路径被执行变化信息均表示被执行路径分支增加,且所有目标路径的路径分支狭窄信息均表示不存在狭窄分支,则确定漏洞检测方式为随机变异。
S203、利用漏洞检测方式对目标代码进行模糊测试。
具体的,确定了漏洞检测方式后,根据不同的漏洞检测方式,确定漏洞检测的测试用例,然后利用漏洞检测的测试用例对目标代码进行模糊测试,从而实现对目标代码的漏洞检测,并根据测试结果对预先构建的漏洞报告进行更新。其中,漏洞报告中存储了导致目标代码对应的程序出现崩溃、断言(assertion)失败等异常时对应输入的测试用例。
通过上述介绍可见,本申请实施例提出的软件漏洞检测方法,获取目标路径的路径特征,目标路径包括目标代码中至少一条未被执行模糊测试的路径分支;根据目标路径的路径特征,确定目标代码的漏洞检测方式,其中,漏洞检测方式包括符号执行或随机变异;利用漏洞检测方式对目标代码进行模糊测试。采用本实施例的技术方案,可以根据路径的路径特征确定漏洞检测方式,实现随机变异与符号执行相结合,减少符号执行的次数,从而减少约束求解的次数,以使软件漏洞检测的性能得以提升。
作为一种可选的实施方式,在漏洞检测方式为随机变异的情况下,上述步骤S203,利用漏洞检测方式对目标代码进行模糊测试,具体包括如下步骤:
在漏洞检测方式为随机变异的情况下,将随机变异生成的值作为漏洞检测的测试用例。
如果漏洞检测方式为随机变异,那么则根据目标代码的输入数据类型,随机生成一个与输入数据类型相匹配的输入数据作为漏洞检测的测试用例。
作为一种可选的实施方式,图4是本申请实施例提供的漏洞检测方式为符号执行时,对目标代码进行模糊测试的处理流程示意图,如图4所示,本申请另一实施例公开了,上述步骤S203中,利用漏洞检测方式对目标代码进行模糊测试,具体包括如下步骤:
S401、根据各个目标路径的路径特征,从所有目标路径中选取目标检测路径。
本实施例可以对各个目标路径的路径特征中的相同特征项进行比较,根据比较结果从所有目标路径中选取目标检测路径。
由于路径特征包括路径困难值、路径被执行变化信息和路径分支狭窄信息中的至少一种,因此,本实施例可以从所有目标路径中的,路径困难值大于预设困难阈值的路径中,选取目标检测路径;或者,从所有目标路径中的,路径被执行变化信息表示被执行路径分支未增加的路径中,选取目标检测路径;或者,从所有目标路径中的,路径分支狭窄信息表示存在狭窄分支的路径中,选取目标检测路径。
具体的,在路径特征仅包括路径困难值的情况下,则比较各个目标路径的路径困难值,从所有目标路径中选取路径困难值大于预设困难阈值的路径作为目标检测路径。在路径特征仅包括路径被执行变化信息的情况下,则从路径被执行变化信息表示被执行路径分支未增加的所有目标路径中选取目标检测路径。在路径特征仅包括路径分支狭窄信息的情况下,则从路径分支狭窄信息表示存在狭窄分支的所有目标路径中选取目标检测路径。
在路径特征仅包括路径困难值和路径被执行变化信息的情况下,则从路径困难值大于预设困难阈值的目标路径,以及路径被执行变化信息表示被执行路径分支未增加的目标路径中,选取目标检测路径。
在路径特征仅包括路径困难值和路径分支狭窄信息的情况下,则从路径困难值大于预设困难阈值的目标路径,以及路径分支狭窄信息表示存在狭窄分支的目标路径中,选取目标检测路径。
在路径特征仅包括路径被执行变化信息和路径分支狭窄信息的情况下,则从路径被执行变化信息表示被执行路径分支未增加的所有目标路径,以及路径分支狭窄信息表示存在狭窄分支的所有目标路径中,选取目标检测路径。
在路径特征包括:路径困难值、路径被执行变化信息和路径分支狭窄信息的情况下,则从路径困难值大于预设困难阈值的目标路径、路径被执行变化信息表示被执行路径分支未增加的目标路径,以及路径分支狭窄信息表示存在狭窄分支的目标路径中,选取目标检测路径。
S402、根据目标检测路径中各路径分支的被执行情况和目标检测路径的路径特征,利用符号执行方式对目标检测路径进行取反分支,得到对应的约束表达式。
具体的,确定了需要进行漏洞检测的目标检测路径之后,确定该目标检测路径中各路径分支的是否被执行,然后根据目标检测路径的路径特征,从各个未被执行的路径分支中选取需要利用符号执行方式进行取反分支操作的路径分支,对这些路径分支对应的关联分支进行取反,从而能够得到这些路径分支对应的约束表达式。
进一步地,具体步骤如下所述:
第一,根据目标检测路径中各路径分支的被执行情况,确定目标检测路径中未被执行的路径分支。
第二,基于目标检测路径的路径特征,从目标检测路径的未被执行的路径分支中选取待约束路径分支。
通过不同的方式获取的目标检测路径,从目标检测路径的未被执行的路径分支中选取待约束路径分支的方式也不同。
具体的,如果目标检测路径是通过路径特征中的路径困难值从所有目标路径中提取的,即目标检测路径为所有目标路径中路径困难值大于预设困难阈值的路径,那么则将该目标检测路径中所有未被执行的路径分支作为待约束路径分支。
如果目标检测路径是通过路径特征中的路径被执行变化信息从所有目标路径中提取的,即目标检测路径为所有目标路径中路径被执行变化信息表示被执行路径分支未增加的路径,那么则将目标检测路径的未被执行路径分支中、与已执行路径分支相连的路径分支,作为待约束路径分支。如图3所示,假如,路径A-B-E-I-N为目标检测路径,未被执行路径分支包括:B-E、E-I、I-N,已执行路径分支为A-B,那么未被执行路径分支中,与已执行路径分支A-B相连的路径分支B-E为待约束路径分支。
如果目标检测路径是通过路径特征中的路径分支狭窄信息从所有目标路径中提取的,即目标检测路径为所有目标路径中路径分支狭窄信息表示存在狭窄分支的路径,那么则将目标检测路径的未被执行路径分支中的狭窄分支作为待约束路径分支。假如,路径A-C-F-J为目标检测路径,路径分支F-J为狭窄分支,那么路径分支F-J为待约束路径分支。
第三,基于预先设置的取反分支数量阈值,确定待约束路径分支的约束表达式,并将约束表达式作为目标检测路径对应的约束表达式。
具体的,在对待约束路径分支进行取反分支操作时,如果需要取反的分支过多,那么将与该目标检测路径的全量符号执行一样,影响漏洞检测的性能,因此,本实施例预先设置了取反分支数量阈值,以使取反分支的数量不超过该取反分支数量阈值。本实施例需要利用取反分支的操作,确定待约束路径分支的约束表达式,并将确定的所有约束表达式作为目标检测路径对应的约束表达式。
例如,当图3所示的路径A-B-D-G为目标检测路径时,如果该目标检测路径是通过路径特征中的路径困难值从所有目标路径中提取的,那么路径分支D-G为待约束路径分支,需要对待约束路径分支的关联分支进行取反操作,即对路径分支D-H进行取反操作,从而能够确定待约束路径分支D-G的约束表达式。如果待约束路径分支较多,那么待约束路径分支的关联分支则会更多,当关联分支的数量超出取反分支数量阈值时,则需要限制进行取反的分支数量。
当图3所示的路径A-B-E-I-N为目标检测路径时,如果该目标检测路径是通过路径特征中的路径被执行变化信息从所有目标路径中提取的,那么路径分支B-E为待约束路径分支,需要对待约束路径分支的关联分支进行取反操作,即对路径分支B-D进行取反操作,从而能够确定待约束路径分支B-E的约束表达式。
当图3所示的路径A-C-F-J为目标检测路径时,如果该目标检测路径是通过路径特征中的路径分支狭窄信息从所有目标路径中提取的,那么路径分支F-J为待约束路径分支,需要对待约束路径分支的关联分支进行取反操作,即对路径分支F-K、F-L、F-M同时进行取反操作,从而能够确定待约束路径分支F-J的约束表达式。假如预先设置的取反分支数量阈值为2,那么可以从三个关联分支中随意选取两个进行取反操作。
S403、根据约束表达式进行约束求解,得到漏洞检测的测试用例。
确定了目标检测路径对应的约束表达式后,可以利用SMT(SatisfiabilityModulo Theory)约束求解器对目标检测路径对应的约束表达式进行求解,从而计算出对目标检测路径进行漏洞检测的测试用例。
S404、将测试用例输入到目标代码对应的程序中执行,根据输出结果对预先构建的漏洞报告进行更新。
根据漏洞检测方式确定出漏洞检测的测试用例后,将该测试用例输入到目标代码对应的程序中,以使该程序运行,在程序运行过程中,需要观察程序运行过程与运行结果,如果程序出现崩溃、断言(assertion)失败等异常,则将导致该程序出现异常的测试用例存储到预先构建的漏洞报告中,以使漏洞报告更新。
另外,在每次将测试用例输入到目标代码对应的程序后,需要收集并记录目标代码中各个语句块的覆盖信息,即各个可执行语句的被执行情况。
示例性装置
图5是本申请实施例提供的一种软件漏洞检测装置的结构示意图,与上述的软件漏洞检测方法相对应的,本申请实施例还提出一种软件漏洞检测装置,参见图5所示,该装置包括:
路径特征获取模块100,用于获取目标路径的路径特征,目标路径包括目标代码中至少一条未被执行模糊测试的路径分支;
漏洞检测方式确定模块110,用于根据目标路径的路径特征,确定目标代码的漏洞检测方式,其中,漏洞检测方式包括:符号执行或随机变异;
漏洞检测模块120,用于利用漏洞检测方式对目标代码进行模糊测试。
本申请实施例提出的软件漏洞检测装置,路径特征获取模块100获取目标路径的路径特征,目标路径包括目标代码中至少一条未被执行模糊测试的路径分支;漏洞检测方式确定模块110根据目标路径的路径特征,确定目标代码的漏洞检测方式,其中,漏洞检测方式包括:符号执行或随机变异;漏洞检测模块120利用漏洞检测方式对目标代码进行模糊测试。采用本实施例的技术方案,可以根据路径的路径特征确定漏洞检测方式,实现随机变异与符号执行相结合,减少符号执行的次数,从而减少约束求解的次数,以使软件漏洞检测的性能得以提升。
作为一种可选的实现方式,本申请另一实施例还公开了,路径特征获取模块100,具体用于:
根据目标路径中各路径分支的被执行次数,以及各路径分支对应的关联分支的被执行次数,计算目标路径上所有路径分支的被执行概率;路径分支对应的关联分支与路径分支为同一语句块下的分支;
根据目标路径上所有路径分支的被执行概率,确定目标路径的路径困难值,并将路径困难值作为第一路径特征。
作为一种可选的实现方式,本申请另一实施例还公开了,路径特征获取模块100,具体用于:
根据目标路径中各路径分支的被执行情况,确定目标路径中未被执行的路径分支;
对未被执行的路径分支的被执行概率与预设执行概率进行比较,确定未被执行的路径分支是否为狭窄分支,得到目标路径的路径分支狭窄信息作为第二路径特征。
作为一种可选的实现方式,本申请另一实施例还公开了,路径特征获取模块100,具体用于:
根据目标路径中各路径分支的被执行情况,检测预设时长内目标路径中被执行的路径分支是否增加,得到目标路径的路径被执行变化信息作为第三路径特征。
作为一种可选的实现方式,本申请另一实施例还公开了,漏洞检测方式确定模块110具体用于:
在路径特征符合预先设置的符号执行条件中的任意一项的情况下,确定漏洞检测方式为符号执行;
其中,符号执行条件包括:路径困难值达到预设困难阈值、路径被执行变化信息表示被执行路径分支未增加,以及路径分支狭窄信息表示存在狭窄分支。
作为一种可选的实现方式,本申请另一实施例还公开了,漏洞检测方式确定模块110具体还用于:
在路径特征不符合预先设置的符号执行条件中的任意一项的情况下,确定漏洞检测方式为随机变异。
作为一种可选的实现方式,本申请另一实施例还公开了,漏洞检测模块120包括:路径选取单元、约束表达式确定单元、约束求解单元和漏洞报告更新单元。
路径选取单元,用于根据各个目标路径的路径特征,从所有目标路径中选取目标检测路径;
约束表达式确定单元,用于根据目标检测路径中各路径分支的被执行情况和目标检测路径的路径特征,利用符号执行方式对目标检测路径进行取反分支,得到对应的约束表达式;
约束求解单元,用于根据约束表达式进行约束求解,得到漏洞检测的测试用例。
漏洞报告更新单元,用于将测试用例输入到目标代码对应的程序中执行,根据输出结果对预先构建的漏洞报告进行更新。
作为一种可选的实现方式,本申请另一实施例还公开了,路径选取单元,具体用于通过比较各个目标路径的路径特征中的相同特征项,从所有目标路径中选取目标检测路径。
作为一种可选的实现方式,本申请另一实施例还公开了,路径选取单元通过比较各个目标路径的路径特征中的相同特征项,从所有目标路径中选取目标检测路径,包括:
从所有目标路径中的,路径困难值大于预设困难阈值的路径中,选取目标检测路径;
或者,从所有目标路径中的,路径被执行变化信息表示被执行路径分支未增加的路径中,选取目标检测路径;
或者,从所有目标路径中的,路径分支狭窄信息表示存在狭窄分支的路径中,选取目标检测路径。
作为一种可选的实现方式,本申请另一实施例还公开了,约束表达式确定单元,具体用于:
根据目标检测路径中各路径分支的被执行情况,确定目标检测路径中未被执行的路径分支;
基于目标检测路径的路径特征,从目标检测路径的未被执行的路径分支中选取待约束路径分支;
基于预先设置的取反分支数量阈值,确定待约束路径分支的约束表达式,并将约束表达式作为目标检测路径对应的约束表达式。
作为一种可选的实现方式,本申请另一实施例还公开了,约束表达式确定单元基于目标检测路径的路径特征,从目标检测路径的未被执行的路径分支中选取待约束路径分支,包括:
在目标检测路径为目标路径中路径困难值大于预设困难阈值的路径的情况下,将目标检测路径中所有未被执行的路径分支作为待约束路径分支;
在目标检测路径为路径被执行变化信息表示被执行路径分支未增加的路径的情况下,将目标检测路径的未被执行路径分支中、与已执行路径分支相连的路径分支,作为待约束路径分支;
在目标检测路径为路径分支狭窄信息表示存在狭窄分支的路径的情况下,将目标检测路径的未被执行路径分支中的狭窄分支作为待约束路径分支。
本实施例提供的软件漏洞检测装置,与本申请上述实施例所提供的软件漏洞检测方法属于同一申请构思,可执行本申请上述任意实施例所提供的软件漏洞检测方法,具备执行该软件漏洞检测方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本申请上述实施例提供的软件漏洞检测方法的具体处理内容,此处不再加以赘述。
示例性电子设备
图6是本申请实施例提供的一种电子设备的结构示意图。本申请另一实施例还公开了一种电子设备,参见图6所示,该设备包括:
存储器200和处理器210;
其中,所述存储器200与所述处理器210连接,用于存储程序;
所述处理器210,用于通过运行所述存储器200中存储的程序,实现上述任一实施例公开的软件漏洞检测方法。
具体的,上述电子设备还可以包括:总线、通信接口220、输入设备230和输出设备240。
处理器210、存储器200、通信接口220、输入设备230和输出设备240通过总线相互连接。其中:
总线可包括一通路,在计算机系统各个部件之间传送信息。
处理器210可以是通用处理器,例如通用中央处理器(CPU)、微处理器等,也可以是特定应用集成电路(application-specific integrated circuit,ASIC),或一个或多个用于控制本发明方案程序执行的集成电路。还可以是数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
处理器210可包括主处理器,还可包括基带芯片、调制解调器等。
存储器200中保存有执行本发明技术方案的程序,还可以保存有操作系统和其他关键业务。具体地,程序可以包括程序代码,程序代码包括计算机操作指令。更具体的,存储器200可以包括只读存储器(read-only memory,ROM)、可存储静态信息和指令的其他类型的静态存储设备、随机存取存储器(random access memory,RAM)、可存储信息和指令的其他类型的动态存储设备、磁盘存储器、flash等等。
输入设备230可包括接收用户输入的数据和信息的装置,例如键盘、鼠标、摄像头、扫描仪、光笔、语音输入装置、触摸屏、计步器或重力感应器等。
输出设备240可包括允许输出信息给用户的装置,例如显示屏、打印机、扬声器等。
通信接口220可包括使用任何收发器一类的装置,以便与其他设备或通信网络通信,如以太网,无线接入网(RAN),无线局域网(WLAN)等。
处理器210执行存储器200中所存放的程序,以及调用其他设备,可用于实现本申请实施例所提供的软件漏洞检测方法的各个步骤。
示例性计算机程序产品和计算机可读存储介质
除了上述方法和设备以外,本申请的实施例还可以是计算机程序产品,其包括计算机程序指令,计算机程序指令在被处理器运行时使得处理器执行本说明书上述“示例性方法”部分中描述的根据本申请各种实施例的软件漏洞检测方法中的步骤。
计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本申请实施例操作的程序代码,程序设计语言包括面向对象的程序设计语言,诸如Java、C++等,还包括常规的过程式程序设计语言,诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。
此外,本申请的实施例还可以是计算机可读存储介质,其上存储有计算机程序指令,计算机程序指令在被处理器运行时使得处理器执行本说明书上述“示例性方法”部分中描述的根据本申请各种实施例的软件漏洞检测方法中的步骤。
所述计算机可读存储介质可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
以上结合具体实施例描述了本申请的基本原理,但是,需要指出的是,在本申请中提及的优点、优势、效果等仅是示例而非限制,不能认为这些优点、优势、效果等是本申请的各个实施例必须具备的。另外,上述公开的具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本申请为必须采用上述具体的细节来实现。
本申请中涉及的器件、装置、设备、系统的方框图仅作为例示性的例子并且不意图要求或暗示必须按照方框图示出的方式进行连接、布置、配置。如本领域技术人员将认识到的,可以按任意方式连接、布置、配置这些器件、装置、设备、系统。诸如“包括”、“包含”、“具有”等等的词语是开放性词汇,指“包括但不限于”,且可与其互换使用。这里所使用的词汇“或”和“和”指词汇“和/或”,且可与其互换使用,除非上下文明确指示不是如此。这里所使用的词汇“诸如”指词组“诸如但不限于”,且可与其互换使用。
还需要指出的是,在本申请的装置、设备和方法中,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本申请的等效方案。
提供所公开的方面的以上描述以使本领域的任何技术人员能够做出或者使用本申请。对这些方面的各种修改对于本领域技术人员而言是非常显而易见的,并且在此定义的一般原理可以应用于其他方面而不脱离本申请的范围。因此,本申请不意图被限制到在此示出的方面,而是按照与在此公开的原理和新颖的特征一致的最宽范围。
应当理解,本申请实施例描述中所用到的限定词“第一”、“第二”、“第三”、“第四”、“第五”和“第六”仅用于更清楚的阐述技术方案,并不能用于限制本申请的保护范围。
为了例示和描述的目的已经给出了以上描述。此外,此描述不意图将本申请的实施例限制到在此公开的形式。尽管以上已经讨论了多个示例方面和实施例,但是本领域技术人员将认识到其某些变型、修改、改变、添加和子组合。
Claims (14)
1.一种软件漏洞检测方法,其特征在于,包括:
获取目标路径的路径特征,所述目标路径包括目标代码中至少一条未被执行模糊测试的路径分支;所述目标路径的路径特征包括:路径困难值、路径分支狭窄信息和路径被执行变化信息中的至少一种,所述路径困难值表示所述目标路径被执行的难度,所述路径分支狭窄信息表示所述目标路径中是否存在被执行概率低于预设概率的路径分支,所述路径被执行变化信息表示预设时长内所述目标路径中被执行的路径分支是否增加;
根据所述目标路径的路径特征,确定所述目标代码的漏洞检测方式,其中,所述漏洞检测方式包括符号执行或随机变异;
利用所述漏洞检测方式对所述目标代码进行模糊测试。
2.根据权利要求1所述的方法,其特征在于,所述获取目标路径的路径特征,包括:
根据所述目标路径中各路径分支的被执行次数,以及各路径分支对应的关联分支的被执行次数,计算所述目标路径上所有路径分支的被执行概率;所述路径分支对应的关联分支与所述路径分支为同一语句块下的分支;
根据所述目标路径上所有路径分支的被执行概率,确定所述目标路径的路径困难值,并将所述路径困难值作为第一路径特征。
3.根据权利要求1所述的方法,其特征在于,所述获取目标路径的路径特征,包括:
根据所述目标路径中各路径分支的被执行情况,确定所述目标路径中未被执行的路径分支;
对所述未被执行的路径分支的被执行概率与预设执行概率进行比较,确定所述未被执行的路径分支是否为狭窄分支,得到所述目标路径的路径分支狭窄信息作为第二路径特征。
4.根据权利要求1所述的方法,其特征在于,所述获取目标路径的路径特征,包括:
根据所述目标路径中各路径分支的被执行情况,检测预设时长内所述目标路径中被执行的路径分支是否增加,得到所述目标路径的路径被执行变化信息作为第三路径特征。
5.根据权利要求1所述的方法,其特征在于,根据所述目标路径的路径特征,确定所述目标代码的漏洞检测方式,包括:
在所述路径特征符合预先设置的符号执行条件中的任意一项的情况下,确定漏洞检测方式为符号执行;
其中,所述符号执行条件包括:路径困难值达到预设困难阈值、路径被执行变化信息表示被执行路径分支未增加,以及路径分支狭窄信息表示存在狭窄分支。
6.根据权利要求5所述的方法,其特征在于,根据所述目标路径的路径特征,确定所述目标代码的漏洞检测方式,还包括:
在所述路径特征不符合预先设置的符号执行条件中的任意一项的情况下,确定漏洞检测方式为随机变异。
7.根据权利要求1所述的方法,其特征在于,利用所述漏洞检测方式对所述目标代码进行模糊测试,包括:
根据各个所述目标路径的路径特征,从所有所述目标路径中选取目标检测路径;
根据所述目标检测路径中各路径分支的被执行情况和所述目标检测路径的路径特征,利用符号执行方式对所述目标检测路径进行取反分支,得到对应的约束表达式;
根据所述约束表达式进行约束求解,得到漏洞检测的测试用例;
将所述测试用例输入到所述目标代码对应的程序中执行,根据输出结果对预先构建的漏洞报告进行更新。
8.根据权利要求7所述的方法,其特征在于,根据各个所述目标路径的路径特征,从所有所述目标路径中选取目标检测路径,包括:
通过比较各个所述目标路径的路径特征中的相同特征项,从所有所述目标路径中选取目标检测路径。
9.根据权利要求8所述的方法,其特征在于,通过比较各个所述目标路径的路径特征中的相同特征项,从所有所述目标路径中选取目标检测路径,包括:
从所有所述目标路径中的,路径困难值大于预设困难阈值的路径中,选取目标检测路径;
或者,从所有所述目标路径中的,路径被执行变化信息表示被执行路径分支未增加的路径中,选取目标检测路径;
或者,从所有所述目标路径中的,路径分支狭窄信息表示存在狭窄分支的路径中,选取目标检测路径。
10.根据权利要求7所述的方法,其特征在于,根据所述目标检测路径中各路径分支的被执行情况和所述目标检测路径的路径特征,利用符号执行方式对所述目标检测路径进行取反分支,得到对应的约束表达式,包括:
根据所述目标检测路径中各路径分支的被执行情况,确定所述目标检测路径中未被执行的路径分支;
基于所述目标检测路径的路径特征,从所述目标检测路径的未被执行的路径分支中选取待约束路径分支;
基于预先设置的取反分支数量阈值,确定所述待约束路径分支的约束表达式,并将所述约束表达式作为所述目标检测路径对应的约束表达式。
11.根据权利要求10所述的方法,其特征在于,基于所述目标检测路径的路径特征,从所述目标检测路径的未被执行的路径分支中选取待约束路径分支,包括:
在所述目标检测路径为所述目标路径中路径困难值大于预设困难阈值的路径的情况下,将所述目标检测路径中所有未被执行的路径分支作为待约束路径分支;
在所述目标检测路径为路径被执行变化信息表示被执行路径分支未增加的路径的情况下,将所述目标检测路径的未被执行路径分支中、与已执行路径分支相连的路径分支,作为待约束路径分支;
在所述目标检测路径为路径分支狭窄信息表示存在狭窄分支的路径的情况下,将所述目标检测路径的未被执行路径分支中的狭窄分支作为待约束路径分支。
12.一种软件漏洞检测装置,其特征在于,包括:
路径特征获取模块,用于获取目标路径的路径特征,所述目标路径包括目标代码中至少一条未被执行模糊测试的路径分支;所述目标路径的路径特征包括:路径困难值、路径分支狭窄信息和路径被执行变化信息中的至少一种,所述路径困难值表示所述目标路径被执行的难度,所述路径分支狭窄信息表示所述目标路径中是否存在被执行概率低于预设概率的路径分支,所述路径被执行变化信息表示预设时长内所述目标路径中被执行的路径分支是否增加;
漏洞检测方式确定模块,用于根据所述目标路径的路径特征,确定所述目标代码的漏洞检测方式,其中,所述漏洞检测方式包括:符号执行或随机变异;
漏洞检测模块,用于利用所述漏洞检测方式对所述目标代码进行模糊测试。
13.一种电子设备,其特征在于,包括:存储器和处理器;
其中,所述存储器与所述处理器连接,用于存储程序;
所述处理器,用于通过运行所述存储器中的程序,实现如权利要求1至11中任一项所述的软件漏洞检测方法。
14.一种存储介质,其特征在于,所述存储介质上存储有计算机程序,所述计算机程序被处理器执行时,实现如权利要求1至11中任一项所述的软件漏洞检测方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211221634.0A CN115292206B (zh) | 2022-10-08 | 2022-10-08 | 软件漏洞检测方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211221634.0A CN115292206B (zh) | 2022-10-08 | 2022-10-08 | 软件漏洞检测方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115292206A CN115292206A (zh) | 2022-11-04 |
CN115292206B true CN115292206B (zh) | 2023-03-14 |
Family
ID=83833107
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211221634.0A Active CN115292206B (zh) | 2022-10-08 | 2022-10-08 | 软件漏洞检测方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115292206B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116881919B (zh) * | 2023-06-01 | 2024-04-19 | 清华大学 | 漏洞挖掘方法、装置、电子设备及存储介质 |
CN116561773B (zh) * | 2023-07-12 | 2023-09-19 | 北京云科安信科技有限公司 | 一种智能漏洞检测及验证方法 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102508780A (zh) * | 2011-11-21 | 2012-06-20 | 电子科技大学 | 一种用于软件测试的交叉式动态法和装置 |
CN104008053A (zh) * | 2014-05-28 | 2014-08-27 | 电子科技大学 | 一种用于漏洞发掘的动态符号执行路径搜索方法 |
CN108052825A (zh) * | 2017-12-29 | 2018-05-18 | 哈尔滨工业大学 | 针对二进制可执行文件的模糊测试与符号执行相结合的漏洞检测系统 |
CN111581106A (zh) * | 2020-05-12 | 2020-08-25 | 全球能源互联网研究院有限公司 | 二进制程序漏洞测试方法、装置及可读存储介质 |
CN112181833A (zh) * | 2020-09-28 | 2021-01-05 | 全球能源互联网研究院有限公司 | 一种智能化模糊测试方法、装置及系统 |
CN113569252A (zh) * | 2021-07-07 | 2021-10-29 | 四川省信息安全测评中心 | 结合神经网络基于函数与分支覆盖的漏洞检测方法 |
CN114036040A (zh) * | 2021-10-19 | 2022-02-11 | 杭州电子科技大学 | 基于细粒度信息同步的软件混合模糊测试方法及设备 |
CN114706761A (zh) * | 2022-03-16 | 2022-07-05 | 中国人民解放军国防科技大学 | 一种基于约束分割的混合执行测试优化方法及装置 |
CN114817927A (zh) * | 2022-03-30 | 2022-07-29 | 北京邮电大学 | 基于分支覆盖指导的有效符号执行方法及装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9183396B2 (en) * | 2012-05-21 | 2015-11-10 | Carnegie Mellon University | Detecting exploitable bugs in binary code |
CN108268371B (zh) * | 2016-12-30 | 2021-03-02 | 南京理工大学 | 面向Android应用的智能模糊测试方法 |
US10394694B2 (en) * | 2018-01-15 | 2019-08-27 | Fujitsu Limited | Unexplored branch search in hybrid fuzz testing of software binaries |
CN113312618A (zh) * | 2021-05-25 | 2021-08-27 | 中国工商银行股份有限公司 | 程序漏洞检测方法、装置、电子设备及介质 |
-
2022
- 2022-10-08 CN CN202211221634.0A patent/CN115292206B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102508780A (zh) * | 2011-11-21 | 2012-06-20 | 电子科技大学 | 一种用于软件测试的交叉式动态法和装置 |
CN104008053A (zh) * | 2014-05-28 | 2014-08-27 | 电子科技大学 | 一种用于漏洞发掘的动态符号执行路径搜索方法 |
CN108052825A (zh) * | 2017-12-29 | 2018-05-18 | 哈尔滨工业大学 | 针对二进制可执行文件的模糊测试与符号执行相结合的漏洞检测系统 |
CN111581106A (zh) * | 2020-05-12 | 2020-08-25 | 全球能源互联网研究院有限公司 | 二进制程序漏洞测试方法、装置及可读存储介质 |
CN112181833A (zh) * | 2020-09-28 | 2021-01-05 | 全球能源互联网研究院有限公司 | 一种智能化模糊测试方法、装置及系统 |
CN113569252A (zh) * | 2021-07-07 | 2021-10-29 | 四川省信息安全测评中心 | 结合神经网络基于函数与分支覆盖的漏洞检测方法 |
CN114036040A (zh) * | 2021-10-19 | 2022-02-11 | 杭州电子科技大学 | 基于细粒度信息同步的软件混合模糊测试方法及设备 |
CN114706761A (zh) * | 2022-03-16 | 2022-07-05 | 中国人民解放军国防科技大学 | 一种基于约束分割的混合执行测试优化方法及装置 |
CN114817927A (zh) * | 2022-03-30 | 2022-07-29 | 北京邮电大学 | 基于分支覆盖指导的有效符号执行方法及装置 |
Non-Patent Citations (4)
Title |
---|
"基于动态符号执行和静态分析的Fuzzing测试算法研究";李唯;《中国优秀硕士学位论文全文数据库》;20210515;全文 * |
Dong Fangquan ; Dong Chaoqun ; Zhang Yao ; Lin Teng."Binary-oriented hybrid fuzz testing".《2015 6th IEEE International Conference on Software Engineering and Service Science (ICSESS)》.2015, * |
一种动静结合的高代码覆盖率模糊测试方法;韩等;《信息安全研究》;20160805(第08期);全文 * |
结合静态分析与动态符号执行的软件漏洞检测方法;蔡军等;《计算机工程与科学》;20161215(第12期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN115292206A (zh) | 2022-11-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115292206B (zh) | 软件漏洞检测方法、装置、电子设备及存储介质 | |
CN109587008B (zh) | 检测异常流量数据的方法、装置及存储介质 | |
CN108919776B (zh) | 一种故障评估方法及终端 | |
CN114422267B (zh) | 流量检测方法、装置、设备及介质 | |
CN110392046B (zh) | 网络访问的异常检测方法和装置 | |
CN111597065A (zh) | 用于采集设备信息的方法和装置 | |
CN114328208A (zh) | 代码检测方法及装置、电子设备、存储介质 | |
US20140245440A1 (en) | Software Inspection System | |
CN112507265B (zh) | 基于树结构进行异常侦测的方法、装置及相关产品 | |
US20150193617A1 (en) | Signature verification device, signature verification method, and program | |
CN110599278A (zh) | 聚合设备标识符的方法、装置和计算机存储介质 | |
CN112434245A (zh) | 基于ueba进行异常行为事件的判断方法、装置及相关产品 | |
CN109669875B (zh) | 应用崩溃测试方法、装置、电子设备及存储介质 | |
CN109450853B (zh) | 恶意网站判定方法、装置、终端及服务器 | |
Cao et al. | Decentralized failure prognosis of stochastic discrete-event systems and a test algorithm | |
CN111738290A (zh) | 图像检测方法、模型构建和训练方法、装置、设备和介质 | |
CN115665285A (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN112699376A (zh) | 源代码逻辑漏洞检测方法、装置、计算机设备及存储介质 | |
CN114021118A (zh) | 基于超融合服务器系统的多元行为检测方法、系统及介质 | |
CN112085589A (zh) | 规则模型的安全性的确定方法、装置和服务器 | |
CN116186019B (zh) | 应用于民机航电系统下的功能一体化智能分析方法及装置 | |
CN113572768B (zh) | 一种僵尸网络家族传播源数量变化异常的分析方法 | |
CN116401113B (zh) | 一种异构众核架构加速卡的环境验证方法、装置及介质 | |
KR102465307B1 (ko) | 화이트 리스트 생성 방법 및 이를 수행하는 사용자 단말, 컴퓨터 판독 가능한 기록 매체 및 컴퓨터 프로그램 | |
CN113051560B (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 | ||
CP03 | Change of name, title or address |
Address after: Room 533, 5th Floor, Building A3A4, Phase I, Zhong'an Chuanggu Science and Technology Park, No. 900 Wangjiang West Road, High tech Zone, Hefei City, Anhui Province, 230031 Patentee after: Anhui Xinxin Science and Technology Innovation Information Technology Co.,Ltd. Address before: 2nd Floor, Building B2, Yunhui Valley, No. 156, Tiangu 8th Road, Software New Town, Yuhua Street Office, High-tech Zone, Xi'an City, Shaanxi Province 710000 Patentee before: Xi'an Xinxin Information Technology Co.,Ltd. |
|
CP03 | Change of name, title or address |