发新话题
打印

[转载]改善IIS5的安全性

[转载]改善IIS5的安全性

  信息来源:http://sinbad.zhoubin.com

   改善IIS5的安全性
我要评论
发信人: Sinbad <anonymous@anonymous.com>
标  题: 改善IIS5的安全性
发信站: 辛巴达 (Fri Sep 27 10:11:59 2002)

发信人: Sinbad <MicroBin@263.net>
标  题: 改善IIS5的安全性
发信站: 辛巴达 (Mon Oct  9 14:51:29 2000)

改善IIS5的安全性

by Sinbad
Sep 3, 2000
http://sinbad.dhs.org

1. 为虚拟目录设置合适的ACLs,参见下表:

-----------------------------------------------------------------
文件类型                ACLs
-----------------------------------------------------------------
CGI(.exe,.dll,.cmd,.pl)   Everyone (X)
                      Administrators (Full Control)
                      System (Full Control)
-----------------------------------------------------------------
脚本文件(.asp)           Everyone (X)
                      Administrators (Full Control)
                      System (Full Control)
-----------------------------------------------------------------
包含文件(.inc,.shtm,.shtml) Everyone (X)
                      Administrators (Full Control)
                      System (Full Control)
-----------------------------------------------------------------
静态内容(.txt,.gif,.html)  Everyone (R)
                      Administrators (Full Control)
                      System (Full Control)
-----------------------------------------------------------------

为了省去为每个文件设置ACLs的麻烦,建议为不同的文件开辟不同的目录,然后把AC
Ls从目录继承下来至每一个文件。一般的目录结构如下所示:

c:\inetpub\wwwroot\myserver\static (.html)
c:\inetpub\wwwroot\myserver\include (.inc)
c:\inetpub\wwwroot\myserver\script (.asp)
c:\inetpub\wwwroot\myserver\executable (.dll)
c:\inetpub\wwwroot\myserver\images (.gif, .jpeg)

同时,要注意下面两个目录:

c:\inetpub\ftproot (FTP服务器)
c:\inetpub\mailroot (SMTP服务器)

这两个目录默认的ACLs是Everyone完全控制,但是根据你的需求可能要严格的调整。
如果你要Everyone可写,建议把这两个目录放在和IIS不同的分区上,同时使用Win20
00的磁盘限额工具来控制用户的可写空间。

2. 设置IIS log文件的ACLs

要确保IIS的Log文件的ACLs是这样的:

Administrators (Full Control)
System (Full Control)
Everyone (RWC)

这样可以防止恶意用户删除log文件来隐藏自己的踪迹。

3. 删除samples程序

IIS的samples程序往往是漏洞的根源,大部分都是没用的,应该删除之。

-----------------------------------------------------------------
samples              虚拟目录       绝对路径
-----------------------------------------------------------------
IIS samples           \IISSamples     c:\inetpub\iissamples
-----------------------------------------------------------------
IIS帮助              \IISHelp       c:\winnt\help\iishelp
-----------------------------------------------------------------
Data Access           \MSADC        c:\program files\common
                              files\system\msadc
-----------------------------------------------------------------

4. 停用或者删除不需要的COM组件

大部分程序都用不到的一些组件都应该删除,可以避免安全隐患。比较出名的就是Fi
le System Object了,但是删除它的同时也会删掉Dictionary object。所以删除组件
的时候要特别注意它是哪些程序所需要的,比如Site Server 3.0就需要File System
Object。下面的命令将禁用File System Object:

regsvr32 scrrun.dll /u

5. 删除IISADMPWD虚拟目录

这个目录可以让你重设Windows NT或者Windows 2000的密码。尽管IIS5.0没有安装,
但是如果你是从IIS4升级过来的,它仍然没有被移除。如果你不是在Intranet中,服
务器连上了Internet,就一定要删除之。

6. 删除无用的脚本映射

IIS默认支持处理一些特定扩展名文件,如.asp、.shtm等等。当IIS接受到含有这些扩
展名的文件请求的时候,它将调用DLL来进行处理。如果你不需要其他的一些扩展名,
建议按以下步骤取消它们的映射:

1)打开Internet服务管理器。
2)右击Web服务器,选择属性。
3)选择:WWW Service | Edit | HomeDirectory | Configuration

根据以下表格删除相应的映射:

-----------------------------------------------------------------
如果你不需要。。。           删除
-----------------------------------------------------------------
Web上修改密码              .htr
-----------------------------------------------------------------
IDC连接数据库              .idc
(现在都用ADO)
-----------------------------------------------------------------
SSI                     .stm,.shtm,.shtml
-----------------------------------------------------------------
Internet打印               .printer
-----------------------------------------------------------------
Index Server               .htw,.ida,.idq
-----------------------------------------------------------------

注意:除非你有充足的理由一定需要使用.htr功能,不然务必要删除.htr。

7. 检查<FORM>中用户的输入

现在基于80端口的攻击,一般都是从CGI程序的入口参数考虑。因此程序员必须要想到
用户输入数据的各种可能情况,并且进行过滤处理。下面给出一些例子:

过滤不是0-9a-zA-Z和_的代码:

Set reg = New RegExp
reg.Pattern = "\W+"
strUnTainted = reg.Replace(strTainted, "")

过滤|以后的字符:

Set reg = New RegExp
reg.Pattern = "^(.+)\|(.+)"
strUnTainted = reg.Replace(strTainted, "$1")

使用File System Object的时候一定要小心,如果被打开的文件名来自用户的输入,
用户可能企图打开一个串口或者打印机。下面的代码可以过滤文件名:

var strOut = strIn.replace(/(AUX|PRN|NUL|COM\d|LPT\d)+\s*$/i,"");

匹配字符串的语法和Perl5的差不多,请访问以下连接获得详细的信息:
http://msdn.microsoft.com/scripting/default.htm
http://msdn.microsoft.com/worksh ... scripting051099.asp


本文参考资料:http://www.microsoft.com/technet/security/iis5chk.asp


--

※ 来源:.辛巴达 sinbad.dhs.org. [FROM: WWW]

TOP

发新话题