CN111831562A - 一种基于机器学习的模糊测试用例生成方法及运行该方法的计算机设备与可读存储介质 - Google Patents
一种基于机器学习的模糊测试用例生成方法及运行该方法的计算机设备与可读存储介质 Download PDFInfo
- Publication number
- CN111831562A CN111831562A CN202010653011.5A CN202010653011A CN111831562A CN 111831562 A CN111831562 A CN 111831562A CN 202010653011 A CN202010653011 A CN 202010653011A CN 111831562 A CN111831562 A CN 111831562A
- Authority
- CN
- China
- Prior art keywords
- taint
- test
- data
- test case
- tracking
- 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/3684—Test management for test design, e.g. generating new test cases
-
- 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/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
Abstract
本发明涉及一种基于机器学习的模糊测试用例生成方法及运行该方法的计算机设备与可读存储介质,通过在测试平台中增加四类组件达到优化测试用例的效果:1、基于测试脚本模型变异策略标记污点数据;2、扩展测试引擎支持调用污点传播路径分析模块;3、测试引擎增加测试用例评价筛选组件;4、污点数据追踪表的设计与存储。使用动态污点跟踪技术进行模糊测试用例的目标是减少测试用例冗余度,减少不同测试用例执行目标程序相同路径的情况,保证尽量少的测试用例覆盖尽量多的测试程序路径。本发明将使用动态污点跟踪技术的原理进行模块化设计,使测试平台能够根据协议实现的程序特点差异化定制动态污点传播分析技术中的各项要素和测试用例筛选模型。
Description
技术领域
本发明涉及模糊测试领域,具体涉及一种基于机器学习的模糊测试用例生成方法及运行该方法的计算机设备与可读存储介质。
背景技术
模糊测试是一种通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。当传统工业网络借助互联互通技术飞速发展,功能日渐强大,效率大幅提升的同时,工业互联网安全也越来越受到关注,一旦工业互联网中的关键协议设备被攻击导致工控设备无法正常工作,将会导致企业重大经济损失等严重后果。在对工业互联网安全的研究中,其中一个很重要的思路是对网络中的关键设备进行协议安全测试,模糊测试是安全测试的一个常用方法,它是一项简单的技术,但是却能够找出许多协议实现过程中的重要bug,及时预警或采取规避措施,确保在设备上线之前,协议漏洞得到及时修复或有效追踪,从而提高网络系统的整体安全性。
工业互联网、物联网发展迅速,国际上知名的工控协议测试平台在专业技术上比较权威,但面对国内越来越繁杂的设备检测需求,存在定制开发周期长、检测费用高、不支持添加自定义协议等问题,并不能完全满足国内工控物联网发展的测试需求,国内相关的企事业单位都在自主研发网络安全测试平台,其中包含一种用于工控物联网协议的模糊测试平台(以下简称“测试平台”),国内工控物联网领域尚没有一款针对协议测试的通用工具,该测试平台开发了一套高效的模糊测试语言,根据工控和物联网协议面向控制、高度结构化的特点,提供专用变异方法如结构变异、错误注入、上下文不一致等,保证快速高效地构建协议测试模型,由测试引擎基于模型自动生成大量测试用例。该测试平台不仅能满足传统工控协议的测试需求,也能快速应用于医学数字影像通信协议、轨道交通安全通信协议等行业协议,为相关设备提供检测服务。
模糊测试在安全测试方面有它的优势,也存在难以避免的缺陷。因为模糊测试是黑盒测试的一种,测试过程与目标程序紧密度比较差,缺乏针对性,模糊测试脚本往往冗余量大,而漏洞检出率低,隐藏较深的漏洞无法检出等问题。本发明在上述测试平台基础上提供了一种基于机器学习的模糊测试用例生成方法,基于现有测试平台框架,扩展测试脚本的变异函数接口,支持使用机器学习算法生成测试用例库,升级测试引擎的数据接收模块,支持对目标设备返回数据进行解析,记录本条测试用例对应的执行目标程序的路径信息,实现对测试用例的评价,达到筛选最优测试用例的目标。
发明内容
发明目的:提供一种基于机器学习的模糊测试用例生成方法,进一步目的是提出一种运行上述方法的计算机设备与可读存储介质,以解决现有技术存在的上述问题。
技术方案:一种基于机器学习的模糊测试用例生成方法,包括污点跟踪、污点分析、测试用例筛选、以及存储污点数据追踪表四个步骤,具体如下:
步骤1、污点跟踪:标记污点源,跟踪目标程序运行;
步骤2、污点分析:存储污点跟踪信息,分析污点路径的相似度;
步骤3、测试用例筛选:标记有效测试用例,生成新的测试用例库;
步骤4、存储污点数据追踪表。
在进一步的实施例中,步骤1进一步包括:将taint_data指定为污点源数据指定接口,当测试引擎解析到字段taint_data接口时,调用污点初始化模块initialize_fun1,将污点源数据映射到内存空间,并存储于污点数据追踪表中;当测试引擎获得污点跟踪信息后调用dress_fun1进行测试用例筛选模块。
在进一步的实施例中,步骤2进一步包括:对使用污点跟踪技术的测试用例的回包进行污点传播路径分析;对使用动态污点跟踪技术的目标程序做二进制插桩处理,或者在源代码中加入插桩代码,将污点数据在执行目标程序过程中涉及的路径记录并返回给测试平台;如果目标程序是开源代码,则在分支中插入插桩代码记录路径;如果是二进制目标程序,采用第三方插桩平台对二进制代码进行插桩;当测试用例数据执行完目标程序后,记录污点数据的传播和清除状态,并作为回包数据的一部分返回给测试平台。
在进一步的实施例中,步骤3进一步包括:
步骤3-1、当数据库中记录了所有污点源数据的传播路径后,获得每一个污点源数据在目标程序中的执行指令序列,在内存中形成污点跟踪指令路径链表;
步骤3-2、根据筛选目标使用各种算法对内存中的指令路径链表进行评价,当存在相同或相似的指令路径链表,则说明不同的测试用例在目标程序中执行了相似的路径,此时判定存在无效的测试用例;采用聚类分析方法对指令路径链表集进行评价,找到路径相似度高的测试用例进行过滤;
步骤3-3、过滤无效的测试用例,减少模糊测试用例的冗余度,标记有效的测试用例以提高测试效率。
在进一步的实施例中,步骤3-2进一步包括:采用海明码距离分析方法将每个测试用例的指令路径链表使用哈希算法进行签名,用海明码距离计算两个签名值的距离,距离值越小,表示指令路径越相似,反之则为不相似。
在进一步的实施例中,步骤4进一步包括:创建taint_trace表以存储污点源数据在目标程序执行过程的跟踪路径信息;
其中字段名为Test_case_id,对应类型为INT,键约束为主键,表示测试用例编号;
字段名为Taint_source,对应类型为HexString,键约束为主键,表示污染源数据;
字段名为InsNum,对应类型为Hex,表示执行路径中指令序列编号;
字段名为Ins,对应类型为varchar,表示污染源数据传播的指令;
字段名为Status,对应类型为Hex,表示污点传播或污点清除。
一种基于机器学习的模糊测试用例生成系统,包括用于标记污点数据的测试脚本模型;用于扩展测试引擎、且支持调用污点传播路径的分析模块;用于测试引擎增加测试用例评价的筛选组件;以及用于存储污点数据追踪表的存储模块。
在进一步的实施例中,所述测试脚本模型进一步将taint_data指定为污点源数据指定接口,当测试引擎解析到字段taint_data接口时,调用污点初始化模块initialize_fun1,将污点源数据映射到内存空间,并存储于污点数据追踪表中;当测试引擎获得污点跟踪信息后调用dress_fun1进行测试用例筛选模块;
所述分析模块进一步对使用污点跟踪技术的测试用例的回包进行污点传播路径分析;对使用动态污点跟踪技术的目标程序做二进制插桩处理,或者在源代码中加入插桩代码,将污点数据在执行目标程序过程中涉及的路径记录并返回给测试平台;判断目标程序是否为开源代码;如果目标程序是开源代码,则在分支中插入插桩代码记录路径;如果是二进制目标程序,采用第三方插桩平台对二进制代码进行插桩;当测试用例数据执行完目标程序后,记录污点数据的传播和清除状态,并作为回包数据的一部分返回给测试平台;
所述筛选组件进一步用于在数据库中记录了所有污点源数据的传播路径后,获得每一个污点源数据在目标程序中的执行指令序列,在内存中形成污点跟踪指令路径链表;根据筛选目标使用各种算法对内存中的指令路径链表进行评价,当存在相同或相似的指令路径链表,则说明不同的测试用例在目标程序中执行了相似的路径,此时判定存在无效的测试用例;采用聚类分析方法对指令路径链表集进行评价,找到路径相似度高的测试用例进行过滤;采用海明码距离分析方法将每个测试用例的指令路径链表使用哈希算法进行签名,用海明码距离计算两个签名值的距离,距离值越小,表示指令路径越相似,反之则为不相似;过滤无效的测试用例,减少模糊测试用例的冗余度,标记有效的测试用例以提高测试效率;
所述存储模块进一步创建taint_trace表以存储污点源数据在目标程序执行过程的跟踪路径信息。
一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,该计算机程序存储在一种计算机可读存储介质上,计算机设备通过运行该可读存储介质,由处理器执行计算机程序,进而实现以下步骤:
步骤1、污点跟踪:标记污点源,跟踪目标程序运行;将taint_data指定为污点源数据指定接口,当测试引擎解析到字段taint_data接口时,调用污点初始化模块initialize_fun1,将污点源数据映射到内存空间,并存储于污点数据追踪表中;当测试引擎获得污点跟踪信息后调用dress_fun1进行测试用例筛选模块。
步骤2、污点分析:存储污点跟踪信息,分析污点路径的相似度;对使用污点跟踪技术的测试用例的回包进行污点传播路径分析;对使用动态污点跟踪技术的目标程序做二进制插桩处理,或者在源代码中加入插桩代码,将污点数据在执行目标程序过程中涉及的路径记录并返回给测试平台;如果目标程序是开源代码,则在分支中插入插桩代码记录路径;如果是二进制目标程序,采用第三方插桩平台对二进制代码进行插桩;当测试用例数据执行完目标程序后,记录污点数据的传播和清除状态,并作为回包数据的一部分返回给测试平台。
步骤3、测试用例筛选:标记有效测试用例,生成新的测试用例库;当数据库中记录了所有污点源数据的传播路径后,获得每一个污点源数据在目标程序中的执行指令序列,在内存中形成污点跟踪指令路径链表;根据筛选目标使用各种算法对内存中的指令路径链表进行评价,当存在相同或相似的指令路径链表,则说明不同的测试用例在目标程序中执行了相似的路径,此时判定存在无效的测试用例;采用聚类分析方法对指令路径链表集进行评价,找到路径相似度高的测试用例进行过滤;采用海明码距离分析方法将每个测试用例的指令路径链表使用哈希算法进行签名,用海明码距离计算两个签名值的距离,距离值越小,表示指令路径越相似,反之则为不相似;过滤无效的测试用例,减少模糊测试用例的冗余度,标记有效的测试用例以提高测试效率。
步骤4、存储污点数据追踪表:创建taint_trace表以存储污点源数据在目标程序执行过程的跟踪路径信息;
其中字段名为Test_case_id,对应类型为INT,键约束为主键,表示测试用例编号;字段名为Taint_source,对应类型为HexString,键约束为主键,表示污染源数据;字段名为InsNum,对应类型为Hex,表示执行路径中指令序列编号;字段名为Ins,对应类型为varchar,表示污染源数据传播的指令;字段名为Status,对应类型为Hex,表示污点传播或污点清除。
结束算法。
有益效果:本发明涉及一种基于机器学习的模糊测试用例生成方法,测试引擎识别到测试脚本中的变异策略函数标记污点数据时,将污点数据字段保存在数据库动态污点跟踪数据表中,调用协议测试套件将带有污点数据的测试用例发送给目标程序。测试引擎获得目标程序的返回后解析污点传播路径并进行统计分类存储于污点数据追踪表中。然后获取污点数据追踪表中的信息,调用测试用例筛选模块进行评价筛选,筛选出的测试用例会在异常数据数据库中标记出来作为优选测试用例。所以污点数据追踪信息和测试用例筛选模型是否科学有效直接决定了使用动态污点跟踪技术进行模糊测试用例筛选的效果。而污点数据追踪信息的统计方式与工控物联网协议实现程序密切相关。使用动态污点跟踪技术进行模糊测试用例的最直接的目标就是要减少测试用例冗余度,减少不同的测试用例执行目标程序相同路径的情况,保证尽量少的测试用例覆盖尽量多的测试程序路径,提高测试效率。本发明提供的技术方案将使用动态污点跟踪技术的原理进行模块化设计,使测试平台能够根据协议实现的程序特点差异化定制动态污点传播分析技术中的各项要素和测试用例筛选模型。
附图说明
图1为本发明模糊测试平台机器学习算法实现架构图。
图2为本发明使用动态污点跟踪技术优化模糊测试用例流程图。
具体实施方式
在下文的描述中,给出了大量具体的细节以便提供对本发明更为彻底的理解。然而,对于本领域技术人员而言显而易见的是,本发明可以无需一个或多个这些细节而得以实施。在其他的例子中,为了避免与本发明发生混淆,对于本领域公知的一些技术特征未进行描述。
申请人认为,测试用例生成是模糊测试的关键过程之一,测试用例的有效性直接决定了模糊测试的最终效果。模糊测试用例冗余性大、效率低是模糊测试平台比较普遍的问题,因为每种协议的结构特征是不同的,为了提高漏洞检出率,需要大量变异策略的测试用例,测试时间往往较长。为提高模糊测试有效性,那些致力于模糊测试技术发展的研究者开始将机器学习的相关理论和算法用于模糊测试中,推动基于模糊测试的漏洞挖掘技术向更广阔的方向发展,从而服务于更多的行业。
在模糊测试领域,研究最多的机器学习算法之一是动态污点跟踪技术,其中包括污点传播与分析,部分研究者使用了符号执行技术。动态污点跟踪是将测试用例中不可信的数据设置为污点数据,然后使用二进制插桩技术,获取目标二进制文件指令所涉及的污点传播与清除情况。每条测试用例发送到目标程序后的执行函数覆盖情况,产生漏洞情况都会被详细记录,根据测试效果评价模型或者测试用例相似度分析进行测试用例筛选达到优化模糊测试用例的目的,提高模糊测试的有效性。
现有的研究成果表明每一种针对特定的目标设备的优化方案都能够达到优化模糊测试用例的效果,并且大幅节省测试时间,动态污点跟踪技术是一种可以有效地优化模糊测试用例的机器学习算法。但也可以发现每一种方案使用的模糊测试器、污点数据源的确定方法、测试用例评价模型等评价手段差异都比较大,各有特点,难以通用,推广使用的难度很大。本发明基于上述测试平台的框架结构,提供了一种基于机器学习的模糊测试用例生成方法,将前述测试平台中引入动态污点跟踪技术,优化模糊测试用例生成模块,同时提供脚本模型接口,使测试人员能够很方便地进行算法配置,推动动态污点跟踪技术在实际设备测试中的应用。将动态污点跟踪技术引入测试平台的测试引擎中,测试引擎依据变异策略自动化生成测试用例后使用动态污点跟踪技术进行测试用例筛选,达到优化模糊测试用例的效果。同时测试平台提供了一套高效的模糊测试语言,能够快速构建测试脚本模型,模型中可扩展定义污点设置函数用于完成确定污染源数据、污点初始化等模块,提高该机器学习算法在测试平台上的可用性和易用性。
为此,申请人提出一种基于机器学习的模糊测试用例生成方法,包括污点跟踪、污点分析、测试用例筛选、存储污点数据追踪表四大步骤。
本发明涉及一种基于机器学习的模糊测试用例生成方法,该方法基于测试脚本模型变异策略标记污点数据,支持标记污点源数据字段、设置污染源数据长度、污染源数据初始化,且一个PDU设置多个污染源数据。测试引擎支持调用污点传播路径分析模块包含了测试引擎访问记录污点源数据的内存空间、测试引擎访问污点数据追踪表的接口集合、测试引擎对目标程序返回数据包内容进行污点传播路径解析并存储的处理。测试引擎增加测试用例评价筛选组件支持测试用例生成污点跟踪路径指令序列;支持基于相似度分析的测试用例评价,基于聚类算法分析的相似度分析方法,基于海明码距离算法的相似度分析方法,筛选出来的有效测试用例进行标记,对跟踪路径指令链表进行相似度分析算法的扩展。
动态污点跟踪技术包括污点传播和分析。污点传播是指机器指令的操作数内存地址如果含有污点,则会发生污点数据复制到其它内存地址并将新的内存地址也标记为污点。污点清除是指机器指令的操作数地址本身含有污点,当机器指令执行完毕,污点会被设置为空。动态污点跟踪分为三个过程:确定污点数据(污染源)、污点传播与清除标记、污点跟踪路径记录。
测试用例中凡是使用了变异策略的数据字段理论上都可以成为污点数据,数据样本一旦被确定为污点数据应被记录在污点追踪表中。当污点数据确定后,就需要跟踪污点数据在目标程序中的执行路径。污点数据在目标程序执行中涉及各种算术与逻辑运算,这些运算将会造成污点源数据“污染”其它数据,被“污染”的数据也会成为污点数据,也有可能经过某个处理后导致所含的污点被清除。对目标程序进行插桩处理,测试用例在进入目标程序执行过程中,就可以标记出污点数据的传播与清除情况。当所有测试用例的污点传播情况都可以记录的话就可以按照测试用例评价模型进行筛选。
在模糊测试领域中,测试有效性和测试路径覆盖度是评价模糊测试用例的重要标准。动态污点跟踪技术已被证明可以在数量庞大的含有变异数据的模糊测试用例中进行有效跟踪和筛选,保留有效的测试用例。本发明将动态污点跟踪技术应用于前述通用的工控物联网协议测试平台中,在保证测试覆盖率的情况下,测试效率得到有效提升。
测试平台通过在测试脚本模型中的变异策略函数种标记污点数据可以确定模糊测试用例中的污点源数据,测试引擎在自动生成测试用例的过程中将指定的污点源数据记录在污点追踪表中。被测目标程序经过插桩处理,测试用例在目标程序的执行过程中,污点数据的传播路径和清除状态将会返回给测试引擎。测试引擎根据动态污点跟踪路径记录在测试用例污点跟踪日志表中。当所有变异数据发包完成后,测试引擎调用测试用例筛选模块根据污点跟踪日志表对测试用例进行筛选做标记,挑选出较优的测试用例。
本发明提供的基于机器学习算法动态污点跟踪技术的模糊测试用例生成方法,通过在测试平台中增加四类组件达到优化测试用例的效果:1、基于测试脚本模型变异策略标记污点数据;2、扩展测试引擎支持调用污点传播路径分析模块;3、测试引擎增加测试用例评价筛选组件;4、污点数据追踪表的设计与存储。测试引擎识别到测试脚本中的变异策略函数标记污点数据时,将污点数据字段保存在数据库动态污点跟踪数据表中,调用协议测试套件将带有污点数据的测试用例发送给目标程序。测试引擎获得目标程序的返回后解析污点传播路径并进行统计分类存储于污点数据追踪表中。然后获取污点数据追踪表中的信息,调用测试用例筛选模块进行评价筛选,筛选出的测试用例会在异常数据数据库中标记出来作为优选测试用例。所以污点数据追踪信息和测试用例筛选模型是否科学有效直接决定了使用动态污点跟踪技术进行模糊测试用例筛选的效果。而污点数据追踪信息的统计方式与工控物联网协议实现程序密切相关。使用动态污点跟踪技术进行模糊测试用例的最直接的目标就是要减少测试用例冗余度,减少不同的测试用例执行目标程序相同路径的情况,保证尽量少的测试用例覆盖尽量多的测试程序路径,提高测试效率。本发明提供的技术方案将使用动态污点跟踪技术的原理进行模块化设计,使测试平台能够根据协议实现的程序特点差异化定制动态污点传播分析技术中的各项要素和测试用例筛选模型。
基于测试脚本模型变异策略标记污点数据
测试平台的测试脚本模型是由平台提供的模糊测试语言建构完成,模糊测试语言提供了丰富的元素及属性定义,并且可以支持适用于工控和物联网协议模糊测试的变异方法接口,测试引擎在识别到变异方法接口时,将从数据库中获得异常数据并自动生成测试用例。本发明在继承变异方法接口的同时扩展其作为污点数据的标志,当测试引擎识别到污点数据标志时,会调用污点初始化模块将污点数据记录到污点数据追踪表中。以下为本发明中的污点数据标记方法示例。
如示例中描述,taint_data(initialize_fun1,dress_fun1)为污点源数据指定接口,在这个示例中,当测试引擎解析到字段taint_data接口时,将会调用污点初始化模块initialize_fun1,将污点源数据映射到内存空间,并存储于污点数据追踪表中。污点源数据可以最小是一个比特,也可以是一块连续的内存。从工控物联网协议特点来看,协议字段基本上都是以字节编码,所以污点源数据最小单位是字节,此接口可以指定污点源数据的长度。当测试引擎获得污点跟踪信息后调用dress_fun1进行测试用例筛选模块。
扩展测试引擎支持调用污点传播路径分析模块
升级测试引擎的接收流程,支持对使用污点跟踪技术的测试用例的回包进行污点传播路径分析。对使用动态污点跟踪技术的目标程序需要做二进制插桩处理,或者在源代码中加入插桩代码,将污点数据在执行目标程序过程中涉及的路径记录并返回给测试平台。
如果目标程序是开源代码,可通过在分支中插入插桩代码记录路径;如果是二进制目标程序,采用第三方插桩平台对二进制代码进行插桩,如比较常用的插桩平台PIN。(二进制插桩平台是比较成熟技术,不在保护范围内)。不同的目标设备执行的二进制目标程序指令集是不同的,总体来说可以将污点传播与清除指令进行分类:数据移动类指令、算术运算类指令、调用/回调等特殊类指令和跳转类无关指令。除了跳转类无关指令不会引起污点状态的改变,其它三类指令都可能导致数据转移,发生污点传播。当测试用例数据执行完目标程序后,污点数据的传播和清除状态就可以记录下来并作为回包数据的一部分返回给测试平台。
测试引擎增加测试用例评价筛选组件
当数据库中记录了所有污点源数据的传播路径后,我们可以获得每一个污点源数据在目标程序中的执行指令序列,在内存中形成污点跟踪指令路径链表。测试用例评价筛选组件要根据筛选目标使用各种算法对内存中的指令路径链表进行评价,相同或相似的指令路径链表说明不同的测试用例在目标程序中执行了相似的路径,这种情况我们认为存在无效的测试用例。组件要实现把无效的测试用例过滤掉,减少模糊测试用例的冗余度,标记有效的测试用例,提高测试效率。
最简单的评价标准是当指令链表完全相同时仅保留一个测试用例,过滤掉其它的,这是极端简单的情况。现实情况是指令路径链表可能是非常庞大的,比较指令链表是否相同是效率极低的做法。此时需要采用特定算法对指令路径链表集进行评价,找到路径相似度高的测试用例进行过滤。聚类分析方法就是将指令路径链表进行编码使用聚类分析的方法,结果可能出现好几类相似度高的测试用例。还有一种海明码距离分析方法,将每个测试用例的指令路径链表使用哈希算法进行签名,用海明码距离计算两个签名值的距离,距离值越小,表示指令路径越相似,反之则为不相似。上述两种算法是被证明对测试用例评价有效的筛选算法。
污点数据追踪表的设计与存储
创建taint_trace表用于存储污点源数据在目标程序执行过程的跟踪路径信息,表结构设计如下:
表名:taint_trace
主键:test_case_id
表1污点数据追踪表的设计与存储
字段名 | 类型 | 键约束 | 说明 |
Test_case_id | INT | 主键 | 测试用例编号 |
Taint_source | HexString | 主键 | 污染源数据 |
InsNum | Hex | 执行路径中指令序列编号 | |
Ins | varchar | 污染源数据传播的指令 | |
Status | Hex | 污点传播或污点清除 |
如上所述,尽管参照特定的优选实施例已经表示和表述了本发明,但其不得解释为对本发明自身的限制。在不脱离所附权利要求定义的本发明的精神和范围前提下,可对其在形式上和细节上做出各种变化。
Claims (10)
1.一种基于机器学习的模糊测试用例生成方法,其特征是包括以下步骤:
步骤1、污点跟踪:标记污点源,跟踪目标程序运行;
步骤2、污点分析:存储污点跟踪信息,分析污点路径的相似度;
步骤3、测试用例筛选:标记有效测试用例,生成新的测试用例库;
步骤4、存储污点数据追踪表。
2.根据权利要求1所述的一种基于机器学习的模糊测试用例生成方法,其特征在于,步骤1进一步包括:将taint_data指定为污点源数据指定接口,当测试引擎解析到字段taint_data接口时,调用污点初始化模块initialize_fun1,将污点源数据映射到内存空间,并存储于污点数据追踪表中;当测试引擎获得污点跟踪信息后调用dress_fun1进行测试用例筛选模块。
3.根据权利要求1所述的一种基于机器学习的模糊测试用例生成方法,其特征在于,步骤2进一步包括:对使用污点跟踪技术的测试用例的回包进行污点传播路径分析;对使用动态污点跟踪技术的目标程序做二进制插桩处理,或者在源代码中加入插桩代码,将污点数据在执行目标程序过程中涉及的路径记录并返回给测试平台;如果目标程序是开源代码,则在分支中插入插桩代码记录路径;如果是二进制目标程序,采用第三方插桩平台对二进制代码进行插桩;当测试用例数据执行完目标程序后,记录污点数据的传播和清除状态,并作为回包数据的一部分返回给测试平台。
4.根据权利要求1所述的一种基于机器学习的模糊测试用例生成方法,其特征在于,步骤3进一步包括:
步骤3-1、当数据库中记录了所有污点源数据的传播路径后,获得每一个污点源数据在目标程序中的执行指令序列,在内存中形成污点跟踪指令路径链表;
步骤3-2、根据筛选目标使用各种算法对内存中的指令路径链表进行评价,当存在相同或相似的指令路径链表,则说明不同的测试用例在目标程序中执行了相似的路径,此时判定存在无效的测试用例;采用聚类分析方法对指令路径链表集进行评价,找到路径相似度高的测试用例进行过滤;
步骤3-3、过滤无效的测试用例,减少模糊测试用例的冗余度,标记有效的测试用例以提高测试效率。
5.根据权利要求4所述的一种基于机器学习的模糊测试用例生成方法,其特征在于,步骤3-2进一步包括:采用海明码距离分析方法将每个测试用例的指令路径链表使用哈希算法进行签名,用海明码距离计算两个签名值的距离,距离值越小,表示指令路径越相似,反之则为不相似。
6.根据权利要求1所述的一种基于机器学习的模糊测试用例生成方法,其特征在于,步骤4进一步包括:创建taint_trace表以存储污点源数据在目标程序执行过程的跟踪路径信息;
其中字段名为Test_case_id,对应类型为INT,键约束为主键,表示测试用例编号;
字段名为Taint_source,对应类型为HexString,键约束为主键,表示污染源数据;
字段名为InsNum,对应类型为Hex,表示执行路径中指令序列编号;
字段名为Ins,对应类型为varchar,表示污染源数据传播的指令;
字段名为Status,对应类型为Hex,表示污点传播或污点清除。
7.一种基于机器学习的模糊测试用例生成方法,其特征在于,包括如下模块:
用于标记污点数据的测试脚本模型;
用于扩展测试引擎、且支持调用污点传播路径的分析模块;
用于测试引擎增加测试用例评价的筛选组件;
用于存储污点数据追踪表的存储模块。
8.根据权利要求7所述的一种基于机器学习的模糊测试用例生成方法,其特征在于:
所述测试脚本模型进一步将taint_data指定为污点源数据指定接口,当测试引擎解析到字段taint_data接口时,调用污点初始化模块initialize_fun1,将污点源数据映射到内存空间,并存储于污点数据追踪表中;当测试引擎获得污点跟踪信息后调用dress_fun1进行测试用例筛选模块;
所述分析模块进一步对使用污点跟踪技术的测试用例的回包进行污点传播路径分析;对使用动态污点跟踪技术的目标程序做二进制插桩处理,或者在源代码中加入插桩代码,将污点数据在执行目标程序过程中涉及的路径记录并返回给测试平台;判断目标程序是否为开源代码;如果目标程序是开源代码,则在分支中插入插桩代码记录路径;如果是二进制目标程序,采用第三方插桩平台对二进制代码进行插桩;当测试用例数据执行完目标程序后,记录污点数据的传播和清除状态,并作为回包数据的一部分返回给测试平台;
所述筛选组件进一步用于在数据库中记录了所有污点源数据的传播路径后,获得每一个污点源数据在目标程序中的执行指令序列,在内存中形成污点跟踪指令路径链表;根据筛选目标使用各种算法对内存中的指令路径链表进行评价,当存在相同或相似的指令路径链表,则说明不同的测试用例在目标程序中执行了相似的路径,此时判定存在无效的测试用例;采用聚类分析方法对指令路径链表集进行评价,找到路径相似度高的测试用例进行过滤;采用海明码距离分析方法将每个测试用例的指令路径链表使用哈希算法进行签名,用海明码距离计算两个签名值的距离,距离值越小,表示指令路径越相似,反之则为不相似;过滤无效的测试用例,减少模糊测试用例的冗余度,标记有效的测试用例以提高测试效率;
所述存储模块进一步创建taint_trace表以存储污点源数据在目标程序执行过程的跟踪路径信息。
9.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至6中任一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至6中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010653011.5A CN111831562A (zh) | 2020-07-08 | 2020-07-08 | 一种基于机器学习的模糊测试用例生成方法及运行该方法的计算机设备与可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010653011.5A CN111831562A (zh) | 2020-07-08 | 2020-07-08 | 一种基于机器学习的模糊测试用例生成方法及运行该方法的计算机设备与可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111831562A true CN111831562A (zh) | 2020-10-27 |
Family
ID=72900482
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010653011.5A Pending CN111831562A (zh) | 2020-07-08 | 2020-07-08 | 一种基于机器学习的模糊测试用例生成方法及运行该方法的计算机设备与可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111831562A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113179274A (zh) * | 2021-04-29 | 2021-07-27 | 哈尔滨工程大学 | 一种基于动态污点分析的Modbus协议漏洞挖掘方法 |
CN113271237A (zh) * | 2021-06-16 | 2021-08-17 | 山石网科通信技术股份有限公司 | 工控协议的解析方法、装置、存储介质及处理器 |
CN113328914A (zh) * | 2021-05-31 | 2021-08-31 | 山石网科通信技术股份有限公司 | 工控协议的模糊测试方法、装置、存储介质及处理器 |
CN114491566A (zh) * | 2022-04-18 | 2022-05-13 | 中国长江三峡集团有限公司 | 一种基于代码相似性的模糊测试方法、装置及存储介质 |
CN117435506A (zh) * | 2023-12-15 | 2024-01-23 | 中兴通讯股份有限公司 | 模糊测试方法、电子设备及计算机可读存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8387016B2 (en) * | 2009-05-01 | 2013-02-26 | Microsoft Corporation | Whitebox trace fuzzing |
CN104598383A (zh) * | 2015-02-06 | 2015-05-06 | 中国科学院软件研究所 | 一种基于模式的动态漏洞挖掘集成系统和方法 |
CN110399730A (zh) * | 2019-07-24 | 2019-11-01 | 上海交通大学 | 智能合约漏洞的检查方法、系统及介质 |
CN110597715A (zh) * | 2019-08-28 | 2019-12-20 | 昆明理工大学 | 一种基于模糊测试的测试样本优化方法 |
-
2020
- 2020-07-08 CN CN202010653011.5A patent/CN111831562A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8387016B2 (en) * | 2009-05-01 | 2013-02-26 | Microsoft Corporation | Whitebox trace fuzzing |
CN104598383A (zh) * | 2015-02-06 | 2015-05-06 | 中国科学院软件研究所 | 一种基于模式的动态漏洞挖掘集成系统和方法 |
CN110399730A (zh) * | 2019-07-24 | 2019-11-01 | 上海交通大学 | 智能合约漏洞的检查方法、系统及介质 |
CN110597715A (zh) * | 2019-08-28 | 2019-12-20 | 昆明理工大学 | 一种基于模糊测试的测试样本优化方法 |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113179274A (zh) * | 2021-04-29 | 2021-07-27 | 哈尔滨工程大学 | 一种基于动态污点分析的Modbus协议漏洞挖掘方法 |
CN113179274B (zh) * | 2021-04-29 | 2022-05-20 | 哈尔滨工程大学 | 一种基于动态污点分析的Modbus协议漏洞挖掘方法 |
CN113328914A (zh) * | 2021-05-31 | 2021-08-31 | 山石网科通信技术股份有限公司 | 工控协议的模糊测试方法、装置、存储介质及处理器 |
CN113328914B (zh) * | 2021-05-31 | 2022-12-13 | 山石网科通信技术股份有限公司 | 工控协议的模糊测试方法、装置、存储介质及处理器 |
CN113271237A (zh) * | 2021-06-16 | 2021-08-17 | 山石网科通信技术股份有限公司 | 工控协议的解析方法、装置、存储介质及处理器 |
CN114491566A (zh) * | 2022-04-18 | 2022-05-13 | 中国长江三峡集团有限公司 | 一种基于代码相似性的模糊测试方法、装置及存储介质 |
CN114491566B (zh) * | 2022-04-18 | 2022-07-05 | 中国长江三峡集团有限公司 | 一种基于代码相似性的模糊测试方法、装置及存储介质 |
CN117435506A (zh) * | 2023-12-15 | 2024-01-23 | 中兴通讯股份有限公司 | 模糊测试方法、电子设备及计算机可读存储介质 |
CN117435506B (zh) * | 2023-12-15 | 2024-04-16 | 中兴通讯股份有限公司 | 模糊测试方法、电子设备及计算机可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111831562A (zh) | 一种基于机器学习的模糊测试用例生成方法及运行该方法的计算机设备与可读存储介质 | |
KR101904911B1 (ko) | 하이브리드 퍼징 기반 보안 취약점 자동 탐색 방법 및 그 장치 | |
CN111400724B (zh) | 基于代码相似性分析的操作系统脆弱性检测方法、系统及介质 | |
KR101981028B1 (ko) | 바이너리 기반 보안 취약점 탐색 시스템, 그 방법 및 프로그램 | |
US7210123B2 (en) | Software evaluation system having source code and function unit identification information in stored administration information | |
CN111695119B (zh) | 一种基于细粒度静态污点分析与符号执行的web漏洞检测方法 | |
CN102402479B (zh) | 用于静态分析的中间表示结构 | |
CN112100072A (zh) | 应用程序代码的静态检测方法、装置、设备及介质 | |
JP6282217B2 (ja) | 不正プログラム対策システムおよび不正プログラム対策方法 | |
Li et al. | Androct: ten years of app call traces in android | |
CN112925524A (zh) | 一种检测驱动程序中不安全直接存储器访问的方法及装置 | |
CN114626069A (zh) | 威胁建模方法及装置 | |
CN115328796A (zh) | 一种用于arm架构的软件漏洞辅助定位方法和系统 | |
CN114647853A (zh) | 提高分布式应用程序漏洞检测准确性的方法及系统 | |
CN115795489B (zh) | 一种基于硬件级进程跟踪的软件漏洞静态分析方法及装置 | |
Mouzarani et al. | A smart fuzzing method for detecting heap-based buffer overflow in executable codes | |
CN110147313B (zh) | 一种日志输出方法及装置 | |
CN116738436A (zh) | 一种漏洞可达性分析方法、系统、计算机设备和处理器 | |
CN113836023B (zh) | 一种基于体系结构交叉检查的编译器安全性测试方法 | |
Xu et al. | Memory leak detection based on memory state transition graph | |
WO2021104027A1 (zh) | 代码性能检测方法、装置、设备及存储介质 | |
Lim et al. | Automatically localizing dynamic code generation bugs in jit compiler back-end | |
CN113407442B (zh) | 一种基于模式的Python代码内存泄漏检测方法 | |
Ashouri et al. | Hybrid taint flow analysis in Scala | |
US20170220450A1 (en) | Analytic method and analyzing apparatus |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20201027 |
|
RJ01 | Rejection of invention patent application after publication |