网友回复
Http指纹识别技术
Http指纹识别现在已经成为应用程序安全中一个新兴的话题,Http服务器和Http应用程序安全也已经成为网络安全中的重要一部分.从网络管理的立场来看,保持对各种web服务器的监视和追踪使得Http指纹识别变的唾手可得,Http指纹识别可以使得信息系统和安全策略变的自动化,在基于已经设置了审核策略的特殊的平台或是特殊的web服务器上,安全测试工具可以使用Http指纹识别来减少测试所需要的配置. 本文将介绍现有的Http指纹识别技术,同时也将讨论所遇到的一些问题并且拿出可行的解决方案. 一.指纹识别理论 指纹的定义是这样的:1是指任何表面上的指尖印象或者是在指尖上蘸上墨水而在纸上留下的的墨水印象;2是指可以用来识别的东西:如特色、痕迹或特性等揭露起源的东西,表示物体或物质的特色的证据. 指纹识别可以分为两步,一是对指纹进行收集和分类;二是将未知的指纹同被储存在数据库中的指纹进行比较,从而找出最符合的. 当采集指纹的时候,对物体的所有主要特性的抓取是必要的.采集较多的细节,可以对第二步产生很大的帮助.当比较指纹的时候,很有可能有几个指纹是被不合适的匹配的,因为可指纹之间微小的差别很容易使识别产生错误,这也要求指纹识别需要很高的技术. 指纹识别技术现在已经是网络安全的已知技术.操作系统指纹识别在任何的网络评估中是一件通常的工作,现在也有很多操作系统指纹识别技术.操作系统指纹识别为什么能成功?那是因为每个操作系统实现TCP/IP协议时有微小的差别,当前比较流行的是利用TCP/IP堆栈进行后操作系统识别,相关工具比如Nmap;还有的是利用ICMP进行操作系统识别,代表工具如Xprobe. Http指纹识别的原理大致上也是相同的:记录不同服务器对Http协议执行中的微小差别进行识别.Http指纹识别比TCP/IP堆栈指纹识别复杂许多,理由是定制Http服务器的配置文件、增加插件或组件使得更改Http的响应信息变的很容易,这样使得识别变的困难;然而定制TCP/IP堆栈的行为需要对核心层进行修改,所以就容易识别.二.Banner获取
查看Http应答头信息是Http指纹识别中最简单也是最基础的,我们可以通过一个Tcp客户端比如netcat来实现,一般我们用的比较多的是telnet到80端口,然后发送命令来得到响应信息,这里我们以netcat来做例子,以下是三个不同Http服务器的响应信息: 1:Apache1.3.23server: Http/1.1200OK Date:Mon,08Sep200317:10:49GMT Server:Apache/1.3.23 Last-Modified:Mon,08Sep200303:48:19GMT ETag:"32417-c4-3e5d8a83" Accept-Ranges:bytes Content-Length:196 Connection:close Content-Type:text/html 2:MicrosoftIIS5.0server: Http/1.1200OK Server:Microsoft-IIS/5.0 Expires:Mon,08Sep200301:41:33GMT Date:Mon,08Sep200316:41:33GMT Content-Type:text/html Accept-Ranges:bytes Last-Modified:Mon,08Sep200315:32:21GMT ETag:"b0aac0542e25c31:89d" Content-Length:7369 3:NetscapeEnterprise4.1server: Http/1.1200OK Server:Netscape-Enterprise/4.1 Date:Mon,08Sep200316:19:04GMT Content-type:text/html Last-modified:Mon,08Sep200215:37:56GMT Content-length:57 Accept-ranges:bytes Connection:close 三.模糊服务器Banner信息 在很多情况下,获取Banner被证明是一种很好的Http指纹识别方法.但是,网络管理员会选择通过配置或者是增加插件来更改或者是模糊服务器的Banner信息.当然,这样的设置确实是自动的阻止了很多对Http服务器的攻击. 要让服务器返回不同的Banner信息的设置是很简单的,象Apache这样的开放源代码的Http服务器,用户可以在源代码里修改Banner信息,然后重起Http服务就生效了;对于没有公开源代码的Http服务器比如微软的IIS或者是Netscape,可以在存放Banner信息的Dll文件中修改,相关的文章有讨论的,这里不再赘述,当然这样的修改的效果还是不错的. 另一种模糊Banner信息的方法是使用插件,这些插件可以提供自定义的Http应答信息.比如ServerMask这个商业软件就可以提供这样的功能,它是IIS服务器的一个插件,ServerMask不仅模糊了Banner信息,而且会对Http应答头信息里的项的序列进行重新组合,从而来模仿Apache这样的服务器,它甚至有能力扮演成任何一个Http服务器来处理每一个请求.这个软件可以在以下地址找到: Http://www.port80software.com/products/servermask 下面就是一个被自定义Banner信息的Http服务器的例子,Apache服务器被自定义成了未知服务器: Http/1.1403Forbidden Date:Mon,08Sep200302:41:27GMT Server:Unknown-Webserver/1.0 Connection:close Content-Type:text/html;charset=iso-8859-1 下面是一个使用了ServerMask插件的IIS服务器的例子: Http/1.1200OK Server:YesweareusingServerMask Date:Mon,08Sep200302:54:17GMT Connection:Keep-Alive Content-Length:18273 Content-Type:text/html Set-COOKIE:ItworksonCOOKIEstoo=82.3S3.O12.NT2R0RE,4147ON3P,.4OO.;path=/ Cache-control:private从上面的例子我们可以看到,仅仅从Banner信息来判断Http服务器类型是远远不够的.
四.协议行为
在执行Http协议时,几乎所有的Http服务器都具有它们独特的方法,如果Http请求是合法并且规则的,Http服务器返回的应答信息是符合RFC里的描述的.但是如果我们发送畸形的Http请求,这些服务器的响应信息就不同了,不同服务器对Http协议行为表现的不同就是Http指纹识别技术的基本根据和原理. 大家还是喜欢看例子,那就让我们来举几个不同的例子吧,我们将分析3种不同Http服务对不同请求所返回的响应信息,这些请求是这样的: 1:HEAD/Http/1.0发送基本的Http请求 2:DELETE/Http/1.0发送那些不被允许的请求,比如Delete请求 3:GET/Http/3.0发送一个非法版本的Http协议请求 4:GET/JUNK/1.0发送一个不正确规格的Http协议请求Exp1:基本的Http请求
我们先发送请求HEAD/Http/1.0,然后分析Http响应头里的信息,对头信息里项的排序进行分析.发送的请求命令如下: C:/>ncapache.example.com80//回车,下同 HEAD/...点击查看剩余70%