基于特征集合的XSS漏洞安全研究

2018-11-24 02:28齐晓霞丁黄法王琦进
关键词:特征

齐晓霞,丁黄法,王琦进

(安徽新华学院信息工程学院, 安徽 合肥 230088)

Web 2.0时代网站之间的交互越发频繁,而多数Web程序并不安全,存在多种漏洞。2011年6月,新浪微博在1h内有超过3万用户遭受跨站脚本XSS(cross site scripting)漏洞攻击,其原因为代码过滤不严所致[1]。2013年,在OWASP统计的十大Web安全漏洞中,XSS位居第三[2]。作为Web应用程序中最为普遍和流行的安全漏洞,XSS被越来越多的研究者所关注,XSS的研究也有着较高的意义与价值。

近年来,用于防范Web应用程序漏洞的各种安全工具逐渐被开发。文献[3]结合XSS网络钓鱼攻击的特点,提出了基于正则匹配的XSS网络钓鱼攻击检测方法,总结了攻击所需的正则表达式集;文献[4]从Node.js的运行机制出发,对开发及部署在Node.js上的Web性能进行综合考虑,设计实现了一个为Node.js Web应用提供XSS和CSRF防御的系统;文献[5]提出采用HTML和Ajax技术搭建Web应用,通过Web应用总结出CSRF攻击测试,并且给出了CSRF攻击防御手段。本文分析了XSS的漏洞因素、漏洞类型以及漏洞方式,研究了网络爬虫爬取动态网页的具体过程,通过实验将网页划分子块,利用特征集合对网页是否存在XSS漏洞进行判断,以测试网页的安全性。

1 方法概述

XSS是由于Web应用程序对用户输入过滤不足而产生的。其主要原因有:1)Web浏览器设计不安全,浏览器可以解析执行JavaScript等脚本语言,但不能判断其是否含有恶意代码[6];2)Web应用程序在执行输入输出程序时,程序可能会被植入恶意代码;3)跨站脚本的触发方式比较简单,只须向HTML代码中注入脚本便可利用CSS、Flash等众多方式执行攻击;4)Web程序开发过程中自身安全意识不足,程序开发过程中漏洞较多[7]。

浏览器能够执行HTML/脚本语言,然而当HTML/脚本语言被XSS攻击后,就改变了原本的客户端执行方式,使得用户信息被劫持和获取。XSS攻击方式主要有以下几种。

1)利用标签语言。用户可随意引入“<>”等标记并在其中放入属性值[8],如改变HTML语言标签的属性值。

2)对标签属性值转码。HTML属性值支持ASCII码特性,ASCII码将字符作为数字来表示[9]

3)拆分组合代码。将一个代码拆分为几个组合[10]。如将document.write(‘’)替换,为引入一个变量z。

2 XSS漏洞检测系统

2.1 系统设计

在分析XSS漏洞因素及攻击方式的基础上,本文设计了一个搜索引擎的网络爬虫,进行网页源码的信息获取,检验XSS漏洞[11]。设定初始URL,网络爬虫在网页中从初始URL开始不断提取新的URL,提取到的新URL按照FIFO顺序放入爬虫队列,新URL按照队列顺序依次取出,下载对应的页面。此后,该过程不断重复,直到爬虫队列汇总不含有URL或者达到页面最大深度。传统爬虫爬取一个URL流程如图1所示。

图1 传统的URL爬取流程

由于网络资源过多,不能对每个网页进行爬取,另外还须考虑不同网页资源的重要程度,因此设计了一种对网页链接抓取的爬虫架构。在爬虫过程中,针对每一个URL,都有一个指向该网页的其他网页的总数,称为HitNumber。爬虫每访问一个新网页,都会逐一检查该网页中的所有超链接,如果链接里有指向已访问的网页,那么这个已访问过的网页的HitNumber值加1,这样HitNumber值越大,被引用的次数越多。同时爬取还须对主机做一定限制,如限定域名、限定爬取层数、限定爬取语言等。

由于网页之间的引用不能只看HitNumber值,而是将引用网页的链接数作为权值。权值采用Google的“随机冲浪”模型作为链接权值的计算方式,如式(1)。

(1)

式中:W代表网页的权值;L代表此网页是否存在链接;i,j为其中网页的序列号;d代表访问网页的平均次数。选择合适的数值,递归使用式(1),即可得到理想的网页链接权值。

考虑网页内容的重要性,系统设计的模型如下:

1)随机选取初始网页;

2)浏览该网页,从该网页的超链接中随机选取一个页面继续浏览;

3)沿着超链接前进一定数目的网页后,充分爬取该网页主题,然后随机选择一个网页爬取,重复第2)、3)步。

网页爬虫处理流程如图2所示。

图2 网页爬虫处理流程

2.2 检测处理

爬虫爬取网页后需要对所爬取到的资源利用正则处理的方法将漏洞特征集合聚集在一起。系统检测处理流程如图3所示。

图3 检测处理流程

Step1,页面解析模块。将存取的页面划分小块,检测相应模块中的动态内容。由于过滤不能完全滤掉用户的输入内容,因此对内容也要进行模块划分。用户输入的动态内容主要有HTTP头、URL、POST数据、Cookie值、查询关键字等。其中,HTML划分为head、body、front等。一般body里存放动态交互的内容;JavaScript内容中含有属性值和动态内容,JavaScript事件处理函数onClick、onLoad等也存有动态内容。

Step2,特征集合模块。网页中的4组特征:关键词特征、脚本特征、URL特征和请求特征。

