中国科学院大学学报  2016, Vol. 33 Issue (5): 679-685   PDF    
一种有效的Web指纹识别方法
闫淑筠1,3, 王文杰1,2, 张玉清1,2,3     
1. 中国科学院大学计算机与控制学院, 北京 101408 ;
2. 中国科学院信息工程研究所信息安全国家重点实验室, 北京 100093 ;
3. 中国科学院大学国家计算机网络入侵防范中心, 北京 101408
摘要: 准确获取Web服务器及其承载的应用的类型及版本对Web站点的安全测试有重要意义.针对Web服务器Banner易被修改,提出使用黑盒测试方法对主流Web服务器进行分析,进而选取可有效防止Banner欺骗的Web服务器指纹;针对Web应用关键字易被删除,提出使用源码审计方法对主流开源Web应用进行分析,进而选取与其功能相关的Web应用指纹,并构建Web指纹库.在此基础上,设计并实现Web指纹识别工具——WebEye.实验结果表明,与主流工具相比,WebEye能更快速准确地识别Web服务器及应用,并具有良好的可扩展性.
关键词: Web服务器     Web应用     Web指纹识别     Web指纹库    
An efficient method of web fingerprint identification
YAN Shujun1,3, WANG Wenjie1,2, ZHANG Yuqing1,2,3     
1. School of Computer and Control Engineering, University of Chinese Academy of Sciences, Beijing 101408, China ;
2. State Key Laboratory of Information Security, Institute of Information Engineering, Chinese Academy of Sciences, Beijing 100093, China ;
3. National Computer Network Intrusion Protection Center, University of Chinese Academy of Sciences, Beijing 101408, China
Abstract: It is very important to accurately acquire information of the web server and deployed application for website security testing. Since the web server's Banner was apt to be modified, we used the black-box testing method to analyze major web servers, and then selected web server's fingerprint which could prevent Banner cheating. Since the web application's keywords were apt to be deleted, we used the source code audit method to analyze major web applications, and then selected web application's fingerprint, which was associated with its function, and built a web fingerprint database. Furthermore, a web fingerprint identifying tool WebEye was designed and implemented. Experimental results show that WebEye faster and more accurately identifies the web server and application than similar tools, and it has good scalablity.
Key words: web server     web application     web fingerprint identification     web fingerprint database    

Web指纹是Web服务组件在开发时留下的可对其类型及版本进行标识的特殊信息, 包括Web服务器指纹、Web应用指纹以及前端框架指纹等[1]. Web指纹识别是指利用已有的Web指纹库实现对Web 服务组件相关信息的准确识别. Web指纹识别技术可用于Web渗透的信息收集环节, 准确获取Web服务组件的类型及版本信息可有效检测其存在的安全弱点. 大多Web攻击主要利用Web服务器及应用存在的安全弱点, 进一步利用相应的攻击手法获取目标站点的高级权限和敏感数据[2-4]. 因此, 本文主要研究对Web站点安全有重要意义的Web服务器及应用的指纹识别技术.

国内外对Web服务器及应用指纹的研究[5-6]通过构造大量特殊的HTTP请求与Web服务器交互, 从其响应报文中提取Web服务器及应用的指纹. 然而, 由于研究工作涉及较复杂的Web指纹识别流程, 在实际应用中, 主流工具如WhatWeb、Wappalyzer等, 为实现对Web站点的快速识别, 使用响应报文头部中易被修改的Banner作为Web服务器指纹和HTML数据中可被删除的关键字作为Web应用指纹.

为解决研究工作与实际应用之间存在的上述问题, 本文通过黑盒测试方法选取与HTTP协议[7]实现有关的Web服务器指纹, 通过源码审计方法选取与功能相关的Web应用指纹, 构建Web指纹库和设计Web指纹识别算法. 在此基础上, 设计并实现了Web指纹识别工具WebEye. 本文主要贡献如下:

1)不同于已有研究, 采用响应报文的头部域[7]顺序和状态码定义作为Web服务器指纹, 既可防止Banner欺骗, 也不必构造大量的HTTP请求.

2)采用与功能相关且不易被更改的结构特征、静态文件及Cookie名作为Web应用指纹, 克服了以往只采用关键字指纹导致的对Web应用识别率较低的不足.

3)基于上述选取的Web指纹, 提出一种有效的Web指纹识别方法, 并在此基础上设计并实现了Web指纹识别工具WebEye.

1 相关工作

