难道IIS(Internet Information Services)就真是“脆弱”的吗?难道拥有全球市场排名第一的Apache就坚不可摧?其实这些问题只是我们对服务器安全问题的曲解,在IIS 6没有推出以前,我一直忙着对IIS 5 修修补补,也确实过了一段提心吊胆的日子。我们完全有理由相信,经过调整后的IIS足以让我们值得信赖。
解释几个常见漏洞
1. 缓冲区溢出
简单解释一下,缓冲区溢出主要因为提交的数据长度超出了服务器正常要求,导致服务器检查代码错误。而溢出的方法有可以分为:基于堆栈的溢出和基于堆的溢出。在IIS 6以前的版本,Web服务是运行在LocalSystem账户下,当某个黑客利用缓冲区溢出的漏洞入侵后,当然就可以执行大部分的治理员命令了。
利用该漏洞比较名的病毒是“红色代码(Redcode)”和“尼姆达(Nimda)”。eEye Digital Security 公司早于1996年就发现了这类漏洞的代表作HTR缓冲区漏洞。eEye发现,IIS反抗力十分脆弱。假如攻击传递给IIS,那么输入值将不是一串字母而是可以执行的系统命令。HTR文件的解释程序是将一个以.htr结尾的超长文件在ism.dll中造成输入缓冲区溢出。
我们早已用不到HTR了(笔者个人的理解),那只是早些时候,微软脚本编程用到的,早已经被asp技术取代。
说明:根据上文的说明我们知道一个漏洞的根源就是.htr文件与System32目录下的ism.dll存在着关联,假如将ism.dll和.htr文件之间存在的映射关系断开,或者删除了ism.dll,就可以解决了。
2. 臭名昭著的Unicode
首先要知道什么是Unicode二次解码漏洞?打开IE,选择“查看→编码→Unicode(UTF-8)”,在没有创造Unicode之前,没有一个编码可以包含足够的字符来容纳数百种的数字编码。比如我们要看一个繁体中文(BIG5)的网页,在你的简体中文版的Windows 系统上,没有Unicode的支持就不可能实现。
假如非法用户提交一些非凡的编码,将导致IIS错误地打开或者执行某些Web根目录以外的文件。那么,未经授权的用户可以利用IUSR_machinename账号访问用户目录的任何文件。同时,我们有知道这个账号在默认情况下属于Everyone和Users组,windows 2000 Server默认的安全权限是“Everyone完全控制”因此任何能被这些用户组访问的文件都可能被删除、修改或执行。
说明:可以限制网络用户访问和调用CMD命令的权限;若没必要使用Scripts和Msadc目录,可以删除或者重新命名;还有一个问题,安装Windows NT系统时不使用默认的WINNT路径。
3. FrontPage 服务器扩展漏洞
对于安装FrontPage服务器的网站,通常会在Web目录(缺省)下有若干个以字母“_vti”开头的目录,正是这些目录为黑客提供了可乘之机。我们可以从搜索引擎上搜索默认的Frontpage目录,这时我们能从引擎上返回大量的信息。
说明:你真的需要FrontPage 服务器扩展吗?我是从来没有用过,这都是默认安装的时候为我们带来的隐患。假如不需要,直接卸载了该服务就没问题了。
更多的请看:http://www.QQread.com/windows/2003/index.Html
IIS加固策略的建议
你得到的网站源代码不会完全一样,而大多数程序员不会为你只提供一种类型的代码。所以不要完全按照下面的加固列表操作,尤其在加固之前要和程序的提供商取得联系。在得到他们确认后,修改本文中涉及到服务器扩展内容。
1. 调整IIS日志
当您希望确定服务器是否被攻击时,日志记录是极其重要的。默认的日志不会为我们搜索黑客记录提供很大的帮助,所以我们必须扩展 W3C日志记录格式,步骤如下:
★检查是否启用了日志记录,右键单击所述站点,然后从上菜单中选择启用“属性→Web 站点→启用日志记录”复选框。
★更改日志的默认路径,黑客成功入侵一个系统后,临走时要做的一件事就是清除日志,假如以图形界面的远程控制软件或是从终端登录进入,我们自然是无法保护日志的。不过,现在比较流行的日志清除工具,大多以命令行方式删除默认的W3C日志记录,所以可以将图1所示的路径改写,达到简单保护的功能。
图1 改写日志默认存储路径
★从“活动日志格式”下拉列表中选择“W3C 扩展日志文件格式”。单击“属性→扩展属性”选项卡,然后添加以下信息的记录:客户IP 地址、用户名、方法、URI 资源、HTTP 状态、Win32 状态、用户代理、服务器 IP 地址、服务器端口。
日志记录是我们被入侵后惟一能够找到自身漏洞的地方。就比如有些人钟爱的“动网上传文件”漏洞,假如你能在日志当中发现“HTTP GET 200(文件上传成功)”,没什么可以辩解的,肯定是没有升级补丁或者开放了上传权限。所以说日志防护是每个治理员必备的知识。
2. 删除IIS所有默认示例
这是一个在Windows 2000和Windows Server 2003上都在安装的时候保留的内容,因为只能从本地访问这些文件,所以这些默认的示例不会为服务器带来威胁。假如不需要它们作为建立站时的参照以及远程的治理帮助,可以删除它们,同时起到优化系统的功能(需要关闭IIS服务)。
3. 删除不必要扩展映射
IIS 5被预先配置为支持如.asp这样的动态程序文件,但除了我们常用的几个文件格式之外,还支持了本文中提到的可能造成缓冲区溢出的文件类型。IIS 接收到这些类型的文件请求时,该调用由 DLL 处理,所以最好删除它们。
选择“WWW服务→编辑→主目录→应用程序配置”,参照下表有针对性的选择删除对象:
IIS 6 的全新奉献
我们常在网上看到关于Windows Server 2003 已经非常安全的报道,但是我们的治理员不是天天做个补丁更新的工作吗?其实,Windows Server 2003中给我带来最直接的感觉就是IIS 6的安全性,直到现在为止笔者确实没有发现IIS 6中有什么重大的漏洞可以被黑客利用。
工作进程隔离(Worker PRocess Isolation)以及URL的授权访问,我在以前版本里面根本就没有奢念。不仅如此,最主要的改进就是IIS本身的“默认可用性”和“默认锁定扩展服务” (如图2)。
当把服务器升级到Windows Server 2003的时候,假如你没有运行IISLockdown工具,服务器竟然禁止我们提供Web服务。
图2 IIS6的两项新功能提高了安全性