基于网络爬虫和Fuzzing的漏洞挖掘检测工具

2016-11-12 07:50裘志庆宦飞
微型电脑应用 2016年3期
关键词:爬虫漏洞网页

裘志庆,宦飞

基于网络爬虫和Fuzzing的漏洞挖掘检测工具

裘志庆,宦飞

如今,随着Web技术的高速发展和互联网的大众化,Web安全领域受到了越来越多的威胁。跨站脚本攻击(Cross-site Scripting ,缩写XSS)是这些安全隐患中危害性比较大,存在范围比较广的一种漏洞攻击。目前已有的XSS漏洞检测挖掘工具和技术还不够完善,存在检测速度较慢、漏报率高等缺点。研究设计了一款基于网络爬虫和Fuzzing模糊技术的漏洞挖掘检测工具。其中对于网络爬虫进行了大幅度的效率优化。并与当前现有的漏洞挖掘工具进行测试对比,证明该工具可以高效的进行漏洞挖掘。

网页前端安全;漏洞挖掘;跨站脚本攻击;模糊测试

0 引言

随着Web技术的高速发展和互联网的大众化,Web安全领域受到了越来越多的威胁。随着Web技术的不断发展、信息化建设的日渐成熟,在电子商务等领域Web应用平台正在得到越来越多的应用,以协同的工作环境、社交网络服务等为代表的Web技术,在很大程度上正在改变人们工作和交流的方式。不过,这些新技术的发展,一方面使商业活动更加方便地发展,但与此同时也带来了巨大的安全隐患。跨站脚本攻击(Cross-site Scripting,XSS)是这些安全隐患中危害性比较大,存在范围比较广的一种漏洞攻击。目前已有的XSS漏洞检测挖掘工具和技术还不够完善,存在检测速度较慢、漏报率高等缺点[1]。

现有的工具如 Acunetix Web Vulnerability Scanner,Paros,xenotix等软件都可以扫描检测Web应用程序存在的XSS漏洞。不过这些软件在功能上均存在一些不足。如Acunetix Web Vulnerability Scanner 对框架式的Web应用程序及含参超链的分析存在着不足。Paros 3.2.13针对可疑点测试时所使用payload较少而且缺乏可定制性,测试不完全,易造成漏报。而xenotix只能针对一个URL进行分析,而且需要人工干预(查看页面是否有对话框弹出),因此功能比较局限。

针对以上问题,本文提出了一种基于漏洞挖掘检测模型设计的工具(下称MJ Vulnerability Mining Tool),包括网络爬虫模块和漏洞扫描模块。它将对多种前端漏洞进行扫描,会对一些可能出现XSS漏洞的切入点进行分析处理。在爬虫部分,针对漏洞挖掘系统的需求进行了优化,省去了很多不必要的页面的爬取,节省了时间和系统资源。在漏洞挖掘部分,使用了自动与人工判断相结合,亦即Fuzzing技术,取得了效率和准确性的平衡。相比于 Acunetix Web Vulnerability Scanner,Paros等工具,降低了漏报率。

1 系统架构

系统架构如图1所示:

图1 MJ Vulnerability Mining Tool的系统架构

包括爬虫子系统、测试集生成子系统、测试集、Fuzz子系统四部分组成。出于对效率的考虑,子系统都使用了多线程。

爬虫子系统(下称MJ Crawler)包含了搜索器,用来进行URL的检索和提取。页面下载器,用来发送HTTP请求并且接收网页的响应数据。URL筛选器,对不属于挖掘范围的URL进行过滤,提高整体效率。

测试集生成子系统主要是通过一个既定的规则库来对爬虫爬取的URL进行一个分类,生成对应的测试集。

测试集子系统包含两个测试集。分别为URL重定向测试集、反射型XSS测试集,分别对应了两种不同的漏洞。

Fuzz子系统则是非常关键的一个部分,因为它对于挖掘的结果有着最为直接的影响。这里对于不同的测试集有不同的Fuzz系统。

2 爬虫子系统

网络爬虫(Crawler)是指通过网页中的超链接地址来遍历寻找网页的程序,它从网站的某一个页面开始(通常是主页),读取网页的内容,检索出网页中的所有超链接地址,然后将这些链接地址加入队列中,寻找下一个网页,如此一直循环下去,直到便利抓取这个网站的所有网页。爬取网络的策略大致分为两种:深度优先和广度优先[2]。

2.1模块结构

页面获取模块:读入起始URL,然后开始搜索。搜索完成后发送GET/POST请求数据,将相关的response下载下来。一般通过多线程实现以提高运行效率。

页面分析模块:得到下载下来的response,对其进行分析,将页面中所包含的链接提取出来。

