CN116069656A - 一种以漏洞为导向的高效区域模糊测试方法 - Google Patents
一种以漏洞为导向的高效区域模糊测试方法 Download PDFInfo
- Publication number
- CN116069656A CN116069656A CN202310138337.8A CN202310138337A CN116069656A CN 116069656 A CN116069656 A CN 116069656A CN 202310138337 A CN202310138337 A CN 202310138337A CN 116069656 A CN116069656 A CN 116069656A
- Authority
- CN
- China
- Prior art keywords
- seeds
- seed
- vulnerability
- fuzzy test
- target
- 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.)
- Pending
Links
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/3676—Test management for coverage analysis
-
- 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
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/64—Protecting data integrity, e.g. using checksums, certificates or signatures
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Quality & Reliability (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Computing Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种以漏洞为导向的高效区域模糊测试方法,包括如下步骤:S1、对以漏洞为导向的目标程序进行插桩编译,得到包含代码覆盖信息以及潜在漏洞位置信息的插桩后的目标程序;S2、通过基于种子选择的模糊测试核心环节对插桩后的目标程序运行区域模糊测试;S3、根据区域模糊测试运行结果进行相应处理;S4、在区域模糊测试运行结束后,对目标种子进行筛选去重,并对筛选去重后的种子进行潜在漏洞分析。本发明能够在保持覆盖率基本不变的同时有效降低区域模糊测试过程中种子队列中种子的数量,降低了模糊测试的开销,进而提升模糊测试的效率。
Description
技术领域
本发明涉及网络安全漏洞挖掘领域,特别是涉及一种以漏洞为导向的高效区域模糊测试方法。
背景技术
随着当前软件程序的开发人员越来越多,开发规模越来越大,各种软件和程序已经成为人们生活中不可或缺的一部分,其中的安全隐患也越来越多。攻击者可以利用软件或系统中存在的安全漏洞,对计算机系统和网络造成严重的危害。现在,由于程序越来越复杂,模糊测试作为一种廉价的方法,已经成为发现漏洞的主要工具之一。模糊测试由三个基本组件组成,即输入生成器、执行器和漏洞监视器。输入生成器为执行器提供大量的输入,执行器利用输入上运行目标程序。然后,模糊测试监视执行,以检查是否发现新的执行状态或导致程序崩溃。
在所有的模糊测试解决方案中,覆盖引导的灰盒模糊测试(CGF,Coverage-guidedGreybox Fuzzing)是检测漏洞最成功的方法之一。所谓灰盒测试,即介于白盒测试与黑盒测试之间。灰盒测试多用于集成测试阶段,不仅关注输出、输入的正确性,同时也关注程序内部的情况。灰盒测试不像白盒那样详细、完整,但又比黑盒测试更关注程序的内部逻辑,常常是通过一些表征性的现象、事件、标志来判断内部的运行状态。到目前为止,工业界中已经开发并投入使用的CGF,如OSSFuzz和OneFuzz,已经在实际应用程序中发现了数千个漏洞。
尽管现有的基于代码覆盖率的灰盒模糊测试的解决方案在寻找漏洞方面取得了巨大的成功,但研究人员认识到代码覆盖率是漏洞发现的基本而不是唯一有效的反馈。代码覆盖率之所以被重视并被广泛使用,是因为在所覆盖的代码行和发现的漏洞数量之间有很强的相关性。然而,平等地测试每一段代码是低效的,因为不是每一段代码都包含潜在漏洞或者易受攻击的。因此,研究人员寻找更有可能导致漏洞的可疑代码区域,并将更多的能量(即变异次数)分配给这些位置。在模糊测试中,一般来说代码区域的基本单位为代码基本块(BB,Basic Block),每一个种子对应一条种子执行路径,每条执行路径会经过一个或多个基本块。因此也可以在一定程度上认为模糊测试的种子和目标程序的代码区域是高度对应的,即每一块代码区域都会对应一些种子,尽管它们很可能不是一一对应的。
专利CN115269412A所述方案提出了一种基于目标前置区域搜索的定向模糊测试方法。该方案通过静态分析程序中针对目标点的前置基本块,并根据是否为前置基本块进行差异化插桩,以及对程序进行覆盖引导的灰盒模糊测试,在测试的过程中执行自修改,将存在间接调用的非前置基本块修改为前置基本块。最后在每次测试用例执行后,根据前置基本块组成的边的覆盖情况更新全局成熟度;该方案同时采用基于全局成熟度的能量调度、种子选择与种子变异方法来实现定向模糊测试。该方案中基于目标前置区域搜索的定向模糊测试方法解决当前定向灰盒模糊测试中间接调用的问题,但是基于全局成熟度的方法并没有很有效的与定向模糊测试相结合。该方案存在局限性。
专利CN107193731B所述方案针对目前优化模糊测试覆盖率方法时间代价高、测试范围不完整和自动化程度低等问题,提出一种控制变异生成测试用例的方法。该方案利用插桩技术对测试用例生成过程进行反馈,结合随机变异和控制变异方式优化测试用例生成。该方案能够一定程度上提升代码覆盖率,以及在相同代码覆盖率下减少所需测试用例数。该方法中所提出的变异策略和方案效果间的相关性不够强,可解释性不足。该方案存在局限性。
专利CN113542299A所述方案提出了一种基于模糊测试的工业互联网漏洞挖掘方法及系统。该方法通过捕获网络数据包,并是对所述网络数据包进行解析,确定已知协议的数据包和未知协议的数据包;对所述未知协议的数据包进行通信层和链路层的层面解析,获取通信五元组以及pyload(有效载荷)数据,进而提取应用层协议数据包;所述应用层协议数据包包括:未知协议的包头和载荷;根据所述应用层协议数据包生成规则文件;根据所述规则文件生成模糊测试的测试用例,并将所述模糊测试的测试用例进行封装;将封装后的模糊测试的测试用例传送至目标设备进行异常检测。该技术在降低了输入种子的规模的同时并没有很好的保持相当的模糊测试效率,因此该方案存在局限性。
专利CN114444084A所述方案,提出了一种模糊测试方法及计算机可读存储介质。本发明提供一种模糊测试方法及计算机可读存储介质,方法包括:生成突变输入时包括如下步骤:S1:对种子队列中每个种子执行字节分析以识别与验证检查相关的字节,所述字节分析包括对所述种子中所有所述字节尝试突变,根据所述突变输入的路径变化情况得到所述字节的分数值;S2:根据所述字节的所述分数值确定是否对所述字节进行突变。该发明使用一种新颖的轻量级突变策略来增加生成合法突变输入的可能性,但由于该方案只针对代码覆盖率进行突变优化,可能会加入大量类似甚至完全重复的合法输入,降低模糊测试的空间消耗。该方案存在局限性。
专利CN111881039B所述方案,提出了一种模糊测试的种子处理、模糊测试方法、系统和存储介质。该应用在软件测试技术中,其中种子处理方法包括获取各程序块的静态权重;在模糊测试中对各程序块的运行次数进行统计,在每次模糊测试中根据所述统计中各程序块的运行次数得到各程序块的动态权重;根据所述静态权重和动态权重对种子库中的种子进行评分;选择种子进行变异,其中,获得测试用例,种子评分越高被选择的概率越高;统计代码覆盖率,根据测试用例的代码覆盖率将测试用例更新到种子库中。该方法中尽管通过新的打分机制让那些分值更高的种子优先被模糊测试,但容易发生反复挑选出有着相同或者相似执行路径的种子进行模糊测试,因为它们具有更高的分值。因此该方案存在局限性。
当前软件程序和应用无论在种类还是数量上都日趋繁多,大部分程序中往往包含成百上千行乃至上万行代码,这些代码行或者说代码块之间并不是平等的,有些代码块相对于别的代码块更加危险,也更容易含有潜在的漏洞。需要指出的是,大部分代码块是不含有漏洞的,如果模糊测试对所有代码块全都一视同仁,分配相同的权重进行模糊测试,那么显然是不够合理的。定向模糊测试发展至今,其优点已经逐渐被发扬光大,即使一些非DGF也或多或少在其中融入一些定向模糊测试的优点,可以更快地到达模糊测试所定义的目标位置。但定向模糊测试的缺点也是显而易见的,例如模糊测试运行的效率不高(开销过大)就是最主要的缺点,另外还有种子能量分配不够合理,目标位置的选取不够合理等多方面的缺点都使得定向模糊测试至今仍未成为工业界应用的主流模糊测试工具。
发明内容
为了解决针对现有模糊测试工具中种子数量过多的问题和效率低下的技术问题,本发明的目的在于提供一种以漏洞为导向的高效区域模糊测试方法。
本发明通过如下技术方案加以实现:
一种以漏洞为导向的高效区域模糊测试方法,包括如下步骤:
S1、对以漏洞为导向的目标程序进行插桩编译,得到包含代码覆盖信息以及潜在漏洞位置信息的插桩后的目标程序;
S2、通过基于种子选择的模糊测试核心环节对插桩后的目标程序运行区域模糊测试;
S3、根据区域模糊测试运行结果进行相应处理;
S4、在区域模糊测试运行结束后,对目标种子进行筛选去重,并对筛选去重后的种子进行潜在漏洞分析。
在一些实施例中,步骤S1中,所述插桩编译是通过不同的内存错误检测工具sanitizer标记并记录目标程序中含有潜在漏洞及其所在位置。
在一些实施例中,所述漏洞包括越界访问的相关漏洞、非法访问已释放内存相关漏洞、非法访问已经返回的内存相关漏洞和内存释放相关漏洞。
在一些实施例中,所述步骤S2包括如下步骤:
S2-1、构建目标程序潜在漏洞位置图;
S2-2、基于到所述潜在漏洞位置距离计算种子漏洞发现能力得分;
S2-3、基于SNMS算法对所述已打好分的种子进行筛选和过滤。
在一些实施例中,所述步骤S2-1具体为:
S2-1-1、目标程序以基本块为单位建模成一个有向无权图G=(V,E);
S2-1-2、对于每一个子图Gi通过相应的优化算法找到对应的目标顶点,使得每一个子图最好有且只包含一个目标顶点,最终构建出目标程序中存在的潜在漏洞位置。
在一些实施例中,所述有向无权图G=(V,E),包含|V|个顶点和|E|条边,每个顶点表示代码中的一个基本块,每一条边表示代码块之间的程序执行流;
所述子图Gi=(Vi,Ei),其中i∈[1,k],Vi∈V,Ei∈E;
在一些实施例中,所述步骤S2-2具体为:利用距离计算方法,根据种子到所述潜在漏洞位置的距离,计算出每个种子的得分,距离越近的种子得分越高,反之距离越远的种子得分越低,同时对不同类型的潜在漏洞赋予不同的权重,距离接近的潜在漏洞位置权重降低。
在一些实施例中,步骤S2-3中,所述SNMS算法的具体流程为:
S2-3-1、SNMS算法开始;
S2-3-2、根据所有种子的打分进行排序;
S2-3-3、按得分从高到低遍历每一个种子;
S2-3-4、计算当前遍历种子与剩余所有种子的执行路径重合度IoU;
S2-3-5、过滤掉所有与当前遍历种子执行路径重合度IoU大于阈值p的种子;其中,所述IoU计算公式如下:
其中,Cov表示种子的路径覆盖范围,s1、s2表示相应的种子;阈值p默认设为0.9,表示当两个种子的IoU大于阈值p时,就认为两个种子的执行路径过于接近;
S2-3-6、判断剩余种子是否存在两两执行路径重合度IoU大于阈值p,若存在,重复步骤S3-3;若不存在,返回剩余种子;
S2-3-7、SNMS算法结束。
在一些实施例中,步骤S3中,所述根据区域模糊测试运行结果进行相应处理具体为:在运行区域模糊测试的某一输入目标程序中,如果发现新的代码覆盖率,发现新代码覆盖率的种子保留下来加入种子队列中;如果发现对造成目标程序崩溃或者超时异常的种子直接进入步骤S4。
本发明还提出了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现上述方法的步骤。
本发明与现有技术对比的有益效果包括:
本发明通过将目标程序中潜在的漏洞位置进行区域划分,并基于种子选择的区域模糊测试的核心环节,对种子发现目标位置潜在漏洞的能力进行高效评价,保留那些漏洞发现能力更强且在各自区域内得分最高的种子,同时筛选出能够走到大多数潜在漏洞分布子区域的最少数量的种子,能够在保持覆盖率基本不变的同时有效降低区域模糊测试过程中种子队列中种子的数量,降低了模糊测试的开销,进而提升模糊测试的效率。
本发明实施例中的其他有益效果将在下文中进一步述及。
附图说明
图1是本发明实施例中以漏洞为导向的高效区域模糊测试方法的流程图;
图2是本发明实施例中目标程序区域划分示意图;
图3是本发明实施例中以漏洞为导向的高效区域模糊测试方法的具体实施流程图;
图4是本发明实施例中SNMS算法的流程图;
具体实施方式
下面对照附图并结合优选的实施方式对本发明作进一步说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
需要说明的是,本实施例中的左、右、上、下、顶、底等方位用语,仅是互为相对概念,或是以产品的正常使用状态为参考的,而不应该认为是具有限制性的。
目前的主流模糊测试工具仍然有一些局限性,没有考虑到种子池中有大量类似或者重复的情况,这会大大影响模糊测试的效率。因此,本发明实施例通过结合各种大中型软件程序漏洞分布较为分散的特点,针对现有模糊测试工具中种子数量过多的问题和效率低下的问题,提出一个自适应的更加高效的区域模糊测试技术。基于种子选择这一模糊测试的核心环节,对种子发现目标位置潜在漏洞的能力进行高效评价,进而筛选出能够走到大多数潜在漏洞分布子区域的最少数量的种子,大大减少种子队列中种子数量,让更具代表性的,更容易发现漏洞的种子得到更多的变异机会,以提高整个种子池的效率,提升模糊测试效率。同时自适应种子调度策略能够针对不同目标程序去动态更新相关的算法参数值,进而最终提升模糊测试效率。
一种以漏洞为导向的高效区域模糊测试方法,如图1所示,包括如下步骤:
S1、对以漏洞为导向的目标程序进行插桩编译,得到包含代码覆盖信息以及潜在漏洞位置信息的插桩后的目标程序;
其中插桩编译是通过不同的内存错误检测工具sanitizer标记并记录目标程序中含有潜在漏洞及其所在位置,例如,通过LLVM插桩工具,标记并记录所述潜在漏洞位置。漏洞包括越界访问的相关漏洞、非法访问已释放内存相关漏洞、非法访问已经返回的内存相关漏洞和内存释放相关漏洞。
S2、通过基于种子选择的模糊测试核心环节对插桩后的目标程序运行区域模糊测试;步骤S2还包括以下步骤:
S2-1、构建目标程序潜在漏洞位置图;
其中,步骤S2-1具体包括以下步骤:
S2-1-1、目标程序以基本块为单位建模成一个有向无权图G=(V,E);
S2-1-2、对于每一个子图Gi通过相应的优化算法找到对应的目标顶点,使得每一个子图最好有且只包含一个目标顶点,最终构建出目标程序中存在的潜在漏洞位置。
其中有向无权图G=(V,E),包含|V|个顶点和|E|条边,每个顶点表示代码中的一个基本块,每一条边表示代码块之间的程序执行流;
所述子图Gi=(Vi,Ei),其中i∈[1,k],Vi∈V,Ei∈E;
S2-2、基于到所述潜在漏洞位置距离计算种子漏洞发现能力得分;
具体为:利用距离计算方法,根据种子到所述潜在漏洞位置的距离,计算出每个种子的得分,距离越近的种子得分越高,反之距离越远的种子得分越低,同时对不同类型的潜在漏洞赋予不同的权重,距离接近的潜在漏洞位置权重降低。
S2-3、基于SNMS算法对所述已打好分的种子进行筛选和过滤。
其中SNMS算法的具体流程如图4所示,包括:
S2-3-1、SNMS算法开始;
S2-3-2、根据所有种子的打分进行排序;
S2-3-3、按得分从高到低遍历每一个种子;
S2-3-4、计算当前遍历种子与剩余所有种子的执行路径重合度IoU;
S2-3-5、过滤掉所有与当前遍历种子执行路径重合度IoU大于阈值p的种子;
S2-3-6、判断剩余种子是否存在两两执行路径重合度IoU大于阈值p,若存在,重复步骤S3-3;若不存在,返回剩余种子;
S2-3-7、SNMS算法结束。
S3、根据区域模糊测试运行结果进行相应处理;
所述根据区域模糊测试运行结果进行相应处理具体为:在运行区域模糊测试的某一输入目标程序中,如果发现新的代码覆盖率,发现新代码覆盖率的种子保留下来加入种子队列中;如果发现对造成目标程序崩溃或者超时异常的种子直接进入步骤S4。
S4、在区域模糊测试运行结束后,对目标种子进行筛选去重,并对筛选去重后的种子进行潜在漏洞分析。
本发明实施例提出以下机制或策略:
1.基于种子漏洞发现能力的种子打分机制
种子优先级调度是模糊测试中的核心环节,在对种子池中的种子进行优先级调度之前,需要先知道被调度的种子的漏洞发现能力,即每一个种子的“潜能”。本发明实施例中通过分析种子的执行路径以及与其它相关指标,基于类似定向模糊测试中的算法来计算每个种子的漏洞发现能力,并为每个种子的漏洞发现能力进行高效的打分,进而减少模糊测试前的性能损失,同时也为之后模糊测试中设计种子优先级调度和能量分配相关的算法奠定基础。
2.基于SNMS(种子非极大值抑制)算法的种子筛选策略
本发明实施例中通过利用计算机视觉中目标检测领域内常用的非极大值抑制(NMS)算法来对种子池的种子按代码区域进行筛选和过滤,过滤掉那些有着相似执行路径,但漏洞发现能力较为不足的种子,进而降低有效种子的数量并最终提升模糊测试的效率。
3.针对不同目标程序的自适应种子调度策略
已有的研究中虽然有不少针对种子调度策略改进的,但是这些已有的方案中普遍缺乏对目标程序的针对性。因为不同目标程序的漏洞分布情况,代码区域情况等会有很大不同,因此需要对不同目标程序有更加针对性的种子调度策略。在本发明实施例中通过设定多个与目标程序以及模糊测试总体进程相关的自适应可调节参数,并在模糊测试过程中动态且高效地去更新这些参数的值,进而能够进行更加具有程序针对性的种子优先级调度,使得那些对目标程序中的潜在漏洞有更大寻找潜能的种子能够有更高的优先级,进而提升整个模糊测试的效率。
实施例:
本实施例计划分两步来进行。第一步,是从理论上尝试说明区域模糊测试的可行性。关于从理论上说明区域模糊测试的可行性,需要基于一定的先验知识。第二步,在先验知识的基础上,需要进一步证明进行区域模糊测试过程所对应的图划分过程,能够通过子区域的划分,将整个非凸问题转化为各个子区域的凸问题。
第一步的先验知识包括:
(1)模糊测试过程可以建模成一个可以从多个节点出发的图的路径探寻过程,其中漏洞所在的基本块对应于图中的某些顶点。
(2)漏洞在大中型程序或项目代码中的分布较为分散,对应于图中的若干个目标顶点。
(3)由于程序中很有可能存在多个漏洞,即模型求解可行域中存在多个局部极值。因此模糊测试过程既需要尽可能多的找到局部极值点,又不能陷入局部极值点走不出去。
(4)进行区域模糊测试,即需要对大型图进行图划分,并尽可能使得划分出来的每一个子区域有且仅有一个潜在漏洞。
第二步,进行区域模糊测试过程所对应的图划分过程,具体描述如下:
首先,对于目标程序以基本块为单位,建模成一个有向无权图G=(V,E),包含|V|个顶点和|E|条边,每个顶点程序代码中的一个基本块,每一条边表示代码块之间的程序执行流(如控制流、数据流)。假设目标程序中存在k个潜在漏洞位置,即对应图G中含有k个目标顶点。
本发明实施例将图G分割成k个子图Gi=(Vi,Ei),其中i∈[1,k],Vi∈V,Ei∈E,使得每个子图最好有且只包含一个目标顶点。
接着对于每一个子图Gi通过相应的优化算法(例如定向模糊测试工具AFLGO中所采用的算法)来找到对应的局部极值点即对应的目标顶点,由于每一个顶点对应一个代码基本块,因此同时也能找到相应能够到达该基本块位置的种子。最后对找到的种子进行相应的漏洞分析。
第二步,计划根据已有的理论成果设计一个低开销的Fuzzing(模糊测试)插件,该插件预期实现如下功能:
(1)根据第一步中的理论基础,设计具体的算法对种子按对应执行路径进行区域划分,即对目标程序所建模成的图进行图分割。
(2)根据上文提到的子图划分后的优化算法对种子池的种子以发现漏洞的能力进行打分。
(3)按照打分进行优先级过滤,筛选出更有可能发现漏洞的种子。
(4)该插件内的算法能够根据目标程序的不同的进行参数的自适应学习变化,即不同的目标程序有不同的参数,以实现更好的划分方式,进而能够更好的适配不同的目标程序。
(5)该插件能够适配许多最前沿的模糊测试框架和工具并改进其模糊测试性能。
本实施例中针对目标程序进行区域划分如图2所示,目标程序的代码以基本块为单位,因此可以分成许许多多小的基本块。接着以基本块为单位,通过区域划分算法对目标程序代码划分成若干个子区域,每个区域尽可能只包含一个潜在漏洞。
对于灰盒模糊测试而言,可以获取到目标程序的源代码,进而通过静态插桩编译工具,例如LLVM(Low LevelVirtual Machine,构架编译器(compiler)的框架系统),对目标程序以代码基本块为单位进行插桩。在目前大部分灰盒模糊测试框架中,种子的生成大都是基于代码覆盖率的。当模糊测试工具发现了新的基本块,即新的代码覆盖率时,发现新代码覆盖率的种子就会被保存起来,加入种子队列中。
本发明实施例提出了代码区域的概念,将相近的代码基本块看成一块代码区域,如图2所示。不同代码区域的大小可能不同,所包含的基本块数目也不同。同样,对于种子而言,种子执行路径过于相近的种子也被认为处于同一块代码区域中。
在上面的观察假设中,可以认为在大中型程序或项目中,漏洞的分布较为分散,因此可以认为漏洞更有可能出现在不同的代码区域中。因此,希望每一大块代码区域中,只去关注那些更有可能发现漏洞的基本块。相应对种子而言,则希望在那些执行路径相近的种子中,挑选出更有可能发现漏洞的种子去变异,而其余种子则暂时不管,以提升模糊测试的效率。
其中,需要先有一个高效的算法对不同基本块也即不同种子发现漏洞的能力进行有效的评判。如图2所示,不同代码区域中有颜色的基本块表示有可能含有漏洞。颜色越深,则代表对应种子发现漏洞的可能性越大。同一区域中,可能有多个基本块含有潜在漏洞,但根据有效的打分机制,可以只挑出最有可能包含漏洞的那个种子,例如区域4中颜色最深的种子S44。经过这样的代码区域划分以及种子筛选之后,种子的数量得到显著的降低,单个种子的变异次数也相应会得到大幅提高,进一步提升了模糊测试工具的漏洞的寻找能力。
本发明实施例提出的一种以漏洞为导向的高效区域模糊测试方法如图1所示,包括如下步骤:
S1、对以漏洞为导向的目标程序进行插桩编译,得到包含代码覆盖信息以及潜在漏洞位置信息的插桩后的目标程序;
S2、通过基于种子选择的模糊测试核心环节对插桩后的目标程序运行区域模糊测试;
S3、根据区域模糊测试运行结果进行相应处理;
S4、在区域模糊测试运行结束后,对目标种子进行筛选去重,并对筛选去重后的种子进行潜在漏洞分析。
本实施例具体描述如下:
S1、对以漏洞为导向的目标程序进行插桩编译,得到包含代码覆盖信息以及潜在漏洞位置信息的插桩后的目标程序;
其中插桩编译是通过不同的sanitizer(内存错误检测工具)找到目标程序中含有潜在漏洞的“危险区域”(其所在位置)。例如,通过LLVM提供的AddressSanitizer可以找到如下四类程序中的潜在漏洞及其在程序中的所在位置:
(1)Out-of-bounds accesses to heap,stack and globals(越界访问的相关漏洞);
(2)Use-after-free(非法访问已释放内存相关漏洞);
(3)Use-after-return(非法访问已经返回的内存相关漏洞);
(4)Double-free,invalid free(内存释放相关漏洞);
之后,通过LLVM提供的插桩工具,标记并记录这些潜在漏洞位置。
S2、通过基于种子选择的模糊测试核心环节对插桩后的目标程序运行区域模糊测试;
S2-1、构建目标程序潜在漏洞位置图;
其中,所述步骤S2-1具体包括以下步骤:
S2-1-1、目标程序以基本块为单位建模成一个有向无权图G=(V,E);
S2-1-2、对于每一个子图Gi通过相应的优化算法找到对应的目标顶点,使得每一个子图最好有且只包含一个目标顶点,最终构建出目标程序中存在的潜在漏洞位置。
其中有向无权图G=(V,E),包含|V|个顶点和|E|条边,每个顶点表示代码中的一个基本块,每一条边表示代码块之间的程序执行流;
所述子图Gi=(Vi,Ei),其中i∈[1,k],Vi∈V,Ei∈E;
S2-2、基于到所述潜在漏洞位置距离计算种子漏洞发现能力得分;
具体为:利用定向模糊测试工具(DGF,Directed Graybox Fuzzing)中的距离计算方法,并加以适当针对性的优化和改进。根据种子到上述潜在漏洞位置的距离,计算出每个种子的得分,距离越近的种子得分越高,反之距离越远的种子得分越低,同时对不同类型的漏洞赋予不同的权重,距离接近的潜在漏洞位置权重适当降低。
基于已有种子打分算法加以适当修改,使之能对不同类型的漏洞具有更强的针对性,即对不同类型的漏洞赋予不同的权重,距离接近的潜在漏洞位置权重适当降低。
S2-3、基于SNMS算法对所述已打好分的种子进行筛选和过滤。
将已有的打好分的种子通过本发明实施例提出的先进且高效的自适应SNMS算法进行筛选和过滤,SNMS算法框架如图3所示。有效降低种子队列的长度并使得种子池中那些更有可能发现漏洞的种子相对来说得到更多的能量和变异机会,最终提高模糊测试效率。
其中SNMS算法的具体流程为:
S2-3-1、SNMS算法开始;
S2-3-2、根据所有种子的打分进行排序;
S2-3-3、按得分从高到低遍历每一个种子;
S2-3-4、计算当前遍历种子与剩余所有种子的执行路径重合度IoU;
S2-3-5、过滤掉所有与当前遍历种子执行路径重合度IoU大于阈值p的种子;其中,所述IoU计算公式如下:
其中,Cov表示种子的路径覆盖范围,s1、s2表示相应的种子;阈值p默认设为0.9,表示当两个种子的IoU大于阈值p时,就认为两个种子的执行路径过于接近;
S2-3-6、判断剩余种子是否存在两两执行路径重合度IoU大于阈值p,若存在,重复步骤S3-3;若不存在,返回剩余种子;
S2-3-7、SNMS算法结束。
S3、根据区域模糊测试运行结果进行相应处理;
所述根据区域模糊测试运行结果进行相应处理具体为:在运行区域模糊测试的某一输入目标程序中,如果发现新的代码覆盖率,发现新代码覆盖率的种子保留下来加入种子队列中;如果发现对造成目标程序崩溃或者超时异常的种子直接进入步骤S4;
S4、在区域模糊测试运行结束后,对目标种子进行筛选去重,并对筛选去重后的种子进行潜在漏洞分析。
本发明实施例具有以下有益成果:
本发明实施例结合各种大中型软件程序漏洞分布较为分散的特点,针对现有模糊测试工具中种子数量过多的问题和效率低下的问题,提出一个自适应的更加高效的区域模糊测试技术。基于种子选择这一模糊测试的核心环节,对种子发现目标位置潜在漏洞的能力进行高效评价,进而筛选出能够走到大多数潜在漏洞分布子区域的最少数量的种子,大大减少种子队列中种子数量,同时本发明实施例中的自适应种子调度策略能够针对不同目标程序去动态更新相关的算法参数值,进而最终提升模糊测试效率。
如图4所示的是在多个目标程序下,本发明实施例所提出的方法AFL++-SNMS与AFL++的种子在达到相应边覆盖率的数量对比如表1所示。每个单元格中表示的AFL++-SNMS的种子数量与AFL++种子数量的百分比,其中括号内的百分数表示的是相应的边覆盖率。
例如,在readelf这一行中,56.5(25%)这个单元格,表示在达到10%的边覆盖率时,本发明实施例所提出的方法只需要相比于AFL++用到56.5%的就可以完成相同的代码覆盖率。
从实验结果可以看出,本发明实施例所提出的方法能够在保持覆盖率基本不变的同时有效降低模糊测试过程中种子队列中种子的数量,降低了模糊测试的开销,进而提升模糊测试的效率。
表1
在另外一些实施例中,种子漏洞发现能力的种子打分机制中,对于影响不同种子分值的相关因素考虑的还不够完善,可以进一步增加更多的影响因子,使得种子打分机制能够更加合理,更加高效。
在另外一些实施例中,种子筛选策略尽管能够有效控制种子队列中种子的数量,但是仍有可能过滤掉一些很有可能找到漏洞的种子。因此之后可以设计一个回收机制,对于被过滤掉的种子进行二次筛选,将其中最有漏洞发现潜能的一批种子保留下来加入种子队列中。
在另外一些实施例中,针对不同目标程序的自适应种子调度策略中,可以进一步引入更多的与目标程序本身以及目标程序种子输入相关的自适应参数,进而提高调度策略对与不同目标程序的契合度。
实验例:
本实验例的具体实施方式如图3所示,包括如下步骤:
S1、对以漏洞为导向的目标程序进行插桩编译,得到包含代码覆盖信息以及潜在漏洞位置信息的插桩后的目标程序;
选择需要通过模糊测试方式进行漏洞挖掘的开源目标程序,并利用LLVM静态插桩编译工具,通过配合适当的sanitizer(例如AddressSanitizer)进行插桩编译,sanitizer的使用方法可以通过加编译选项的方式(例如,通过添加编译选项“-fsanitize=address”的方式在编译时加入AddressSanitizer)方便地在编译时使用。完成编译后就能得到包含代码覆盖信息以及潜在漏洞位置信息的的插桩后的目标程序。
得到插桩后的目标程序之后需要找到配合目标程序使用的合适的初始种子,这一步骤可以根据目标程序的输入文件要求,获取一些符合格式要求的输入文件作为初始种子库。
S2、通过基于种子选择的模糊测试核心环节对插桩后的目标程序运行区域模糊测试;
接下来是模糊测试的核心流程,也就是正式进行模糊测试的阶段。
S2-1、构建目标程序潜在漏洞位置图;
S2-1-1、目标程序以基本块为单位建模成一个有向无权图G=(V,E);
S2-1-2、对于每一个子图Gi通过相应的优化算法找到对应的目标顶点,使得每一个子图最好有且只包含一个目标顶点,最终构建出目标程序中存在的潜在漏洞位置。
其中有向无权图G=(V,E),包含|V|个顶点和|E|条边,每个顶点表示代码中的一个基本块,每一条边表示代码块之间的程序执行流;
所述子图Gi=(Vi,Ei),其中i∈[1,k],Vi∈V,Ei∈E;
S2-2、本实验例利用定向模糊测试工具(DGF,Directed Graybox Fuzzing)中的距离计算方法,并加以适当针对性的优化和改进。
具体操作如下:
利用距离计算方法,根据种子到上述潜在漏洞位置的距离,计算出每个种子的得分,距离越近的种子得分越高,反之距离越远的种子得分越低,同时对不同类型的漏洞赋予不同的权重,距离接近的潜在漏洞位置权重适当降低。其中,距离计算方法具体可以参考AFLGo这篇论文,这是领域内常见的距离计算方法。
S2-3、将已有的打好分的种子通过本发明实验例中提出的自适应SNMS算法进行筛选和过滤,SNMS算法框架如下图4所示,其中SNMS算法的具体流程如下:
S2-3-1、SNMS算法开始;
S2-3-2、根据所有种子的打分进行排序;
S2-3-3、按得分从高到低遍历每一个种子;
S2-3-4、计算当前遍历种子与剩余所有种子的执行路径重合度IoU;
S2-3-5、过滤掉所有与当前遍历种子执行路径重合度IoU大于阈值p的种子;其中,所述IoU计算公式如下:
其中,Cov表示种子的路径覆盖范围,s1、s2表示相应的种子;阈值p默认设为0.9,表示当两个种子的IoU大于阈值p时,就认为两个种子的执行路径过于接近;
S2-3-6、判断剩余种子是否存在两两执行路径重合度IoU大于阈值p,若存在,重复步骤S3-3;若不存在,返回剩余种子;
S2-3-7、SNMS算法结束。
S3、根据区域模糊测试运行结果进行相应处理;
本实验例通过计算不同种子执行路径的重合度(IoU),并过滤掉那些距离过近且得分较低的种子,进而能够使得那些漏洞发现能力更强,得分更高的种子在之后的变异环节中获得更多的能量。同时,种子数量有效降低后,模糊测试的开销也相应降低,模糊测试效率也因此获得提高。
S4、模糊测试进程在设定好的运行时间结束之后,对造成目标种子进行筛选去重,然后对筛选去重后的种子进行实际漏洞分析。在目标程序中先有潜在漏洞位置,然后通过模糊测试得到造成崩溃的种子文件,再分析这些种子文件确定具体的实际漏洞。其中目标种子为目标程序崩溃或者超时异常的种子文件。
最终的结果表明,本发明实施例能够有效的将目标程序中潜在的漏洞位置进行区域划分,并且对相应走过这些区域的种子通过本发明实施例中的SNMS算法进行过滤,能够有效的过滤掉种子池中的发现漏洞能力更低的那一批种子,保留那些漏洞发现能力更强,在各自区域内得分最高的种子,进而有效的降低种子队列中种子数量,种子发现漏洞的能力提高了,降低模糊测试开销,提升模糊测试效率。
本发明实施例对软件和网络安全领域内漏洞挖掘行业有以下市场价值:
(1)可以有效降低模糊测试时种子池中种子的数量来帮助使用者提升产品的模糊测试框架效率;
(2)有助于开发者针对不同程序进行更具针对性的漏洞挖掘,帮助开发者及时修复代码中潜在的安全问题。
本发明实施例与现有技术相比有以下明显差异及技术先进性:
(1)能够通过新的种子优先级调度策略进行高效的区域模糊测试;
(2)能够通过动态更新模糊测试框架中的自适应参数来针对性地对不同目标程序进行高效模糊测试。
以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的技术人员来说,在不脱离本发明构思的前提下,还可以做出若干等同替代或明显变型,而且性能或用途相同,都应当视为属于本发明的保护范围。
Claims (10)
1.一种以漏洞为导向的高效区域模糊测试方法,其特征在于,包括如下步骤:
S1、对以漏洞为导向的目标程序进行插桩编译,得到包含代码覆盖信息以及潜在漏洞位置信息的插桩后的目标程序;
S2、通过基于种子选择的模糊测试核心环节对插桩后的目标程序运行区域模糊测试;
S3、根据区域模糊测试运行结果进行相应处理;
S4、在区域模糊测试运行结束后,对目标种子进行筛选去重,并对筛选去重后的种子进行潜在漏洞分析。
2.如权利要求1所述的以漏洞为导向的高效区域模糊测试方法,其特征在于,步骤S1中,所述插桩编译是通过不同的内存错误检测工具sanitizer标记并记录目标程序中含有潜在漏洞及其所在位置。
3.如权利要求1或2所述的以漏洞为导向的高效区域模糊测试方法,其特征在于,所述漏洞包括越界访问的相关漏洞、非法访问已释放内存相关漏洞、非法访问已经返回的内存相关漏洞和内存释放相关漏洞。
4.如权利要求1所述的以漏洞为导向的高效区域模糊测试方法,其特征在于,所述步骤S2包括如下步骤:
S2-1、构建目标程序潜在漏洞位置图;
S2-2、基于到所述潜在漏洞位置距离计算种子漏洞发现能力得分;
S2-3、基于SNMS算法对所述已打好分的种子进行筛选和过滤。
5.如权利要求4所述的以漏洞为导向的高效区域模糊测试方法,其特征在于,所述步骤S2-1具体为:
S2-1-1、目标程序以基本块为单位建模成一个有向无权图G=(V,E);
S2-1-2、对于每一个子图Gi通过相应的优化算法找到对应的目标顶点,使得每一个子图最好有且只包含一个目标顶点,最终构建出目标程序中存在的潜在漏洞位置。
7.如权利要求4所述的以漏洞为导向的高效区域模糊测试方法,其特征在于,所述步骤S2-2具体为:利用距离计算方法,根据种子到所述潜在漏洞位置的距离,计算出每个种子的得分,距离越近的种子得分越高,反之距离越远的种子得分越低,同时对不同类型的潜在漏洞赋予不同的权重,距离接近的潜在漏洞位置权重降低。
8.如权利要求4所述的以漏洞为导向的高效区域模糊测试方法,其特征在于,步骤S2-3中,所述SNMS算法的具体流程为:
S2-3-1、SNMS算法开始;
S2-3-2、根据所有种子的打分进行排序;
S2-3-3、按得分从高到低遍历每一个种子;
S2-3-4、计算当前遍历种子与剩余所有种子的执行路径重合度IoU;
S2-3-5、过滤掉所有与当前遍历种子执行路径重合度IoU大于阈值p的种子;其中,所述IoU计算公式如下:
其中,Cov表示种子的路径覆盖范围,s1、s2表示相应的种子;
S2-3-6、判断剩余种子是否存在两两执行路径重合度IoU大于阈值p,若存在,重复步骤S3-3;若不存在,返回剩余种子;
S2-3-7、SNMS算法结束。
9.如权利要求4所述的以漏洞为导向的高效区域模糊测试方法,其特征在于,步骤S3中,所述根据区域模糊测试运行结果进行相应处理具体为:在运行区域模糊测试的某一输入目标程序中,如果发现新的代码覆盖率,发现新代码覆盖率的种子保留下来加入种子队列中;如果发现对造成目标程序崩溃或者超时异常的种子直接进入步骤S4。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-9任一所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310138337.8A CN116069656A (zh) | 2023-02-20 | 2023-02-20 | 一种以漏洞为导向的高效区域模糊测试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310138337.8A CN116069656A (zh) | 2023-02-20 | 2023-02-20 | 一种以漏洞为导向的高效区域模糊测试方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116069656A true CN116069656A (zh) | 2023-05-05 |
Family
ID=86181885
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310138337.8A Pending CN116069656A (zh) | 2023-02-20 | 2023-02-20 | 一种以漏洞为导向的高效区域模糊测试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116069656A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116451244A (zh) * | 2023-06-12 | 2023-07-18 | 北京中科卓信软件测评技术中心 | 基于软件漏洞成因导向的定向灰盒模糊测试方法及装置 |
CN116881919A (zh) * | 2023-06-01 | 2023-10-13 | 清华大学 | 漏洞挖掘方法、装置、电子设备及存储介质 |
-
2023
- 2023-02-20 CN CN202310138337.8A patent/CN116069656A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116881919A (zh) * | 2023-06-01 | 2023-10-13 | 清华大学 | 漏洞挖掘方法、装置、电子设备及存储介质 |
CN116881919B (zh) * | 2023-06-01 | 2024-04-19 | 清华大学 | 漏洞挖掘方法、装置、电子设备及存储介质 |
CN116451244A (zh) * | 2023-06-12 | 2023-07-18 | 北京中科卓信软件测评技术中心 | 基于软件漏洞成因导向的定向灰盒模糊测试方法及装置 |
CN116451244B (zh) * | 2023-06-12 | 2023-08-18 | 北京中科卓信软件测评技术中心 | 基于软件漏洞成因导向的定向灰盒模糊测试方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN116069656A (zh) | 一种以漏洞为导向的高效区域模糊测试方法 | |
Wu et al. | Deep parameter optimisation | |
Stellios et al. | Assessing IoT enabled cyber-physical attack paths against critical systems | |
US8166459B2 (en) | Apparatus and method of generating self-debugging computer software | |
US20060253739A1 (en) | Method and apparatus for performing unit testing of software modules with use of directed automated random testing | |
Chhabra | Improving package structure of object-oriented software using multi-objective optimization and weighted class connections | |
Cordone et al. | Parsimonious monitor control of Petri net models of flexible manufacturing systems | |
CN110196815B (zh) | 一种软件模糊测试方法 | |
US11868481B2 (en) | Method for discovering vulnerabilities of operating system access control mechanism based on model checking | |
Prechtel et al. | Evaluating spread of ‘gasless send’in ethereum smart contracts | |
CN114077741A (zh) | 软件供应链安全检测方法和装置、电子设备及存储介质 | |
Lyu et al. | EMS: History-Driven Mutation for Coverage-based Fuzzing. | |
Andriushchenko et al. | Inductive synthesis for probabilistic programs reaches new horizons | |
CN102868699A (zh) | 一种提供数据交互服务的服务器的漏洞检测方法及工具 | |
Ribeiro | Search-based test case generation for object-oriented java software using strongly-typed genetic programming | |
CN115455435A (zh) | 一种智能合约模糊测试方法、装置、存储介质及电子设备 | |
Hu et al. | SAIDE: Efficient application interference detection and elimination in SDN | |
CN117272330B (zh) | 服务器系统加固更新方法及系统 | |
Bodei et al. | Tracking sensitive and untrustworthy data in IoT | |
CN116662177A (zh) | 一种面向电力系统终端的测试用例自动化生成方法及系统 | |
CN114840418A (zh) | 模糊测试方法及装置 | |
Awadhutkar et al. | Intelligence amplifying loop characterizations for detecting algorithmic complexity vulnerabilities | |
CN115048298A (zh) | 一种面向数据包拼接的种子调度权值分配方法 | |
Al-Bataineh et al. | Towards More Reliable Automated Program Repair by Integrating Static Analysis Techniques | |
Wu | Mutation-based genetic improvement of software |
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 |