目前存在部分针对Web服务器指纹的研究, 然而更多是侧重于Web服务器指纹的检测和防御[8]. 文献[5]通过对多种Web服务器的响应报文的分析, 指出不同类型或版本的Web服务器对HTTP协议的实现不同, 体现在对特定的HTTP请求的响应在词法、语法和语义等方面存在一些差异. 例如在响应报文的语法方面, Apache的Date字段在Server字段的前面, 而Nginx则相反. 文献[9]介绍利用Banner信息、HTTP响应特征和特殊HTTP请求实现Web服务器识别: Banner是最简单有效的方法, 但是容易被修改, 所以不能保证Web服务器识别的可靠性; HTTP响应特征可避免Banner欺骗, 但是需要同时与大量的其他特征一起才能准确推断Web服务器; 而特殊HTTP请求依赖于不同服务器对相同HTTP请求的响应不同, 这种方法能准确识别Web服务器类型, 但是不能识别Web服务器的版本或版本范围. 文献[10]的设计思想是利用Web服务器行为的变化能推断出其类型及版本, 通过对互联网上随机抽取的Web服务器对大量特殊HTTP请求的响应码的分析比较, 提取其行为特征并对这些数据进行训练分类, 从而实现对Web服务器类型的预测. 以上研究主要通过发送大量正常或畸形的HTTP请求, 并分析Web服务器的响应报文, 可准确识别Web服务器类型, 但是其执行效率较低, 而实际应用中主要使用最简单有效的Banner信息.

目前针对Web应用识别主要是通过HTML源码关键字、特殊文件及路径等实现[11]. HTML源码关键字是提取标签<meta name=“generator” content=“application” />的content值, 是最快速的识别方法, 但是该标签与Web应用功能无关, 可以被修改或删除; 特殊文件及路径是一些开源Web应用程序存在特殊的结构设计, 如WordPress特有的文件路径/wp-includes/等. 文献[6]实现了一个情报搜集工具W3-Scrape, 可用于对Web服务器、操作系统和CMS应用的识别, 使用正则表达式和模式匹配对HTML源码关键字和URL的审查实现对CMS类型Web应用的识别. 文献[12]设计了一个Web应用版本识别工具BlindElephant, 通过将某种类型Web应用的特征文件与各个版本的文件进行比较从而实现对Web应用版本的准确识别, 该工具的缺点是只能识别Web应用的版本, 而不能识别Web应用的类型. 文献[13]提出一个基于黑盒测试原理的Web应用识别方法, 搜集已知Web应用的特征信息包括URL模式、表单特征和关键字, 并建立指纹库, 将目标Web应用的特征信息与该指纹库进行比较从而实现Web应用的识别. 该方法有一定的局限性, 即不能修改Web应用的默认配置, 并且需要处理大量的URL以及对HTML数据的分析. 以上研究主要通过对大量HTML数据进行特征分析, 而实际应用中主要使用识别最快的HTML源码关键字.

综上所述, 目前针对Web服务器及应用指纹的研究与实际应用在执行效率和识别率上还存在一定的差距, 因此本文提出一种既能提高识别率, 也能提升执行速度的Web指纹识别方法.

2 Web指纹的选取思路 2.1 Web服务器指纹的选取思路

目前针对Web服务器指纹识别的研究主要通过发送大量精心构造的HTTP请求实现对Web服务器的准确识别, 但其识别速度较慢并且可能被网络安全设备当作恶意流量拦截; 而主流工具主要利用Banner快速获取Web服务器信息, 然而由于Banner易被修改而导致识别结果不可靠.

为解决Web服务器指纹识别的研究与实际应用之间存在的上述问题, 并进一步提高Web服务器指纹识别的准确率和效率, 本文以主流Web服务器[14], 即Apache、Microsoft IIS和Nginx的所有版本为研究对象, 以其对HTTP协议实现为研究内容, 以黑盒测试为研究方法, 通过向Web服务器发送以下6种HTTP请求, 并根据其响应报文的特征来选取Web服务器指纹.

·HEAD/HTTP/1.0

·PUT/HTTP/1.0

·DELETE/HTTP/1.0

·CONNECT/HTTP/1.0

·HEAD/JUNK/1.0 (异常协议类型)

·HEAD/HTTP/3.0 (异常协议版本)

通过对所有响应报文的研究分析, 选取以下2个能快速有效识别的Web服务器指纹.

1) 头部域顺序指纹, 见表 1. 主流Web服务器类型可由表 1中的4个头部域的相对顺序准确识别. 例如, Apache和Nginx对HEAD/HTTP/1.0请求的响应报文如下:

