### 最新的 ASP、IIS 安全漏洞

当 ASP 以其灵活、简单、实用、强大的特性迅速风靡全球网站的时候，其本身的一些缺陷、漏洞也正威胁着所有的网站开发者，继上一篇中介绍了一些 IIS 的系统漏洞及 ASP 的安全问题后，本期中将针对最新的 ASP、IIS 安全漏洞进行详细的探讨，请所有的 ASP 网站开发者密切关注，提高警惕。
本月初微软再次被指责对其出品的 WEB 服务器软件的安全问题不加重视。在微软的流行产品 IIS SEVER4.0 中被发现存在一种被称为“非法 HTR 请求”的缺陷。据微软称，此缺陷在特定情况下会导致任意代码都可以在服务器端运行。但用发现这一漏洞的 Internet 安全公司 eEye 的 CEO Firas Bushnaq 的话说：这只是冰山一角而已。Bushnaq 说，微软隐瞒了些情况，比如黑客可以利用这一漏洞对 IIS 服务器进行完全的控制，而恰恰许多电子商务站点是基于这套系统的。
下面罗列出了该 IIS 系统漏洞的详细情况:
IIS 的最新安全漏洞
受影响的系统:
Internet Information Server 4.0 (IIS4)
Microsoft Windows NT 4.0 SP3 Option Pack 4
Microsoft Windows NT 4.0 SP4 Option Pack 4
Microsoft Windows NT 4.0 SP5 Option Pack 4
公布日期:6.8.1999
microsoft 已经证实了这个漏洞,但目前还没有提供可用的补丁程序。
微软安全公告 (MS99-019):
主题："非正常的 HTR 请求" 漏洞
发布时间: 6.15.1999
摘要：
微软已经证实在其发布的 WEB 服务器产品 Internet Information Server 4.0 中存在一个严重的系统漏洞，该漏洞导致对于 IIS 服务器的“服务拒绝攻击”，在这种情况下，可能导致任何 2 进制代码在服务器上运行。有关该漏洞的补丁将在近期发布，请所有 IIS 用户密切关注。
漏洞介绍：
IIS 支持多种需要服务器端处理的文件类型，譬如：ASP、ASA、IDC、HTR，当一个 WEB 用户从客户端请求此类文件时，相应的 DLL 文件将自动对其进行处理。然而在 ISM.DLL 这个负责处理 HTR 文件的文件中被发现存在严重的安全漏洞。（注：HTR 文件本身是用来远程管理用户密码的）
该漏洞包含了一个在 ISM.DLL 中未经验证的缓冲，它可能对 WEB 服务器的安全运作造成两方面的威胁。首先，是来自服务拒绝攻击的威胁，一个来自非正常的对.HTR 文件请求将导致缓存溢出，从而直接导致 IIS 崩溃，当这种情况发生时，无须重启服务器，但是 IIS WEB 服务器必须重新启动。另一个威胁更令人头痛，通过使用一个精心构建过的文件请求将可以利用标准的缓存溢出手段导致 2 进制代码在服务器端运行，在这种情况下，什么都可能发生！该漏洞不包括提供用来管理用户密码的功能的.HTR 文件。
原理分析：
至少在一个 IIS 的扩展名中(例如:ASP,IDC,HTR)存在溢出。我们推测溢出将在 IIS 把完整的 URL 传递给 DLL 去处理扩展名时发生。如果 ISAPI DLL 没有正确的检查限制范围从而导致 INETINFO.EXE 产生一个溢出,用户就从可以远端执行 2 进制代码。攻击方法:向 IIS 发一个如下的 HTTP 请求:"GET /[overflow].htr HTTP/1.0"，IIS 将崩溃。这里的[overflow]可以是 3K 长的代码。
大家可能对.HTR 文件不是很熟悉，其实 IIS 具有让 NT 用户通过 WEB 目录/iisadmpwd/更改自己的口令的能力。而这个功能正是由一组.HTR 文件和 ISAPI 的一个扩展 DLL: ISM.DLL 实现的。当一个完整的 URL 传递到 ISM.DLL 时，由于没有适当的大小限制的检查，就会导致溢出产生，从而使得服务器崩溃。HTR/ISM.DLL ISAPI 是 IIS4 缺省安装。
解决途径：
由于目前微软尚未发布可供使用的补丁程序，因此我们只能做一些应急的防范。
1、将.HTR 扩展名从 ISAPI DLL 的列表中删除
在你的 NT 桌面上，点击“开始”—>“程序”—>“Windows NT 4.0 Option Pack”—>“Microsoft Internet Information Server”—>“Internet 服务管理器”；双击“Internet Information Server”；鼠标右键单击计算机名称并选择“属性”；在“主属性”下拉式菜单中选择“WWW 服务”并点击“编辑”按钮；选择“主目录”文件夹，并点击“配置”按钮，在“应用程序映射”列表框中选中.HTR 的相关映射，选择“删除”，并确定。
2、安装微软提供的补丁程序，请密切关注以下网址
http://www.microsoft.com/security
http://www.microsoft.com/security/products/iis/CheckList.asp
可能一些朋友会感到不解，为什么我在 ASP 篇 17、18 期连续利用两大篇幅着重讨论 IIS、ASP 的安全性问题，如果你是一个 WEB 开发者、ASP 程序员，我想你就应该能够体会我的用意。我们进行网络编程、开发交互性的网站，当然首先是为了发展、建设自身网站，但是这一些都是建立在安全的基础上，这里的安全包括对自己辛辛苦苦开发的 ASP 或其他网络应用程序代码的保护、确保网站服务器安全正常的运行、确保用户信息的安全及认证等等，当今后电子商务成为真正广泛运作的一种商务运行手段后，安全性更是关键之关键。我们中的很多朋友在作为 ASP 程序员的同时又身兼网络管理员的职责，因此熟悉系统的运作、及时了解系统漏洞、第一时间解决安全性问题就显得十分重要和必要，因此在本文的结尾，作者将整理的一些关于 NT、IIS 系统配置的安全性建议罗列出来，希望能给大家一些帮助。
1、使用最新版本的 Microsoft Internet Information Server4.0，并安装 NT 最新版本的 Service Pack5，服务器的文件系统不要使用 FAT，应该使用 NTFS。
2、把 IIS 中的 sample、scripts、iisadmin 和 msadc 等 web 目录设置为禁止匿名访问并限制 IP 地址。在微软还没有提供补丁之前，把 ism.dll 有关的应用程序映射删除。
3、有条件的话就采用防火墙机制，最简单的如 web 服务开在前台，目录放在后台，如果能一个服务一台机当然最好。
4、Web 目录，CGI 目录，scripts 目录和 winnt 目录等重要目录要用 NTFS 的特性设置详细的安全权限，包含注册表信息的 Winnt 目录只允许管理员完全控制，一般的用户只读的权限也不要给。凡是与系统有关的重要文件，除了 Administrator，其它帐号都应该设置为只读权限，而不是 everyone/完全控制 。
5、只开你需要的服务,block 掉所有不应该打开的端口，如 NetBios 端口 139，这是一个典型的危险端口；怎样禁止这些端口？除了使用防火墙外，NT 的 Tcp/IP 设置里面也提供了这种功能：打开控制面板-网络-协议-TCP/IP-属性-高级-启用安全机制-配置，这里面提供了 TCP 和 UDP 端口的限制和 IP 协议的限制功能。
6、管理员的帐号要设置得复杂一些，建议加入特殊字符。
7、把 FTP，Telnet 的 TCP 端口改为非标准端口，通常我都是设置到 10000~65000 的范围
8、删除可以删除的所有共享，包括打印机共享和隐藏的共享如 ICP$,Admin$等，微软说这些特殊共享资源很重要，大多数情况下不能删除，而实际上放在 Internet 上的机器大多数不需要共享。
IPC$: 适用于远程管理计算机和查看共享资源,在网上最好不要用
Admin$: 实际上就是 c:\winnt，也没有必要共享
C$: 登录为 Admin 和 Backup-operator 的用户可以用\\计算机名\C$的方式访问 C 盘,虽然仅限于局域网,但是远程黑客也有办法伪装成局域网的登录用户，所以都应该关掉。
Print$: 这是放打印机驱动程序的目录，与上面的一样也是个很危险的入口。
Netlogon: 这是处理域登录请求的共享。如果你的机器为主域控制器，域内有其它机器要登录进来，就不要删除它，否则照样可以删除。
如何关闭这些共享？用“服务器管理器”—>“共享目录”—>“停止共享”
9、将 ASP 的目录集中管理，ASP 的程序目录设置详尽的访问权限，一般建议不要使用“读”权限。
10、把 winnt 下的 sam._文件改名,实践证明这个可能泄露密码的文件可以删除不要。
11、对于已知的 NT 安全漏洞，都应该在自己的机器上做测试检查。并及时安装补丁程序。
12、有必要的情况下采用 IIS4.0 提供的 SSL 安全通信机制来防止数据在网上被截获。