面向云平台WAF的SQL注入检测测试方法、装置及介质与流程

文档序号:33505856发布日期:2023-03-18 00:29阅读:59来源:国知局
面向云平台WAF的SQL注入检测测试方法、装置及介质与流程
面向云平台waf的sql注入检测测试方法、装置及介质
技术领域
1.本发明涉及计算机技术领域,特别是涉及一种面向云平台waf的sql注入检测测试方法、装置及介质。


背景技术:

2.随着计算机技术的快速发展,越来越多的万维网应用(world wide web应用,web应用)集成到云平台中,导致云平台面临更多的安全风险,包括结构化查询语言注入(structured query language server database注入,sql注入)风险,面对上述安全风险,往往是通过构建web应用防火墙(web application firewall,waf)来实施安全防护。
3.而在这种情况下,为了确保waf的安全防护能力,需要大量的测试语句对waf的sql注入检测的能力进行测试,现有技术中,往往通过人工编写大量的用于测试的sql注入语句,然而人工编写的方式中,测试语句的获取成本较高。


技术实现要素:

4.本发明实施例的目的在于提供一种面向云平台waf的sql注入检测测试方法、装置及介质,以解决上述问题。具体技术方案如下:在本发明实施的第一方面,首先提供了一种面向云平台waf的sql注入检测测试方法,该方法可以包括:获取初始测试语句集;所述初始测试语句集中包含多条测试语句,所述测试语句为sql注入语句;对于任一所述测试语句,基于所述测试语句对应的目标变异算子集对所述测试语句进行变异操作,得到所述测试语句对应的待选测试语句;将各所述测试语句对应的待选测试语句添加至所述初始测试语句集中,得到目标测试语句集;采用所述目标测试语句集对待测试云平台waf进行sql注入检测测试,以得到测试结果。
5.在本发明实施的第二方面,提供了一种面向云平台waf的sql注入检测测试装置,该装置可以包括:初始测试语句集获取模块,用于获取初始测试语句集;所述初始测试语句集中包含多条测试语句,所述测试语句为sql注入语句;变异模块,用于对于任一所述测试语句,基于所述测试语句对应的目标变异算子集对所述测试语句进行变异操作,得到所述测试语句对应的待选测试语句;测试语句添加模块,用于将各所述测试语句对应的待选测试语句添加至所述初始测试语句集中,得到目标测试语句集;测试模块,用于采用所述目标测试语句集对待测试云平台waf进行sql注入检测测试,以得到测试结果。
6.本发明实施的第三方面,还提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;存储器,用于存放计算机程序;处理器,用于进行存储器上所存放的程序时,进行上述第一方面所述的方法。
7.在本发明实施的第四方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机进行上述第一方面所述的方法。
8.在本发明实施的第五方面,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机进行上述第一方面所述的方法。
9.本发明实施例通过获取初始测试语句集;所述初始测试语句集中包含多条测试语句,所述测试语句为sql注入语句;对于任一所述测试语句,基于所述测试语句对应的目标变异算子集对所述测试语句进行变异操作,得到所述测试语句对应的待选测试语句;将各所述测试语句对应的待选测试语句添加至所述初始测试语句集中,得到目标测试语句集;采用所述目标测试语句集对待测试云平台waf进行sql注入检测测试,以得到测试结果。这样,通过对初始测试语句中的任一测试语句进行变异操作,无需人工编写大量的测试语句,只需通过少量的初始测试语句即可得到包含大量测试语句的目标测试语句集,提高测试语句的生成效率,降低测试语句的获取成本。同时,通过变异操作所得到的待选测试语句往往可以覆盖更多测试角度,从而可以在一定程度上避免直接使用初始测试语句集进行测试所产生的测试覆盖面有限的问题,提高测试的效果。
附图说明
10.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
11.图1是本发明实施例提供的一种面向云平台waf的sql注入检测测试方法的步骤流程图;图2是本发明实施例提供的一种测试语句分析的示意图;图3是本发明实施例提供的一种场景示意图;图4是本发明实施例提供的一种面向云平台waf的sql注入检测测试装置的结构框图。
具体实施方式
12.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述。
13.图1是本发明实施例提供的一种面向云平台waf的sql注入检测测试方法的步骤流程图,如图1所示,该方法可以包括如下步骤:步骤101、获取初始测试语句集;所述初始测试语句集中包含多条测试语句,所述测试语句为sql注入语句。
14.其中,上述初始测试语句集指的是用于执行sql注入检测测试的语句集,其中通常包含多条测试语句,可以理解的,为了对waf的sql注入检测的能力进行测试,所使用的测试语句应该为sql注入语句。其中,各测试语句可以是用于指示在访问未授权信息、创建或修
改新用户权限或其他方式操纵敏感信息的语句,从而可以实现测试目的,可以理解的,上述测试语句相当于是对云平台的waf进行模拟攻击,从而上述测试语句也可以称为攻击载荷(payload)。
15.具体的,上述初始测试语句集可以表示为集合s={si|i=1,2,

,w},其中,上述i可以表示初始测试语句的编号,相应地,si可以表示不同的初始测试语句,上述w表示初始测试语句集所包含的初始测试语句的数量。上述初始测试语句集可以是在网络上随机获取的,也可以是历史构建的测试集,初始测试集语句中的测试语句通常数量较少,且较为单一。
16.步骤102、对于任一所述测试语句,基于所述测试语句对应的目标变异算子集对所述测试语句进行变异操作,得到所述测试语句对应的待选测试语句。
17.其中,上述目标变异算子集指的是与测试语句对应的变异算子集,不同的测试语句所对应的变异算子集也不相同,变异算子集中可以包含多个变异算子,变异算子指的是用于对原payload进行变异的算子,可以包含各类sql注入绕过技术,可以包含大小写替换、空格替换、引号转义或替换、添加注释等等,通过变异算子集对测试语句进行变异操作,可以生成新的payload。其中,上述变异操作指的是在原payload的基础上对其进行变动,通过变异操作可以增加测试语句的多样性。
18.需要说明的是,一个变异算子即可对应一个变异后的测试语句,从而上述待选测试语句的数量与目标变异算子集中的变异算子的数量相对应。
19.步骤103、将各所述测试语句对应的待选测试语句添加至所述初始测试语句集中,得到目标测试语句集。
20.进一步地,通过上述步骤102可以对初始测试语句集中所包含的测试语句分别进行变异,各测试语句可以分别得到变异后的待选测试语句,从而本发明实施例可以将经过变异操作得到的待选测试语句添加至上述初始测试语句集中,使得初始测试语句集中的测试语句数量增加,得到测试语句数量大于初始测试语句集的目标测试语句集。
21.步骤104、采用所述目标测试语句集对待测试云平台waf进行sql注入检测测试,以得到测试结果。
22.其中,上述待测试云平台waf指的是待测试云平台的web应用防火墙,其不需要用户在自己的网络中安装软件程序或部署硬件设备,可以利用域名系统(domain name system,dns)技术,通过移交域名解析权实现安全防护,用户的请求会发送到云端节点进行检测,在请求异常时进行拦截,否则将请求转发至真正服务器,本发明实施例可以根据目标测试语句集中的测试语句生成请求,发送至待测试云平台waf,根据待测试云平台waf是否产生拦截响应,确定待测试云平台waf的性能。
23.具体的,目标测试语句集中所包含的测试语句包括初始测试语句,还包括变异得到的待选测试语句,可以使用各条测试语句依次对待测试云平台waf进行模拟攻击,不同的测试语句可以表征不同的攻击方式,在waf对任一测试语句均存在拦截响应时,表明该待测试云平台waf对目标测试语句集中的测试语句均具有防护作用,相应地,在存在某一测试语句,waf对其没有拦截响应时,表明该waf对该测试语句所表征的sql注入方式不具有防护作用。
24.综上所述,本发明实施例通过获取初始测试语句集;所述初始测试语句集中包含
多条测试语句,所述测试语句为sql注入语句;对于任一所述测试语句,基于所述测试语句对应的目标变异算子集对所述测试语句进行变异操作,得到所述测试语句对应的待选测试语句;将各所述测试语句对应的待选测试语句添加至所述初始测试语句集中,得到目标测试语句集;采用所述目标测试语句集对待测试云平台waf进行sql注入检测测试,以得到测试结果。这样,通过对初始测试语句中的任一测试语句进行变异操作,无需人工编写大量的测试语句,只需通过少量的初始测试语句即可得到包含大量测试语句的目标测试语句集,提高测试语句的生成效率,降低测试语句的获取成本。同时,通过变异操作所得到的待选测试语句往往可以覆盖更多测试角度,从而可以在一定程度上避免直接使用初始测试语句集进行测试所产生的测试覆盖面有限的问题,提高测试的效果。
25.可选地,上述基于所述测试语句对应的目标变异算子集对所述测试语句进行变异操作之前,本发明实施例具体还可以包括下述步骤:步骤201、根据初始变异算子集中变异算子的变异方式,将初始变异算子集划分为多个子集;所述多个子集包括添加类子集、替换类子集以及编码类子集。
26.其中,上述变异方式可以包括添加、替换以及编码,具体的,添加类的变异算子可以通过在原始payload中添加一些符号或元素生成新的变异payload,相应地,替换类的变异算子可以通过对原始payload中的某些元素进行等价替换生成新的变异payload,相应地,编码类的变异算子可以通过对原始payload中的指定元素进行编码生成新的变异payload。
27.可以理解的,变异方式不同,所对应的实际执行的变异操作也不相同,因而本发明实施例中可以根据变异方式对初始变异算子集进行拆分,拆分为添加类子集、替换类子集以及编码类子集,相应地,添加类子集中包含的变异算子为添加类变异算子,替换类子集中所包含的变异算子为替换类变异算子,编码类子集中所包含的变异算子为编码类变异算子。
28.步骤202、对于任一所述测试语句,获取所述测试语句所包含的测试元素的元素类型,作为待选类型。
29.其中,上述测试元素指的是构成测试语句的元素,可以理解的,sql注入语句通常由sql语句关键字、字符串、数字、标点符号、运算符号、控制字符以及各类编码字符表示等各元素构成,本发明实施例可以利用正则表示对各测试语句进行词法分析,得到各测试语句所包含的测试元素。
30.进一步地,对于任一测试语句,本发明实施例还可以将所识别出的元素存入集合ei中,ei={e
i,j
|j=1,2,

,n},其中,ei用于表示测试语句si所对应的测试元素集,相应地,e
i,j
可以用于表示测试语句si中所包含的第j个元素, n表示该测试语句所包含的测试元素的个数。
31.进一步地,本发明实施例可以通过预先定义的类型编码规则对所得到的各个测试元素进行类型识别,同时还可以为不同的类型生成相应的类型编码,可以进一步将类型编码存入类型集合ti中,ti={t
i,j
|j=1,2,

,n},可以理解的,上述集合ei中的每个元素e
i,j
均对应一个元素类型t
i,j
。其中,上述类型编码规则可以按照实际需求自行定义,可以为数字类型的元素定义一个编码,不同的数字的编码可以相同,可以为字符串类型的元素定义一个编码,不同的字符串的编码可以相同,可以为不同关键字、不同的运算符分别定义不同的
编码,还可以为不同的标点符号定义不同的编码,具体可以根据各元素在sql注入语句中的作用进行编码定义,若作用相同,则可以定义为相同的编码,作用不同则定义为不同的编码,具体可以按照实际需求设置不同的类型编码规则,本发明实施例对此不作限制。
32.图2是本发明实施例提供的一种测试语句分析的示意图,如图2所示,对测试语句“admin
’ꢀ
or 1=1#”进行词法分析,可以得到其中包含的测试元素(也可以称为分词)为:“admin”,
“’”

