中国学术期刊网 » 论文 » 计算机论文 » 计算机应用论文 » 一种有效的Web指纹识别的设计与实现论文正文

一种有效的Web指纹识别的设计与实现

中国学术期刊网【计算机应用论文】 编辑:天问 中国科学院大学学报 2016-11-05
一种有效的Web指纹识别的设计与实现论文作者:闫淑筠 王文杰 张玉清,原文发表在《中国科学院大学学报杂志》,经中国学术期刊网小编精心整理,仅供您参考。

关键词: Web服务器 Web应用 Web指纹识别 Web指纹库
摘要: 准确获取Web服务器及其承载的应用的类型及版本对Web站点的安全测试有重要意义.针对Web服务器Banner易被修改,提出使用黑盒测试方法对主流Web服务器进行分析,进而选取可有效防止Banner欺骗的Web服务器指纹;针对Web应用关键字易被删除,提出使用源码审计方法对主流开源Web应用进行分析,进而选取与其功能相关的Web应用指纹,并构建Web指纹库.在此基础上,设计并实现Web指纹识别工具——WebEye.实验结果表明,与主流工具相比,WebEye能更快速准确地识别Web服务器及应用,并具有良好的可扩展性.

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源码关键字是提取标签ta 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请求的响应报文如下:

Table 1

表 1 头部域顺序指纹 Table 1 Fingerprints of fields ordering 类型 顺序
Apache Date、Server、Connection、Content-Type
Nginx Server、Date、Content-Type、Connection
IIS/5.0 Server、Date、Connection、Content-Type
IIS/6.0-8.5 Content-Type、Server、Date、Connection
表 1 头部域顺序指纹
Table 1 Fingerprints of fields ordering
2) 状态码定义指纹, 见表 2. 对于已知Web服务器类型, 其版本可由特定HTTP请求的响应状态码定义准确识别.

Table 2

表 2 状态码定义指纹 Table 2 Fingerprints of status code definitions HTTP请求 状态码定义 版本
JUNK协议 400 Bad Request Apache 1.3.x
200 OK Apache 2.x
PUT方法 411 Length Required Nginx 0.7.69-1.2.9
405 Not Allowed Nginx 1.4.7-1.9.2
DELETE方法 501 Not Implemented IIS 6.0
405 Method Not Allowed IIS 7.0-8.5
表 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个关键字指纹:

·ta name=“generator” content=“application” />

·Powered by application

·ta name=“author” content=“author” />

·ta 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所示.

Fig. 1
Download:
JPGlarger image


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

Fig. 1 Process of identifying web server


Fig. 2
Download:
JPGlarger image


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

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

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

Fig. 3
Download:
JPGlarger image


图 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所示.

Fig. 4
Download:
JPGlarger image


图 4 WebEye的整体实现架构

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

在执行效率上, WebEye在Linux平台下使用C语言多线程编程实现. 多线程并发执行使得WebEye可用于对海量Web站点快速准确地识别, 并能根据运行环境指定线程数量, 使其适用于各种硬件环境.
【计算机应用论文】图文推荐
【计算机应用论文】范文排行
【中国科学院大学学报杂志】论文参考
上一篇:动态K均值聚类算法与SAR图像分割实验分析 下一篇:一种均衡视频资源的分布存储方法验证分析