ⅡS的安全

网络与通信

大家如果利用免费空间来作为自己网站文件存放的位置,那么网站的安全基本就不用自己操心,让空间提供商自己忙去吧!要是打算用自己的机器架设Web服务器,除了做好系统的安全配置外(2002年《电脑报》31期D6版),还得经常为系统打上最新的补丁(2002年《电脑报》28期D6版)。当然这些还是很不够的,毕竟需要对外提供服务,IIS这个漏洞专业户是不可不做好防范的,下面让我们一起来看看IIS的安全应该如何来保卫吧!

安全配置

1.删除IIS例子程序所在的目录(假设IIS安装在D盘下IIS目录),具体位置如下:D:\inetpub\iissamples、D:\inetpub\scripts、%systemroot%\system32\inetsrv\adminsamples、%systemroot%\system32\inetsrv\iisadmpwd、%systemroot%\system32\inetsrv\iisadmin、C:\Program Files\Common Files\System\msadc\Samples。
2.从ISM(Internet Service Manager)中删除如下目录:IISSamples、Scripts、IISAdmin、IISHelp、IISADMPWD。
3.删除不必要的IIS扩展名映射
(1)在ISM中,选择计算机名,点鼠标右键,选择“属性”;
(2)选择“编辑→主目录”,点击“配置”;
(3)选择扩展名“.hta”、“.htr”和“.idc”,点击“删除”;
(4)如果不使用Server Side Include,则应删除“.shtm”、“.stm”和“.shtml”。
4.禁止缺省的WWW站点。
注意:如果网站用到SQL数据库,大家一定也要注意SQL Server的安全,笔者在这里就不再阐述了。

入侵检测

WWW服务大概是最常见的服务之一,由于这个服务面对广大用户,服务的流量和复杂度很高,所以针对这个服务的漏洞和入侵技巧也最多。对于WinNT/2000来说,IIS一直让系统管理员比较头疼(恨不得关了80端口),好在IIS自带的日志功能在某种程度上可以成为入侵检测的得力帮手。IIS自带的日志文件默认存放在System32\LogFiles目录下,一般是24小时滚动的,在IIS管理器中可以对它进行详细的配置。
我们假设有一台Web服务器,上面开放了WWW服务,你又是这台服务器的系统管理员,已经小心地配置了IIS,并且使用W3C扩展的日志格式,至少记录了时间(Time)、客户端IP(Client IP)、方法(Method)、URI资源(URI Stem)、URI查询(URI Query)、协议状态(Protocol Status)。我们用以前比较流行的Unicode漏洞来进行分析:打开IE的窗口,在地址栏输入127.0.0.1/scripts/..%c1% 1c../Winnt/system32/cmd.exe?/c+dir,默认的情况下你可以看到目录列表(什么?你已经做过安全配置了,看不到?恢复默认安装,我们要做个实验),让我们来看看IIS的日志都记录了些什么。打开Ex010318.log(Ex代表W3C扩展格式,后面的一串数字代表日志的记录日期):07 42 58 127.0.0.1 GET/scripts/..\../Winnt/system32\cmd.exe /c+dir 200,这行日志表示在格林威治时间07:42:58(就是北京时间23:42:58),有一个家伙(入侵者)从127.0.0.1(IP地址)访问你的机器并利用了Unicode漏洞(%c1%1c被解码为“\”,实际的情况会因为Windows语言版本的不同而有略微的差别)运行Cmd.exe,参数是/c dir,运行结果成功(HTTP 200代表正确返回)。哇!记录得可真够全的,以后不敢随便乱玩Unicode了。
大多数情况下,IIS的日志会忠实地记录它接收到的任何请求(也有特殊的不被IIS记录的攻击,这里就不讨论了)。所以,一个优秀的系统管理员应该擅长利用这点来发现入侵的企图,从而保护自己的系统。但是,IIS的日志数十MB、流量大的网站甚至数十GB,人工检查几乎没有可能,惟一的选择就是使用日志分析软件。用任何语言编写一个日志分析软件(其实就是文本过滤器)都非常简单,不过考虑到一些实际情况(比如管理员不会写程序,或者服务器上一时找不到日志分析软件),我可以告诉大家一个简单的方法。比方说你想知道有没有人从80端口上试图取得你的Global.asa文件,可以使用以下的命令:find “Global.asa”ex010318.log/i。
这个命令使用的是WinNT自带的Find.exe命令(所以不怕情况紧急时找不着),它可以轻松地从文本文件中找到你想要过滤的字符串。“Global.asa”是需要查询的字符串,Ex010318.log是待过滤的文本文件,/i代表忽略大小写。
无论是基于日志分析软件或者是Find命令,你都可以建立一张敏感字符串列表,包含已有的IIS漏洞(比如“+.htr”),以及未来出现的漏洞可能会调用的资源(比如Global.asa或者Cmd.exe),通过过滤这张不断更新的字符串表,一定可以尽早了解入侵者的行动。
提醒:使用任何日志分析软件都会占用一定的系统资源,因此,对于IIS日志分析这样低优先级的任务,应放在夜里空闲时自动执行会比较合适,如果再写一段脚本把过滤后的可疑文本发送给系统管理员,那就更加完美了。同时,如果敏感字符串表较大,过滤策略复杂,我建议还是用C语言编写一个专用程序会比较合算。

小技巧

为了对付日益增多的CGI漏洞扫描器,在IIS中将HTTP404 Object Not Found出错页面通过URL重定向到一个定制HTM文件,可以让目前绝大多数CGI漏洞扫描器失灵。其实原理很简单,大多数CGI扫描器在编写时为了方便,都是通过查看返回页面的HTTP代码来判断漏洞是否存在的。例如:著名的IDQ漏洞一般都是通过读取1.idq来检验,如果返回HTTP200,就认为有这个漏洞,反之如果返回HTTP404就认为没有。此时你通过URL将HTTP404出错信息重定向到HTTP200.htm文件,那么所有的扫描无论存不存在漏洞都会返回HTTP200,90%的CGI扫描器会认为你什么漏洞都有,结果反而掩盖了服务器真正存在的漏洞,这会让入侵者无从下手。不过从个人角度来说,我还是认为扎扎实实做好安全设置比这样的小技巧重要得多。
为了保险起见,你可以使用IIS的备份功能,将上面的设定全部备份下来,这样就可以随时恢复IIS的安全配置。还有,如果你怕IIS负荷过高导致服务器满负荷死机,也可以在性能中打开CPU限制,例如将IIS的CPU最大使用率限制在70%。