链接过滤模块:分析页面分析中提取到的链接信息,例如删除重复URL、无关URL等。

链接队列模块:包含一个由URL组成的队列。

2.2页面分析

对于Web页面的分析是整个爬虫流程的重点,如图2所示:

图2 爬虫的页面分析部分流程图

常用的方法是在服务器返回的HTML响应中查找超链接标签。缺点在于效率不高,而且可能无法正确处理表单,对Web的页面的分析产生偏差或者是错误。而本文设计的工具在分析Web页面时通过正则表达式来匹配,以匹配出需要的信息,无论从效率还是准确性的角度上来说都更胜一筹。

例如在处理这类链接时,使用如下的正则表达式:

在提取出该标签中的URL后,再进一步对其进行处理将其转换为绝对路径。然后需要对这个绝对路径进行一个过滤操作,将不属于需要挖掘的站点的URL过滤掉。对于页面中的表单同样采取自定义的正则表达式进行处理从而获取所需要的数据。

标签

表单的处理

(1)提取整个表单内容;

String exp =

"(\s*?form(|([^>]*?)>))(.*?)<\s*?/\s*?form\s*?>";

Regex regex = new

Regex(exp,Regex.Options.IgnoreCase|RegexOptions.Compiled);

MatchCollection col = regex.Matches(response);

(2)分析获取form中的属性值

String action =

"action\s*?=\s*?([’”]?)([^\1]*?)(\1)([\s>])";

String method =

"method\s*?=\s*?([’”]?)([^\1]*?)(\1)([\s>])";

(3)获取表单中的参数名称,保存获得的数据

String input =

"\s*?input\s.*?type\s*?=\s*?([’"]?)([^\1]*?)\1(|\s.*?>)";

String name =

"name\s*?=\s*?([’"]?)([^\1]*?)(\1)([\s>])";

String value =

"value\s*?=\s*?([’"]?)([^\1]*?)(\1)([\s>])";

2.3效率优化

MJ Crawler针对漏洞挖掘系统的需求进行了优化,省去了很多不必要的页面的爬取。所以节省了不少的时间和系统资源,从而使运行时间更短。更重要的是,爬取的结果更符合漏洞挖掘系统的需求。从而从爬取的结果中成功发现了一些漏洞。而在原来的BlueLeech爬虫中,爬取的静态页面比较多(html,jpg,png等等网页资源文件)而漏洞挖掘需要的URL(包含http链接的,包含网页参数,和包含post请求的)则比较少,所以从中也没有能够发现XSS漏洞。

3 反射型XSS漏洞挖掘Fuzz子系统

反射型XSS漏洞,主要是指一些基于反射,或者是不能长久保存的漏洞。当服务器端通过脚本代码生成了页面,并且为Web客户端所使用,向用户提供数据时,这一类的漏洞就会出现[3]。如果用户数据作为参数被传递到服务器中,但服务器端既没有对这些数据进行有效性验证,又没有进行HTML实体编码,那么一些污染的数据就可以作为代码被解释执行[4]。

在现实世界的Web应用程序中存在的XSS漏洞,有75%左右的漏洞属于这种情形。这种漏洞的利用,需要包含一段脚本代码(JavaScript),然后服务器将这些代码反射到请求的客户端运行,所以它被称作反射型XSS。通过一个单独的请求响应执行和传送攻击有效载荷[5]。这种XSS漏洞的利用方式有很多种。最简单的一种攻击,攻击者可以通过脚本,获得合法用户的会话令牌。当获得用户令牌后,攻击者就可以伪装成用户使用该令牌登录,使用该用户的服务,访问该用户的数据等等[6]。

3.1工作流程

如图3所示:

图3 反射型XSS漏洞挖掘流程图

对于一条URL,先针对每个不同的参数,生成相应的随机字符串。然后发送一个HTTP请求,在response中搜索是否存在随机字符串。如果存在,则进一步验证特殊字符有没有被过滤。如果类似于引号,大于小于号的符号没有被过滤,那么已经可以初步认为该站点存在反射型的XSS漏洞了。接下来会进一步用一组定义好的通用payload进行替换,如果在response能检出payload,那么可以确定存在XSS漏洞。如果没有检测出,那么交由人工判断。

在这里,如果单纯靠人工判断,那么需要花费比较多的人力,这样程序执行的效率会受到影响。而如果单纯使用通用的payload进行自动替换,那么虽然可以实现漏洞挖掘的全自动化,节省人力,提高效率,但是在调试的过程中,发现各个网站,甚至是一个网站的不同页面,对特殊字符的过滤方法都不尽相同,这样的话,就很难找到一份通用的payload,对于每一类的过滤方法都能精确的检测。这样就有可能产生大量的漏报。所以,最佳的方法是自动与人工判断相结合,亦即Fuzzing技术,可以取得效率和准确性的平衡[7][8]。

