基于组合变异的SQL注入测试用例生成方法与流程

专利2022-06-29  70


本发明属于软件安全测试的研究技术领域,主要涉及一种基于组合变异的sql注入测试用例生成方法。



背景技术:

随着网络时代科技水平的不断发展,大数据、云计算等技术应运而生,b/s模式的应用系统在不同领域得到广泛应用,由于程序员的水平及经验参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患,而sql注入就是其中一种。sql注入是一种在基于web的输入字段中注入sql字符或命令的方法,以便操纵web后端sql语句的查询执行,这类攻击属于web服务器的主要攻击目标。

为应对这种sql注入问题随之出现许多防御方法,诸如静态分析、动态检测、动静态结合、机器学习等方法。基于变异的模糊测试方法就是动态检测sql漏洞的一种方法。此方法可以变异原有效测试用例成功绕过防火墙的过滤规则,但这种方法随着变异操作符(变异测试变异测试用例时使用到的变异脚本)种类的增加,变异后的测试用例数量将指数级增长,严重则会带来组合爆炸问题,若控制变异操作符的数量会降低元素组合覆盖率。组合测试可解决这一问题,它旨在保证一定覆盖率的同时,使用尽可能少的测试用例发掘尽可能多的故障。所以本申请采用组合与变异相结合的方式在保证变异操作符组合覆盖率的同时,也节约了测试用例空间的大小。



技术实现要素:

本申请提供一种基于组合变异的sql注入检测方法,从而在保证攻击成功的前提下,尽量减少测试空间的大小。

本发明的技术方案:

基于组合变异的sql注入测试用例生成方法,步骤如下:

步骤一:检测sqli漏洞的原始有效测试用例的payload可通过多重变异方法进一步扩展,生成新的具有攻击效果的测试用例;由于使用变异规则近似的变异方法对payload进行变异生成的测试用例在检测sqli漏洞时检测效果一致而造成大量不必要的资源消耗,应当避免。因此,本发明将不同变异方法的结合抽象成组合问题,减少变异后的测试用例数量。组合方法具体如下:

步骤1.1:sqlmap自动化检测工具的tamper模块包含目前已有的46种变异操作符,本方法提出将这些变异操作符按照变异规则的相似性分为5个大类,记成有序集合p={p1,p2,p3,...,p5};并将每个大类中的单个变异操作符映射为数值,形式化表示为d(pi)={0,1,2,...,n};其中,0表示不使用该类变异操作符,1至n表示归入类pi的变异操作符对应的数值;

步骤1.2:根据上述划分的变异操作符类构建数值型测试用例模型,该测试用例模型是一个以payload为第一个元素的6元组组成的有序集合,即{(v0,v1,v2,v3,v4,v5)|v0∈d(p0),v1∈d(p1),v2∈d(p2),v3∈d(p3),v4∈d(p4),v5∈d(p5)}

;其中,p0表示原始测试用例payload类,包含两条常用的测试用例,数值化为d(p0)={1,2};

步骤二:变异过程采用变异操作符对原始测试用例payload进行逐步变异,故选用基于垂直扩充(ipog)的t-way组合测试方法,该方法采用先横向扩充再纵向扩充的方式生成数值型测试用例,与变异过程相一致;将步骤一中构建的数值型测试用例模型和覆盖强度t(1≤t≤5)作为算法的输入,生成数值型测试用例方案;

步骤三:基于步骤二生成的数值型测试用例方案,采用基于变异的模糊测试将原始测试用例payload逐一转换为经变异操作符变异后的测试用例。例如,将数值型测试用例方案(1,0,2,4,2,0)转化为变异操作符型测试用例为“1%ef%bc%87 or 1=1 or %ef%bc%87%00”。

本发明的有益效果:使用组合测试和变异测试相结合的方法生成测试用例集,此方法可以在节省测试空间的前提下保证绕过过滤规则的测试用例数量。并将这样的测试用例集应用到检测系统中,从而验证哪些sql漏洞可成功攻击web页面,与现有方法相比只有基于变异测试的sql注入漏洞检测方法减少了空间爆炸的概率,更节省测试用例的时间花费和检测代价。

附图说明

图1是一种基于组合变异方法的sql注入测试用例生成流程图。

具体实施方式

下面将结合附图和技术方案对本发明内容做进一步的详细说明。

图1所示为基于组合变异方法sql注入攻击的检测方法流程图。

步骤一:针对sqli漏洞检测的原始有效测试用例的payload可通过多重变异方法进一步扩展,生成可绕过防火墙过滤规则的测试用例。由于使用变异规则近似的变异方法对payload进行变异生成的测试用例在检测sqli漏洞时检测效果一致而造成大量不必要的资源消耗,应当避免。因此,本发明将不同变异方法的结合抽象成组合问题,减少变异后的测试用例数量。

步骤1.1:本专利提出将tamper模块中的变异操作符按照变异规则的相似性分为5个大类,记成有序集合p={p1,p2,p3,...,p5}。包含如下五类:

comment变异操作符类,这一组的操作主要是给原始测试用例payload的后面加上注释类的字符,这里的4个变异操作符分别代表4种注释符:“--”、“#”、“%00”、“and'0having'='0having'”。这四种字符串是sql语句中常见的注释符或者后缀,添加在payload后面,干扰原sql语句的执行逻辑,判断发掘是否存在sql漏洞,从而达到攻击目的。

stringtamper类包含8种变异操作符,分别是:between、bluecoat、greatest、lowercase、nonrecursivereplacement、randomcase、randomcomments、symboliclogical。

