一种基于自适应随机测试的Sql注入漏洞自动检测平台及方法转让专利

申请号 : CN201710760217.6

文献号 : CN107368427B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张东红张震宇汪诚弘

申请人 : 中国科学院软件研究所

摘要 :

本发明涉及一种基于自适应随机测试的Sql注入漏洞自动检测平台及方法,该检测平台运行于Ubuntu 14.10操作系统,通过对测试用例进行初始化,分析、提取测试用例特征向量,并对测试用例进行向量化表示,使用HTTP请求向测试目标发送测试用例,并记录测试目标的响应,根据响应来判断是否发现Sql注入漏洞,计算测试用例之间的距离,自适应选取下一次进行测试的测试用例。该检测平台创新性地提出使用自适应随机测试的方法,支持快速、自定义、自动化地对目标进行检测,在平台内置丰富的测试用例基础上,使用者可以根据自己的使用需求添加测试用例,平台能够自动化地完成对测试用例的初始化、变异以及特征提取和计算,从而实现最佳的测试效果。

权利要求 :

1.一种基于自适应随机测试的Sql注入漏洞自动检测平台,其特征在于包括:测试用例初始化模块、测试用例特征提取模块、测试用例自适应选取模块、测试用例测试模块;

测试用例初始化模块:对预先定义的测试用例和用户自定义添加的测试用例,使用自动化分析脚本,去除重复测试用例;使用自动化变异脚本,对去重后的测试用例进行变异,并对变异结果再使用自动化分析脚本,再次去除重复测试用例,得到初始化后的测试用例,输入到测试用例特征提取模块;所述对去重后的测试用例进行变异,是指根据预先定义的变异规则,对测试用例中的特定字符进行变化;

测试用例特征提取模块:对输入的测试用例提取特征向量,然后根据特征向量对每一个测试用例进行向量化表示,并将向量化表示的测试用例输出到测试用例自适应选取模块;测试用例特征向量的提取,需要首先对输入的初始化后的测试用例进行分解,统计分解后测试用例中每一个参数在整个测试用例集中出现的频数,使用主成员分析法提取出特征向量,在内存中存储;对测试用例向量化表示,是指根据提取的特征向量,计算特征向量中每一个参数在该条测试用例中出现的频数,并进行归一化处理;

测试用例自适应选取模块:首先在输入的存储向量化表示的哈希表中随机选取一条测试用例发送到测试用例测试模块,根据测试用例测试模块返回的数据判断是否继续选取下一条测试用例,如果需要选取下一条测试用例,则计算该条测试用例与哈希表中其他测试用例的距离,删除当前测试用例并选取距离最大的一条测试用例发送到测试用例测试模块;如果不需要选取下一条测试用例,则停止检测,输出当前测试用例;

测试用例测试模块:根据测试用例自适应选取模块输入的测试用例,对用户指定的测试目标进行测试,并解析测试目标的响应,判断测试用例是否检测到测试目标的Sql注入漏洞;对测试目标进行测试,是指根据用户指定的目标,构造正常请求数据包,向目标发送请求,之后使用测试用例自适应选取模块输入的测试用例构造测试请求,根据测试目标响应数据以及响应时间判断是否触发漏洞。

2.一种基于自适应随机测试的Sql注入漏洞自动检测方法,其特征在于实现步骤如下:

(1)对用户自定义添加或者检测平台预定义的测试用例进行初始化,对测试用例根据预定义规则进行变异,得到更有效、更全面的测试用例集;

(2)对初始化后的测试用例集进行分析,根据测试用例解析后参数的频数进行主成员分析,提取测试用例集的特征向量,根据提取到的特征向量对每个测试用例进行向量化表示,计算归一化频数,并将测试用例以及测试用例向量进行存储;

(3)首次对用户指定的目标进行测试时,随机选取一个测试用例,之后根据测试结果计算当前测试用例与哈希表剩余其他的测试用例之间的距离,选取距离最大的测试用例进行下一次测试;

