CN111767546A - 一种基于深度学习的输入结构推断方法和装置 - Google Patents
一种基于深度学习的输入结构推断方法和装置 Download PDFInfo
- Publication number
- CN111767546A CN111767546A CN202010554794.1A CN202010554794A CN111767546A CN 111767546 A CN111767546 A CN 111767546A CN 202010554794 A CN202010554794 A CN 202010554794A CN 111767546 A CN111767546 A CN 111767546A
- Authority
- CN
- China
- Prior art keywords
- input
- byte
- structural unit
- gradient
- unit set
- 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.)
- Granted
Links
Images
Classifications
-
- 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
- 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
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N5/00—Computing arrangements using knowledge-based models
- G06N5/04—Inference or reasoning models
- G06N5/041—Abduction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/033—Test or assess software
-
- 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
Abstract
本发明公开了一种基于深度学习的输入结构推断方法和装置,采用深度学习模型自动学习输入用例与程序执行状态之间的关系;利用显著性映射技术获得输入用例中每个字节对程序执行状态的影响,即深度学习模型的输出对输入字节的梯度;基于所述梯度,利用梯度相似相邻划分策略和/或中心‑前后向搜索策略获得输入结构单元集合;对所述输入结构单元集合进行结构推断优化,包括模糊边界处理和/或关键结构单元处理,得到准确的输入结构。本发明基于显著性映射技术推断输入结构单元集合,并进行模糊边界处理、关键结构单元处理,能够在保证模糊测试效率的基础上,提升输入结构推断准确率。
Description
技术领域
本发明涉及信息安全技术领域,尤其涉及一种基于深度学习的输入结构推断方法和装置。
背景技术
模糊测试是一种动态漏洞挖掘技术,其主要思想是构造随机的、非预期的畸形数据作为程序的输入,并监控程序执行过程中可能产生的异常,之后将这些异常作为分析的起点,进一步确定其是否为程序的漏洞并确定漏洞的可利用性。与其他技术相比,模糊测试需要很少的目标程序知识,部署简单,易于扩展到大型应用程序,且诸多实践证明模糊测试技术可以成功地在多种复杂程序中发现大量安全漏洞,这使其成为目前最流行的自动化软件测试技术之一。
尽管模糊测试技术具有高效性和较好的扩展性,但由于缺乏对输入结构的了解,现有的模糊测试技术在测试用例变异和测试用例生成两方面都存在着一定的不足。对于测试用例变异,目前的模糊测试工具一般采用随机的变异策略,比如按位或按字节盲目的改变数值,这样的变异方式缺乏针对性,一方面会产生大量无效变异,大大降低模糊测试的效率;另一方面可能会破坏输入的格式,导致输入在执行的早期阶段即被拒绝,测试无法深入到程序深处。而对于测试用例生成,缺乏输入结构信息会使得生成的输入用例的结构不准确,质量较低,无法有效的发现漏洞。
针对这些不足,可以通过对输入的结构进行推断以得到较为准确的输入结构信息,进而利用输入结构信息指导和改进测试用例变异和生成。对于输入结构推断,现有工作主要分为两类,一类是使用重量级的程序分析方法(如污点分析、符号执行等)来跟踪输入字节之间的关系或推断其类型,如Tupni、TIFF等。这种方法较为传统,由于是实时跟踪程序内部真实状态(如内存、寄存器状态等),所以对于输入结构的推断较为准确,但其分析技术十分复杂,执行开销较大且不易扩展。若在模糊测试中使用此技术作为辅助,常常会使得结构推断的开销远远大于模糊测试本身的开销,严重降低了模糊测试的效率。另一类则通过探索一些轻量级的分析方法来取代重量级程序分析技术,如Profuzzer、REDQUEEN、GREYONE等。相比于重量级的方法,轻量级分析既能获得关于输入结构的信息,又能大大节省开销,易于扩展到大型应用程序,但其存在输入结构推断不准确,结构单元边界模糊,误报率和漏报率较高的问题。
发明内容
有鉴于此,本发明提供了一种基于深度学习的输入结构推断方法和装置,能够在保证模糊测试效率的基础上,提升输入结构推断准确率。
为了解决上述技术问题,本发明是这样实现的:
一种基于深度学习的输入结构推断方法,包括:
步骤一、采用深度学习模型自动学习输入用例与程序执行状态之间的关系;
步骤二、利用显著性映射技术获得输入用例中每个字节对程序执行状态的影响,即深度学习模型的输出对输入字节的梯度;
步骤三、基于所述梯度,利用梯度相似相邻划分策略和/或中心-前后向搜索策略获得输入结构单元集合;
步骤四、对所述输入结构单元集合进行结构推断优化,包括模糊边界处理和/或关键结构单元处理,得到准确的输入结构。
进一步地,所述步骤三中,通过梯度相似相邻划分策略获得输入结构单元集合A,通过中心-前后向搜索策略获得输入结构单元集合B;
当梯度相似相邻划分策略和中心-前后向搜索策略结合使用时,对结构单元集合A和结构单元集合B进行合并及去重,获得输入结构单元集合;
当梯度相似相邻划分策略、中心-前后向搜索策略单独使用时,获得的结构单元集合A或结构单元集合B就是输入结构单元集合。
进一步地,所述梯度相似相邻划分策略为:依据相似度阈值,将梯度相同或相似的相邻字节划分为一个结构单元,获得输入结构单元集合A。
进一步地,所述中心-前后向搜索策略为:按照设定比例,选取梯度绝对值较大的字节,作为关键字节;针对每个关键字节,以该关键字节作为中心,以递增的步长分别向前、向后两个方向进行变步长的渐进性探索;向一个方向渐进探索时,将探索得到的所有字节划分为一个临时结构单元,将该临时结构单元进行变异,并进行模糊测试,如果变异产生了新的程序执行状态则增加步长继续探索,若变异后未导致程序执行状态变化,则停止此方向的探索,临时结构单元以上一次探索位置作为当前方向边界;两个方向均探索结束后,将临时结构单元作为结构单元保存;完成所有关键字节处理后,获得输入结构单元集合B。
进一步地,所述模糊边界处理采用单字节变异,具体为:
将归属于至少2个结构单元的字节作为边界模糊字节;
针对每个边界模糊字节,通过单字节变异获得新输入用例X;针对边界模糊字节所属的N个结构单元,从每个结构单元内部选取一个字节进行变异,变异后获得新输入用例Y1~YN;对输入用例X、Y1~YN进行模糊测试,获得相应的程序执行状态;对比程序执行状态,从输入用例Y1~YN中找到程序执行状态与输入用例X最为相似的一个,记为输入用例Y’,则当前边界模糊字节只归属于输入用例Y’中变异字节对应的结构单元,从而去除模糊边界。
进一步地,针对边界模糊字节所属的N个结构单元,从每个结构单元内部选取2个或以上的字节进行单字节变异,并获得相应的程序执行状态,然后取平均值,作为输入用例Ym的程序执行状态,与输入用例X的程序执行状态进行对比;m的取值范围为1~N。
进一步地,所述模糊边界处理采用时间戳校验,具体为:
将归属于至少2个结构单元的字节作为边界模糊字节;
获取边界模糊字节经过预先设定的程序位置的时间戳,根据隶属同一结构单元的字节经过相同程序位置的时间相同原则,确认边界模糊字节所属结构单元。
进一步地,所述关键结构单元处理采用单字节变异,具体为:
针对输入结构单元集合中关键字节所属的关键结构单元,逐一对关键结构单元中的每个字节进行单字节变异,并进行模糊测试以收集相应的程序执行状态;若已被划分为同一关键结构单元中的各个字节进行单字节变异后得到的程序执行状态相同或相似,则确认这些字节属于当前结构单元;若被划分到同一关键结构单元中的某个字节Z进行单字节变异后得到的程序执行状态与所述关键结构单元中其他字节进行单字节变异后得到的程序执行状态相差较大,则将所述字节Z从所属结构单元中剔除;采用设定阈值确定所述是否相似或相差较大。
本发明还提供了一种基于深度学习的输入结构推断装置,包括:
学习模块,用于采用深度学习模型自动学习输入用例与程序执行状态之间的关系;
梯度确定模块,用于利用显著性映射技术获得输入用例中每个字节对程序执行状态的影响,即深度学习模型的输出对输入字节的梯度;
输入结构单元集合确定模块,用于基于所述梯度,利用梯度相似相邻划分策略和/或中心-前后向搜索策略获得输入结构单元集合;
结构推断优化模块,用于对所述输入结构单元集合进行结构推断优化,包括模糊边界处理和/或关键结构单元处理,得到准确的输入结构。
进一步地,所述输入结构单元集合确定模块包括梯度相似相邻划分策略处理模块、中心-前后向搜索策略处理模块和合并模块;
梯度相似相邻划分策略处理模块,用于通过梯度相似相邻划分策略获得输入结构单元集合A;
中心-前后向搜索策略处理模块,用于通过中心-前后向搜索策略获得输入结构单元集合B;
当梯度相似相邻划分策略和中心-前后向搜索策略结合使用时,采用合并模块对结构单元集合A和结构单元集合B进行合并及去重,获得输入结构单元集合;
当梯度相似相邻划分策略、中心-前后向搜索策略单独使用时,获得的结构单元集合A或结构单元集合B就是输入结构单元集合。
有益效果:
(1)本发明采用深度学习模型自动学习输入用例与程序执行状态之间的关系,然后基于训练好的模型,进一步采用显著性映射技术初步推断输入结构。之后,对初步推断的结果进行进一步优化,从而得到更为准确的输入结构信息。该过程未采用复杂的分析过程,执行开销较小;而且初步推断与进一步优化相结合,从不同角度验证推断结果,解决了输入结构推断不准确的问题。
(2)本发明利用显著性映射技术获得输入用例中每个字节对程序执行状态的影响,即梯度,然后基于梯度相似相邻划分策略和/或中心-前后向搜索策略初步推断输入结构。该过程使用轻量级分析方法,结构推断效率较高,,而且结合两种划分策略,可以相互弥补缺陷,解决了输入结构推断不准确的问题。
(3)本发明采用模糊边界处理进行结构推断优化,模糊边界处理包括单字节变异和时间戳校验策略,单独使用或者结合使用,均可以实现模糊边界的确认,从而降低误报率和漏报率。
(4)本发明的结构推断优化还针对比较重要的关键结构单元,进一步采用单字节变异策略确认其中的每个字节是否属于当前结构单元,从而进一步提高了输入结构推断的准确率。
附图说明
图1为本发明基于深度学习的输入结构推断方法的总体框架图。
图2为本发明基于深度学习的输入结构推断装置的结构图。
具体实施方式
下面结合附图并举实施例,对本发明进行详细描述。
本发明针对现有模糊测试技术因缺乏对输入结构的了解而导致漏洞挖掘效率较低的问题,提出一种基于深度学习的输入结构推断方法,该方法主要通过建立深度学习模型来自动学习输入与程序执行状态之间的关系,进而利用显著性映射(Saliency map)技术来得到输入中每个字节对程序执行状态的影响,根据得到的影响结果采用梯度相似相邻划分策略和/或中心-前后向搜索策略进行初步结构推断。进一步地,在初步推断的基础上,通过模糊边界处理和/或关键结构单元处理来进一步优化结构推断的准确率,最后得到输入的结构信息。
该方法的整体框架如图1所示,整个过程分为数据收集、模型训练和结构推断三个阶段。
第一阶段:数据收集阶段。
数据收集阶段是为深度学习模型训练准备训练数据。首先,可以通过多种方式收集初始输入用例得到一个输入用例数据集作为深度学习模型的输入。输入用例数据集主要通过三种方式获得,分别是数据爬取、模糊器已测试的用例和现有研究中已使用的测试集。
接着,使用获得的输入用例数据集进行初始模糊测试,获得相应的程序执行状态信息,如分支覆盖信息、路径覆盖信息等常用于评价模糊测试结果的信息,将这些程序执行状态信息与前述获得的输入用例数据集一起提供给模型训练阶段。
第二阶段:模型训练阶段。
模型训练阶段以数据收集阶段获取的输入用例集及其对应的程序执行状态信息作为训练数据,构建一个深度学习模型,通过对该模型进行训练,使得该深度学习模型自动学习输入用例与程序执行状态之间的关系,最终能够让该模型具备识别输入用例及其对应程序执行状态信息的能力。
第三阶段:结构推断阶段。
本阶段利用深度学习模型预测输入用例到程序状态的显著性映射信息,基于此信息通过初步结构推断和结构推断优化,得到输入用例结构信息。
首先进行初步结构推断。
初步结构推断旨在结合深度学习模型提供的输入到程序状态(input-to-state)的映射信息进行轻量级的结构推断。本发明采用图像处理领域的显著性映射(Saliencymap)技术实现。显著性映射是一种流行的深度学习模型信息流跟踪技术,通过输出对输入求导,能够测量深度学习模型输出对输入特征变化的敏感性。例如,在图像分类中,显著性映射可以看作是输入图像的注释表示,其中每个注释代表输出类别对原始像素值的梯度值,即输出类别如何随着输入图像像素的变化而变化。因此,利用显著性映射可以指出影响最终深度学习模型输出的最关键的输入特征。
具体到本发明中,对应所构建的深度学习模型的输入,输出是程序的执行状态信息。因此,使用显著性映射可以得到输入用例中每个字节对程序执行状态的影响大小,这种影响主要通过梯度值的绝对值的大小来体现,绝对值较大表示影响较大。利用梯度值还可以确定一些关键字节,即梯度绝对值较大的字节即为关键字节。本发明将包含关键字节的结构单元称为关键结构单元。
具体的,本步骤在进行初步结构推断时,包括如下步骤:
步骤301、利用模型训练阶段构建好的深度学习模型,针对任意一个输入用例,获得与其对应的程序执行状态;然后利用显著性映射技术获得输出对输入字节的梯度,即输入用例中每个字节对程序执行状态的影响。
步骤302、根据输入用例字节对应的梯度,通过梯度相似相邻划分策略和/或中心-前后向搜索策略初步推断输入结构。
①梯度相似相邻划分策略
梯度相似相邻划分是指将梯度(这里采用梯度而非梯度绝对值)相同或相似的相邻字节划分为一个结构单元,获得结构单元集合A。这是因为利用显著性映射技术得到的梯度表示的是输入用例中字节对程序状态的影响大小,而属于同一结构单元的字节应该对程序状态有相同或相似的影响,因此,采用这样的划分方式可以得到输入的初步结构。
这里将相同或相似的相邻字节划分为一个结构单元的过程可以为:按照输入用例的字节顺序标记索引。根据索引,提取第1个字节作为一个结构单元D1,将该字节的梯度作为结构单元D1的基准梯度;提取第2个字节,与结构单元D1的基准梯度进行对比,如果相同或者相似(即,二者差距在设定范围内),则将第2个字节划分到结构单元D1中。逐一处理各字节,若第n个字节与结构单元D1的基准梯度不相似,则完成结构单元D1的划分;接下来,将第n个字节作为一个新的结构单元D2,将第n个字节的梯度作为结构单元D2的基准梯度,再继续对后续字节进行对比和结构单元归属的划分,直到处理完所有字节。所获得的多个结构单元,称为结构单元集合A。
②中心-前后向搜索策略
中心-前后向搜索策略是指每次选取利用显著性映射技术确定的一个关键字节作为中心,以递增的步长分别向前、向后渐进地探索,获得结构单元。具体步骤为:
首先,按照设定比例,选取梯度绝对值较大的字节,作为关键字节。例如按照梯度绝对值从大到小对字节进行排序,选取前10%的字节作为关键字节。
然后,针对每个关键字节,以该关键字节作为中心,以递增的步长分别向前、向后两个方向进行变步长的渐进性探索。可以先向前或者先向后探索。向一个方向渐进探索时,将探索得到的所有字节划分为一个临时结构单元;将该临时结构单元进行变异并进行模糊测试,如果变异产生了新的程序执行状态,则证明划分的方向是正确的,进而增加步长继续进行探索。但若变异后未导致新的程序执行状态变化,则停止此方向的探索,临时结构单元以上一次探索位置(即最后导致程序执行状态变化的位置)作为当前方向的边界。结束一个方向探索后,采用相同的方式在另一方向进行探索,获得另一方向的边界。完成所有关键字节处理后,获得结构单元集合B。采用这样的策略一方面可以在梯度相似相邻划分得到的初步结构不理想时进一步补充划分结果,避免梯度相似相邻划分得到的结构单元长度较短,即避免极端情况下会出现划分的结构单元多数由单字节构成的情况;另一方面可以以较小的开销动态检验划分结构的准确性,提高划分结果的可信度。
在进行变步长渐进性探索时,本优选实施例将步长取为2的指数幂,如取20,21,22,…,2k。这样设计一方面遵循了计算机领域的常识,即考虑到计算机中变量类型的长度为2k的形式,如整数类型(int)的变量长度为4个字节,长整数类型(long int)的变量长度为8个字节,而变量本身可以看作由多个字节构成的结构单元;另一方面以递增的步长进行探索可以提高探索效率,且变步长相较于固定步长,其探索更为灵活,伸缩性较好,不用受限于指定的步长选取,从而使得探索结果误差较低。
③合并及去重
将结构单元集合A和结构单元集合B进行合并及去重,获得输入结构单元集合。该输入结构单元集合可以作为初步结构推断的结果。
上述梯度相似相邻划分策略和中心-前后向搜索策略也可以单独使用,则获得的结构单元集合A、结构单元集合B就是结构推断结果,而不需要执行步骤③。
初步结构推断后可能存在结构单元推断不准确的情况,需进一步进行结构推断优化,主要包括对模糊边界的确认和对一些关键结构单元的确认,下面步骤303就从这两个方面进行结构推断优化,从而得到准确的输入结构。
步骤303、对所述输入结构单元集合进行结构推断优化,包括模糊边界处理和/或关键结构单元处理,得到准确的输入结构。
(1)模糊边界处理
模糊边界处理是在步骤302获得的初步推断的基础上对一些不确定的结构边界进行进一步处理。模糊边界是指同一个字节出现在至少两个结构单元中,这个字节就是边界模糊字节。
本发明通过单字节变异和时间戳校验来实现模糊边界处理,获取最终的输入结构信息,减少结构推断的漏报率和误报率。在实际中,也可以使用其中一种模糊边界处理方案。
①单字节变异
采用单字节变异,对输入结构单元集合的模糊边界进行优化的具体过程为:
将归属于至少2个结构单元的字节作为边界模糊字节。针对每个边界模糊字节进行单字节变异,获得新输入用例X;针对边界模糊字节所属的N个结构单元,从每个结构单元内部选取一个字节进行变异,即若边界模糊字节a同时被划分到了N(N为正整数)个结构单元,则需从这N个结构单元内部分别选取一个字节进行单字节变异,变异后获得新输入用例Y1~YN;对输入用例X、Y1~YN进行模糊测试,分别获得其对应的程序执行状态;分析输入用例X的程序执行状态与输入用例Y1~YN中哪一个输入用例的程序执行状态最为相似,将最为相似的一个输入用例记为Y’,则当前边界模糊字节只归属于输入用例Y’中变异字节对应的结构单元;并将当前模糊边界字节a从其他结构单元中删除,从而去除模糊边界。
从每个结构单元内部选取一个字节进行变异虽效率较高,但可能存在误差。在实际中,为了避免上述从每个结构单元内部只选取一个字节进行变异所导致的偶然性误差,也可以针对边界模糊字节所属的N个结构单元,从每个结构单元内部选取2个或以上的字节进行单字节变异,并获得相应的程序执行状态,然后取平均值,作为输入用例Ym的程序执行状态,m的取值范围为1~N,将Ym的程序执行状态与输入用例X的程序执行状态进行对比,从而确定出最为相似的输入用例记为Y’,进而减少误差。
②时间戳校验
考虑到隶属同一结构单元的字节经过相同程序位置的时间相同,而不同结构单元结束边界的时间戳呈现单调性变化,故可利用时间戳属性对一些模糊边界进行校验。那么,在程序的某个位置设置标记,获取边界模糊字节经过该程序位置的时间戳,同时获取每个结构单元中其他字节经过该程序位置的时间戳,作为结构单元的时间戳。判断边界模糊字节的时间戳与哪个结构单元的时间戳相等,则这个边界模糊字节就应该归属到哪个结构单元。
(2)关键结构单元处理
本发明基于单字节变异,对关键结构单元进行优化。
为了进一步校验关键结构单元划分的准确率,也可针对输入结构单元集合中关键字节所属的关键结构单元进行单字节变异优化。具体为,逐一对关键结构单元中的每个字节进行单字节变异,每次变异均进行模糊测试以收集相应的程序执行状态变化信息;若被划分到同一关键结构单元中的各个字节进行单字节变异后得到的程序执行状态相同或相似,则确认这些字节属于当前结构单元;若被划分到同一关键结构单元中的某个字节Z进行单字节变异后得到的程序执行状态与所述关键结构单元中其他字节进行单字节变异后得到的程序执行状态相差较大,则将所述字节Z从所属结构单元中剔除。上述相似和相差较大可以采用设定阈值的方式进行判断。
模糊边界处理和关键结构单元处理的执行先后顺序不进行限定。
本发明确定输入结构后,可以在推断出的结构单元粒度上进行输入用例变异,提高变异效率;同时可以利用推断出的结构单元信息作为格式规范辅助输入用例生成,提高输入用例生成质量。
为了实现上述方法,本发明还提供了一种基于深度学习的输入结构推断装置,如图2所示,该装置包括学习模块、梯度确定模块、输入结构单元集合确定模块和结构推断优化模块。其中,
学习模块,用于采用深度学习模型自动学习输入用例与程序执行状态之间的关系。对应上文的第一阶段和第二阶段。
梯度确定模块,用于利用显著性映射技术获得输入用例中每个字节对程序执行状态的影响,即深度学习模型的输出对输入字节的梯度。对应上文的步骤301。
输入结构单元集合确定模块,用于基于所述梯度,利用梯度相似相邻划分策略和/或中心-前后向搜索策略获得输入结构单元集合。该输入结构单元集合确定模块包括梯度相似相邻划分策略处理模块、中心-前后向搜索策略处理模块和合并模块。对应上文的步骤302。
梯度相似相邻划分策略处理模块,用于通过梯度相似相邻划分策略获得输入结构单元集合A。该梯度相似相邻划分策略的具体实现方式已经在上文描述清楚,这里不赘述。
中心-前后向搜索策略处理模块,用于通过中心-前后向搜索策略获得输入结构单元集合B。该中心-前后向搜索策略的具体实现方式已经在上文描述清楚,这里不赘述。
当梯度相似相邻划分策略和中心-前后向搜索策略结合使用时,采用合并模块对结构单元集合A和结构单元集合B进行合并及去重,获得输入结构单元集合;当梯度相似相邻划分策略、中心-前后向搜索策略单独使用时,梯度相似相邻划分策略处理模块获得的结构单元集合A或中心-前后向搜索策略处理模块获得的结构单元集合B就是输入结构单元集合,而无需合并模块进行处理。
结构推断优化模块,用于对所述输入结构单元集合进行结构推断优化,包括模糊边界处理和/或关键结构单元处理,得到准确的输入结构。对应上文的步骤303。其中,模糊边界处理和关键结构单元处理的具体方案已经在上文描述清楚,这里也不赘述。
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于深度学习的输入结构推断方法,其特征在于,包括:
步骤一、采用深度学习模型自动学习输入用例与程序执行状态之间的关系;
步骤二、利用显著性映射技术获得输入用例中每个字节对程序执行状态的影响,即深度学习模型的输出对输入字节的梯度;
步骤三、基于所述梯度,利用梯度相似相邻划分策略和/或中心-前后向搜索策略获得输入结构单元集合;
步骤四、对所述输入结构单元集合进行结构推断优化,包括模糊边界处理和/或关键结构单元处理,得到准确的输入结构。
2.如权利要求1所述的方法,其特征在于,所述步骤三中,通过梯度相似相邻划分策略获得输入结构单元集合A,通过中心-前后向搜索策略获得输入结构单元集合B;
当梯度相似相邻划分策略和中心-前后向搜索策略结合使用时,对结构单元集合A和结构单元集合B进行合并及去重,获得输入结构单元集合;
当梯度相似相邻划分策略、中心-前后向搜索策略单独使用时,获得的结构单元集合A或结构单元集合B就是输入结构单元集合。
3.如权利要求1或2所述的方法,其特征在于,所述梯度相似相邻划分策略为:依据相似度阈值,将梯度相同或相似的相邻字节划分为一个结构单元,获得输入结构单元集合A。
4.如权利要求1或2所述的方法,其特征在于,所述中心-前后向搜索策略为:按照设定比例,选取梯度绝对值较大的字节,作为关键字节;针对每个关键字节,以该关键字节作为中心,以递增的步长分别向前、向后两个方向进行变步长的渐进性探索;向一个方向渐进探索时,将探索得到的所有字节划分为一个临时结构单元,将该临时结构单元进行变异,并进行模糊测试,如果变异产生了新的程序执行状态则增加步长继续探索,若变异后未导致程序执行状态变化,则停止此方向的探索,临时结构单元以上一次探索位置作为当前方向边界;两个方向均探索结束后,将临时结构单元作为结构单元保存;完成所有关键字节处理后,获得输入结构单元集合B。
5.如权利要求1所述的方法,其特征在于,所述模糊边界处理采用单字节变异,具体为:
将归属于至少2个结构单元的字节作为边界模糊字节;
针对每个边界模糊字节,通过单字节变异获得新输入用例X;针对边界模糊字节所属的N个结构单元,从每个结构单元内部选取一个字节进行变异,变异后获得新输入用例Y1~YN;对输入用例X、Y1~YN进行模糊测试,获得相应的程序执行状态;对比程序执行状态,从输入用例Y1~YN中找到程序执行状态与输入用例X最为相似的一个,记为输入用例Y’,则当前边界模糊字节只归属于输入用例Y’中变异字节对应的结构单元,从而去除模糊边界。
6.如权利要求5所述的方法,其特征在于,针对边界模糊字节所属的N个结构单元,从每个结构单元内部选取2个或以上的字节进行单字节变异,并获得相应的程序执行状态,然后取平均值,作为输入用例Ym的程序执行状态,与输入用例X的程序执行状态进行对比;m的取值范围为1~N。
7.如权利要求1所述的方法,其特征在于,所述模糊边界处理采用时间戳校验,具体为:
将归属于至少2个结构单元的字节作为边界模糊字节;
获取边界模糊字节经过预先设定的程序位置的时间戳,根据隶属同一结构单元的字节经过相同程序位置的时间相同原则,确认边界模糊字节所属结构单元。
8.如权利要求1所述的方法,其特征在于,所述关键结构单元处理采用单字节变异,具体为:
针对输入结构单元集合中关键字节所属的关键结构单元,逐一对关键结构单元中的每个字节进行单字节变异,并进行模糊测试以收集相应的程序执行状态;若已被划分为同一关键结构单元中的各个字节进行单字节变异后得到的程序执行状态相同或相似,则确认这些字节属于当前结构单元;若被划分到同一关键结构单元中的某个字节Z进行单字节变异后得到的程序执行状态与所述关键结构单元中其他字节进行单字节变异后得到的程序执行状态相差较大,则将所述字节Z从所属结构单元中剔除;采用设定阈值确定所述是否相似或相差较大。
9.一种基于深度学习的输入结构推断装置,其特征在于,包括:
学习模块,用于采用深度学习模型自动学习输入用例与程序执行状态之间的关系;
梯度确定模块,用于利用显著性映射技术获得输入用例中每个字节对程序执行状态的影响,即深度学习模型的输出对输入字节的梯度;
输入结构单元集合确定模块,用于基于所述梯度,利用梯度相似相邻划分策略和/或中心-前后向搜索策略获得输入结构单元集合;
结构推断优化模块,用于对所述输入结构单元集合进行结构推断优化,包括模糊边界处理和/或关键结构单元处理,得到准确的输入结构。
10.如权利要求9所述的装置,其特征在于,所述输入结构单元集合确定模块包括梯度相似相邻划分策略处理模块、中心-前后向搜索策略处理模块和合并模块;
梯度相似相邻划分策略处理模块,用于通过梯度相似相邻划分策略获得输入结构单元集合A;
中心-前后向搜索策略处理模块,用于通过中心-前后向搜索策略获得输入结构单元集合B;
当梯度相似相邻划分策略和中心-前后向搜索策略结合使用时,采用合并模块对结构单元集合A和结构单元集合B进行合并及去重,获得输入结构单元集合;
当梯度相似相邻划分策略、中心-前后向搜索策略单独使用时,获得的结构单元集合A或结构单元集合B就是输入结构单元集合。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010554794.1A CN111767546B (zh) | 2020-06-17 | 2020-06-17 | 一种基于深度学习的输入结构推断方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010554794.1A CN111767546B (zh) | 2020-06-17 | 2020-06-17 | 一种基于深度学习的输入结构推断方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111767546A true CN111767546A (zh) | 2020-10-13 |
CN111767546B CN111767546B (zh) | 2022-09-16 |
Family
ID=72722773
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010554794.1A Active CN111767546B (zh) | 2020-06-17 | 2020-06-17 | 一种基于深度学习的输入结构推断方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111767546B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112463638A (zh) * | 2020-12-11 | 2021-03-09 | 清华大学深圳国际研究生院 | 基于神经网络的模糊测试方法及计算机可读存储介质 |
CN116541280A (zh) * | 2023-05-06 | 2023-08-04 | 中国电子技术标准化研究院 | 一种基于神经网络的模糊测试用例生成方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108647520A (zh) * | 2018-05-15 | 2018-10-12 | 浙江大学 | 一种基于脆弱性学习的智能模糊测试方法与系统 |
US20180365139A1 (en) * | 2017-06-15 | 2018-12-20 | Microsoft Technology Licensing, Llc | Machine learning for constrained mutation-based fuzz testing |
CN109522221A (zh) * | 2018-10-26 | 2019-03-26 | 中国科学院信息工程研究所 | 一种提高模糊测试效率的方法和系统 |
CN109739755A (zh) * | 2018-12-27 | 2019-05-10 | 北京理工大学 | 一种基于程序追踪和混合执行的模糊测试系统 |
CN110175120A (zh) * | 2019-05-20 | 2019-08-27 | 北京理工大学 | 一种基于强化学习的模糊测试用例自适应变异方法和装置 |
CN110443045A (zh) * | 2019-08-13 | 2019-11-12 | 北京计算机技术及应用研究所 | 一种基于机器学习方法的模糊测试用例生成方法 |
-
2020
- 2020-06-17 CN CN202010554794.1A patent/CN111767546B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180365139A1 (en) * | 2017-06-15 | 2018-12-20 | Microsoft Technology Licensing, Llc | Machine learning for constrained mutation-based fuzz testing |
CN108647520A (zh) * | 2018-05-15 | 2018-10-12 | 浙江大学 | 一种基于脆弱性学习的智能模糊测试方法与系统 |
CN109522221A (zh) * | 2018-10-26 | 2019-03-26 | 中国科学院信息工程研究所 | 一种提高模糊测试效率的方法和系统 |
CN109739755A (zh) * | 2018-12-27 | 2019-05-10 | 北京理工大学 | 一种基于程序追踪和混合执行的模糊测试系统 |
CN110175120A (zh) * | 2019-05-20 | 2019-08-27 | 北京理工大学 | 一种基于强化学习的模糊测试用例自适应变异方法和装置 |
CN110443045A (zh) * | 2019-08-13 | 2019-11-12 | 北京计算机技术及应用研究所 | 一种基于机器学习方法的模糊测试用例生成方法 |
Non-Patent Citations (5)
Title |
---|
P. GODEFROID 等: "Learn&Fuzz: Machine learning for input fuzzing", 《IEEE》 * |
W. YOU 等: "ProFuzzer: On-the-fly input type probing for better zero-day vulnerability discovery", 《IEEE》 * |
刘天鹏等: "基于文件格式信息的改进模糊测试方法", 《计算机系统应用》 * |
张羿辰等: "模糊测试中基于神经网络的敏感区域预测算法研究", 《信息安全学报》 * |
王赞等: "深度神经网络测试研究综述", 《软件学报》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112463638A (zh) * | 2020-12-11 | 2021-03-09 | 清华大学深圳国际研究生院 | 基于神经网络的模糊测试方法及计算机可读存储介质 |
CN116541280A (zh) * | 2023-05-06 | 2023-08-04 | 中国电子技术标准化研究院 | 一种基于神经网络的模糊测试用例生成方法 |
CN116541280B (zh) * | 2023-05-06 | 2023-12-26 | 中国电子技术标准化研究院 | 一种基于神经网络的模糊测试用例生成方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111767546B (zh) | 2022-09-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111459799B (zh) | 一种基于Github的软件缺陷检测模型建立、检测方法及系统 | |
CN109144882A (zh) | 一种基于程序不变量的软件故障定位方法及装置 | |
CN111767546B (zh) | 一种基于深度学习的输入结构推断方法和装置 | |
CN101706749B (zh) | 基于软件安全缺陷检测的综合处理方法 | |
CN104700033A (zh) | 病毒检测的方法及装置 | |
CN114022904B (zh) | 一种基于两阶段的噪声鲁棒行人重识别方法 | |
CN109840371B (zh) | 一种基于时间序列的动态多层耦合网络构建方法 | |
WO2022041956A1 (zh) | 一种晶圆探测数据的处理方法和计算机可读存储介质 | |
CN108710784A (zh) | 一种基因转录变异几率及变异方向的算法 | |
CN115098292B (zh) | 应用程序崩溃根原因识别方法、装置及电子设备 | |
CN114490404A (zh) | 一种测试用例确定方法、装置、电子设备及存储介质 | |
CN115408925A (zh) | 用于隧道施工的岩体参数预测方法和装置 | |
CN116150757A (zh) | 一种基于cnn-lstm多分类模型的智能合约未知漏洞检测方法 | |
CN111863135A (zh) | 一种假阳性结构变异过滤方法、存储介质及计算设备 | |
CN110502669A (zh) | 基于n边dfs子图的轻量级无监督图表示学习方法及装置 | |
CN116051496A (zh) | 一种实时下水道缺陷检测方法 | |
CN114722960A (zh) | 一种业务过程事件日志不完整轨迹检测方法与系统 | |
CN115422821A (zh) | 用于岩体参数预测的数据处理方法和装置 | |
CN115408927A (zh) | 用于预测岩体参数的数据处理方法和装置 | |
CN115221045A (zh) | 一种基于多任务多视角学习的多目标软件缺陷预测方法 | |
CN114710344A (zh) | 一种基于溯源图的入侵检测方法 | |
CN111737120B (zh) | 一种软件缺陷修复方法及装置 | |
CN114185785A (zh) | 面向深度神经网络的自然语言处理模型测试用例约简方法 | |
CN114138330A (zh) | 基于知识图谱的代码克隆检测优化方法、装置和电子设备 | |
CN113887452A (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 |