space2类变异操作符主要替换payload中的空格符,共包含14种变异方法:halfversionedmorekeywords、modsecurityversioned、modsecurityzeroversioned、multiplespaces、overlongutf8、space2comment、space2dash、space2hash、space2morehash、space2mssqlblank、space2mssqlhash、space2mysqlblank、space2mysqldash、space2plus、space2randomblank。

apostle类变异操作符主要对payload中的单引号或者双引号进行替换,这里有两种变异方法,分别是:apostrophemask、apostrophenullencode。在攻击过程中,攻击载荷中的引号被数据库解析为特殊字符,攻击者可以转义控制开发人员的查询进而构造自己的查询并加以执行,可能骗过防御系统对引号的过滤。

encode类变异操作符主要是改变对payload中字符串的编码方式,包含5种常用的变异编码方式,分别是:base64encode、chardoubleencode、charencode、charunicodeencode、percentage。

将五大类中的单个变异操作符映射为数值,表示为d(pi)={0,1,2,...,n}。其中,0在这里有着特殊的意义,并不代表某一具体的参数或操作符,为空操作的占位符,其余数值表示归入类pi的变异操作符对应的数值。

步骤1.2:根据上述划分的变异操作符类构建的数值型变异操作符表如表1所示,第一列为各类名称,第二列为每类包含的变异操作符,该测试用例模型是一个以payload为第一个元素的6元组组成的有序集合,即{(v0,v1,v2,v3,v4,v5)|v0∈d(p0),v1∈d(p1),v2∈d(p2),v3∈d(p3),v4∈d(p4),v5∈d(p5)}

。其中,p0表示原始测试用例payload类,也就是前面所提到的合法的输入值集合,或者说是正常的sql注入漏洞的测试用例,包含两条常用的测试用例,因为测试用例的初始值不能为空,所以参数设置中并没有0。数值化为d(p0)={1,2}。

表1变异操作符类以及变异操作符映射的数值

步骤二:因变异过程采用变异操作符对原始测试用例payload进行逐步变异,故选用基于垂直扩充(ipog)的t-way组合测试方法。具体过程表述为:ipog算法先为前k(k>t)类变异操作符构建一个t-way测试集;然后扩展至k 1类变异操作符,此时根据t-way组合的原则,形成新的测试集;直到遍历完所有变异操作符类,建立出最终的测试集。该方法将步骤一中构建的数值型测试用例模型和覆盖强度t(1≤t≤5)作为算法的输入,生成数值型测试用例方案。

步骤三:基于步骤二生成的数值型测试用例方案,采用基于变异的模糊测试将原始测试用例payload逐一转换为经变异操作符变异后的测试用例。

具体过程表述为:该方法从有效的测试用例payload开始,预定义被变异的次数。将数值型测试用例方案按照其对应的变异操作符进行组合后逐一变异,生成变异后新的测试用例。例如,将数值型测试用例方案(1,0,2,4,2,0)转化为变异操作符型测试用例为“1%ef%bc%87 or 1=1 or %ef%bc%87%00”。


技术特征:

1.一种基于组合变异的sql注入测试用例生成方法,其特征在于,步骤如下:

步骤一:检测sqli漏洞的原始有效测试用例的payload可通过多重变异方法进一步扩展,生成新的具有攻击效果的测试用例;

步骤1.1:sqlmap自动化检测工具的tamper模块包含目前已有的46种变异操作符,本方法提出将这些变异操作符按照变异规则的相似性分为5个大类,记成有序集合p={p1,p2,p3,...,p5};并将每个大类中的单个变异操作符映射为数值,形式化表示为d(pi)={0,1,2,...,n};其中,0表示不使用该类变异操作符,1至n表示归入类pi的变异操作符对应的数值;

步骤1.2:根据上述划分的变异操作符类构建数值型测试用例模型,该测试用例模型是一个以payload为第一个元素的6元组组成的有序集合,即{(v0,v1,v2,v3,v4,v5)|v0∈d(p0),v1∈d(p1),v2∈d(p2),v3∈d(p3),v4∈d(p4),v5∈d(p5)};其中,p0表示原始测试用例payload类,包含两条常用的测试用例,数值化为d(p0)={1,2};

步骤二:变异过程采用变异操作符对原始测试用例payload进行逐步变异,故选用基于垂直扩充的t-way组合测试方法,该方法采用先横向扩充再纵向扩充的方式生成数值型测试用例,与变异过程相一致;将步骤一中构建的数值型测试用例模型和覆盖强度t作为算法的输入,1≤t≤5,生成数值型测试用例方案;

步骤三:基于步骤二生成的数值型测试用例方案,采用基于变异的模糊测试将原始测试用例payload逐一转换为经变异操作符变异后的测试用例。

技术总结
本发明属于软件安全测试的研究技术领域,公开了一种基于组合变异的SQL注入测试用例生成方法,用于提高SQL语句注入成功的条数以及检测SQL漏洞的效率。使用组合测试和变异测试相结合的方法生成测试用例集,此方法可以在节省测试空间的前提下保证绕过过滤规则的测试用例数量。并将这样的测试用例集应用到检测系统中,从而验证哪些SQL漏洞可成功攻击Web页面,与现有方法相比只有基于变异测试的SQL注入漏洞检测方法减少了空间爆炸的概率,更节省测试用例的时间花费和检测代价。

技术研发人员:赵靖;董天冉;王延斌;李志娟
受保护的技术使用者:大连理工大学
技术研发日:2020.01.12
技术公布日:2020.06.09

转载请注明原文地址: https://bbs.8miu.com/read-26543.html

最新回复(0)