http://mdsec.net/private/
由于攻击者可以利用缓冲区溢出控制易受攻击的进程,因此,这种漏洞是影响各种软件的最严重的漏洞(请参阅第16章了解相关内容)。如果攻击者能够在Web服务器中执行任意代码,他就能攻破其中运行的任何应用程序。
下面仅介绍少数几种Web服务器缓冲区溢出漏洞;但这足以证明这种漏洞的普遍性,它存在于大量Web服务器产品与组件中。
1.Apache mod_isapi悬挂指针
2010年,人们发现了一个漏洞。如果Apache中存在该漏洞,在遇到错误时,系统将强制从内存中卸载mod_isapi。不过,对应的函数指针仍保留在内存中,并且可以在引用相应的ISAPI函数时被调用,从而访问内存的任意部分。
有关此漏洞的详细信息,请访问:www.senseofsecurity.com.au/advisories/SOS-10-002。
2.Microsoft IIS ISAPI扩展
Microsoft IIS 4与5包含一系列默认激活的ISAPI扩展。2001年,人们发现其中几个扩展存在缓冲区溢出漏洞,包括Internet Printing Protocol扩展与Index Server扩展。这些漏洞使攻击者能够在Local System权限下执行任意代码,进而完全控制整个计算机,并以此为基础传播Nimda与Code Red蠕虫,随后将它们迅速扩散。下面的Microsoft TechNet公告牌详细说明了这些漏洞:
www.microsoft.com/technet/security/bulletin/MS01-023.mspx;
www.microsoft.com/technet/security/bulletin/MS01-033.mspx。
七年以后
2008年,人们在IPP服务中发现了另一个漏洞。这次,部署到Windows 2003和Windows 2008上的大多数IIS版本都不会立即受到攻击,因为这些系统默认禁用该扩展。请访问www.microsoft.com/technet/security/bulletin/ms08-062.mspx查看Microsoft发布的相关建议。
3.Apache分块编码溢出
2002年,人们在Apache Web服务器中发现一个由整数符号错误导致的缓冲区溢出漏洞。存在漏洞的代码被重复用在许多其他Web服务器产品中,使这些产品也受到影响。详情请访问www.securityfocus.com/bid/5033/discuss。
八年以后
2010年,人们发现Apache的mod_proxy在处理HTTP响应中的分块编码时存在整数溢出。请访问www.securityfocus.com/bid/37966了解有关此漏洞的介绍。
4.WebDAV溢出
2003年,人们发现Windows操作系统的一个核心组件中存在缓冲区溢出漏洞。这个漏洞可被各种攻击向量利用,对许多客户而言,其中最重要的是IIS 5内置的WebDAV支持。在修复之前,这个漏洞曾被攻击者广泛利用。欲知该漏洞的详情,请访问www.microsoft.com/technet/security/bulletin/MS03-007.mspx。
七年以后
实施WebDAV导致一系列Web服务器出现漏洞。
2009年,人们发现Apache的mod_dav扩展存在另一个缓冲区溢出漏洞。欲知有关详情,请访问http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2010-1452。
2010年,人们发现,OPTIONS请求中的超长路径会导致Sun公司的Java System Web Server出现溢出。有关此漏洞的详情,请访问www.exploit-db.com/exploits/14287/。
如第3章所述,我们可以使用各种编码方案对不常见的字符和内容进行编码,以方便通过HTTP安全传送。如果Web应用程序中存在几种类型的漏洞,攻击者就可以利用这些编码方案避开输入确认检查,实施其他攻击。
许多Web服务器软件中都存在编码漏洞,如果用户提交的相同数据被使用各种技术的几个保护层处理,编码漏洞就会造成严重的威胁。一个典型的Web请求可能被Web服务器、应用程序平台、各种托管与非托管API、其他软件组件与基础操作系统处理。如果不同的组件以不同的方式执行一种编码方案,或者对部分编码的数据进行其他解码或注释,那么攻击者就可以利用这种行为避开过滤或造成其他反常行为。
路径遍历是可通过规范化缺陷加以利用的最常见漏洞之一,因为它总是涉及与操作系统的通信。在第10章中,我们介绍了Web应用程序中的路径遍历漏洞。各种Web服务器软件中也可能存在这种类型的漏洞,导致攻击者能够读取或写入Web根目录以外的任何文件。
1.Apple iDisk Server路径遍历
Apple iDisk Server是一项流行的云同步存储服务。2009年,Jeremy Richards发现其易于受到路径遍历攻击。
iDisk用户的目录结构中包含一个公共目录,该目录的内容可由未授权的互联网用户访问。Richards发现,通过使用Unicode字符从该公共文件夹遍历来访问私有文件,即可从用户的iDisk的私有部分获取任意内容,如下所示:
此外,还可以首先提出WebDAV PROPFIND请求来列出iDisk的内容:
2.Ruby WEBrick Web服务器
WEBrick是一个作为Ruby的一部分提供的Web服务器。人们发现该服务器易于受到以下简单形式的遍历攻击:
欲知该漏洞的详情,请访问www.securityfocus.com/bid/28123。
3.Java Web服务器目录遍历
此路径遍历漏洞源于JVM并不解码UTF-8这一事实。Tomcat即是一种以Java编写并使用易受攻击的JVM版本的Web服务器。使用UTF-8编码的../序列可从中检索任意内容:
欲知该漏洞的详情,请访问http://tomcat.apache.org/security-6.html。
4.Allaire JRun目录列表漏洞
2001年,人们在Allaire JRun中发现一个漏洞,即使目录中包含index.html之类的默认文件,攻击者仍然可以利用这个漏洞获取目录列表。攻击者可以使用以下形式的URL获取目录列表:
%3f是问号的URL编码形式,它常用在查询字符串的开始部分。漏洞之所以产生,是因为最初URL解析器并未将%3f解释为查询字符串指示符。因此,服务器认为URL以.jsp结尾,将请求提 交给负责JSP文件请求的组件处理。然后,这个组件对%3f进行解码,把它解释为查询字符串的开始部分,并发现得到的基础URL不是一个JSP文件,于是它返回目录列表。欲知详情,请访问www.securityfocus.com/bid/3592。
八年以后
2009年,人们发现,在目录名以问号结尾时,Jetty中存在一个目录遍历相关的类似低风险漏洞。要解决此漏洞,需要将? 编码为%3f。欲知详情,请访问https://www.kb.cert.org/vuls/id/402580。
5.Microsoft IIS Unicode路径遍历漏洞
Microsoft IIS服务器中的两个相关漏洞分别于2000年与2001年被发现。为防止路径遍历攻击,IIS在包含点-点-斜线序列的请求中查找它的字面量与URL编码形式。如果某个请求中没有这些表达式,IIS服务器就会接受这个请求,然后做进一步处理。但是,接下来,服务器对被请求的URL进行了额外的规范化处理,使得攻击者能够避开过滤,让服务器处理遍历序列。
在第一个漏洞中,攻击者可以提交点-点-斜线序列的各种非法Unicode编码形式,如..%c0%af。这个表达式与IIS的前沿过滤器(upfront filter)并不匹配,但随后的处理过程接受这种非法编码,并将它转换成一个字面量遍历序列。这使攻击者能够侵入Web根目录以外的目录,并使用下面的URL执行任意命令:
在第二个漏洞中,攻击者可以提交点-点-斜线序列的双重编码形式,如..%255c。同样,这个表达式也与IIS的过滤器不相匹配,但随后的处理过程对输入进行“过剩解码”(superfluous decode),因而将其转换成一个字面量遍历序列。这样,攻击者就可以使用下面的URL实施另一次攻击:
欲知这些漏洞的详情,请访问:
www.microsoft.com/technet/security/bulletin/MS00-078.mspx
www.microsoft.com/technet/security/bulletin/MS01-026.mspx
九年以后
2009年,人们又在WebDAV中发现类似的IIS漏洞,这说明Web服务器软件中的编码与规范化漏洞始终是一个安全隐患。受IIS保护的文件可以通过在URL中插入恶意%c0%af字符串进行下载。
由于以下请求看起来并不是一个针对受保护文件的请求,ISS会授权其访问相关资源的权限,但恶意字符串随后会从请求中删除:
Translate: f消息头用于确保该请求会由WebDAV扩展处理。使用以下代码可以在WebDAV请求中直接实施相同的攻击:
欲知详情,请访问www.securityfocus.com/bid/34993/。
6.避开Oracle PL/SQL排除列表
前面我们提到,可通过Oracle的PL/SQL网关访问危险默认功能。为解决这个问题,Oracle创建了PL/SQL排除列表(Exclusion List),它阻止攻击者访问以某些表达式(如OWA与SYS)开头的包。
2001~2007年以来,David Litchfield发现了一系列避开PL/SQL排除列表的方法。在第一个漏洞中,在包名称前插入空白符(如换行符、空格或制表符)即可避开过滤。例如:
这个URL可避开过滤,由于后端数据库忽略空白符,因此危险的包得以执行。
在第二个漏洞中,用代表字符ÿ的%FF替代字母Y,即可避开过滤:
这个URL可避开过滤,后端数据库对字符进行规范化处理,将其恢复到标准的字母Y,从而调用危险的包。
在第三个漏洞中,用双引号包含一个被阻止的表达式即可避开过滤:
这个URL可避开过滤,后端数据库接受被引用的包名称,意味着它可调用危险的包。
在第四个漏洞中,使用尖括号在被阻止的表达式前放置一个编程的goto标签,即可避开过滤:
这个URL可避开过滤,后端数据库忽略goto标签,使得危险的包得以执行。
由于前端过滤由一个组件根据简单的文本模式匹配执行,而随后的处理过程却由另一个组件执行,并且它们按照自己的规则解释输入的句法与语法意义,因而造成了以上各种漏洞。这两组 规则之间的任何差异都可能会被攻击者利用,提交与过滤器所使用的模式不相匹配的输入,但数据库却按攻击者希望的方式解释这个输入,调用危险的包。由于Oracle数据库的功能极其强大,因而这种差异大量存在。
欲知这些漏洞的详情,请访问:
www.securityfocus.com/archive/1/423819/100/0/threaded
The Oracle Hacker's Handbook
,作者David Litchfield(Wiley,2007)
七年以后
2008年,人们在Portal Server(Oracle Application Server的一部分)中发现一个漏洞:如果攻击者具有以%0A结尾的会话ID cookie值,就可以避开“基本验证”检查。
如果运气不错的话,有的渗透测试员会在所针对的Web服务器中找到本章描述的一些漏洞。然而,它们很可能已经升级到了最新的版本,渗透测试员需要查找一些当前或最新的漏洞,利用它们攻击服务器。
在Web服务器等非定制产品中查找漏洞时,使用自动化扫描工具是一个不错的起点。与Web应用程序这些定制产品不同,几乎所有的Web服务器都使用第三方软件,并且有无数用户已经以相同的方式安装和配置了这些软件。在这种情况下,使用自动化扫描器发送大量专门设计的请求并监控表示已知漏洞的签名,就可以迅速、高效地确定最明显的漏洞。Nessus是一款非常不错的免费漏洞扫描器,当然也可以使用各种商业扫描器。
除使用扫描工具外,渗透测试员还应始终对所攻击的软件进行深入研究。同时,浏览Security Focus、OSVDB、邮件列表Bugtraq和Full Disclosure等资源,在目标软件上查找所有最近发现的、尚未修复的漏洞信息。同时,别忘记查看Exploit Database和Metasploit,看看是不是有人已经做了相关工作,并发现了相应的漏洞。下面的网址或许能帮到你:
www.exploit-db.com
www.metasploit.com/
www.grok.org.uk/full-disclosure/
http://osvdb.org/search/advsearch
还要注意,一些Web应用程序产品中内置了开源Web服务器,如Apache或Jetty。因为管理员把服务器看作他们所安装的应用程序,而不是他们负责的基础架构的一部分,所以这些捆绑服务器的安全更新也应用得相对较为缓慢。而且,在这种情况下,标准的服务标题也已被修改。因此,对所针对的软件进行手动测试与研究,可以非常有效地确定自动化扫描工具无法发现的漏洞。
如有可能,渗透测试员应该考虑在本地安装所攻击的软件,并自己进行测试,查找任何尚未发现的新漏洞或广泛流传的漏洞。
从某种程度上讲,部署第三方Web服务器产品的组织的命运掌握在软件供应商手中。然而,具有安全意识的组织仍然可以采取大量有用的措施保护自己,避开本章描述的各种软件漏洞。
1.选择记录良好的软件
并非所有软件产品与供应商都提供同等优良的服务。分析几种不同的服务器产品的最近历史可以发现,它们在存在的严重漏洞数量、供应商修复这些漏洞是否及时以及发布的补丁在随后测试过程中表现的适应性等方面存在明显的差异。在选择部署何种Web服务器软件之前,应该研究这些差异,并考虑如果所在的组织采用了选择的软件,它在近几年将会如何运转。
2.应用供应商发布的补丁
任何有责任的软件供应商必须定期发布安全更新。有时,这些补丁能够解决供应商自身在内部发现的问题;其他情况下,软件问题由专门的研究员上报,但我们无法确定他是否保留了一些信息。其他漏洞因为被攻击者广泛利用,因而引起供应商的注意。但是,无论是上述哪一种情况,一旦供应商发布补丁,任何强大的逆向工程方法都能立即查明它所解决的问题所在,使攻击者能够着手设计利用这个问题的攻击。因此,如果可行,应尽可能及时地应用安全补丁。
3.实施安全强化
大多数Web服务器都拥有大量的配置选项,可控制在其中激活哪些功能,同时控制它们的运行状态。如果无用的功能(如默认ISAPI扩展)仍然被激活,那么只要攻击者在这项功能中发现新的漏洞,服务器就会受到严重的攻击威胁。用户应该查阅与所使用的软件有关的强化指南,同时还应考虑采用以下这些常用的强化步骤。
禁用任何不需要的内置功能,配置剩下的功能尽可能严格地运行,与商业需求保持一致。这包括删除映射的文件扩展名、Web服务器模块和数据库组件。可以使用IIS Lockdown等工具迅速完成这项任务。
如果应用程序由任何其他以本地代码开发的定制服务器扩展组成,则应考虑是否可以使用托管代码重新编写这些扩展。如果不能,则应确保托管代码环境先执行其他输入确认,然后再将输入传递给这些功能。
可以对需要保留的许多功能与资源进行重命名,以防止攻击者利用它们实施另一层障碍。即使技术熟练的攻击者仍然能够发现重命名后的名称,但这种模糊处理可以阻止攻击者新手与自动化蠕虫。
在整个技术栈中应用最低权限原则。例如,应配置Web服务器进程使用最低权限的操作系统账户。还可以在UNIX系统上使用chroot环境进一步限制任何攻击的影响范围。
4.监控新的漏洞
应指派一名组织职员负责监控Bugtraq与Full Disclosure等资源,查找与所使用的软件中新发现的漏洞有关的公告与讨论。还可以预订各种私人服务,由他们提供软件中已经发现但尚未公开披露的最新漏洞通知。通常,如果了解与某个漏洞有关的技术细节,就可以在供应商发布完整的补丁前,有效地修改这个漏洞。
应该始终实施几层保护,减轻基础架构组件中的任何安全违反造成的影响。可以采取各种措施,将针对Web服务器的成功攻击的影响限制在局部范围内。即使Web服务器被完全攻破,这些措施也让用户有足够的时间防止任何严重的数据泄露。
可以限制Web服务器访问其他自治的应用程序组件。例如,应只允许应用程序使用的数据库账户INSERT访问用于保存审计日志的表;这意味着,即使攻击者攻破Web服务器,他也无法删除已经创建的任何日志记录。
可以对进出Web服务器的流量实施严格的网络级过滤。
可以使用一个入侵检测系统确定任何表明发生安全违反的反常网络活动。攻破Web服务器后,许多攻击者会立即尝试建立反向连接,侵入因特网,或者扫描DMZ网络中的其他主机。高效的入侵检测系统将实时通知这些事件,以便用户采取措施阻止攻击。