表 1 头部域顺序指纹 Table 1 Fingerprints of fields ordering

2) 状态码定义指纹, 见表 2. 对于已知Web服务器类型, 其版本可由特定HTTP请求的响应状态码定义准确识别.

表 2 状态码定义指纹 Table 2 Fingerprints of status code definitions

基于Web服务器对HTTP协议实现的研究分析进而选取的Web服务器指纹, 我们设计了一个既能防止Banner欺骗, 也不必构造大量HTTP请求的Web服务器识别算法.

2.2 Web应用指纹的选取思路

目前针对Web应用指纹识别的研究工作主要通过对大量HTML数据的分析来识别Web应用, 包括HTML源码关键字和特殊文件及路径, 由于需要处理较多HTML数据和文件, 降低了其执行速度; 而主流工具主要利用HTML源码关键字实现Web应用的快速识别, 但是由于关键字易被删除而导致识别率低.

为解决Web应用指纹识别的研究工作与实际应用中存在的上述问题, 并提高Web应用的识别率, 本文以主流的开源Web应用[15]为研究对象, 以源码审计为研究方法, 通过对Web应用的静态文件、源码以及结构设计的详细分析, 并从以下4个方面选取Web应用指纹.

1)结构特征. Web应用的类型可由其特殊的结构设计准确识别, 该指纹只需从HTML数据的头部获取. 例如, 如果Web应用的文件路径包含/wp-includes/, 则该Web应用是Wordpress.

2)静态文件. Web应用的类型及版本可由其未被修改而被直接使用的静态文件准确识别. 例如, 用于Web应用前端布局的文件style.css, 通过与目标style.css比较可准确识别Web应用的类型及版本.

3)Cookie设计. Web应用的类型可由开发者为其设计特殊的Cookie名准确识别. 例如, 如果Cookie名为django, 则该Web应用是Django-CMS.

4)关键字. HTML源码关键字是主流工具选取的Web应用指纹, 存在与功能无关且易被删除的缺点, 但可作为Web应用的补充指纹. 通过对关键字在HTML源码中的分析, 选取以下4个关键字指纹:

·<meta name=“generator” content=“application” />

·Powered by application

·<meta name=“author” content=“author” />

·<meta name=“copyright” content=“copyright” />

其中, 结构特征、静态文件和Cookie设计这3类指纹都与Web应用功能相关, 有不易被修改或删除的特点, 我们设计并构建了包含这4类Web应用指纹的Web指纹库, 只需按照Web指纹库定义的格式向其中增加新类型Web指纹, 即可实现对新增Web应用的识别, 对Web应用的识别具有良好的可扩展性.

3 Web指纹识别的设计与实现 3.1 Web服务器识别算法设计

根据选取的Web服务器指纹的特征, 设计一个简单有效的Web服务器指纹识别算法. 该识别算法分为2步:首先, 发送GET请求, 利用头部域指纹可准确识别Web服务器类型; 然后, 根据Web服务器类型构造特定的HTTP请求, 利用状态码定义指纹可准确识别Web服务器版本. 该算法流程如图 1所示, 该算法的伪代码描述如图 2所示.

Download:

图 1 Web服务器指纹识别算法流程

Fig. 1 Process of identifying web server

Download:

图 2 Web服务器指纹识别算法伪代码

Fig. 2 Pseudo code of algorithm identifying web server
3.2 Web应用识别算法设计

根据选取的Web应用指纹的特征, 设计了一个有效的Web应用指纹识别算法. 该算法流程如图 3所示.

Download:

图 3 Web应用指纹识别算法流程

Fig. 3 Process of identifying web application

识别一个Web应用需要以下3个步骤:

1)URL预处理. 对给定的URL进行规范化处理, 分离URL中的主机名和资源路径, 以便构造相应的HTTP请求.

2)获取Web应用指纹信息. 定义如下保存Web应用指纹的结构体变量Fingerprint, 根据对URL的预处理构造对应资源的HTTP请求, 从响应报文中提取出所有的指纹信息并保存到以下Fingerprint结构体中.

3)识别Web应用. 定义集合Fingerprint: F={f1, f2, …, fn}, 表示Web应用的指纹; 集合Weight: W={w1, w2, …, wn}, 表示对应集合F中指纹所占权重, 则识别结果为max {f1·w1, f2·w2, …, fn·wn}, 表示指纹与权重乘积最大值的指纹对应的Web应用.

3.3 WebEye的设计实现