(4)对测试目标进行测试,首先根据用户指定的测试目标,构造正常请求,获取正常的测试目标响应数据,之后根据测试用例自适应选取模块选取的测试用例,构造测试请求,向测试目标发测试请求之后,根据测试目标响应数据以及响应时间进行判断,判断测试用例是否检测出测试目标存在Sql注入漏洞。

说明书 :

一种基于自适应随机测试的Sql注入漏洞自动检测平台及

方法

技术领域

[0001] 本发明涉及一种基于自适应随机测试的Sql注入漏洞自动检测平台及方法,属于信息安全技术领域。

背景技术

[0002] Sql(数据库)注入漏洞,是web应用程序中普遍存在的一种漏洞,由于应用程序对用户输入的不完整校验,导致用户非法输入的恶意语句在数据库中正确执行,暴露数据库信息。根据开放式Web应用程序项目的调查报告,注入漏洞已经多年排在最具危害性的Web安全漏洞前10位。由于Sql注入漏洞的危害性和普遍性,很多研究人员针对此种安全漏洞提出了多种模型和方法进行检测和预防。目前常用的方法主要是通过静态分析、用户输入过滤、运行时监控、静态分析和运行时监控相结合、模糊测试等。根据检测方法的便捷性和有效性,模糊测试技术被广泛用来对应用程序进行安全测试。模糊测试,是一种通过向目标系统提供非预期的输入,并监视异常结果来发现软件漏洞的方法。
[0003] 虽然此种方法能够比较有效地发现应用程序中存在的漏洞,但是该种方法在实际应用中存在一些比较大的挑战:(1)测试用例空间巨大,(2)有效测试用例稀疏,(3)测试用例运行代价高。由于Sql注入漏洞类型比较多,无法预期用户输入,在测试过程中,为了能够更加有效、全面的发现软件漏洞,通常需要生成大量的测试用例,在这些测试用例中能够有效触发漏洞的测试用例非常少,所以如果采用普通的模糊测试方法逐一执行测试用例,来检测应用程序是否存在漏洞,需要花费大量的时间。针对上述问题,本发明提出使用自适应随机测试的方法选取测试用例,能够根据上一次的测试结果,自适应地选取测试用例,提高测试效率。

发明内容