1)关键词特征:统计关键词的使用频率,若部分关键词的使用频率明显高于其他关键词,则定义其具有“威胁”等级。另外研究发现,正常页面和受XSS攻击页面中某些方法的频率也完全不同,如eval()方法在恶意代码中使用频率要比正常页面高很多。

2)脚本特征:包含字符串的最大长度、长字符串的个数、编码特征的最大比率以及字符串串联的个数。相比正常代码,攻击者通过修改JavaScript脚本绕过检测,编写的脚本恶意代码可读性差、辨识度低。当一个单独字符串长度过长时,网页有可能是恶意的。

3)URL特征:包含URL最大长度、长链接个数以及链接中编码字符的最大百分比等。在反射型XSS中,恶意链接会发布一个从定向到指定网页的应用链接,链接里含有一些JavaScript代码,一旦链接被请求,攻击和传播会同时发生。

4)请求特征:包含Cookie请求、HTTP请求。CSRF漏洞产生一方面是开发者编写的Web应用程序存在漏洞导致被恶意利用,另一方面Cookie和HTTP中含有大量有用的信息,Web验证这些信息时存在漏洞。在判断是否在一定时间内频繁请求或者跨站请求时,检测Cookie和HTTP信息尤为重要。

Step3,分析模块。将特征集合加入黑名单,以此来检测网页是否为漏洞网页。黑名单过滤即列出了特征集合中所具有的特征对象,将其与网页进行正则匹配。根据“一切输入都是有害的”原则,对用户输入的内容严格过滤。执行匹配原则如下:

1)动态内容处于页面源代码中,需要对出现在源码中的未信任字符转义;

2)对出现的URL值设置预定检测模板;

3)判断HTTP请求来源中是否存在不安全信息。

3 实验结果与分析

在Java 和Python上测试数据,系统资源配置如表1所示。

表1 测试系统资源配置表

3.1 Java程序测试

系统设计的Java测试程序如图4所示。它包含了输入URL框和下拉选择框,可以选择GET、POST、COOKIE等;下方是爬行状态,可以统计爬行数目和漏洞数目;最下方的是输入框,输入的是爬行过程中输出有XSS漏洞的网页。实验模拟的XSS漏洞代码如下:

' />

模拟测试后的结果(GET方式)如图5所示。

图4 测试图界面

图5 测试输出

输入框上的网页搜索查询是按照网页爬虫依次递进查重,先用爬虫算法查出第1层爬虫中的链接,然后依次向下。如下面所示的超链接“http://image.XXX.com/search/index?tn=baiduimage&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8&word=%E5%AE%A0%E7%89%A9word=%E5%AE%A0%E7%89%A9”其所爬取的下级网页所产生的表格是对数据漏洞数和危险程度进行的评级显示。通过扫描可直观表现网页安全,还可以对下级网页生成报告,掌握网站的整体安全性。

3.2 Python程序测试

用Python程序测试对比操作。程序在控制台下运行,通过匹配字典来判断是否存在XSS漏洞。测试采用HTTP请求的GET方式,测试结果如图6所示。

Python测试用于暴力注入一个参数,然后从指定的词库加载多种有效载荷进行注入,并且使用指定载荷和扫描检查这些容易受到XSS漏洞影响的参数。其中wordlist.txt、wordlist-small.txt、wordlist-medium.txt和wordlist-huge.txt是它的4个攻击载荷,包含了基本的XSS检查和全面的XSS检查。图6中选定需要检测的网址将参数XSS暴露给工具,工具开始检测参数(默认的wordlist.txt),攻击载荷扫描并产生结果,分析存在XSS的漏洞风险。

图6 Python测试

3.3 测试结果

测试网页采用开源网站源代码,内置10个XSS漏洞,其中:反射型XSS漏洞3个;基于DOM的XSS漏洞5个;与蠕虫结合的XSS漏洞2个。使用Java程序和Python程序测试结果如表2所示。

表2 XSS测试结果

测试结果显示,Java程序进行网页特征爬取虽然耗时较Python程序多,但能检索出多数漏洞,Python程序只能检测出反射型XSS漏洞。Java程序可对网站中各个细小方面进行爬取,使用特征提取可有效地识别条件,对于条件匹配的可视作XSS漏洞匹配。由于网络上的XSS漏洞不断更新,以往的判断方法可能会误判一些新出现的XSS漏洞;但本文方法不同于以往的XSS匹配,使用特征集合能有效地判断网页是否异常。

4 结束语

Web2.0时代XSS漏洞已经成为网络中不可忽视的攻击方式。本文主要研究了网页爬虫的爬取方式,提出了用特征集合来检测分析爬取下来的动态网页内容,通过对系统源代码扫描检测网页是否存在漏洞。该方法可以在短时间内检测出系统中的XSS漏洞,但是基于特征的检测方法可能会存在识别错误,有些网页疑似存在XSS漏洞但其实没有。对于这些问题,解决方法是更加具体化特征集合,加强匹配规则的严格程度。下一步将对蠕虫XSS以及一些变种XSS进行研究,提出更加具体的特征集合解决方案。

猜你喜欢
特征
Learning from Arthur
根据方程特征选解法
离散型随机变量的分布列与数字特征
山荷叶性状特征及显微特征研究
新型冠状病毒及其流行病学特征认识
月震特征及与地震的对比
被k(2≤k≤16)整除的正整数的特征
抓特征解方程组
不忠诚的四个特征
公共文化服务体系的四大特征