第8章Web攻击及防御技术张玉清国家计算机网络入侵防范中心本章内容安排8.1Web安全概述8.2Web服务器指纹识别8.3Web盗窃8.4网页验证码攻击8.5SQL注入8.6跨站脚本攻击8.7防御Web攻击8.8小结2009-10-20网络入侵与防范讲义28.1Web安全概述在Internet大众化及Web技术飞速演变的今天,在线安全所面临的挑战日益严峻。伴随着在线信息和服务的可用性的提升,以及基于Web的攻击和破坏的增长,安全风险达到了前所未有的高度。Web安全可以从以下三个方面进行考虑:Web服务器的安全Web客户端的安全Web通信信道的安全2009-10-20网络入侵与防范讲义3Web服务器的安全在Web安全中,服务器的安全是昀为人津津乐道的内容。针对Web服务器具体的安全威胁主要体现在以下几个方面:服务器程序编写不当导致的缓冲区溢出(BufferOverflow)并由此导致远程代码执行。脚本程序编写不当、过滤不严格造成的数据库查询语句注入(SQLInjection),可能引起信息泄漏、文件越权下载、验证绕过、远程代码执行等。乐观相信用户输入、过滤不严导致跨站脚本攻击(CrossSiteScript),在欺骗管理员的前提下,通过精心设计的脚本获得服务端Shell。针对服务器系统的拒绝服务攻击(DenialofService)。2009-10-20网络入侵与防范讲义4Web服务器的安全(2)针对Web服务器的攻击又可以分为两类:一是利用Web服务器的漏洞进行攻击,如IIS缓冲区溢出漏洞利用、目录遍历漏洞利用等;二是利用网页自身的安全漏洞进行攻击,如SQL注入,跨站脚本攻击等。2009-10-20网络入侵与防范讲义5Web客户端的安全Web应用的迅速普及,客户端交互能力获得了极为充分的发挥,客户端的安全也成为Web安全的焦点问题。JavaApplet、ActiveX、Cookie等技术大量被使用,当用户使用浏览器查看、编辑网络内容时,采用了这些技术的应用程序会自动下载并在客户机上运行,如果这些程序被恶意使用,可以窃取、改变或删除客户机上的信息。2009-10-20网络入侵与防范讲义6Web客户端的安全(2)浏览网页所使用的浏览器存在众多已知或者未知的漏洞,攻击者可以写一个利用某个漏洞的网页,并挂上木马,当用户访问了这个网页之后,就中了木马。这就是网页木马,简称网马。同时,跨站脚本攻击(XSS)对于客户端的安全威胁同样无法忽视,利用XSS的Web蠕虫已经在网络中肆虐过。2009-10-20网络入侵与防范讲义7Web通信信道的安全和其他的Internet应用一样,Web信道同样面临着网络嗅探(Sniffer)和以拥塞信道、耗费资源为目的的拒绝服务攻击(DenialofService)的威胁。2009-10-20网络入侵与防范讲义8Web安全概述(续)需要注意的是,很多针对Web应用的攻击并非只针对服务端、客户端或信道,综合利用各方面的安全漏洞进行攻击的案例数不胜数。我们在此列举常用的Web攻击方法,本章将重点介绍:HTTP指纹识别Web盗窃验证码识别SQL注入跨站脚本攻击2009-10-20网络入侵与防范讲义9Web安全概述(续)此外,还有一些常见的Web攻击方法如下:Web服务器缓冲区溢出Web浏览器缓冲区溢出Web欺骗/网络钓鱼Web服务器拒绝服务攻击网络嗅探这些攻击方法在前面的章节已经介绍,在此不再介绍。2009-10-20网络入侵与防范讲义102009-10-20网络入侵与防范讲义118.2Web服务器指纹识别8.2.1指纹识别理论8.2.2Web服务器指纹介绍8.2.3Web服务器Banner信息获取8.2.4模糊Web服务器Banner信息8.2.5Web服务器协议行为8.2.6Http指纹识别工具8.2.1指纹识别理论指纹的定义是这样的:一是指任何表面上的指尖印象或者是在指尖上蘸上墨水而在纸上留下的墨水印象;二是指可以用来识别的东西:如特色、痕迹或特性等揭露起源的东西,表示物体或物质的特色的证据。2009-10-20网络入侵与防范讲义12指纹识别理论(2)指纹识别可以分为两步:第一步是对指纹进行收集和分类;第二步是将未知的指纹同被储存在数据库中的指纹进行比较,从而找出昀符合的。2009-10-20网络入侵与防范讲义13指纹识别理论(3)当采集指纹的时候,对物体的所有主要特性的抓取是必要的。采集较多的细节,可以对指纹识别的第二步产生很大的帮助。当比较指纹的时候,很有可能有几个指纹是被不合适匹配的,因为可指纹之间微小的差别很容易使识别产生错误,这也要求指纹识别需要很高的技术。2009-10-20网络入侵与防范讲义14指纹识别理论(4)指纹识别技术现在已经是网络安全的已知技术。操作系统指纹识别在任何的网络评估中是一件通常的工作,现在也有很多操作系统指纹识别技术。操作系统指纹识别为什么能成功?那是因为每个操作系统实现TCP/IP协议时有微小的差别,当前比较流行的是利用TCP/IP堆栈进行操作系统识别,相关工具如Nmap;还有的是利用ICMP进行操作系统识别,代表工具如Xprobe。2009-10-20网络入侵与防范讲义152009-10-20网络入侵与防范讲义168.2.2Web服务器指纹介绍Web服务器指纹得名的原因是它与指纹非常类似。指纹是在一些物体表面上留下的手指纹印,经过搜集之后,可以从中判断出留指下指纹的人的基本信息。这个概念应用在Web服务器上,就是通过对服务器上的HTTP应用程序安装和配置等信息进行远程刺探,从而了解远程Web服务器的配置信息,然后根据不同版本的Web服务器进行有目的的攻击。Web服务器指纹介绍(2)Http指纹识别的原理大致上也是相同的:记录不同服务器对Http协议执行中的微小差别进行识别。Http指纹识别比TCP/IP堆栈指纹识别复杂许多,理由是定制Http服务器的配置文件、增加插件或组件使得更改Http的响应信息变的很容易,这样使得识别变的困难;然而定制TCP/IP堆栈的行为需要对核心层进行修改,所以就容易识别。2009-10-20网络入侵与防范讲义172009-10-20网络入侵与防范讲义188.2.3Web服务器Banner信息获取Banner是指:旗标,或标头。查看Http应答头信息是Http指纹识别中昀简单也是昀基础的。我们可以通过一个Tcp客户端比如netcat(NC)或者telnet来实现,一般我们用的比较多的是telnet到80端口,然后发送get命令来得到响应信息,比如下页的例子。2009-10-20网络入侵与防范讲义19telnet到80端口获得指纹信息C:\telnet结果:HTTP/1.1400BadRequestServer:Microsoft-IIS/5.0Date:Fri,05Sep200302:57:39GMTContent-Type:text/htmlContent-Length:87htmlheadtitleError/title/headbodyTheparameterisincorrect./body/html2009-10-20网络入侵与防范讲义20telnet到80端口获得指纹信息(2)注意到下划线标记的信息,很清楚的告诉我们运行的web服务器版本是Microsoft-IIS/5.0。2009-10-20网络入侵与防范讲义21获得更多的HTTP指纹信息那么我们能否得到更多的信息呢?不同的web服务器版本信息有什么不同?下面举一个例子,这里我们需要用到“瑞士军刀”---NetCat,当然也可以使用Windows的Telnet来实现的,主要使用的参数是“Options*http/1.1”,网址以代替。2009-10-20网络入侵与防范讲义22获得Apache2.0.x指纹sh-2.05b#nc*HTTP/1.1Host::Fri,05Sep200302:08:45GMTServer:Apache/2.0.40(RedHatLinux)Allow:GET,HEAD,POST,OPTIONS,TRACEContent-Length:0Content-Type:text/plain;charset=ISO-8859-12009-10-20网络入侵与防范讲义23不同服务器的指纹比较通过Apache2.0.x和IIS5.0指纹的比较,能够很清楚判断出不同服务器返回的信息的不同。当攻击者获得了这些指纹信息后,就可以针对不同的服务器,利用它们的漏洞进行有目的的攻击了。2009-10-20网络入侵与防范讲义248.2.4模糊Web服务器Banner信息为了防范查看Http应答头信息来识别Http指纹的行为,可以选择通过下面两种方法来更改或者是模糊服务器的Banner信息:自定义Http应答头信息增加插件这样设置可以自动的阻止很多对Http服务器的攻击,有时也可以误导攻击者。2009-10-20网络入侵与防范讲义25自定义HTTP应答头信息要让服务器返回不同的Banner信息的设置是很简单的,象Apache这样的开放源代码的Http服务器,用户可以在源代码里修改Banner信息,然后重起Http服务就生效了。对于没有公开源代码的Http服务器比如微软的IIS或者是Netscape,可以在存放Banner信息的Dll文件中修改。2009-10-20网络入侵与防范讲义26自定义HTTP应答头信息—实例下面就是一个被自定义Banner信息的Http服务器的例子,Apache服务器被自定义成了未知服务器:Http/1.1403ForbiddenDate:Mon,08Sep200302:41:27GMTServer:Unknown-Webserver/1.0Connection:closeContent-Type:text/html;charset=iso-8859-12009-10-20网络入侵与防范讲义27使用插件另一种模糊Banner信息的方法是使用插件,这些插件可以提供自定义的Http应答信息。比如ServerMask这个商业软件就可以提供这样的功能,它是IIS服务器的一个插件,ServerMask不仅模糊了Banner信息,而且会对Http应答头信息里的项的序列进行重新组合,从而来模仿Apache这样的服务器,它甚至有能力扮演成任何一个Http服务器来处理每一个请求。这个软件可以在以下地址找到:网络入侵与防范讲义28使用插件—实例下面是一个使用了ServerMask插件的IIS服务器的例子:Http/1.1200OKServer:YesweareusingServerMaskDate:Mon,08Sep200302:54:17GMTConnection:Keep-AliveContent-Length:18273Content-Type:text/htmlSet-Cookie:Itworksoncookiestoo=82.3S3.O12.NT2R0RE,4147ON3P,.4OO.;path=/Cache-control:private8.2.5Web服务器协议行为在执行Http协议时,几乎所有的Http服务器都具有它们独特的方法,如果Http请求是合法并且规则的,Http服务器返回的应答信息是符合RFC里的描述的。但是如果我们发送畸形的Http请求,这些服务器的响应信息就不同了,不同服务器对Http协议行为表现的不同就是Http指纹识别技术的基本根据和原理。2009