IIS5是Windows2000操作系统所带的Internet服务程序包,它包含了www、ftp、smtp以及index server等等众多实用功能。无论是创建一个Internet外部站点,还是构造一个Intranet内部应用,使用IIS5都是非常好的选择。同时,如何保障IIS5安全稳定运行、内容发布正确可靠,这是系统管理员必须高度重视的问题。本文就IIS5的安全策略设计进行概要分析,旨在让大家从宏观角度了解系统管理员都应在哪些方面执行必要的安全配置,然后根据实际环境再在各个环节分别扩展,最终创建一个安全的IIS5服务器。
为虚拟目录设置适当的访问权限
正确设置虚拟目录的访问权限,将会很大程度地影响其中文件的安全可靠性。建议考虑以下几个方面的设置原则:
文件类型 建议的访问权限
以下为引用的内容: CGI 程序(.exe, .dll, .cmd, .pl) Everyone (X) 脚本文件(.asp) Everyone (X) Administrators (Full Control) 包含文件(.inc, .shtm, .shtml) Everyone (X) 静态文件 (.txt, .gif, .jpg, .html) Everyone (R) |
为不同类型的文件创建不同的目录
如果一个虚拟目录下面有多种类型的文件,按照上面的原则为每一种文件设置访问权限,无疑是非常烦琐的事情。因此,我们可以采取为不同类型文件创建不同目录的方式,然后再按照上面的原则为每一个目录设置相应的访问权限。比如,我们可以创建如下的目录结构:
C:/inetpub/wwwroot/myserver/static:存放静态文本文件(.html)
C:/inetpub/wwwroot/myserver/include:存放包含文件(.inc)
C:/inetpub/wwwroot/myserver/script:存放脚本文件(.asp)
C:/inetpub/wwwroot/myserver/executable:存放可执行文件(.exe,.dll, .cmd, .pl)
C:/inetpub/wwwroot/myserver/images:存放图形文件(.gif,.jpeg)
另外,请注意以下2个特殊的目录:
C:/inetpub/ftproot:FTP服务所在目录
C:/inetpub/mailroot:SMTP服务所在目录
这2个目录的访问权限是Everyone 完全控制(Full Control),每个用户都具有向其中添加数据的权限。这样,就有可能造成目录所在磁盘的空间耗尽。因此,我们建议:
将这2个目录放置到另外的磁盘卷中,与其他的IIS服务程序分开。
使用Windows 2000 磁盘配额功能限制添加到这2个目录的数据量。
为IIS日志文件设置适合的访问权限
IIS日志文件记录了所有访问IIS服务程序的信息,它对于系统管理员检测故障非常重要。攻击者为了销毁他们的侵入痕迹,总是要想方设法删除掉日志文件。因此,我们建议对这些日志文件进行重点保护,设置如下的访问权限:
以下为引用的内容: Administrators (Full Control) System (Full Control) Everyone (RWC) |
IIS日志文件一般位于如下路径:%systemroot%/system32/LogFiles。
使用日志文件
日志文件对于检查服务器是否被攻击是极为重要的。日志文件有多种,我们建议使用"W3C扩充日志文件格式",步骤如下:
启动"Internet服务管理器"
点击鼠标右键选择要设置的站点,在从弹出菜单中选择"属性"
点击"Web站点"选项卡
点击选中"启用日志记录"复选框
从"活动日志格式"下拉选择框中选择"W3C 扩充日志文件格式"
点击"属性"
点击"扩充的属性"选项卡,然后依次选中如下属性:
客户IP地址
用户名
方法
URI资源
HTTP状态
Win32状态
用户代理
服务器IP地址
服务器端口
以上最后2个属性只当一个计算机充当多个Web服务器时有意义,也就是所谓的虚拟主机。属性"Win32状态"对于调试非常有用,当它的数值等于5时,表示禁止访问(access denied)。我们可以在命令行执行如下命令得到其他的"Win32状态码"所表示的含义:
net helpmsg err
其中err表示Win32状态码。
禁止或者删除所有的例子程序
默认安装选项中,例子程序不会被安装到机器中。对于一个正式应用的服务器,我们不应该在其中安装任何例子程序。如果已经安装了某些例子程序,建议将它们完整删除掉。为了查找方便,以下我们列出一些例子程序的默认安装路径:
例子程序类别 所在虚拟目录 默认安装路径
IIS例子程序 /IISSamples c:/inetpub/iissamples
IIS文档 /IISHelp c:/winnt/help/iishelp
Data Access /MSADC c:/program files/common files/system/msadc
删除虚拟目录IISADMPWD
这个虚拟目录的作用是允许用户重新设置他们在Windows NT或者Windows 2000操作系统上的帐号口令,应用环境主要针对企业内部网Intranet。IIS5的安装中没有包含这一项,但是如果是从IIS4升级到IIS5,就会存在这个虚拟目录。建议如果不是Intranet环境,就将之删除。
删除不使用的应用程序映射关联
IIS默认情况下可以解释如.asp、.htr、.shtm等应用程序文件,当这些文件被IIS接收后,将交由一个DLL文件处理。如果使用不到其中某类文件,我们建议将删除那个类型在IIS中的映射关系。步骤如下:
启动"Internet服务管理器"
点击鼠标右键选择要处理的服务器,再选择"属性"
选择"WWW服务",点击"编辑"
点击"主目录"
点击"配置",显示出当前"应用程序映射"列表
然后参照下表删除相关类别:
如果不使用下列应用 就删除掉以下项目
基于Web的口令修改 .htr
Internet数据库连接器 (注意:所有的IIS5 Web服务器将使用ADO等相似技术代替数据库连接器) .idc
服务器端包含文件(Server-side Includes) .stm, .shtm, and .shtml
Internet打印 .printer
索引服务(Index Server) .htw, .ida and .idq
关于Internet打印服务,我们再说明一点。Internet打印可以通过Internet服务管理器进行配置,也可以通过组策略进行配置。当两者的配置间发生冲突时,以组策略的配置信息优先。如果在Internet服务管理器中删除了Internet打印,请记住不要再在本地或者域组策略中激活它。默认的组策略配置中,既不激活也不禁止Internet打印。在组策略中配置Internet打印的方法是:在MMC的组策略管理单元中,点击"计算机配置",点击"管理模板",点击"打印机",最后点击"基于Web的打印":
设置IP地址或者DNS域名地址的访问限制
如果Web站点只对特殊IP地址的客户服务,我们建议对Web站点执行IP地址限制的设置。如果设置是DNS域名信息,请注意,这会导致IIS执行DNS搜索工作,耗费一定的时间。
确认可执行文件的安全性
在访问网站内容时,IIS经常要执行一些.DLL文件。DLL文件属于可执行文件,可能会读写硬盘文件内容,所以最好确保其安全性。但是,如何判断DLL文件的安全性,却不是个简单的事情。这里介绍一个叫做DumpBin程序,它可以判断出可执行文件是否调用了某个API函数。比如说,我们使用下面的命令判断文件MyISAPI.dll是否调用了RevertToSelf:
dumpbin /imports MyISAPI.dll | find "RevertToSelf"
命令执行后,如果屏幕上没有任何输出信息,就表明MyISAPI.dll没有直接调用RevertToSelf。
更新IIS服务器上的根权威认证机构发放的证书(Root CA Certificates)
要完成更新工作,需要2个步骤:
首先,添加一个我们信任的新根权威认证机构发放的证书,特别是通过Microsoft认证服务2.0创建的新根权威认证机构证书。
然后,删除所有不被我们信任的根权威认证机构发放的证书。一般情况下,不被信任的机构就是指我们还不认识的机构。
所有被IIS使用的根权威认证机构证书都存储在计算机中,我们可以按照下列步骤访问它们:
在"开始/运行"中输入mmc,点击"确定",启动Microsoft管理控制台,即MMC
从"控制台"菜单中选择"添加/删除管理单元",点击"添加"
选择"证书",点击"添加"
点击"计算机帐户"选项
点击"下一步"
选择要访问的机器
点击"完成"
点击"关闭",点击"确定"
扩展"证书"节点
扩展"受信任的根证书颁发机构"
选择"证书"
这时,在右边窗口格中显示出当前所有的受信任的根证书颁发机构发放证书的资料。我们可以根据实际情况,删除不需要的证书。但是请格外注意,不要删除Microsoft公司或Verisign公司的相关证书,因为它们被操作系统广泛地使用。
禁止或删除不需要的COM组件
对于大多数应用程序不需要的COM组件,我们就应该考虑将其删除,比如说"文件系统对象"(File System Object)组件。请注意,如果删除了"文件系统对象"组件,"目录对象"(Dictionary object)组件也将被删除。但是提醒一点,有些程序可能需要禁止的组件,比如说,Site服务器3.0就使用到"文件系统对象"组件。删除"文件系统对象"组件的命令是: regsvr32 scrrun.dll /u。
重点检查ASP代码中的<FORM>输入内容和查询输入内容
许多站点都使用来自用户的输入信息去调用其他代码或者直接创建SQL命令。换言之,输入内容被假设为格式正确和语法正确。但是我们千万不能这么掉以轻心!许多攻击者就是在输入内容中填写非法代码从而巧妙偷窥服务器的内容,甚至造成数据的毁坏。因此,我们要特别重视检查来自<FORM>的输入内容或者查询字符串信息,只有其符合安全要求,才能进一步传递给下一个程序进行处理。
我们可以使用Jscript版本5和VBScript版本5的常规表达式功能检查文本信息的合法性。来看看几个例子。
以下为引用的内容: 下面的代码是除去字符串中所有非字母、非数字以及非_的字符: Set reg = New RegExp 下面的代码是除去|操作符后的所有文本: Set reg = New RegExp |
另外,当使用"文件系统对象"组件打开或创建文件时,如果文件名取自用户的输入内容,那么很可能被攻击者利用去试图打开一个计算机的串口或者打印机设备。为了防止这个问题发生,我们可以使用下面的Jscript代码除去非法文件名:
var strOut = strIn.replace(/(AUX|PRN|NUL|COM/d|LPT/d)+/s*$/i,"");
从以上几个简单的实例,我们可以看到脚本引擎版本5处理字符串的强大功能。微软站点有关于脚本应用的详细文档与例程,地址如下:
文档:http://msdn.microsoft.com/scripting/default.htm
例程:http://msdn.microsoft.com/workshop/languages/clinic/scripting051099.asp
禁止父路径(Parent Paths)表达法
默认情况下,可以在函数中使用父路径".."。但是为了安全考虑,我们应该禁止这个功能,步骤如下:
在"Internet服务管理器"中右键点击要处理服务器的"默认Web站点",从弹出菜单中选择"属性 "
点击"主目录"选项卡
点击"配置"
点击"应用程序选项"选项卡
去除"启用父路径"复选框