CN114297079A - 基于时间卷积网络的xss模糊测试用例生成方法 - Google Patents
基于时间卷积网络的xss模糊测试用例生成方法 Download PDFInfo
- Publication number
- CN114297079A CN114297079A CN202111660103.7A CN202111660103A CN114297079A CN 114297079 A CN114297079 A CN 114297079A CN 202111660103 A CN202111660103 A CN 202111660103A CN 114297079 A CN114297079 A CN 114297079A
- Authority
- CN
- China
- Prior art keywords
- character
- xss
- data set
- characters
- case
- 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
- 238000012360 testing method Methods 0.000 title claims abstract description 132
- 238000000034 method Methods 0.000 title claims abstract description 51
- 230000006870 function Effects 0.000 claims abstract description 75
- 230000035772 mutation Effects 0.000 claims description 37
- 238000006243 chemical reaction Methods 0.000 claims description 24
- 238000013507 mapping Methods 0.000 claims description 19
- 238000012549 training Methods 0.000 claims description 17
- 239000013598 vector Substances 0.000 claims description 17
- 230000001364 causal effect Effects 0.000 claims description 15
- 230000010339 dilation Effects 0.000 claims description 14
- 230000007123 defense Effects 0.000 claims description 13
- 238000010276 construction Methods 0.000 claims description 11
- 230000008569 process Effects 0.000 claims description 7
- 238000004422 calculation algorithm Methods 0.000 claims description 6
- 238000007781 pre-processing Methods 0.000 claims description 6
- 238000003491 array Methods 0.000 claims description 5
- 230000004913 activation Effects 0.000 claims description 4
- 238000013461 design Methods 0.000 claims description 4
- 230000000694 effects Effects 0.000 claims description 4
- 238000004364 calculation method Methods 0.000 claims description 3
- 230000009977 dual effect Effects 0.000 claims description 3
- 238000005457 optimization Methods 0.000 claims description 3
- 238000011160 research Methods 0.000 claims description 3
- 230000007704 transition Effects 0.000 claims description 3
- 230000002708 enhancing effect Effects 0.000 claims 1
- 238000003780 insertion Methods 0.000 abstract description 6
- 230000037431 insertion Effects 0.000 abstract description 6
- 238000002347 injection Methods 0.000 description 6
- 239000007924 injection Substances 0.000 description 6
- 238000005065 mining Methods 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 5
- 238000013528 artificial neural network Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 238000002474 experimental method Methods 0.000 description 4
- 238000011161 development Methods 0.000 description 3
- 230000018109 developmental process Effects 0.000 description 3
- 230000002159 abnormal effect Effects 0.000 description 2
- 230000003213 activating effect Effects 0.000 description 2
- 230000008260 defense mechanism Effects 0.000 description 2
- 230000008034 disappearance Effects 0.000 description 2
- 238000004880 explosion Methods 0.000 description 2
- 238000000605 extraction Methods 0.000 description 2
- 230000011218 segmentation Effects 0.000 description 2
- 101100496563 Mus musculus Col6a4 gene Proteins 0.000 description 1
- 235000014510 cooky Nutrition 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000000306 recurrent effect Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 230000000630 rising effect Effects 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 238000010998 test method Methods 0.000 description 1
Images
Abstract
本发明提出基于时间卷积网络的XSS模糊测试用例生成方法。目前,大多是以关键载荷字典作为数据集,并通过搭建字符级别语言模型的方式进行用例的生成。然而,由于目前存在关键载荷字典中用例数量有限等问题,使得生成效率和质量受到影响。本发明以JS事件函数插入位置作为依据,对用例进行结构划分。在此基础上,参考XSS绕过方法,根据划分结果对用例各部分内容进行变异,以实现数据增强。其次,对用例中的单词与字符进行联合编码,保证在保留字符变异性的同时,不会破坏原有单词语义。最后,通过TCN搭建用例生成模型,通过学习用例特征,生成符合要求的XSS漏洞测试用例。本发明提高XSS漏洞模糊测试用例生成效率和质量。
Description
技术领域
本发明提出一种基于时间卷积网络的XSS漏洞测试用例生成方法,主要分为数据预处理阶段以及用例生成模型搭建阶段。在本发明中,首先根据关键载荷事件函数所插入位置提出结构划分规则,并根据划分结果参考XSS绕过方法中的大小写绕过等方法进行基于变异操作的数据增强,在一定程度上提高了测试用例数据集的针对性和多元性,为后续生成工作奠定基础。其次,在用例生成模型搭建阶段,基于划分结果中的各类型数据,提取XSS关键载荷中的单词以及字符进行联合编码,在保证字符变异性的同时也保证了测试用例的可用性。接着,通过使用基于时间卷积网络的用例生成模型,对数据特征及结构进行学习和训练,最终生成符合要求的XSS漏洞测试用例。在具体实验中,通过将DVWA靶场作为实验对象进行基于XSS漏洞挖掘的模糊测试,验证本发明所提出的用例生成方法不仅具有变异性和针对性,同时也具有可行性和实用性,有效地解决了现阶段用例生成具有盲目性、且生成效率较低的问题。
背景技术
当今是互联网高速发展的时代,互联网的发展在给人们生活带来便利的同时,也带来了许多安全隐患。通过利用现有的Web漏洞,黑客或者未经授权的用户可以很轻易地进入网络并执行各种非法的操作,其中XSS漏洞便是目前常见的漏洞之一。在过去的十年里,XSS漏洞一直是OWASP中三大Web漏洞之一。XSS的本质是对输入点进行HTML代码注入。测试人员通常采用将恶意内容伪装成良性HTML文本的方式来欺骗目标Web应用程序,进而导致程序中未经授权的代码执行。一旦程序中的XSS漏洞被恶意利用,便会产生严重的影响。通过注入恶意代码的方式,其他人可以访问浏览器中曾保留的或是与该站点共同使用的任何Cookie、会话、令牌以及其他敏感信息。同时,2019年的《互联网安全威胁报告》也显示,利用XSS漏洞引发的钓鱼攻击和表单劫持给企业带来了巨大损失。针对XSS进行漏洞挖掘的重点在于,通过不断地构造XSS测试用例,发现Web应用程序中可以将测试用例进行注入的位置。若存在这样的位置,则称该位置存在XSS漏洞。XSS测试用例的一般形式为带有恶意URL或者具有回显功能事件函数的HTML代码语句形式。
由于目前安全漏洞一直呈现不断上升趋势的情况,漏洞挖掘技术得到了许多研究人员的关注,其中,模糊测试作为当前主流的漏洞挖掘技术,在Web漏洞挖掘方面发展已较为成熟。模糊测试是Barton Miller教授在1989年针对UNIX系统健壮性和可靠性而提出的一种测试方法。随着网络安全技术的不断发展,模糊测试技术变得越来越主流,其性能、方法甚至检测的目标也在不断地进行完善。模糊测试在流程上主要包括以下四个步骤,分别是:确定输入向量、生成测试用例、执行测试用例以及监视回显。其中,测试用例的生成是模糊测试中不可或缺的一部分,但现如今依然存在着以下问题:1)目前大部分模糊测试工具的测试用例是通过基于模板或是依靠关键载荷字典的方式进行构造,导致所生成的用例不仅数量有限且种类单一,缺乏全面性。2)目前基于深度学习进行测试用例生成的方法大多利用循环神经网络,可能会导致梯度爆炸问题或是梯度消失问题。3)此外,在用例生成中,单纯采用搭建字符级别语言模型的方式在一定程度上破坏了用例原有的语义结构,导致用例生成具有盲目性,且针对性较差,同时在生成效率方面也存在着一定问题。反之,若不通过字符级别语言模型进行生成预测,则会导致生成的测试用例结果针对单个字符变异性较差。
基于上述情况,本发明提出一种基于时间卷积网络的XSS漏洞测试用例生成方法,本发明主要完成工作有:1)在数据预处理阶段,通过关键载荷中JS事件函数插入位置对测试用例进行结构划分,并参考XSS绕过方法对划分结果中各部分数据进行变异操作,以实现数据集的扩充。2)在用例生成模型搭建阶段,首先基于划分结果中的标签、属性等信息,对XSS关键载荷中的单词以及字符进行联合编码,并利用时间卷积网络进行生成模型的搭建。其次,利用时间卷积网络用例生成模型对数据特征及结构进行学习与训练,在此基础上进行迭代生成预测,最终实现种类丰富且具有针对性的XSS漏洞测试用例的生成。
发明内容
本发明获得了一种基于时间卷积网络的XSS漏洞测试用例生成方法,该方法共分为两个阶段,分别是数据预处理阶段和用例生成模型构建阶段。数据预处理阶段主要是将关键载荷通过JS事件函数插入位置进行结构划分,并在此基础上根据划分结果通过局部变异的方式进行数据增强,以达到扩充数据集的目的,其具体流程框架如图1所示。在用例生成模型构建阶段分为两个部分,分别是编码部分和生成部分。编码部分主要是基于划分结果中的标签、属性等信息,针对XSS关键载荷中的单词以及字符以独热编码的方式进行联合编码。生成部分主要是利用时间卷积网络进行用例生成模型的构建,并利用该模型通过对关键载荷中的数据特征及结构进行学习训练,最终生成符合要求的XSS漏洞模糊测试用例,其具体流程框架如图2所示。本发明中所解决问题的形式化定义如下:给定由若干字符和单词组成的测试用例数据集PI={pi1,pi2,...,pim},其中PI为数据集中关键载荷语句。针对测试用例数据集逐一对PI中关键载荷数据进行划分变异,可以得到分别由标签、属性和事件函数所组成的数据集,其数据包含变异前与变异后的标签、属性和事件函数。根据这些变异后标签、属性及事件函数,通过替换的方式对原有的初始关键载荷数据集进行数据扩充,获得新的关键载荷数据集。在此基础上,利用其映射关系将扩充后的测试用例数据集转换为数字形式,再将其作为输入传入神经网络中。通过神经网络进行学习训练,每次根据概率最大的字符作为输出,最终得到生成测试用例G={g1,g2,...gn}。
本发明采用了如下的技术方案及实现步骤:
1.数据预处理阶段:确定时间卷积网络语言生成模型的输入与输出变量:以XSS漏洞测试用例为研究对象,对XSS漏洞测试用例中的关键载荷部分进行结构划分与变异操作,分别得到变异后的标签、属性及事件函数,最终通过替换和整理,获得扩充后的关键载荷数据集PM=(pm1,pm2,...,pmz)作为下一个阶段的输入;
针对XSS测试用例中关键载荷Payload的基本形式可以表示为:
Payload=<L,A,E> (1)
其中,L为关键载荷中的HTML标签部分,A为关键载荷中的属性部分,E为关键载荷中的JS事件函数部分。
针对XSS漏洞测试用例,HTML标签通常可以被划为script标签和普通标签两种形式,即L={Ls,Lc}。带有script标签的关键载荷是最简单,同样也是最基本的XSS关键载荷形式。由于目前许多Web应用程序针对script标签设置了各类的防御措施,因此测试人员为了绕过此类防御措施也会使用普通HTML标签进行关键载荷的构造。属性部分包含HTML属性、CSS属性及JS属性三种形式,即A={AH,AC,AJ}。属性包含属性名和属性值,这里的属性部分特指属性名。E为关键载荷中的JS事件函数部分。一般情况下,一条XSS测试用例的关键载荷必定会包含HTML标签部分及JS事件函数部分,属性部分不为必选项。
发明所研究的XSS漏洞模糊测试可以理解为通过JavaScript脚本注入的方式进行测试。针对不同类型标签及属性,其关键载荷形式也存在差异。本发明通过分析HTML代码以及现有针对XSS漏洞的关键载荷结构,设计了依赖于JS事件函数E的插入位置的XSS测试用例关键载荷结构划分规则。以往的测试人员通过逐一字符判断的形式,获取标签、属性和事件函数信息,其过程相对繁琐。通过本发明中对关键载荷进行结构划分的方式,能够将关键载荷中的各类标签、属性和事件函数进行提取,方便后续的变异操作。根据Payload的基本形式可以将关键载荷结构划分为以下几种情况:1)JS事件函数E作为双标签script标签的文本内容,插在script开标签之后,此情况中script标签通常不带属性,对应公式(2)。为了便于绕过针对script标签的防御措施,script标签前面有时会放置其他普通标签LC,对应公式(3)。2)JS事件函数E作为标签LC中属性AH、AC和AJ所对应的值。在一条关键载荷中,也存在着同时具有属性AH和AC的情况,在这种情况中,JS事件函数E作为属性AC的值,属性AC和他的值则作为属性AH值的一部分。以上情况分别对应下列公式(4)、公式(5)以及公式(6)。此外,在关键载荷的构造中也存在CSS属性针对标签选择器做指定样式的情况,在此类情况里一条关键载荷Payload中会存在两个标签LC,此情况对应公式(7)。经过整理,根据各个规则关键载荷的基本形式具体定义如下:
XSSPayload1=LS+E (2)
XSSPayload2=LC+LS+E (3)
XSSPayload3=(LC+AH)+E (4)
XSSPayload4=(LC+AH+AC)+E (5)
XSSPayload5=(LC+AJ)+E (6)
XSSPayload6=(LC+LC+AC)+E (7)
其中,运算符+表示关键载荷中各部分的连接,标签L在公式中的位置以其开标前的出现位置为准。
上述公式对应XSS关键载荷样例如表1所示:
表1对应上述公式的XSS关键载荷样式
基于上述结构划分规则,将关键载荷数据集中的所有标签、属性及事件特征进行提取,可以得到六个代表不同部分的字符串数组,分别代表script标签LS、普通标签LC、HTML属性AH、CSS属性AC、JS属性AJ和JS事件函数E。
在真实场景下,测试人员会通过一系列的手段绕过目标系统的防御机制以实现异常测试用例的注入,因此本发明根据参考这些XSS绕过手段设计数据变异方法,进而实现对XSS关键载荷的数据增强。根据目前已有的XSS漏洞关键载荷及XSS漏洞注入案例分析可得,针对XSS漏洞有效常用且适合于局部变异的绕过方法有以下几种,分别是大小写绕过、编码绕过、双写绕过、添加特殊字符绕过和添加混淆词绕过,以标签LS为例所展示的具体绕过和变异内容如表2所示。
表2以标签LS为例的XSS绕过方法
根据表2中的方法进行基于字符进行变异需要考虑变异的位置,即变异点。因此,本发明在对划分阶段所获取的字符串数组中每一个字符串进行变异时,将字符串中每一个字符所对应的索引作为变异点进行变异。字符串中第一个字符所对应索引为开始索引,最后一个字符所对应索引为结束索引。为了方便后续确定变异点的随机性,需要先根据字符串的开始及结束索引获得变异点的所有组合情况。以i作为循环变量,从指定数量的字符中取i个字符的索引作为一组变异点组合情况。这里字符的指定数量为字符串数组中每一个字符串的长度。根据每一条划分结果的标签、属性及事件函数字符串索引范围,可以逐一获得包含变异点全部情况的组合M,得到公式(8):
其中Ml为变异索引组合数组的长度,H为结束索引。
根据获得的变异索引组合数组M,以及表2中提出的XSS绕过方法对所得到的字符串数组进行变异。在算法描述中,字符串mutationString为待变异字符串,mutationNum为根据索引生成的变异组合数组,针对XSS关键载荷各部分的具体变异算法描述如下:
1、输入字符串mutationString以及数组mutationNum;
2、定义listText用来存储变异后的字符串列表;
3、获取一个满足大于0,小于mutationNum数组长度条件的随机整数,以此作为循环条件决定变异次数。其中,随机整数通过python中numpy库中的randint()函数进行获取;
4、根据变异次数,每一次获取一个满足大于0,小于mutationNum数组长度条件的随机整数,以此作为所选择的变异组合数组索引。本步骤中的随机整数获取方式同上一步骤相同;
5、根据所选择索引所对应的变异排列组合逐一对字符串内字符依次执行变异,直至循环结束。变异操作包括在变异索引处转换字符大小写、替换字符编码形式、进行嵌套操作、添加特殊字符以及添加混淆词;
6、对变异后的字符串列表listText进行去重操作;
7、输出变异后的字符串列表listText。对于上述变异对数据进行增强,可以得到不同部分变异后的字符串列表。根据该列表,通过替换的方式对原有的初始关键载荷数据集进行数据扩充,可以使得数据集的针对性和多元性得到提升。
基于上述变异,可以获得数量更多且形式更丰富的标签、属性及事件函数。根据这些变异后标签、属性及事件函数,通过替换的方式对原有的初始关键载荷数据集进行数据扩充获得新的关键载荷数据集,可以实现数据增强的效果,使得数据集的针对性和多元性得到提升。此步骤最终得到的数据集为关键载荷数据集PM={pm1,pm2,…,pmz}。此数据集将作为下一阶段输入。
2.语言生成模型搭建阶段:设计用于XSS漏洞测试用例生成的语言生成模型,利用时间卷积网络建立联合单词和字符进行编码的用例生成模型。本发明中使用的用例生成模型共分为两部分,分别是编码部分以及模型搭建部分。
编码部分主要是通过对XSS关键载荷中的单词与字符进行联合编码的方式,进行模型输入数据集的构造。为了能够在保存原有的语义结构的同时,保证用例生成具有字符变异性,本发明通过使用对XSS关键载荷语句中的单词与字符进行联合编码的方法完成输入数据集的构造。其中,单词是具有一定含义的,由若干个字符组成的固定字符串,如果对其进行拆分会破坏原有含义。
为了能够在保存原有的语义结构的同时,保证用例生成具有字符变异性,本发明通过使用对XSS关键载荷语句中的单词与字符进行联合编码的方法完成输入数据集的构造。其中,单词是具有一定含义的,由若干个字符组成的固定字符串,如果对其进行拆分会破坏原有含义。
考虑到Web应用程序中针对标签及属性特征的XSS漏洞防御措施较少,针对事件特征的XSS漏洞防御措施较多,因此把上一部分中所获取的变异前和变异后的标签及属性以单词的形式存入词典,将事件分割为字符的形式存入词典。该词典中包含以单词形式存储的标签和属性、被分割为单一字符的事件以及他们所对应的数字。通过词典,可以便于单词和字符向数字形式的转换。需要特别说明的是,因测试人员在进行测试时,会通过尝试闭合关键载荷前其他HTML标签或者不添加闭标签'>'的方式绕过XSS防御措施,因此在针对标签进行编码操作时,本发明将闭标签'>'单独拆分开来以字符的形式进行存储,标签中其他部分照常以单词的形式进行存储。在本发明中强调单词和字符的存储顺序,其原因是为了后文中进行映射转换时能够保证单词的优先级大于字符的优先级,防止字符与单词存在子字符串关系在转换时产生歧义的情况发生。以带有script标签的关键载荷为例,基于XSS关键载荷的单词和字符提取结果如图3所示。
基于以上单词与字符特征,词典生成其与数字一一对应的映射,即按照单词与字符的存储顺序,为每一个单词和字符分配对应的数字作为词典索引。根据词典,能够对由XSS关键载荷所组成的测试用例数据集进行向量化映射转换,将其转换为数字形式,根据之前所设定的词典中单词优先级大于字符优先级的规则,在对数据集进行映射转换时先考虑单词与数字的转换,后考虑字符与数字的转换,使得在对测试用例数据集进行转换的过程中,不会发生由子字符串所带来的歧义造成的转换错误。经过该步骤得到的测试用例数据集为数字形式所表示的文本。
为方便模型的输入,需要提前对数字形式的测试用例数据集进行编码操作。本发明将测试用例生成的整体流程看作是分类工作,即将具有固定长度的种子用例数据看作是输入数据,所预测的字符或者单词对应的数字看作是类别。其中,种子用例数据的获取是从测试用例第一个单词或者字符所对应的数字开始,每次移动固定的长度,在此基础上选取具有固定长度的用例数据。因此,在进行编码操作之前,需要对扩充后的测试用例数据集PN=(pn1,pn2,...,pnz)进行划分,将其划分为种子用例数据集D所预测的单词或字符D'所对应数字的数据集,其表示如下:
D={pno,pno+1,...,pno+l-1} (9)
D'=pno+l (10)
其中,l为固定的数据长度,o为上一个开始索引的位置,其初值为0。
最后,采用独热编码的方式对数据集进行编码转换,将其转换为二进制向量作为模型的输入。独热编码主要是通过将字符和单词所对应的每一个数字看作一个类别,根据每一个种子用例数据的每一个数字,将其数字对应的位置索引设置为1,其余设置为0的方式对数据集进行编码。以此得到网络输入是编码后的两个以二进制向量形式所表示的数据集。
时间卷积网络的拓扑结构分为三层:输入层、隐藏层、输出层,整体网络结构如图4所示;
在该模型中,本发明将时间步设为t,批次大小设置为32。本发明中所使用的时间卷积网络通过将普通卷积替换为因果卷积的方式对序列问题进行处理。在隐藏层中的设计中,本发明共设置3个隐藏层,其滤波器分别设置为32、16、16,卷积核个数设为3,扩张因子分别设为1、2、4,其中每一个隐藏层包含两个相连的一维扩张因果卷积网络和一个ReLu非线性映射函数,隐藏层之间通过使用残差的方式进行连接。
设该模型中共有N个训练样本,设时间卷积网络语言生成模型两个输入分别为X={x1,x2,...,xN}以及Y={y1,y2,...,yn},其中X为独热编码形式的当前关键载荷输入序列,Y为独热编码形式的当前下一个字符或单词序列。时间卷积网络语言生成模型的期望输出表示为G',实际输出表示为G;基于时间卷积网络的XSS漏洞测试用例生成方法计算方式依次为:
①输入层:该层根据指定批次大小输出指定形状向量,则该层的输出为:
uq=xq (11)
其中,uq是针对X的第q个序列的输出,q=1,2,…,v,输出形状为(maxlen,len(dict)),maxlen为种子用例数据的固定长度,len(dict)为单词和字符的总数,xq为输入层中输入向量X的第q个序列;
②隐藏层:每一个隐藏层由两个相连的一维扩张因果卷积网络和一个ReLu非线性映射函数组成,在xt处的因果卷积输出为:
其中,(F*X)代表对序列做卷积操作,F={f1,f2,...,fK}为滤波器,K为滤波器大小,X={x1,x2,...,xN}为输入序列。
扩张卷积的引入是为了网络能对历史信息有记忆,因此在xt处的扩张因子为d的扩张卷积输出为:
其中,F={f1,f2,...,fK}为滤波器,K为滤波器大小,X={x1,x2,...,xN}为输入序列,d为扩张因子。
扩张因子即为卷积核点的间隔数量,针对普通卷积扩张因子一般设置为1,针对本发明中的数据集,模型三个隐藏层中扩张卷积的扩张因子分别被设置为1、2、4。
针对两个相连的一维扩张因果卷积网络所获得的输出向量output,使用relu激活函数进行非线性优化,已知relu函数如公式(14)所表示,即可得隐藏层的输出ho为:
relu(a)=max(0,a) (14)
ho=relu(output) (15)
③输出层:输出层由flatten层和全连接层组成,flatten层用于卷积层和全连接层的过渡,即将多维数据一维扁平化,输出大小为maxlen×len(dict)的一维数组。其次,在此基础上全连接层相当于一个分类器功能,通过激活函数softmax获得输出。本发明将基于字符或单词特征的生成工作看作多分类工作,即将根据所预测的下一个字符或单词看作是针对已获取的样本数据进行分类,首先针对隐藏层的输出ho进行操作。
zj=wj*ho+bj (16)
其中,wj为第j类下特征的权重,bj为第j类下特征的偏置项,通过对特征加权求和可以得到各类别的分数zj。
在模型的训练中,选取交叉熵损失函数用以度量预测值与实际值之间的相似度,可知时间卷积网络语言生成模型的误差为:
其中,g'时间卷积网络的期望输出,g为时间卷积网络的实际输出,N为样本个数。本发明的创造性主要体现在:
(1)本发明在针对XSS关键载荷进行结构划分的基础上,进行基于变异操作的数据增强,并根据划分结果对XSS关键载荷中的单词与字符进行联合编码,不仅有效地解决了生成的用例数量有限、种类单一且缺乏全面性的问题,同时在一定程度上保留了用例原有的语义结构,导致用例生成不会具有盲目性,且具有较好的针对性。此外,不同于基于单词级别语言模型进行生成预测的方法,解决了基于单词级别语言模型生成测试用例结果中针对单个字符变异性较差的问题。
(2)本发明通过搭建时间卷积网络用例生成模型,学习训练关键载荷中的特征,最终迭代生成符合要求的XSS漏洞测试用例,在一定程度上提高了生成效率,并解决了循环神经网络可能会导致梯度爆炸或梯度消失的问题;
附图说明
图1是本发明的XSS漏洞测试用例数据预处理阶段结构图;
图2是本发明的时间卷积网络语言生成模型构建阶段结构图;
图3是本发明的XSS关键载荷向量划分样例图;
图4是本发明的时间卷积网络层网络设计图;
图5是本发明基于TCN与LSTM语言生成模型的损失函数对比图,其中圆形折线代表LSTM语言生成模型损失函数值,星形折线代表TCN语言生成模型损失函数数值;
图6是本发明基于TCN与LSTM语言生成模型的准确率对比图,其中圆形折线代表LSTM语言生成模型准确率数值,星形折线代表TCN语言生成模型准确率数值;
图7是本发明基于TCN与LSTM语言生成模型所生成测试用例合格率对比图;
具体实施方式
本发明的训练数据由OWASP中的XSS Filter Evasion Cheat Sheet部分攻击语句和互联网上开源的一些关键载荷字典组成。其中,95%的样本在实际应用中被证实有效,因此能够针对XSS漏洞进行发现。
本发明采用了如下的技术方案及实现步骤:
1.数据预处理阶段:确定时间卷积网络语言生成模型的输入与输出变量:以XSS漏洞测试用例为研究对象,对XSS漏洞测试用例中的关键载荷部分进行结构划分与变异操作,分别得到变异后的标签、属性及事件函数,最终通过替换和整理,获得扩充后的关键载荷数据集PM=(pm1,pm2,...,pmz)作为下一个阶段的输入;
针对XSS测试用例中关键载荷Payload的基本形式可以表示为:
Payload=<L,A,E> (19)
其中,L为关键载荷中的HTML标签部分,A为关键载荷中的属性部分,E为关键载荷中的JS事件函数部分。
针对XSS漏洞测试用例,HTML标签通常可以被划为script标签和普通标签两种形式,即L={Ls,Lc}。带有script标签的关键载荷是最简单,同样也是最基本的XSS关键载荷形式。由于目前许多Web应用程序针对script标签设置了各类的防御措施,因此测试人员为了绕过此类防御措施也会使用普通HTML标签进行关键载荷的构造。属性部分包含HTML属性、CSS属性及JS属性三种形式,即A={AH,AC,AJ}。属性包含属性名和属性值,这里的属性部分特指属性名。E为关键载荷中的JS事件函数部分。一般情况下,一条XSS测试用例的关键载荷必定会包含HTML标签部分及JS事件函数部分,属性部分不为必选项。
发明所研究的XSS漏洞模糊测试可以理解为通过JavaScript脚本注入的方式进行测试。针对不同类型标签及属性,其关键载荷形式也存在差异。本发明通过分析HTML代码以及现有针对XSS漏洞的关键载荷结构,设计了依赖于JS事件函数E的插入位置的XSS测试用例关键载荷结构划分规则。以往的测试人员通过逐一字符判断的形式,获取标签、属性和事件函数信息,其过程相对繁琐。通过本发明中对关键载荷进行结构划分的方式,能够将关键载荷中的各类标签、属性和事件函数进行提取,方便后续的变异操作。根据Payload的基本形式可以将关键载荷结构划分为以下几种情况:1)JS事件函数E作为双标签script标签的文本内容,插在script开标签之后,此情况中script标签通常不带属性,对应公式(2)。为了便于绕过针对script标签的防御措施,script标签前面有时会放置其他普通标签LC,对应公式(3)。2)JS事件函数E作为标签LC中属性AH、AC和AJ所对应的值。在一条关键载荷中,也存在着同时具有属性AH和AC的情况,在这种情况中,JS事件函数E作为属性AC的值,属性AC和他的值则作为属性AH值的一部分。以上情况分别对应下列公式(4)、公式(5)以及公式(6)。此外,在关键载荷的构造中也存在CSS属性针对标签选择器做指定样式的情况,在此类情况里一条关键载荷Payload中会存在两个标签LC,此情况对应公式(7)。经过整理,根据各个规则关键载荷的基本形式具体定义如下:
XSSPayload1=LS+E (20)
XSSPayload2=LC+LS+E (21)
XSSPayload3=(LC+AH)+E (22)
XSSPayload4=(LC+AH+AC)+E (23)
XSSPayload5=(LC+AJ)+E (24)
XSSPayload6=(LC+LC+AC)+E (25)
其中,运算符+表示关键载荷中各部分的连接,标签L在公式中的位置以其开标前的出现位置为准。
上述公式对应XSS关键载荷样例如表1所示:
表1对应上述公式的XSS关键载荷样式
基于上述结构划分规则,将关键载荷数据集中的所有标签、属性及事件特征进行提取,可以得到六个代表不同部分的字符串数组,分别代表script标签LS、普通标签LC、HTML属性AH、CSS属性AC、JS属性AJ和JS事件函数E。
在真实场景下,测试人员会通过一系列的手段绕过目标系统的防御机制以实现异常测试用例的注入,因此本发明根据参考这些XSS绕过手段设计数据变异方法,进而实现对XSS关键载荷的数据增强。根据目前已有的XSS漏洞关键载荷及XSS漏洞注入案例分析可得,针对XSS漏洞有效常用且适合于局部变异的绕过方法有以下几种,分别是大小写绕过、编码绕过、双写绕过、添加特殊字符绕过和添加混淆词绕过,以标签LS为例所展示的具体绕过和变异内容如表2所示。
表2以标签LS为例的XSS绕过方法
根据表2中的方法进行基于字符进行变异需要考虑变异的位置,即变异点。因此,本发明在对划分阶段所获取的字符串数组中每一个字符串进行变异时,将字符串中每一个字符所对应的索引作为变异点进行变异。字符串中第一个字符所对应索引为开始索引,最后一个字符所对应索引为结束索引。为了方便后续确定变异点的随机性,需要先根据字符串的开始及结束索引获得变异点的所有组合情况。以i作为循环变量,从指定数量的字符中取i个字符的索引作为一组变异点组合情况。这里字符的指定数量为字符串数组中每一个字符串的长度。根据每一条划分结果的标签、属性及事件函数字符串索引范围,可以逐一获得包含变异点全部情况的组合M,得到公式(8):
其中Ml为变异索引组合数组的长度,H为结束索引。
根据获得的变异索引组合数组M,以及表2中提出的XSS绕过方法对所得到的字符串数组进行变异。在算法描述中,字符串mutationString为待变异字符串,mutationNum为根据索引生成的变异组合数组,针对XSS关键载荷各部分的具体变异算法描述如下:
1、输入字符串mutationString以及数组mutationNum;
2、定义listText用来存储变异后的字符串列表;
3、获取一个满足大于0,小于mutationNum数组长度条件的随机整数,以此作为循环条件决定变异次数。其中,随机整数通过python中numpy库中的randint()函数进行获取;
4、根据变异次数,每一次获取一个满足大于0,小于mutationNum数组长度条件的随机整数,以此作为所选择的变异组合数组索引。本步骤中的随机整数获取方式同上一步骤相同;
5、根据所选择索引所对应的变异排列组合逐一对字符串内字符依次执行变异,直至循环结束。变异操作包括在变异索引处转换字符大小写、替换字符编码形式、进行嵌套操作、添加特殊字符以及添加混淆词;
6、对变异后的字符串列表listText进行去重操作;
7、输出变异后的字符串列表listText。对于上述变异对数据进行增强,可以得到不同部分变异后的字符串列表。根据该列表,通过替换的方式对原有的初始关键载荷数据集进行数据扩充,可以使得数据集的针对性和多元性得到提升。
基于上述变异,可以获得数量更多且形式更丰富的标签、属性及事件函数。根据这些变异后标签、属性及事件函数,通过替换的方式对原有的初始关键载荷数据集进行数据扩充获得新的关键载荷数据集,可以实现数据增强的效果,使得数据集的针对性和多元性得到提升。此步骤最终得到的数据集为关键载荷数据集PM={pm1,pm2,…,pmz}。此数据集将作为下一阶段输入。
2.语言生成模型搭建阶段:设计用于XSS漏洞测试用例生成的语言生成模型,利用时间卷积网络建立联合单词和字符进行编码的用例生成模型。本发明中使用的用例生成模型共分为两部分,分别是编码部分以及模型搭建部分。
编码部分主要是通过对XSS关键载荷中的单词与字符进行联合编码的方式,进行模型输入数据集的构造。为了能够在保存原有的语义结构的同时,保证用例生成具有字符变异性,本发明通过使用对XSS关键载荷语句中的单词与字符进行联合编码的方法完成输入数据集的构造。其中,单词是具有一定含义的,由若干个字符组成的固定字符串,如果对其进行拆分会破坏原有含义。
为了能够在保存原有的语义结构的同时,保证用例生成具有字符变异性,本发明通过使用对XSS关键载荷语句中的单词与字符进行联合编码的方法完成输入数据集的构造。其中,单词是具有一定含义的,由若干个字符组成的固定字符串,如果对其进行拆分会破坏原有含义。
考虑到Web应用程序中针对标签及属性特征的XSS漏洞防御措施较少,针对事件特征的XSS漏洞防御措施较多,因此把上一部分中所获取的变异前和变异后的标签及属性以单词的形式存入词典,将事件分割为字符的形式存入词典。该词典中包含以单词形式存储的标签和属性、被分割为单一字符的事件以及他们所对应的数字。通过词典,可以便于单词和字符向数字形式的转换。需要特别说明的是,因测试人员在进行测试时,会通过尝试闭合关键载荷前其他HTML标签或者不添加闭标签'>'的方式绕过XSS防御措施,因此在针对标签进行编码操作时,本发明将闭标签'>'单独拆分开来以字符的形式进行存储,标签中其他部分照常以单词的形式进行存储。在本发明中强调单词和字符的存储顺序,其原因是为了后文中进行映射转换时能够保证单词的优先级大于字符的优先级,防止字符与单词存在子字符串关系在转换时产生歧义的情况发生。以带有script标签的关键载荷为例,基于XSS关键载荷的单词和字符提取结果如图3所示。
基于以上单词与字符特征,词典生成其与数字一一对应的映射,即按照单词与字符的存储顺序,为每一个单词和字符分配对应的数字作为词典索引。根据词典,能够对由XSS关键载荷所组成的测试用例数据集进行向量化映射转换,将其转换为数字形式,根据之前所设定的词典中单词优先级大于字符优先级的规则,在对数据集进行映射转换时先考虑单词与数字的转换,后考虑字符与数字的转换,使得在对测试用例数据集进行转换的过程中,不会发生由子字符串所带来的歧义造成的转换错误。经过该步骤得到的测试用例数据集为数字形式所表示的文本。
为方便模型的输入,需要提前对数字形式的测试用例数据集进行编码操作。本发明将测试用例生成的整体流程看作是分类工作,即将具有固定长度的种子用例数据看作是输入数据,所预测的字符或者单词对应的数字看作是类别。其中,种子用例数据的获取是从测试用例第一个单词或者字符所对应的数字开始,每次移动固定的长度,在此基础上选取具有固定长度的用例数据。因此,在进行编码操作之前,需要对扩充后的测试用例数据集PN=(pn1,pn2,...,pnz)进行划分,将其划分为种子用例数据集D所预测的单词或字符D'所对应数字的数据集,其表示如下:
D={pno,pno+1,...,pno+l-1} (27)
D'=pno+l (28)
其中,l为固定的数据长度,o为上一个开始索引的位置,其初值为0。
最后,采用独热编码的方式对数据集进行编码转换,将其转换为二进制向量作为模型的输入。独热编码主要是通过将字符和单词所对应的每一个数字看作一个类别,根据每一个种子用例数据的每一个数字,将其数字对应的位置索引设置为1,其余设置为0的方式对数据集进行编码。以此得到网络输入是编码后的两个以二进制向量形式所表示的数据集。
时间卷积网络的拓扑结构分为三层:输入层、隐藏层、输出层,整体网络结构如图4所示;
在该模型中,本发明将时间步设为t,批次大小设置为32。本发明中所使用的时间卷积网络通过将普通卷积替换为因果卷积的方式对序列问题进行处理。在隐藏层中的设计中,本发明共设置3个隐藏层,其滤波器分别设置为32、16、16,卷积核个数设为3,扩张因子分别设为1、2、4,其中每一个隐藏层包含两个相连的一维扩张因果卷积网络和一个ReLu非线性映射函数,隐藏层之间通过使用残差的方式进行连接。
设该模型中共有N个训练样本,设时间卷积网络语言生成模型两个输入分别为X={x1,x2,...,xN}以及Y={y1,y2,...,yn},其中X为独热编码形式的当前关键载荷输入序列,Y为独热编码形式的当前下一个字符或单词序列。时间卷积网络语言生成模型的期望输出表示为G',实际输出表示为G;基于时间卷积网络的XSS漏洞测试用例生成方法计算方式依次为:
②输入层:该层根据指定批次大小输出指定形状向量,则该层的输出为:
uq=xq (29)
其中,uq是针对X的第q个序列的输出,q=1,2,…,v,输出形状为(maxlen,len(dict)),maxlen为种子用例数据的固定长度,len(dict)为单词和字符的总数,xq为输入层中输入向量X的第q个序列;
②隐藏层:每一个隐藏层由两个相连的一维扩张因果卷积网络和一个ReLu非线性映射函数组成,在xt处的因果卷积输出为:
其中,(F*X)代表对序列做卷积操作,F={f1,f2,...,fK}为滤波器,K为滤波器大小,X={x1,x2,...,xN}为输入序列。
扩张卷积的引入是为了网络能对历史信息有记忆,因此在xt处的扩张因子为d的扩张卷积输出为:
其中,F={f1,f2,...,fK}为滤波器,K为滤波器大小,X={x1,x2,...,xN}为输入序列,d为扩张因子。
扩张因子即为卷积核点的间隔数量,针对普通卷积扩张因子一般设置为1,针对本发明中的数据集,模型三个隐藏层中扩张卷积的扩张因子分别被设置为1、2、4。
针对两个相连的一维扩张因果卷积网络所获得的输出向量output,使用relu激活函数进行非线性优化,已知relu函数如公式(14)所表示,即可得隐藏层的输出ho为:
relu(a)=max(0,a) (32)
ho=relu(output) (33)
③输出层:输出层由flatten层和全连接层组成,flatten层用于卷积层和全连接层的过渡,即将多维数据一维扁平化,输出大小为maxlen×len(dict)的一维数组。其次,在此基础上全连接层相当于一个分类器功能,通过激活函数softmax获得输出。本发明将基于字符或单词特征的生成工作看作多分类工作,即将根据所预测的下一个字符或单词看作是针对已获取的样本数据进行分类,首先针对隐藏层的输出ho进行操作。
zj=wj*ho+bj (34)
其中,wj为第j类下特征的权重,bj为第j类下特征的偏置项,通过对特征加权求和可以得到各类别的分数zj。
在模型的训练中,选取交叉熵损失函数用以度量预测值与实际值之间的相似度,可知时间卷积网络语言生成模型的误差为:
其中,g'时间卷积网络的期望输出,g为时间卷积网络的实际输出,N为样本个数。
本发明旨在以较高的生成效率实现具有针对性的XSS漏洞测试用例的生成,并将所生成的测试用例与真实场景相结合以验证其有效性。首先,实验将针对发明中所提出的基于时间卷积网络的用例生成模型与基于LSTM的用例生成模型进行性能对比。经过50个epoch的训练,两个用例生成模型的准确率都呈上升趋势,损失率都呈下降趋势。通过对比可以发现,本发明中所提出的基于时间卷积网络的用例生成模型相较于基于LSTM的用例生成模型整体收敛速度较快,准确率较高且损失率较低,如图5,图6所示。以此可以证明,本发明中搭建的基于时间卷积网络的用例生成模型具有较好的性能,能够较好地针对输入的XSS漏洞测试用例关键载荷特征进行学习训练,并相对准确地进行新的测试用例关键载荷的生成。
其次,将生成的XSS漏洞关键载荷测试用例数据与真实数据包进行结合,判断其是否能针对注入点中的XSS漏洞进行成功挖掘,如能进行成功挖掘,则实验将这类用例视为合格测试用例。在本实验中,分别对三个用例生成模型所生成的3000条XSS漏洞关键载荷测试用例进行提取,并将提取的测试用例放入真实场景中进行测试。其中,这三个用例生成模型分别为基于字符级别的时间卷积网络用例生成模型,基于单词与字符级别的时间卷积网络用例生成模型以及基于单词与字符级别的LSTM用例生成模型。单纯字符级别的用例生成模型和结合单词与字符级别的语言模型在模型收敛速度及损失率上相差不大,因此需要对其有效性及可行性进行评估。将三个模型所生成的关键载荷测试用例嵌入至之前所准备好的数据包模板中,该数据包模板包含能够确定测试页面路径的指定URL。针对以上三个模型所生成的XSS漏洞测试用例合格率对比如图7所示。实验结果表明,基于单词与字符级别的用例生成模型相较于基于字符级别的用例生成模型效果更好,其中基于单词与字符级别的时间卷积网络用例生成模型所生成的XSS漏洞测试用例更加具有有效性,能够针对Web应用程序进行有效的XSS漏洞挖掘。同时,相较于基于单词与字符级别的LSTM用例生成模型所生成的XSS漏洞测试用例,在真实场景中具有更好的表现。
训练数据:
本发明所使用的数据集来源是OWASP中的XSS Filter Evasion Cheat Sheet中的关键载荷语句和互联网上开源的关键载荷字典。其中,95%的样本在实际应用中被证实有效,因此能够针对XSS漏洞进行发现,选取部分训练数据展示如下:
<script>ALErt('TEST')</script>
<SCRIPT>A%0aL%0aert('TEST')</SCRIPT>
?><script>alert('TEST')</script>
<IMG SRC=JaVaScRiPt:alert(‘TEST’)>
/<IMG SRC=/JaVaScRiPt:alert(‘TEST’)>
<META HTTP-EQUIV="refresh"CONTENT="0;URL=http://;URL=javascript:alert('TEST');">
<IFRAME SRC=#onmouseover="alert('TEST')"></IFRAME>
<img src=x onerror=prompt('TEST')>
"><img src=x onerror=prompt('TEST')>
<marquee/onstart=alert('TEST')>
预测数据:
选取部分依据训练数据所产生的预测数据展示如下:
<script>aLErt('TEST')</script>
<script>AlERT('TEST')</script>
<SCRIPT>A%0A%0alert('TEST')</SCRIPT>
<IMG SRC=”javascrI%0apt:alert(‘TEST’);">
<IMG SRC=”J%0aavascR%0aipt:alert(‘TEST’);”>
</ScrIpt><script>alert('TEST')</script>
'><marquee/onstart=alert('TEST')>
//<IMG SRC=”javascript:alert(‘TEST’);”>
'><marquee/onstart=AlErt('TEST')>
<IFRAME SRC="javascrip%0at:alert('TEST');"></IFRAME>。
Claims (1)
1.基于时间卷积网络的XSS模糊测试用例生成方法,其特征在于:
1).数据预处理阶段:确定时间卷积网络语言生成模型的输入与输出变量:以XSS漏洞测试用例为研究对象,对XSS漏洞测试用例中的关键载荷部分进行结构划分与变异操作,分别得到变异后的标签、属性及事件函数,最终通过替换和整理,获得扩充后的关键载荷数据集PM=(pm1,pm2,...,pmz)作为下一个阶段的输入;
针对XSS测试用例中关键载荷Payload的基本形式表示为:
Payload=<L,A,E> (1)
其中,L为关键载荷中的HTML标签部分,A为关键载荷中的属性部分,E为关键载荷中的JS事件函数部分;
针对XSS漏洞测试用例,HTML标签通常被划为script标签和普通标签两种形式,即L={Ls,Lc};带有script标签属性部分包含HTML属性、CSS属性及JS属性三种形式,即A={AH,AC,AJ};这里的属性部分特指属性名;E为关键载荷中的JS事件函数部分;
通过对关键载荷进行结构划分的方式,能够将关键载荷中的各类标签、属性和事件函数进行提取,方便后续的变异操作;根据Payload的基本形式将关键载荷结构划分为以下几种情况:1)JS事件函数E作为双标签script标签的文本内容,插在script开标签之后,此情况中script标签通常不带属性,对应公式(2);为了便于绕过针对script标签的防御措施,script标签前面有时会放置其他普通标签LC,对应公式(3);2)JS事件函数E作为标签LC中属性AH、AC和AJ所对应的值;在一条关键载荷中,也存在着同时具有属性AH和AC的情况,在这种情况中,JS事件函数E作为属性AC的值,属性AC和他的值则作为属性AH值的一部分;以上情况分别对应下列公式(4)、公式(5)以及公式(6);此外,在关键载荷的构造中也存在CSS属性针对标签选择器做指定样式的情况,在此类情况里一条关键载荷Payload中会存在两个标签LC,此情况对应公式(7);经过整理,根据各个规则关键载荷的基本形式具体定义如下:
XSSPayload1=LS+E (2)
XSSPayload2=LC+LS+E (3)
XSSPayload3=(LC+AH)+E (4)
XSSPayload4=(LC+AH+AC)+E (5)
XSSPayload5=(LC+AJ)+E (6)
XSSPayload6=(LC+LC+AC)+E (7)
其中,运算符+表示关键载荷中各部分的连接,标签L在公式中的位置以其开标前的出现位置为准;
基于上述结构划分规则,将关键载荷数据集中的所有标签、属性及事件特征进行提取,得到六个代表不同部分的字符串数组,分别代表script标签LS、普通标签LC、HTML属性AH、CSS属性AC、JS属性AJ和JS事件函数E;
根据目前已有的XSS漏洞关键载荷及XSS漏洞注入案例分析可得,针对XSS漏洞有效常用且适合于局部变异的绕过方法有以下几种,分别是大小写绕过、编码绕过、双写绕过、添加特殊字符绕过和添加混淆词绕过
进行基于字符进行变异需要考虑变异的位置,即变异点;因此,在对划分阶段所获取的字符串数组中每一个字符串进行变异时,将字符串中每一个字符所对应的索引作为变异点进行变异;字符串中第一个字符所对应索引为开始索引,最后一个字符所对应索引为结束索引;以i作为循环变量,从指定数量的字符中取i个字符的索引作为一组变异点组合情况;这里字符的指定数量为字符串数组中每一个字符串的长度;根据每一条划分结果的标签、属性及事件函数字符串索引范围,逐一获得包含变异点全部情况的组合M,得到公式(8):
其中Ml为变异索引组合数组的长度,H为结束索引;
根据获得的变异索引组合数组M,以及XSS绕过方法对所得到的字符串数组进行变异;在算法描述中,字符串mutationString为待变异字符串,mutationNum为根据索引生成的变异组合数组,针对XSS关键载荷各部分的具体变异算法描述如下:
1)、输入字符串mutationString以及数组mutationNum;
2)、定义listText用来存储变异后的字符串列表;
3)、获取一个满足大于0,小于mutationNum数组长度条件的随机整数,以此作为循环条件决定变异次数;其中,随机整数通过python中numpy库中的randint()函数进行获取;
4)、根据变异次数,每一次获取一个满足大于0,小于mutationNum数组长度条件的随机整数,以此作为所选择的变异组合数组索引;
5)、根据所选择索引所对应的变异排列组合逐一对字符串内字符依次执行变异,直至循环结束;变异操作包括在变异索引处转换字符大小写、替换字符编码形式、进行嵌套操作、添加特殊字符以及添加混淆词;
6)、对变异后的字符串列表listText进行去重操作;
7)、输出变异后的字符串列表listText;对于上述变异对数据进行增强,得到不同部分变异后的字符串列表;根据该列表,通过替换的方式对原有的初始关键载荷数据集进行数据扩充,使得数据集的针对性和多元性得到提升;
基于上述变异,获得数量更多且形式更丰富的标签、属性及事件函数;根据这些变异后标签、属性及事件函数,通过替换的方式对原有的初始关键载荷数据集进行数据扩充获得新的关键载荷数据集,实现数据增强的效果,使得数据集的针对性和多元性得到提升;此步骤最终得到的数据集为关键载荷数据集PM={pm1,pm2,…,pmz};此数据集将作为下一阶段输入;
语言生成模型搭建阶段:设计用于XSS漏洞测试用例生成的语言生成模型,利用时间卷积网络建立联合单词和字符进行编码的用例生成模型;使用的用例生成模型共分为两部分,分别是编码部分以及模型搭建部分;
编码部分通过对XSS关键载荷中的单词与字符进行联合编码的方式,进行模型输入数据集的构造;为了能够在保存原有的语义结构的同时,保证用例生成具有字符变异性,通过使用对XSS关键载荷语句中的单词与字符进行联合编码的方法完成输入数据集的构造;其中,单词是具有一定含义的,由若干个字符组成的固定字符串,如果对其进行拆分会破坏原有含义;
把上一部分中所获取的变异前和变异后的标签及属性以单词的形式存入词典,将事件分割为字符的形式存入词典;该词典中包含以单词形式存储的标签和属性、被分割为单一字符的事件以及他们所对应的数字;通过词典,便于单词和字符向数字形式的转换;在针对标签进行编码操作时,将闭标签'>'单独拆分开来以字符的形式进行存储,标签中其他部分照常以单词的形式进行存储;
基于以上单词与字符特征,词典生成其与数字一一对应的映射,即按照单词与字符的存储顺序,为每一个单词和字符分配对应的数字作为词典索引;根据词典,能够对由XSS关键载荷所组成的测试用例数据集进行向量化映射转换,将其转换为数字形式,根据所设定的词典中单词优先级大于字符优先级的规则,在对数据集进行映射转换时先考虑单词与数字的转换,后考虑字符与数字的转换;经过该步骤得到的测试用例数据集为数字形式所表示的文本;
为方便模型的输入,需要提前对数字形式的测试用例数据集进行编码操作;将测试用例生成的整体流程看作是分类工作,即将具有固定长度的种子用例数据看作是输入数据,所预测的字符或者单词对应的数字看作是类别;其中,种子用例数据的获取是从测试用例第一个单词或者字符所对应的数字开始,每次移动固定的长度,在此基础上选取具有固定长度的用例数据;因此,在进行编码操作之前,需要对扩充后的测试用例数据集PN=(pn1,pn2,...,pnz)进行划分,将其划分为种子用例数据集D所预测的单词或字符D'所对应数字的数据集,其表示如下:
D={pno,pno+1,...,pno+l-1} (9)
D'=pno+l (10)
其中,l为固定的数据长度,o为上一个开始索引的位置,其初值为0;
最后,采用独热编码的方式对数据集进行编码转换,将其转换为二进制向量作为模型的输入;独热编码主要是通过将字符和单词所对应的每一个数字看作一个类别,根据每一个种子用例数据的每一个数字,将其数字对应的位置索引设置为1,其余设置为0的方式对数据集进行编码;以此得到网络输入是编码后的两个以二进制向量形式所表示的数据集;
时间卷积网络的拓扑结构分为三层:输入层、隐藏层、输出层;
将时间步设为t,批次大小设置为32;使用的时间卷积网络通过将普通卷积替换为因果卷积的方式对序列问题进行处理;在隐藏层中的设计中,共设置3个隐藏层,其滤波器分别设置为32、16、16,卷积核个数设为3,扩张因子分别设为1、2、4,其中每一个隐藏层包含两个相连的一维扩张因果卷积网络和一个ReLu非线性映射函数,隐藏层之间通过使用残差的方式进行连接;
设该模型中共有N个训练样本,设时间卷积网络语言生成模型两个输入分别为X={x1,x2,...,xN}以及Y={y1,y2,...,yn},其中X为独热编码形式的当前关键载荷输入序列,Y为独热编码形式的当前下一个字符或单词序列;时间卷积网络语言生成模型的期望输出表示为G',实际输出表示为G;基于时间卷积网络的XSS漏洞测试用例生成方法计算方式依次为:
①输入层:该层根据指定批次大小输出指定形状向量,则该层的输出为:
uq=xq (11)
其中,uq是针对X的第q个序列的输出,q=1,2,…,v,输出形状为(maxlen,len(dict)),maxlen为种子用例数据的固定长度,len(dict)为单词和字符的总数,xq为输入层中输入向量X的第q个序列;
②隐藏层:每一个隐藏层由两个相连的一维扩张因果卷积网络和一个ReLu非线性映射函数组成,在xt处的因果卷积输出为:
其中,(F*X)代表对序列做卷积操作,F={f1,f2,...,fK}为滤波器,K为滤波器大小,X={x1,x2,...,xN}为输入序列;
扩张卷积的引入是为了网络能对历史信息有记忆,因此在xt处的扩张因子为d的扩张卷积输出为:
其中,F={f1,f2,...,fK}为滤波器,K为滤波器大小,X={x1,x2,...,xN}为输入序列,d为扩张因子;
扩张因子即为卷积核点的间隔数量,三个隐藏层中扩张卷积的扩张因子分别被设置为1、2、4;
针对两个相连的一维扩张因果卷积网络所获得的输出向量output,使用relu激活函数进行非线性优化,已知relu函数如公式(14)所表示,即可得隐藏层的输出ho为:
relu(a)=max(0,a) (14)
ho=relu(output) (15)
③输出层:输出层由flatten层和全连接层组成,flatten层用于卷积层和全连接层的过渡,即将多维数据一维扁平化,输出大小为maxlen×len(dict)的一维数组;其次,在此基础上全连接层相当于一个分类器功能,通过激活函数softmax获得输出;将基于字符或单词特征的生成工作看作多分类工作,即将根据所预测的下一个字符或单词看作是针对已获取的样本数据进行分类,首先针对隐藏层的输出ho进行操作;
zj=wj*ho+bj (16)
其中,wj为第j类下特征的权重,bj为第j类下特征的偏置项,通过对特征加权求和得到各类别的分数zj;
在模型的训练中,选取交叉熵损失函数用以度量预测值与实际值之间的相似度,可知时间卷积网络语言生成模型的误差为:
其中,g'时间卷积网络的期望输出,g为时间卷积网络的实际输出,N为样本个数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111660103.7A CN114297079B (zh) | 2021-12-30 | 2021-12-30 | 基于时间卷积网络的xss模糊测试用例生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111660103.7A CN114297079B (zh) | 2021-12-30 | 2021-12-30 | 基于时间卷积网络的xss模糊测试用例生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114297079A true CN114297079A (zh) | 2022-04-08 |
CN114297079B CN114297079B (zh) | 2024-04-02 |
Family
ID=80974079
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111660103.7A Active CN114297079B (zh) | 2021-12-30 | 2021-12-30 | 基于时间卷积网络的xss模糊测试用例生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114297079B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115879115A (zh) * | 2022-12-13 | 2023-03-31 | 北京水木羽林科技有限公司 | 一种Web应用安全漏洞的检测方法及系统 |
CN116804971A (zh) * | 2023-08-22 | 2023-09-26 | 上海安般信息科技有限公司 | 一种基于信息熵的模糊测试方法 |
CN116933734A (zh) * | 2023-09-15 | 2023-10-24 | 山东济矿鲁能煤电股份有限公司阳城煤矿 | 盾构机刀具故障智能诊断方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160110547A1 (en) * | 2014-10-21 | 2016-04-21 | Veracode, Inc. | Systems and methods for analysis of cross-site scripting vulnerabilities |
CN108830083A (zh) * | 2018-05-24 | 2018-11-16 | 东南大学 | 一种基于输出点语境的xss漏洞检测参数自动生成方法 |
CN111797407A (zh) * | 2020-09-08 | 2020-10-20 | 江苏开博科技有限公司 | 一种基于深度学习模型优化的xss漏洞检测方法 |
WO2021114745A1 (zh) * | 2019-12-13 | 2021-06-17 | 华南理工大学 | 一种基于词缀感知的社交媒体命名实体识别方法 |
CN113596007A (zh) * | 2021-07-22 | 2021-11-02 | 广东电网有限责任公司 | 一种基于深度学习的漏洞攻击检测方法和设备 |
-
2021
- 2021-12-30 CN CN202111660103.7A patent/CN114297079B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160110547A1 (en) * | 2014-10-21 | 2016-04-21 | Veracode, Inc. | Systems and methods for analysis of cross-site scripting vulnerabilities |
CN108830083A (zh) * | 2018-05-24 | 2018-11-16 | 东南大学 | 一种基于输出点语境的xss漏洞检测参数自动生成方法 |
WO2021114745A1 (zh) * | 2019-12-13 | 2021-06-17 | 华南理工大学 | 一种基于词缀感知的社交媒体命名实体识别方法 |
CN111797407A (zh) * | 2020-09-08 | 2020-10-20 | 江苏开博科技有限公司 | 一种基于深度学习模型优化的xss漏洞检测方法 |
CN113596007A (zh) * | 2021-07-22 | 2021-11-02 | 广东电网有限责任公司 | 一种基于深度学习的漏洞攻击检测方法和设备 |
Non-Patent Citations (2)
Title |
---|
王丹;顾明昌;赵文兵;: "跨站脚本漏洞渗透测试技术", 哈尔滨工程大学学报, no. 11, 25 November 2017 (2017-11-25) * |
程诚;周彦晖;: "基于模糊测试和遗传算法的XSS漏洞挖掘", 计算机科学, no. 1, 15 June 2016 (2016-06-15) * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115879115A (zh) * | 2022-12-13 | 2023-03-31 | 北京水木羽林科技有限公司 | 一种Web应用安全漏洞的检测方法及系统 |
CN115879115B (zh) * | 2022-12-13 | 2024-03-29 | 北京水木羽林科技有限公司 | 一种Web应用安全漏洞的检测方法及系统 |
CN116804971A (zh) * | 2023-08-22 | 2023-09-26 | 上海安般信息科技有限公司 | 一种基于信息熵的模糊测试方法 |
CN116804971B (zh) * | 2023-08-22 | 2023-11-07 | 上海安般信息科技有限公司 | 一种基于信息熵的模糊测试方法 |
CN116933734A (zh) * | 2023-09-15 | 2023-10-24 | 山东济矿鲁能煤电股份有限公司阳城煤矿 | 盾构机刀具故障智能诊断方法 |
CN116933734B (zh) * | 2023-09-15 | 2023-12-19 | 山东济矿鲁能煤电股份有限公司阳城煤矿 | 盾构机刀具故障智能诊断方法 |
Also Published As
Publication number | Publication date |
---|---|
CN114297079B (zh) | 2024-04-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Sun et al. | Deep learning and visualization for identifying malware families | |
Yang et al. | Detecting malicious URLs via a keyword-based convolutional gated-recurrent-unit neural network | |
Li et al. | A hybrid malicious code detection method based on deep learning | |
Zhao et al. | Generating natural adversarial examples | |
Wang et al. | A deep learning approach for detecting malicious JavaScript code | |
CN114297079A (zh) | 基于时间卷积网络的xss模糊测试用例生成方法 | |
Liu et al. | Security analysis and enhancement of model compressed deep learning systems under adversarial attacks | |
CN113961922B (zh) | 一种基于深度学习的恶意软件行为检测与分类系统 | |
CN107516041A (zh) | 基于深度神经网络的WebShell检测方法及其系统 | |
CN114048464B (zh) | 基于深度学习的以太坊智能合约安全漏洞检测方法及系统 | |
CN111783442A (zh) | 入侵检测方法、设备和服务器、存储介质 | |
CN111600919B (zh) | 智能网络应用防护系统模型的构建方法和装置 | |
Yang et al. | Detecting stealthy domain generation algorithms using heterogeneous deep neural network framework | |
Das et al. | Defeating SQL injection attack in authentication security: an experimental study | |
Yu et al. | Detecting malicious web requests using an enhanced textcnn | |
CN113691542A (zh) | 基于HTTP请求文本的Web攻击检测方法及相关设备 | |
CN112651025A (zh) | 一种基于字符级嵌入编码的webshell检测方法 | |
CN116432184A (zh) | 基于语义分析和双向编码表征的恶意软件检测方法 | |
Muslihi et al. | Detecting SQL injection on web application using deep learning techniques: a systematic literature review | |
Zhu et al. | CCBLA: a lightweight phishing detection model based on CNN, BiLSTM, and attention mechanism | |
Amouei et al. | Rat: Reinforcement-learning-driven and adaptive testing for vulnerability discovery in web application firewalls | |
Assefa et al. | Intelligent phishing website detection using deep learning | |
Cinelli et al. | Automatic event identification and extraction from daily drilling reports using an expert system and artificial intelligence | |
Liu et al. | A practical black-box attack on source code authorship identification classifiers | |
Hu et al. | Cross-site scripting detection with two-channel feature fusion embedded in self-attention mechanism |
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 |