[0004] 本发明技术解决问题:克服现有技术的不足,提供基于自适应随机测试的Sql注入漏洞自动检测平台及方法,通过将测试用例进行分析,提取出测试用例的特征向量,并对测试用例进行向量化表示,根据上一次的检测结果,计算测试用例之间的距离,选取最有可能的测试用例进行测试,并实现了这一平台,提高来测试效率,能够更有效检测出应用程序是否存在Sql注入漏洞。
[0005] 本发明技术解决方案:基于自适应随机测试方法的Sql注入漏洞自动化检测平台,检测平台自动化分析测试用例,对测试用例进行分解,提取测试用例特征向量,并对测试用例进行向量化表示,根据测试结果自适应随机选取测试用例进行下一次测试;所述自动化检测平台包括:测试用例初始化模块、测试用例特征提取模块、测试用例自适应选取模块、测试用例测试模块;
[0006] 测试用例初始化模块:对平台预先定义的测试用例和用户自定义添加的测试用例,使用自动化分析脚本,去除重复测试用例;对去重后的测试用例,使用自动化变异脚本,对去重后的测试用例进行变异,并对结果使用自动化分析脚本,再次去除重复测试用例,得到初始化后的测试用例,输入到测试用例特征提取模块;对测试用例进行变异,是指根据预先定义的变异规则,对测试用例中的特定字符进行变化,如将空格“”变化成注释符“/**/”,将单引号“’”变化成url编码“%27”等;
[0007] 测试用例特征提取模块:对输入的测试用例提取特征向量,然后根据特征向量对每一个测试用例进行向量化表示,并将向量化表示的测试用例输出到测试用例自适应选取模块;测试用例特征向量的提取,需要首先对输入的初始化后的测试用例进行分解,统计分解后测试用例中每一个参数在整个测试用例集中出现的频数,使用主成员分析法提取出特征向量,在内存中存储;对测试用例向量化表示,是指根据提取的特征向量,计算特征向量中每一个参数在该条测试用例中出现的频数,并进行归一化处理,计算结果在内存中以哈希表的形式进行存储,其中哈希表的关键字表示初始化测试用例,哈希表的值存储测试用例的向量化表示;
[0008] 测试用例自适应选取模块:首先在输入的存储向量化表示的哈希表中随机选取一条测试用例发送到测试用例测试模块,根据测试用例测试模块返回的数据判断是否继续选取下一条测试用例,如果需要选取下一条测试用例,则计算该条测试用例与哈希表中其他测试用例的距离,删除当前测试用例并选取距离最大的一条测试用例发送到测试用例测试模块,并重复上述过程,如果不需要选取下一条测试用例,则停止检测,输出当前测试用例;测试用例距离,根据哈希表中存储的测试用例对应的测试用例向量进行计算,距离采用余弦距离,即计算两个向量的余弦相似性,并取倒数;
[0009] 测试用例测试模块:根据测试用例自适应选取模块输入的测试用例,对用户指定的目标进行测试,并解析测试目标的响应,判断测试用例是否检测到测试目标的Sql注入漏洞;对目标进行测试,是指根据用户指定的目标,构造HTTP请求数据包,向目标发送请求,根据测试目标响应的数据包长度以及响应时间判断是否触发漏洞;
[0010] 基于自适应随机测试方法的Sql注入漏洞自动化检测方法,实现步骤如下:
[0011] (1)对用户自定义添加或者检测平台预定义的测试用例进行初始化,对测试用例根据预定义规则进行变异,得到更有效、更全面的测试用例集;
[0012] (2)对初始化后的测试用例集进行分析,根据测试用例解析后参数的频数进行主成员分析,提取测试用例集的特征向量,根据提取到的特征向量对每个测试用例进行向量化表示,计算归一化频数,并将测试用例以及测试用例向量以哈希表的形式存储在内存中;
[0013] (3)首次对用户指定对目标进行测试时,随机选取一个测试用例,之后根据测试结果计算当前测试用例与哈希表剩余其他的测试用例之间的距离,选取距离最大的测试用例进行下一次测试;
[0014] (4)对测试目标进行测试,向测试目标发送HTTP数据包请求之后,根据测试目标响应数据包的大小、响应码以及响应时间作为依据,判断测试用例是否检测出测试目标存在Sql注入漏洞。
[0015] 本发明与现有技术相比的优点在于:
[0016] (1)测试用例可自定义:用户可以根据测试目标,自定义一系列的测试用例,添加到自动化测试平台中,与传统测试工具相比,能够非常简单的添加测试用例,使得用户可以根据不同的测试目标使用不同的测试用例,增强了检测平台的灵活性与可用性;
[0017] (2)自动化分析与变异:用户添加的测试用例,检测平台会自动化分析,并进行变异,以达到更有效地检测Sql注入漏洞的效果,相比于传统测试软件直接将测试用例发送到测试目标,能够增大绕过测试目标的校验,更为有效地触发漏洞;
[0018] (3)自适应选择测试用例:本发明能够根据上一次的测试结果,自适应的选取测试用例进行下一次测试,这是本发明相比与其他软件逐一发送测试用例最大的不同点,也是最大优点;
[0019] (4)快速:由于本发明改进了测试方法,提高了测试效率,相比于传统测试软件能够更为快速地检测出测试目标是否存在Sql注入漏洞。

附图说明

[0020] 图1为本发明平台体系结构图;
[0021] 图2为测试用例初始化模块结构图;
[0022] 图3为测试用例特征提取模块结构图;
[0023] 图4为测试用例自适应选取模块结构图;
[0024] 图5为测试用例测试模块结构图。

具体实施方式