在实际执行过程中,将执行如下步骤:

1)选取探测字符串,输入Fuzz子系统并对比输出

2)对探测字符串进行注入点分析及变换,如表1所示:

表1 注入点及说明

模拟XSS攻击者对于不同的注入点进行探测,输入Fuzz子系统并对比输出

3)对Payload进行变形,模拟XSS攻击者试图绕过网站的字符过滤系统,输入Fuzz子系统并对比输出

4)对Payload进行编码转换(上述Payload变形的第二部分),模拟XSS攻击者的行为,输入Fuzz子系统并对比输出

3.2注入点分析

3.3Payload模式

在检测到注入点未进行某些特殊字符的过滤后,可以进行Payload的替换尝试[9]。在本工具中,预置了以下payload模式如表2所示:

表2 Payload变形及说明

4 测试

本章主要给出MJ Vulnerability Mining Tool的实际测试结果,并且与其他知名漏洞挖掘工具做横向对比。分别用本工具,Acunetix Web Vulnerability Scanner和Paros对2个大型门户网站进行了扫描,并且分析了结果。

4.1测试环境

CPU: Intel Pentium E5800 3.20GHz

内存:4GB

操作系统:Windows XP SP3

Java版本:JDK 1.7

网络环境:SJTU校园网

4.2网络爬虫测试

对比开源爬虫工具BlueLeech和自行编写的爬虫MJ Crawler,如表3所示:

表3 BlueLeech和MJ Crawler对比

使用BlueLeech爬虫系统,速度较慢。爬到的结果中重复的URL比较多,静态的页面较多,相对来说有利用价值的比较少。使用BlueLeech爬取网站时,速度较慢。爬取新浪网站(www.sina.com.cn)时耗费时间1天10小时,爬取的URL结果大小多达136.5MB,但是当使用自己编写的URL筛选器过滤后,有效的URL(可能含有XSS漏洞的网页)仅为38.6MB。有效的结果比例仅为28.3%,效率比较低。而在上述有效的URL中,最终真正发现的漏洞数为零。

根据漏洞挖掘系统的需求编写了爬虫MJ Crawler精简了整个漏洞挖掘系统中不需要的部分(比如下载页面,存入磁盘等操作)。爬取新浪网站的时间缩短为11小时。爬取的URL结果为1,082KB,有效的URL为839KB。有效结果比例高达76.8%。最终发现的漏洞数为11个。

4.3漏洞挖掘工具测试

本节给出了MJ Vulnerability Mining Tool的实际测试结果,并且与其他知名漏洞挖掘工具做横向对比。分别用本工具,Acunetix Web Vulnerability Scanner和Paros对2个大型门户网站进行了扫描,并且分析了结果。

和讯网

使用MJ Vulnerability Mining Tool,对cn.yahoo.com进行了漏洞挖掘。耗时3小时18分钟,测试了5993个有效URL。最终发现漏洞5个,其中3个为URL重定向漏洞,2个为反射型XSS漏洞。经人工验证后,有效URL漏洞为2个,有效反射型XSS漏洞为1个。

作为比较,使用Acunetix Web Vulnerability Scanner 8 同样对www.hexun.com做了测试。测试模式设定为XSS,测试的站点勾选了www.hexun.com的所有子站点。经过测试后,WVS并未能找出漏洞。使用Paros进行扫描,最后并未发现XSS漏洞和URL重定向漏洞,如表4所示:

表4 对于和讯网网站的漏洞挖掘结果对比

新浪

使用MJ Vulnerability Mining Tool,对www.sina.com.cn进行了漏洞挖掘。耗时15小时7分钟,测试了20513个有效URL。最终发现漏洞11个,其中6个为URL重定向漏洞,5个为反射型XSS漏洞。经人工验证后,有效URL漏洞为4个,有效反射型XSS漏洞为3个。

作为比较,使用Acunetix Web Vulnerability Scanner 8 同样对cn.yahoo.com做了测试。www.sina.com.cn进行测试时,测试开始约5分钟后,程序处于假死状态,等待2天后扫描仍未完成,因此认为对此网站的扫描无法完成。使用Paros进行扫描,发现了3个XSS反射性漏洞,经过验证,有效的漏洞数为2个,如表5所示:

表5 对于新浪网站的漏洞挖掘结果对比

以上给出了MJ Vulnerability Mining Tool的实际测试结果。通过上述测试与对比,可以发现在相同的硬件条件下,MJ Vulnerability Mining Tool在挖掘的漏洞数量上占有一定的优势,不过在测试过程中,WVS在扫描新浪网站时出现了卡死的状况,重复数次均未解决。而使用本工具扫描时,资源占用(包括内存占用率和CPU占用率)都比较小,而使用WVS时,资源占用较大,这也是MJ Vulnerability Mining Tool的优点之一。