“”
,“or”,
“”
,“1”,“=”,“1”,“#”,其中,一个双引号所包含的内容为一个测试元素,不同测试元素之间用逗号进行分隔。可以看出,图2中所示出的测试语句包含9个元素,进一步地,可以为9个元素生成相应的类型编码,可以看出,图中所采用的编码规则为:“admin”对应的类型编码为23,单引号对应的类型编码为153,空格对应的类型编码为146,逻辑运算符“or”对应的类型编码为1060,数字1对应的类型编码为125,“=”对应的类型编码为68,注释符“#”对应的类型编码为128。
33.步骤203、将所述添加类子集中包括的添加类算子添加至所述测试语句对应的原始算子集,以及,将所述替换类子集中替换对象类型为所述待选类型的替换类算子添加至所述原始算子集,以及,将所述编码类子集中编码对象类型为所述待选类型的编码类算子添加至所述原始算子集,得到所述目标变异算子集。
34.其中,通过上述步骤201可以将初始变异算子集m划分为三个子集:添加类操作子集a={aj|j=1,2,

,o}、替换类操作子集r={rj|j=1,2,

,p}、编码类操作子集c={cj|j=1,2,

,q}。本发明实施例可以为每个payload,也就是为每个si定义一个目标变异算子集cmi,各测试语句对应的目标变异算子集中的变异算子将直接用于后续对该测试语句进行变异操作。其中,添加类子集中包含的变异算子称为添加类算子,相应地,替换类子集中包含的变异算子称为替换类算子,相应地,编码类子集中包含的变异算子称为编码类算子。
35.具体的,由于添加类算子对于sql注入语句通常较为通用,也就是,不同的测试语句均可以使用相同的添加类算子进行变异操作,因而本发明实施例可以将添加类子集a中包含的所有添加类算子均加入到原始算子集中。而由于替换类算子与编码类算子往往是对特定的元素类型进行替换和编码,且不同的替换类算子与不同的编码类算子所针对的替换对象类型与编码对象类型也存在不同,因而本发明实施例可以将替换类算子集r中的替换对象类型为上述待选类型的替换类算子加入到上述原始算子集中,相应地,将编码类算子集c中的编码对象类型为上述待选类型的编码类算子加入到上述原始算子集中,从而得到测试语句si对应的目标变异算子集cmi。
36.具体的,本发明实施例可以首先对测试语句si的类型集合ti中的类型t
i,j
进行去重,确定si包含的元素类型,示例性地,以图2所示出的类型编码为例,对其进行去重后,可以确定si包含的元素类型有7种。其次,可以对去重后的集合ti中的每个类型t
i,j
与替换类子集r和编码类子集c中的变异算子所处理的元素类型进行匹配,其中,上述子集r和c中也可以使用不同的类型编码来表征各自所针对的替换对象类型或编码对象类型,从而上述匹配可以是使用类型编码进行匹配。进一步地,在ti中的t
i,j
与替换类操作子集r和编码类操作子集c中的变异算子所处理的元素类型相同时,则将变异算子rj或cj加入到原始算子集中,否则不加入,最终得到针对各条测试语句si的目标变异算子集cmi={cm
i,j
|j=1,2,

,z},其中,z表示目标变异算子集中所包含的变异算子数量。
37.本发明实施例中,通过根据初始变异算子集中变异算子的变异方式,将初始变异
算子集划分为多个子集;所述多个子集包括添加类子集、替换类子集以及编码类子集;对于任一所述测试语句,获取所述测试语句所包含的测试元素的元素类型,作为待选类型;将所述添加类子集中包括的添加类算子添加至所述测试语句对应的原始算子集,以及,将所述替换类子集中替换对象类型为所述待选类型的替换类算子添加至所述原始算子集,以及,将所述编码类子集中编码对象类型为所述待选类型的编码类算子添加至所述原始算子集,得到所述目标变异算子集。这样,通过各测试语句所包含的测试元素的元素类型,为不同的测试语句构建包含不同变异算子的目标变异算子集,可以避免无效的变异操作,避免所采用的变异算子无法对测试语句进行有效变异,避免了重复的测试语句的生成,进一步提高测试语句的生成效率。
38.可选地,上述基于所述测试语句对应的目标变异算子集对所述测试语句进行变异操作的操作,本发明实施例具体可以包括下述步骤:步骤301、将所述测试语句中待选类型属于所述替换对象类型的测试元素确定为第一目标元素,并采用所述目标变异算子集中包括的替换对象类型为所述待选类型的替换类算子对所述第一目标元素进行替换;所述测试元素为构成所述测试语句的元素。
39.其中,在待选类型属于替换对象类型的情况下,表明在目标变异算子集中存在有该待选类型对应的测试元素可使用的替换类算子,上述替换对象类型指的是替换类算子的替换操作所针对的元素的类型,不同的替换类算子所要替换的元素类型不同,需要说明的是,替换类算子与对应的替换对象在测试语句中的语义,或者将要实现的目的是相同的,示例性地,在替换类算子为任一数字时,其所针对的替换对象类型也为数字,可以是与替换类算子不同的数字,在待选类型为某一逻辑运算符时,可以从替换类算子中选取针对该逻辑运算符的替换类算子进行替换,往往是该逻辑运算符的其他表达形式。
40.进一步地,在目标变异算子集中,各变异算子可以包含变异算子本身,还可以包含所针对的对象类型或者针对的位置。上述替换对象类型也可以使用类型编码来表示,从而通过替换类算子所针对的类型编码可以确定对应的第一目标元素。
41.步骤302、和/或,将所述测试语句中待选类型属于所述编码对象类型的测试元素确定为第二目标元素,并采用所述目标变异算子集中包括的编码对象类型为所述待选类型的编码类算子对所述第二目标元素进行编码。
42.其中,在待选类型属于编码对象类型的情况下,表明在目标变异算子集中存在有该待选类型对应的测试元素可使用的编码类算子,上述编码对象类型指的是编码类算子的编码操作所针对的元素类型,可以为非数字或字符的元素,上述编码类算子可以是不同的编码方式,例如,可以是url编码、html编码、base64编码等,本发明实施例对此不作限制。
43.具体的,本步骤可以是采用编码类算子对第二目标元素进行编码后,采用编码后的第二目标元素对原第二目标元素进行更新或替换。
44.步骤303、和/或,对于所述目标变异算子集中包含的任一添加类算子,基于所述添加类算子的添加规则确定所述添加类算子在所述测试语句中的目标添加位置,将所述添加类算子添加至所述目标添加位置。
45.其中,上述添加类算子通常是通过在测试语句的任意位置添加一些特定的符号实现变异操作,相应地,上述目标添加位置为添加类算子所指示的位置,可以将添加类算子添加至原测试语句的目标添加位置上,实现变异操作。
46.进一步地,变异操作可以是执行上述步骤301~303任一种操作即可,当然,也可以是依次执行两种或三种,可以按照实际需求进行设置,本发明实施例对此不作限制。
47.进一步地,对于任一测试语句来说,可以依次选择对应的目标变异算子集中的变异算子cm
i,j
对其进行变异,示例性地,在变异操作为上述步骤301~303任一种操作时,一个测试语句所得到的待选测试语句的数量与目标变异算子集中的变异算子的数量相同,在通过上述步骤后,各测试语句可以得到其对应的待选测试语句集合cpi={cp
i,j
|j=1,2,

,z},其中,上述z为目标变异算子集中的变异算子的数量。其中,上述变异操作可以是并行执行的,也就是,目标变异算子集中所包含的各个变异算子可以同时对测试语句进行变异,同时得到z个待选测试语句,不同的待选测试语句所执行的变异操作不同。
48.本发明实施例中,通过将所述测试语句中待选类型属于所述替换对象类型的测试元素确定为第一目标元素,并采用所述目标变异算子集中包括的替换对象类型为所述待选类型的替换类算子对所述第一目标元素进行替换;所述测试元素为构成所述测试语句的元素;和/或,将所述测试语句中待选类型属于所述编码对象类型的测试元素确定为第二目标元素,并采用所述编码类子集中包括的编码对象类型为所述待选类型的编码类算子对所述第二目标元素进行编码;和/或,对于所述目标变异算子集中包含的任一添加类算子,基于所述添加类算子的添加规则确定所述添加类算子在所述测试语句中的目标添加位置,将所述添加类算子添加至所述目标添加位置。这样,通过选取不同的变异算子对测试语句的不同的元素进行相应变异操作,可以对同一条测试语句执行不同的变异操作,从而针对一条原始测试语句可以得到多条变异后的语句,实现对初始测试语句集的有效扩充,提高测试语句生成的效率。
49.可选地,上述将各所述测试语句对应的待选测试语句添加至所述初始测试语句集中之前,本发明实施例具体还可以包括下述步骤:步骤401、对于任一测试语句,获取所述测试语句的第一信息熵,以及获取所述测试语句对应的各所述待选测试语句的第二信息熵。
50.其中,在变异算子过多的情况下,所得到的待选测试语句的数量往往呈指数级增长,严重时还会带来组合爆炸问题,因而本发明实施例可以对待选测试语句的数量进行限制。进一步地,不同的测试语句绕过waf检测的能力是具有差异的,为了体现这种差异性,可以采用信息熵对cpi中的待选测试语句进行筛选,其中,上述信息熵可以表征测试语句的不确定性,信息熵越大,不确定性越大,而测试语句的不确定性越大时,该测试语句绕过waf检测的能力越强、绕过的概率越大,从而测试效果越好。因而本发明实施例可以根据信息熵对变异操作得到的待选测试语句进行筛选过滤。
51.其中,信息熵可以通过下述公式进行计算:
52.其中,上述x可以表示测试语句或待选测试语句,上述n表示x中的元素的个数,pi表示语句中第i个元素的概率,pi可以通过下述公式来计算:
53.其中,上述count(i)表示第i个元素在语句中出现的数量,sum表示在语句中包含的所有元素的数量。
54.进一步地,由于在sql注入语句中,关键词对绕过waf的检测具有一定影响,因而第i个元素为关键词时,可以为上述count(i)添加一个权值w,相应地,在计算sum时也相应增加权值w。示例性地,上述权值w可以为50,具体可以根据实际需求自行设置,本发明实施例对此不作限制。
55.上述将各所述测试语句对应的待选测试语句添加至所述初始测试语句集中的操作,本发明实施例具体可以包括下述步骤:步骤402、对于任一所述测试语句对应的任一所述待选测试语句,在所述第二信息熵大于所述第一信息熵的情况下,将所述待选测试语句添加至所述初始测试语句集中。
56.进一步地,由于测试语句的不确定性与信息熵呈正比,且不确定性越高,测试效果越好,因而本发明实施例可以选取信息熵大于原始测试语句的待选测试语句,也就是,选择满足下述条件的待选测试语句:
57.具体的,在第二信息熵大于第一信息熵的情况下,表明当前的待选测试语句的不确定性大于原始测试语句,则其绕过waf的检测的概率越高,对waf的性能测试效果越好,可以最大程度地测试waf的sql注入检测能力,因而本发明实施例可以在第二信息熵大于第一信息熵的情况下,才将待选测试语句添加至上述初始测试语句集中。
58.可选地,也可以为满足上述筛选要求的待选测试语句建立候选测试语句集合ccpi={ccp
(i,j)
|j=1,2,

,g},其中,g表示候选变异样本总数量,从而可以将ccpi中的每个ccp
i,j
均添加到初始测试语句集s中。
59.本发明实施例中,通过对于任一测试语句,获取所述测试语句的第一信息熵,以及获取所述测试语句对应的各所述待选测试语句的第二信息熵;对于任一所述测试语句对应的任一所述待选测试语句,在所述第二信息熵大于所述第一信息熵的情况下,将所述待选测试语句添加至所述初始测试语句集中。这样,通过分别获取测试语句以及测试语句对应的待选测试语句的信息熵,可以根据信息熵的大小对待选测试语句进行筛选,可以在避免待选测试语句数量过多的同时,保证所选择的待选测试语句的测试质量,一定程度熵保证了测试效果。
60.可选地,上述将各所述测试语句对应的待选测试语句添加至所述初始测试语句集中之后,本发明实施例具体还可以包括下述步骤:步骤501、对于任一所述测试语句,在所述测试语句的变异轮数小于预设轮数阈值的情况下,获取所述测试语句对应的待选测试语句的待选变异算子集;所述变异轮数是对所述测试语句进行变异操作的次数与对所述测试语句对应的待选测试语句进行变异操作的次数之和。
61.步骤502、采用所述待选变异算子集对所述测试语句对应的待选测试语句进行变异操作,并将变异后的待选测试语句添加至所述初始测试语句集中,直至所述测试语句的变异轮数不小于所述预设轮数阈值。
62.其中,上述变异轮数指的是测试语句的变异次数和该测试语句对应的待选测试语
句的次数之和,具体的,可以将初始的测试语句作为根语句,所有由根语句变异得到的待选测试语句均属于该根语句,因而该根语句的变异轮数指的是在该根语句下所包含的所有测试语句的变异次数。具体的,选取任一变异算子执行一次变异操作,即可得到一个待选测试语句,此时相当于进行了一轮变异。
63.其中,上述预设轮数阈值可以按照实际需求自行设置,本发明实施例对此不作限制。具体的,在任一测试语句的变异轮数小于上述预设轮数阈值的情况下,表明当前由一个原始payload所产生的变异payload数量可能较少,导致对初始测试语句集的扩充效果较差,本发明实施例可以在任一测试语句的变异轮数小于上述预设轮数阈值的情况下,对添加到初始测试语句集中的待选测试语句进行变异操作,可以是先获取待选测试语句对应的待选变异算子集,获取待选变异算子集的操作与前述步骤201~203类似,此处不再赘述。
64.进一步地,在得到待选测试语句对应的待选变异算子集之后,可以采用待选变异算子集对待选测试语句进行变异操作,得到由待选测试语句变异得到的变异语句,并将变异语句也添加到上述初始测试语句集中,此时可以重新计算原测试语句的变异轮数,在小于上述预设轮数阈值的情况下,继续对新增加到初始测试语句集中的变异语句进行变异操作,直至原测试语句的变异轮数不小于上述预设轮数阈值。
65.本发明实施例中,通过对于任一所述测试语句,在所述测试语句的变异轮数小于预设轮数阈值的情况下,获取所述测试语句对应的待选测试语句的待选变异算子集;所述变异轮数是对所述测试语句进行变异操作的次数与对所述测试语句对应的待选测试语句进行变异操作的次数之和;采用所述待选变异算子集对所述测试语句对应的待选测试语句进行变异操作,并将变异后的待选测试语句添加至所述初始测试语句集中,直至所述测试语句的变异轮数不小于所述预设轮数阈值。这样,通过设置预设轮数阈值,在任一测试语句的变异轮数小于上述阈值时,采用待选测试语句对应的待选变异算子集对待选测试语句进行变异操作,可以使一个原始的测试语句能够产生多轮变异后的待选测试语句,保证了对初始测试语句集的扩充效果,进而可以提高对waf的sql注入检测测试的覆盖率。
66.可选地,本发明实施例具体还可以包括下述步骤:步骤601、对所述目标测试语句集中包含的目标测试语句依次进行编码,得到编码后的目标测试语句集。
67.上述采用所述目标测试语句集对待测试云平台waf进行sql注入检测测试的操作,本发明实施例具体可以包括下述步骤:步骤602、采用所述编码后的目标测试语句集对所述待测试云平台waf进行sql注入检测测试。
68.针对上述步骤601~602,其中,上述编码可以通过预设的不同编码器实现,可以包括base64编码、url编码、double-url编码、unicode-url编码、html编码和long utf-8编码等编码器。具体的,可以采用不同的编码器对各目标测试语句进行编码,当然,也可以是按照预设的分配规则为每个目标测试语句分配相应编码器,本发明实施例对此不作限制。
69.其中,上述编码后的目标测试语句集中包含的是编码后的目标测试语句,相应地,上述采用编码后的目标测试语句集对waf进行测试的操作指的是采用编码后的目标测试语句对waf进行sql注入检测测试。
70.本发明实施例中,通过对所述目标测试语句集中包含的目标测试语句依次进行编
码,得到编码后的目标测试语句集;采用所述编码后的目标测试语句集对所述待测试云平台waf进行sql注入检测测试。这样,通过对目标测试语句集中的目标测试语句进行编码,可以进一步提高测试语句的不确定性,从而提升测试语句的绕过waf的检测的能力,提高测试效果。
71.可选地,上述采用所述编码后的目标测试语句集对所述待测试云平台waf进行sql注入检测测试的操作,本发明实施例具体可以包括下述步骤:步骤701、对于所述编码后的目标测试语句集中的任一目标测试语句,基于所述目标测试语句以及所述待测试云平台waf的地址,生成请求数据包。
72.步骤702、将所述请求数据包发送至所述待测试云平台waf。
73.步骤703、接收所述待测试云平台waf基于所述请求数据包所返回的响应数据包。
74.步骤704、在所述响应数据包中存在拦截特征的情况下,确定所述待测试云平台waf对于所述目标测试语句的测试结果满足要求。
75.针对上述步骤701~704,其中,上述待测试云平台waf的地址通常为url地址,可以是在接收到对待测试云平台waf的测试请求的情况下直接获取的,可以是在测试请求中携带的。
76.具体的,可以将目标测试语句集中的每个目标测试语句与waf的url地址进行组装,生成不同的请求数据包,并将该请求数据包发送至对应的url地址,实现对待测试waf的sql注入。进一步地,waf在接收到请求数据包后,会针对各请求数据包返回相应的响应数据包。
77.其中,上述拦截特征是表明waf拦截了此次请求的特征,通常为特定的代码(例如,404)。具体的,可以在响应数据包的特征字段中获取字段内容,在该字段内容为拦截特征的情况下,表明待测试云平台waf的sql注入检测规则包含了上述请求数据包中的目标测试语句的攻击规则,表明waf对目标测试语句的检测能力满足要求。相应地,在响应数据包中不存在拦截特征的情况下,表明waf未检测出目标测试语句的不合规,执行了目标测试语句所指示的操作,存在拦截遗漏,表明待测试云平台waf的sql注入检测规则未包含上述请求数据包中的目标测试语句的攻击规则,表明waf对目标测试语句的检测能力不满足要求。
78.本发明实施例中,通过对于所述编码后的目标测试语句集中的任一目标测试语句,基于所述目标测试语句以及所述待测试云平台waf的地址,生成请求数据包;将所述请求数据包发送至所述待测试云平台waf;接收所述待测试云平台waf基于所述请求数据包所返回的响应数据包;在所述响应数据包中存在拦截特征的情况下,确定所述待测试云平台waf对于所述目标测试语句的测试结果满足要求。这样,通过向待测试云平台waf发送根据目标测试语句生成的请求数据包,可以采用不同的目标测试语句对waf的检测能力进行测试,提高测试的覆盖率。同时,通过对响应数据包中的拦截特征进行检测,可以通过拦截特征确定waf的检测效果,达到对云平台waf的sql注入检测测试的目的。
79.图3是本发明实施例提供的一种场景示意图,如图3所示,该场景可以包含云平台waf,在该场景下可以执行下述操作:首先对初始测试语句集进行sql词法分析,并对不同的初始测试语句进行自适应匹配,从变异算子集合中得到针对不同初始测试语句的候选变异算子,通过候选变异算子对初始测试语句进行变异,得到变异后的样本,并进一步对变异后的样本进行筛选,将符合
筛选条件的样本添加至候选测试语句集合中,对候选测试语句集合中的测试语句进行编码,并根据编码后的测试语句构建请求数据包,将所构建的请求数据包发送至待测试的云平台waf请求访问,最后对waf所返回的响应数据包进行分析,得到waf针对不同测试语句的测试结果。
80.需要说明的是,随着云计算的发展,越来越多的web应用集成到云平台,这也导致云平台的安全风险面临着巨大的挑战。常见的安全风险包括sql(structured query language)注入、跨站点脚本、跨站点请求伪造、分布式拒绝服务等。其中,sql注入是最常见、最具威胁性的攻击方式之一,攻击者通过在web的输入字段中注入sql字符或命令的方法,以便操纵web后端sql语句的查询执行,从而直接访问未授权信息、创建或修改新用户权限或以其他方式操纵敏感信息。为了应对这些安全风险,传统的web应用的安全防护方案逐渐出现云化,其中就包括web应用防火墙(web application firewall, waf)。而为了保证云平台waf功能的有效性,在其上线前都需要进行模拟黑客攻击以测试waf的性能。因此必须要有一种方法来检验waf拦截规则是否完善或是否存在漏洞。
81.现有的云平台waf针对sql注入的检测主要采用基于签名或机器学习方法。基于签名的waf通过实现特定于应用程序的规则来阻止恶意流量,从而响应威胁。但是,这些规则必须不断调整,以应对不断演变的威胁。由此产生的规则可能变得复杂且难以维护,这要求管理员拥有高级的技能和应用程序的详细知识。更不用说在面对零日攻击时,waf可能会产生较高的误报和漏报,从而对性能产生不利影响,并对零日攻击提供较差的保护。基于机器学习的方法比基于签名/规则的方法有优势,因为前者可以解决零日攻击的漏洞,而且更容易配置和更新。但其性能往往也受限于训练数据,而且其不具备可解释性。
82.考虑到waf安全防护能力的重要性,针对waf的sql注入检测的测试将变得尤为重要。现有的测试方法主要包括手工测试和自动化测试。手工测试是通过人工事先编写sql注入攻击载荷(payload)脚本的方式来制作测试数据,自动化测试则是通过收集或生成大量的sql注入payload来自动化的执行测试过程。而现有的测试方法依然存在以下不足:比如,手工测试难以满足云平台waf系统对大量的真实、合理、复杂的测试数据的需求。并且,手工编写测试脚本人工成本高,效率低。或者,基于预先收集payload进行组装测试的方法的效果往往与payload的质量直接相关,而且测试的覆盖面有限。又或者,基于变异的模糊测试方法随着变异操作符种类的增加,变异后的测试用例数量将指数级增长,严重则会带来组合爆炸问题,反之,若控制变异操作符的数量会降低元素组合覆盖率。又或者,现有基于组合测试和变异测试的方法会产生很多无效的变异,从而降低测试效率。原始输入的payload所组成的元素有限,而大多数变异策略都是针对特定的元素进行,如针对符号“=”或“!=”的替换策略。若当输入的payload中不含这些元素时,采用相应的变异策略则是无效的。
83.而本发明实施例所提供的面向云平台waf的sql注入检测测试方法,相比手工测试和基于预先收集payload进行组装测试的方法,拥有更多不同类型的payload,可以实现更加全面的绕过测试,且通过对payload进行词法分析,然后利用自适应选择的变异算子对payload进行变异,可以减少其它无效变异算子的变异过程,消除重复payload的出现,提升样本生成效率。特别是需要对同一原始payload进行多轮变异时,可以消除绝大多数无效的变异过程。同时,通过基于信息熵的样本筛选,可以减少了样本空间爆炸的概率,大量过滤
具有绕过waf的概率较低的payload,从而降低测试的次数,有效提升了测试的效率,且每个测试的payload都会记录其详细的过程信息,包括原始payload、变异payload、执行的变异算子、信息熵、编码器、编码后的payload,响应状态等。利用这些信息可以快速溯源能够绕过waf的原因,提升加固waf防护策略的效率。
84.图4是本发明实施例提供的一种面向云平台waf的sql注入检测测试装置80的结构框图,如图4所示,该装置可以包括:初始测试语句集获取模块801,用于获取初始测试语句集;所述初始测试语句集中包含多条测试语句,所述测试语句为sql注入语句;变异模块802,用于对于任一所述测试语句,基于所述测试语句对应的目标变异算子集对所述测试语句进行变异操作,得到所述测试语句对应的待选测试语句;测试语句添加模块803,用于将各所述测试语句对应的待选测试语句添加至所述初始测试语句集中,得到目标测试语句集;测试模块804,用于采用所述目标测试语句集对待测试云平台waf进行sql注入检测测试,以得到测试结果。
85.可选地,所述装置还包括:划分模块,用于在所述变异模块基于所述测试语句对应的目标变异算子集对所述测试语句进行变异操作之前,根据初始变异算子集中变异算子的变异方式,将初始变异算子集划分为多个子集;所述多个子集包括添加类子集、替换类子集以及编码类子集;元素类型获取模块,用于对于任一所述测试语句,获取所述测试语句所包含的测试元素的元素类型,作为待选类型;算子添加模块,用于将所述添加类子集中包括的添加类算子添加至所述测试语句对应的原始算子集,以及,将所述替换类子集中替换对象类型为所述待选类型的替换类算子添加至所述原始算子集,以及,将所述编码类子集中编码对象类型为所述待选类型的编码类算子添加至所述原始算子集,得到所述目标变异算子集。
86.可选地,所述变异模块,具体用于:将所述测试语句中待选类型属于所述替换对象类型的测试元素确定为第一目标元素,并采用所述目标变异算子集中包括的替换对象类型为所述待选类型的替换类算子对所述第一目标元素进行替换;所述测试元素为构成所述测试语句的元素;和/或,将所述测试语句中待选类型属于所述编码对象类型的测试元素确定为第二目标元素,并采用所述目标变异算子集中包括的编码对象类型为所述待选类型的编码类算子对所述第二目标元素进行编码;和/或,对于所述目标变异算子集中包含的任一添加类算子,基于所述添加类算子的添加规则确定所述添加类算子在所述测试语句中的目标添加位置,将所述添加类算子添加至所述目标添加位置。
87.可选地,所述装置80还包括:信息熵获取模块,用于对于任一测试语句,获取所述测试语句的第一信息熵,以及获取所述测试语句对应的各所述待选测试语句的第二信息熵;所述测试语句添加模块,具体用于:对于任一所述测试语句对应的任一所述待选测试语句,在所述第二信息熵大于所述第一信息熵的情况下,将所述待选测试语句添加至
所述初始测试语句集中。
88.可选地,所述装置80还包括:待选变异算子集获取模块,用于在所述测试语句添加模块将各所述测试语句对应的待选测试语句添加至所述初始测试语句集中之后,对于任一所述测试语句,在所述测试语句的变异轮数小于预设轮数阈值的情况下,获取所述测试语句对应的待选测试语句的待选变异算子集;所述变异轮数是对所述测试语句进行变异操作的次数与对所述测试语句对应的待选测试语句进行变异操作的次数之和;所述变异模块,具体还用于:采用所述待选变异算子集对所述测试语句对应的待选测试语句进行变异操作,并将变异后的待选测试语句添加至所述初始测试语句集中,直至所述测试语句的变异轮数不小于所述预设轮数阈值。
89.可选地,所述装置还包括:编码模块,用于对所述目标测试语句集中包含的目标测试语句依次进行编码,得到编码后的目标测试语句集;所述测试模块,具体用于:采用所述编码后的目标测试语句集对所述待测试云平台waf进行sql注入检测测试。
90.可选地,所述测试模块,具体还用于:对于所述编码后的目标测试语句集中的任一目标测试语句,基于所述目标测试语句以及所述待测试云平台waf的地址,生成请求数据包;将所述请求数据包发送至所述待测试云平台waf;接收所述待测试云平台waf基于所述请求数据包所返回的响应数据包;在所述响应数据包中存在拦截特征的情况下,确定所述待测试云平台waf对于所述目标测试语句的测试结果满足要求。
91.综上所述,本发明实施例通过获取初始测试语句集;所述初始测试语句集中包含多条测试语句,所述测试语句为sql注入语句;对于任一所述测试语句,基于所述测试语句对应的目标变异算子集对所述测试语句进行变异操作,得到所述测试语句对应的待选测试语句;将各所述测试语句对应的待选测试语句添加至所述初始测试语句集中,得到目标测试语句集;采用所述目标测试语句集对待测试云平台waf进行sql注入检测测试,以得到测试结果。这样,通过对初始测试语句中的任一测试语句进行变异操作,无需人工编写大量的测试语句,只需通过少量的初始测试语句即可得到包含大量测试语句的目标测试语句集,提高测试语句的生成效率,降低测试语句的获取成本。同时,通过变异操作所得到的待选测试语句往往可以覆盖更多测试角度,从而可以在一定程度上避免直接使用初始测试语句集进行测试所产生的测试覆盖面有限的问题,提高测试的效果。
92.在本发明提供的又一实施例中,还提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;存储器,用于存放计算机程序;处理器,用于进行存储器上所存放的程序时,进行上述任一所述的方法。
93.在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机进行上述实施例中任一所述的方法。
94.在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机进行上述实施例中任一所述的方法。
95.在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和进行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solid state disk(ssd))等。
96.需要说明的是,本技术实施例中获取各种数据相关过程,都是在遵照所在地国家相应的数据保护法规政策的前提下,并获得由相应装置所有者给予授权的情况下进行的。
97.需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制时,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
98.本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
99.以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1