[0025] 如图1所示,本发明的平台基于Ubuntu 14.10操作系统,通过对测试用例进行初始化,分析、提取测试用例特征向量,并对测试用例进行向量化表示,使用HTTP请求向测试目标发送测试用例,并记录测试目标的响应,根据响应来判断是否发现Sql注入漏洞,计算测试用例之间的距离,自适应选取下一次进行测试的测试用例。更具体地包括以下几个方面几个模块:测试用例初始化模块、测试用例特征提取模块、测试用例自适应选取模块、测试用例测试模块等。
[0026] (1)对用户自定义添加或者检测平台预定义的测试用例进行初始化,对测试用例根据预定义规则进行变异。用户添加的测试用例在本地payloads目录下保存成文件,以每行一条测试用例的形式进行存储。平台初始化时,通过读取文件进行加载,进行去重分析。对测试用例进行变异时,根据预先定义的变异规则,对测试用例中的特定字符进行变化,如将空格“”变化成注释符“/**/”,将单引号“’”变化成url编码“%27”等;
[0027] (2)对初始化后的测试用例集进行分析,根据测试用例解析后参数的频数进行主成员分析,提取测试用例集的特征向量,根据提取到的特征向量对每个测试用例进行向量化表示,计算归一化频数,并将测试用例以及测试用例向量以哈希表的形式存储在内存中。对测试用例进行参数解析,不是按照每个单词或者字母进行分解,而是按照语法模型进行分解,如“’/**/or/**/’a’=’a’”中,“/**/”作为一个完整的参数进行解析,“’”作为一个单独的参数进行解析;
[0028] (3)首次对用户指定对目标进行测试时,从哈希表中随机选取一个测试用例进行测试,根据测试响应结果判断测试用例是否有效,计算当前测试用例与哈希表中剩余的其他测试用例之间的余弦距离,选取距离最大的测试用例进行下一次测试;当两条测试用例向量的余弦值等于0时,表示测试用例之间距离为正无穷;如果多条测试用例距离相同,从距离最大的测试用例集中随机选取一条测试用例进行测试;
[0029] (4)根据用户输入对测试目标进行测试,首先对测试目标进行一次正常访问,记录正常访问响应的时间、数据包大小以及响应码作为基准数据,然后向测试目标发送带有测试用例的HTTP数据包,记录测试目标响应数据包的大小、响应码以及响应时间,与基准数据进行比较,判断测试用例是否检测出测试目标存在Sql注入漏洞。
[0030] 上述实现过程具体实施如下:
[0031] 1.测试用例初始化模块
[0032] 该模块的实现过程如图2所示:
[0033] (1)从测试用例存放目录payloads文件夹中读取测试用例文件,包括检测平台预定义测试用例和用户添加的测试用例;
[0034] (2)对加载的测试用例去重,并对去重后的测试用例进行变异,变异规则预先定义在检测平台基础类中,通过引用基础类对测试用例进行变异,目前变异规则共有41种,每种方法单独以一个文件来实现;
[0035] (3)对变异后的测试用例再次去重,并将去重后的结果输出到测试用例特征提取模块;
[0036] 2.测试用例特征提取模块
[0037] 该模块的实现过程如图3所示:
[0038] (1)对初始化的测试用例进行分解,分解测试用例按照测试用例的语法特征进行,将分解后的结果以哈希表格式进行存储,哈希表变量的关键字使用测试用例,哈希表变量的值存储分解后的测试用例,分解后的测试用例使用列表格式存储,列表中的值即分解后的参数可以重复;
[0039] (2)遍历分解结果,统计所有测试用例分解后参数的频数,即参数在整个测试用例集中出现的次数,使用主成员分析法对测试用例分解后的参数进行分析,提取出主成员参数,作为测试用例的特征向量;
[0040] 主成员分析法的提取公式如下:
[0041]
[0042] 其中dfi表示参数i在全部测试用例集中的出现的次数;k表示要选取用作特征向量的个数,即特征向量的维度;n表示测试用例分解后参数的总数。通过主成员分析法,可以选出能够最大限度表示测试用例的最小维度特征向量。
[0043] (3)根据提取出的特征向量,对每条测试用例进行向量化。遍历分解结果,统计每条测试用例中,在特征向量中参数的频数,并进行归一化表示,将归一化后参数的频数作为该条测试用例特征向量参数的权值,最后将向量化后的测试用例以一个新的哈希表进行存储,哈希表的关键字使用测试用例进行表示,哈希表的值存储测试用例的向量化形式。
[0044] 测试用例参数频数归一化根据如下公式进行计算:
[0045]
[0046] 其中tfji表示第j条测试用例中参数i在该条测试用例中出现的次数;max{tfj}表示第j条测试用例中出现次数最多的参数的频数。
[0047] 3.测试用例自适应选取模块
[0048] 该模块的实现过程如图4所示:
[0049] (1)首先从测试用例哈希表中随机选取一条测试用例输入到测试用例测试模块;
[0050] (2)根据测试用例测试模块返回的参数,判断测试用例是否成功触发Sql注入漏洞。如果返回值为True,表示测试用例成功触发Sql注入漏洞,停止继续进行测试,返回有效测试用例;如果返回值为False,表示测试用例没有成功触发Sql注入漏洞,需要选取测试用例继续进行测试;
[0051] (3)计算当前测试用例和哈希表中其他剩余测试用例之间的距离,距离使用余弦距离,选取距离最大的测试用例发送到测试用例测试模块,并从哈希表中删除当前无效测试用例,重复上述步骤;
[0052] 余弦距离计算公式如下:
[0053]
[0054] 其中ti表示第i条测试用例;vi=(wi1,wi2,wi3,…,wim,…,wik),vi是第i条测试用例ti的向量化形式;tj表示第j条测试用例;vj表示测试用例tj的向量化形式;k表示测试用例向量化形式后向量的维度;wim表示权重;wik表示第i条测试用例ti在第k维上的权重。
[0055] 4.测试用例测试模块
[0056] 该模块的实现过程如图5所示:
[0057] (1)首先对用户输入的测试目标进行正常访问,不加入测试用例,记录测试目标正常访问的响应数据包大小、响应时间和响应码,作为基准数据;如果测试目标无法正常访问,则停止测试,如果测试目标能够正常进行,则继续进行测试;
[0058] (2)将测试用例加入HTTP数据请求数据包,发送访问请求,并记录测试目标的响应数据包大小、响应时间和响应码,与基准数据进行比对;如果访问异常,重复发送请求两次,如果均失败,返回False;如果响应码为200,即表示能够正常访问,则比对响应数据包大小,如果响应数据包远大于基准数据响应数据包大小,表示测试目标返回了额外数据,可以认为测试成功,返回True;如果响应数据包和基准数据响应数据包大小相差不多,分析响应时间,如果响应时间远大于基准数据响应时间,表示测试用例在测试目标后台数据库中执行,返回True;其余情况均返回False;
[0059] 总之,本发明通过对测试用例进行初始化,分析、提取测试用例特征向量,并对测试用例进行向量化表示,使用HTTP请求向测试目标发送测试用例,并记录测试目标的响应,根据响应来判断是否发现Sql注入漏洞,计算测试用例之间的距离,自适应选取下一次进行测试的测试用例。该检测平台创新性地提出使用自适应随机测试的方法,支持快速、自定义、自动化地对目标进行检测,在平台内置丰富的测试用例基础上,使用者可以根据自己的使用需求添加测试用例,本发明能够自动化地完成对测试用例的初始化、变异以及特征提取和计算,从而实现最佳的测试效果。
[0060] 提供以上实施例仅仅是为了描述本发明的目的,而并非要限制本发明的范围。本发明的范围由所附权利要求限定。不脱离本发明的精神和原理而做出的各种等同替换和修改,均应涵盖在本发明的范围之内。