根据前面选取的Web指纹及设计的识别算法, 设计并实现了Web指纹识别工具WebEye, 其整体架构如图 4所示.

Download:

图 4 WebEye的整体实现架构

Fig. 4 The overall implementation architecture of WebEye

在功能设计上, WebEye设计为2个主要的功能模块, 即Web服务器指纹识别和Web应用指纹识别.

在执行效率上, WebEye在Linux平台下使用C语言多线程编程实现. 多线程并发执行使得WebEye可用于对海量Web站点快速准确地识别, 并能根据运行环境指定线程数量, 使其适用于各种硬件环境.

4 实验 4.1 测试数据及环境

ZoomEye[1]是一个针对网络空间的搜索引擎, 根据其对Web服务的统计分析, 将排名前10并且占统计量97.439%以上的Web应用作为WebEye的测试目标, 具体Web应用及其部分指纹信息见表 3. 测试数据来源于这10种Web应用官方站点所展示的Web站点, 并根据其比例一共选取500个测试Web站点. 这些Web站点既能作为衡量Web应用识别结果的标准, 也能反映开发者对Web应用的修改特征, 同时能检验选取的Web应用指纹的有效性. 实验环境是一台PC台式机(Ubuntu 15.04系统, CPU为Intel Core i7-4790, 内存4 GB).

表 3 测试目标Web应用及其部分指纹 Table 3 Target web applications and part of their fingerprints for testing
4.2 实验评估

表 4描述了各Web指纹识别工具的实验结果. 其中, Web服务器和Web应用分别表示其识别数量; 时间表示识别过程所使用的分钟数, 由于ChromeSniffer是浏览器扩展且未提供API接口, 只能通过浏览器访问Web站点获得识别结果, 所以未统计其时间. 如表 4所示, WebEye与其他4种工具相比: 1)对Web服务器的识别率相差不大, 但ChromeSniffer、Wappalyzer和WhatWeb使用Banner作为Web服务器指纹, 因此其识别结果不完全正确; 2)WebEye对Web应用的识别率最高; 3)WebEye指纹识别执行时间最短.

表 4 实验结果 Table 4 Experimental results

表 5将WebEye与其他主流工具的Web指纹进行详细对比. Httprint的指纹与HTTP协议实现相关, 然而其Web指纹库已不再更新[16], 不适用于当前Web服务器的识别; ChromeSniffer等浏览器扩展以及WhatWeb仅使用易被修改或删除的Banner及关键字作为Web指纹; Wappalyzer选用Banner和关键字及结构特征作为Web指纹; WebEye选取可防止Banner欺骗且不易被修改的Web服务器指纹和不易被删除且与功能相关的Web应用指纹.

表 5 Web指纹识别工具的指纹对比 Table 5 Comparison of fingerprints selected using different web fingerprint identification tools

表 6描述各Web指纹识别工具在实验中起决定作用的Web指纹的分布情况, WebEye与其他3种工具相比: 1)Web服务器识别的准确率提高17.8%; 2) Web应用的识别率与执行效率最快的工具WhatWeb相比提高52.2%; 3)Web应用的识别率与识别率最高的工具Wappalyzer相比提高15.0%, 且Wappalyzer执行速度较慢.同时表 5表 6也表明了本文选取的Web指纹的有效性.

表 6 Web指纹比较 Table 6 Comparison of web fingerprints
5 讨论

与已有的研究工作和主流工具的Web指纹识别原理相比, 本文的研究工作有以下优势:

1)简化Web服务器识别. 从Web服务器对HTTP协议实现的角度进行研究, 选取主流Web服务器的不易修改的指纹, 并根据指纹特征设计了识别算法, 既可防止Banner欺骗, 也不必构造大量的HTTP请求.

2)提高Web应用识别率. 从Web应用的源码、静态文件及结构设计的角度进行研究, 选取与功能相关且不易被修改的Web指纹, 并设计了识别算法, 克服了关键字指纹的不足, 提高了Web应用被识别的概率.

3)执行效率高. 对Web服务器的指纹识别不需发送大量HTTP请求即可实现准确识别, 并缩小了Web应用指纹匹配的范围. 此外, WebEye使用多线程并发执行, 其执行效率优于Web应用识别率最高的工具Wappalyzer.

下一步, 我们预计克服前期由于人工处理和主观认知而导致静态文件指纹没有被充分利用的问题, 通过对Web应用的静态文件进行更加深入的分析, 提高Web应用的识别率. 更进一步实现一个基于Web指纹识别的渗透测试框架, 利用WebEye的识别结果, 自动查询漏洞库中该Web站点使用的Web服务器及应用的已知漏洞, 并对这些可疑漏洞进行验证, 进而生成详细的安全评估报告.