5 总结

本文对漏洞挖掘工具MJ Vulnerability Mining Tool的核心内容做了详细介绍。包括爬虫模块、反射型XSS漏洞挖掘模块。之后给出了MJ Vulnerability Mining Tool的实际测试结果。可以发现在相同的硬件条件下,MJ Vulnerability Mining Tool在挖掘的漏洞数量上占有一定的优势,使用本工具扫描时,资源占用(包括内存占用率和CPU占用率)都比较小。

在爬虫部分,针对漏洞挖掘系统的需求进行了优化,省去了很多不必要的页面的爬取。所以节省了不少的时间和系统资源,从而使运行时间更短。更重要的是,爬取的结果更符合漏洞挖掘系统的需求。从而从爬取的结果中成功发现了一些漏洞。而在漏洞挖掘部分,使用了自动与人工判断相结合,亦即Fuzzing技术。特别是在挖掘时先使用探测特殊字符的方式,这样可以快速判断出是否存在漏洞以及对于哪些特殊字符可能存在漏洞,以便进一步的使用相应的payload进行尝试,可以取得效率和准确性的平衡。

[1] Bisht,Prithvi,and. Venkatakrishnan V. N. "XSS-GUARD: precise dynamic prevention of cross-site scripting attacks." Detection of Intrusions and Malware,and Vulnerability Assessment[M]. Springer Berlin Heidelberg,2008. 23-43.

[2] Grossman,Jeremiah. XSS Attacks: Cross-site scripting exploits and defense. [M]Syngress,2007.

[3] 吴翰清,白帽子讲Web安全[M]. 北京电子工业出版社,2012: 40-43.

[4] Fogie S,Grossman J,Hansen R,et al. XSS Attacks: Cross Site Scripting Exploits and Defense[M]. Syngress,2011.

[5] Wassermann G,Su Z. Static detection of cross-site scripting vulnerabilities[C]//Software Engineering,2008. ICSE'08. ACM/IEEE 30th International Conference on. IEEE,2008: 171-180.

[6] Weinberger,Joel,et al. "A systematic analysis of XSS sanitization in web application frameworks."[J] Computer Security-ESORICS 2011. Springer Berlin Heidelberg,2011. 150-171.

[7] Fogie,Seth,et al. XSS Attacks: Cross Site Scripting Exploits and Defense.[M] Syngress,2011.

[8] Di Lucca G A,Fasolino A R,Mastoianni M,et al. Identifying cross site scripting vulnerabilities in web applications[C]//Telecommunications Energy Conference,2004. INTELEC 2004. 26th Annual International. IEEE,2004: 71-80.

[9] 潘发益,郭颖,and 崔宝江. "基于动态数据生成缺陷的XSS 漏洞挖掘技术." [J]信息网络安全 11 (2013): 44-47.

Vulnerability Mining Tool Base On Crawler and Fuzzing

Qiu Zhiqing1,Huan Fei2
(1.School of Information Security Engineering,Shanghai Jiaotong University,Shanghai 200240 China; 2.School of Information Security Engineering,Shanghai Jiaotong University,Shanghai 200240 China)

With the growth of Internet popularity and the rapid evolution of Web technologies,challenges to online security become more and more serious. Existing XSS vulnerability detection technology is not perfect. For example,there is a need to open source code,the slow speed of detection and high rate of missing report. Therefore,it is necessary to do further research. XSS vulnerability detection principle,Technology and Research conducted in-depth study and research. The main work of this paper contains research and design of Vulnerability Mining Tool Base On Crawler and Fuzzing. Including efficiency optimization of crawler and testing and comparing the tool with current popular vulnerability mining tools to improve the tool can do vulnerability mining efficiently.

Web Front-end Security; Vulnerability Mining; XSS(Cross-site Scripting); Fuzzing Technology

TP311

A

1007-757X(2016)03-0073-04

裘志庆(1991-),男,上海交通大学,信息安全工程学院,硕士,研究方向:漏洞挖掘,上海,200030,

(2015.10.15)

猜你喜欢
爬虫漏洞网页
利用网络爬虫技术验证房地产灰犀牛之说
漏洞
基于Python的网络爬虫和反爬虫技术研究
基于HTML5与CSS3的网页设计技术研究
基于CSS的网页导航栏的设计
基于HTML5静态网页设计
大数据背景下校园舆情的爬虫应用研究
基于URL和网页类型的网页信息采集研究
大数据环境下基于python的网络爬虫技术
三明:“两票制”堵住加价漏洞