6 结束语

本文对主流Web服务器及应用进行深入分析, 提出一种有效的Web指纹识别方法, 解决了研究工作和实际应用之间存在的识别速度和识别率的问题. 通过选取不易被修改的Web服务器指纹和不易被删除的Web应用指纹, 构建Web指纹库, 设计Web指纹识别算法, 进而实现了Web指纹识别工具WebEye. 实验结果表明, WebEye的Web指纹识别效果优于同类主流工具, 并且使用多线程并发执行, 可用于对海量URL的快速准确识别. 此外, WebEye使用的Web指纹库具有良好的可扩展性, 实现对新增Web服务器及应用的指纹识别.

参考文献
[1] ZoomEye. ZoomEye网络空间搜索引擎[EB/OL].[2016-01-20]. https://www.zoomeye.org/. https://www.zoomeye.org/
[2] Watson D. The evolution of web application attacks[J]. Network Security , 2007 (11) :7–12.
[3] Goethem T V, Chen P, Nikiforakis N, et al. Large-scale security analysis of the web:challenges and findings[J]. Lecture Notes in Computer Science , 2014, 8564 :110–126. DOI:10.1007/978-3-319-08593-7
[4] Dukes L S, Yuan X, Akowuah F. A case study on web application security testing with tools and manual testing[C]//Southeastcon, 2013 Proceedings of IEEE. IEEE, 2013:1-6.
[5] Lee D, Rowe J, Ko C, et al. Detecting and defending against Web-server fingerprinting[C]//Proceedings of Computer Security Applications Conference, 2002. 18th Annual. IEEE, 2002:321-330.
[6] Karthik R, Kamath S. W3-Scrape-A windows based reconnaissance tool for web application fingerprinting[R]. arXiv:1306.6839.
[7] Fielding R, Gettys J, Mogul J, et al. Hypertext transfer protocol-HTTP/1.1[EB/OL]. (1999)[2016-01-20]. http://www.rfc-base.org/txt/rfc-2616.txt. http://www.rfc-base.org/txt/rfc-2616.txt
[8] Yang K, Hu L, Zhang N, et al. Improving the Defence against Web Server Fingerprinting by Eliminating Compliance Variation[C]//Proceedings of the 2010 Fifth International Conference on Frontier of Computer Science and Technology. IEEE Computer Society, 2010:227-232.
[9] Huang Z, Xia C, Sun B, et al. Analyzing and summarizing the web server detection technology based on HTTP[C]//Software Engineering and Service Science (ICSESS), 20156th IEEE International Conference on. IEEE, 2015:1042-1045.
[10] Book T, Witick M, Wallach D S. Automated generation of web server fingerprints[R]. arXiv:1305.0245.
[11] Muller A, Meucci M, Keary E, et al. OWASP testing guide 4.0[EB/OL].(2014)[2016-01-20]. https://www.owasp.org/images/1/19/OTGv4.pdf. https://www.owasp.org/images/1/19/OTGv4.pdf
[12] Thomas P. BlindElephant:Web application fingerprinter & vulnerability inferencing[EB/OL]. (2010-07-28)[2016-01-20]. https://media.blackhat.com/bh-us-10/presentations/Thomas/BlackHat-USA-2010-Thomas-BlindElephant-WebApp-Fingerprinting-slides.pdf. https://media.blackhat.com/bh-us-10/presentations/Thomas/BlackHat-USA-2010-Thomas-BlindElephant-WebApp-Fingerprinting-slides.pdf
[13] Kozina M, Golub M, Groš S. A method for identifying Web applications[J]. International Journal of Information Security , 2009, 8 (6) :455–467. DOI:10.1007/s10207-009-0092-3
[14] netcraft. Web server survey[EB/OL]. (2015-08-30)[2016-01-20]. http://news.netcraft.com/archives/2015/08/13/august-2015-Web-server-survey.html. http://news.netcraft.com/archives/2015/08/13/august-2015-Web-server-survey.html
[15] 开源中国社区. 建站系统开源软件[EB/OL].[2016-01-20]. http://www.oschina.net/project/tag/256/web-system. http://www.oschina.net/project/tag/256/web-system
[16] Net-square. Httprint signatures file[EB/OL].[2016-01-20]. http://www.net-square.com/signature.txt. http://www.net-square.com/signature.txt