本节涵盖IIS5所特有的安全问题,同时微软的IIS默认安装实在不敢恭维,所以IIS的配置是也将是重点。
(1) 在虚拟目录上设置ACL。尽管该步骤与应用程序稍微有些关系,但是经验仍适用,正如表5.4中列出的那样。
文件类型:
访问控制列表
CGI (.exe, .dll, .cmd, .pl)
Everyone (X)
Administrators(完全控制)
System(完全控制)
脚本文件 (.asp)
Everyone (X)
Administrators(完全控制)
System(完全控制)
Include 文件 (.inc, .shtm, .shtml)
Everyone (X)
Administrators(完全控制)
System(完全控制)
静态内容 (.txt, .gif, .jpg, .html)
Everyone (R)
Administrators(完全控制)
System(完全控制)
① 按文件类型推荐使用的默认ACL。
无需在每个文件上设置ACL,最好为每个文件类型创建一个新目录、在每个目录上设置ACL、允许ACL传给各个文件。例如,目录结构可为以下形式:
・ 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 服务器) |
在这两个目录上的ACL是Everyone(完全控制),并且应被更紧密的事物所覆盖(取决于您的功能级别)。如果打算支持 Everyone(写入),则将该文件夹放在IIS服务器以外的不同卷上,或使用Windows 2000磁盘配额限制可写入这些目录的数据量。
② 设置适当的IIS日志文件ACL
请确保IIS产生的日志文件 (%systemroot%\system32\LogFiles) 上的ACL是
・ Administrators(完全控制)
・ System(完全控制)
・ Everyone (RWC) |
这有助于防止恶意用户为隐藏他们的踪迹而删除文件。
当您希望确定服务器是否被攻击时,日志记录是极其重要的。应使用 W3C 扩展日志记录格式,步骤如下:
① 装载 Internet Information Services工具。
② 右键单击所述站点,然后从上下文菜单中选择“属性”。
③ 单击“Web 站点”选项卡。
④ 选中“启用日志记录”复选框。
⑤ 从“活动日志格式”下拉列表中选择“W3C扩展日志文件格式”。
⑥ 单击“属性”。
⑦ 单击“扩展属性”选项卡,然后设置客户IP地址、用户名、方法、URI资源、HTTP状态、Win32 状态、用户代理、服务器IP地址、服务器端口。
如果在一台计算机上有多个Web服务器,则后两种属性非常有用。Win32状态属性对于调试非常有用。检查日志时,密切注意错误5,这意味着访问被拒绝。在命令行上输入 net helpmsg err,可找出其他Win32错误的含义,其中err是要查找的错误号。
(2) 设置IP地址/DNS 地址限制。这不是常用选项,但是如果您希望限制某些用户对 Web 站点的访问,则这是可采用的选项。请注意,如果您输入IIS拥有的域名系统(DNS) 名称以执行 DNS 查找,则这将非常耗时。
(3) 验证可执行内容的可靠性。很难知道可执行内容是否可靠。一个试验就是使用 DumpBin工具查看可执行内容是否调用某些API。DumpBin 包括在多种Win32开发工具中。例如,如果要查看名为MyISAPI.dll的文件是否调用 RevertToSelf,请使用以下语法:
dumpbin /imports MyISAPI.dll | find "RevertToSelf"
如果屏幕上未显示任何结果,则MyISAPI.dll不直接调用 RevertToSelf。它可能通过 LoadLibrary调用API,在这种情况下,也可使用类似的命令搜索它。
(4) 在IIS服务器上更新根CA证书。这个过程分为两步:第一步,添加任何您信任的新根证书颁发机构 (CA) 证书 - 特别是,使用Microsoft证书服务2.0创建的根CA证书。第二步,删除您不信任的所有根CA证书。请注意,如果您不知道颁发根证书的公司名,千万别信他们。
IIS 使用的所有根CA证书都驻留在计算机的机器存储中。可通过以下步骤访问该存储:
・ 打开 Microsoft 管理控制台 (MMC)。
・ 从“控制台”菜单中选择“添加/删除管理单元”,然后单击“添加”。
・ 选择“证书”,然后单击“添加”。
・ 单击“计算机帐户”选项按钮。
・ 单击“下一步”。
・ 选择所述机器。
・ 单击“完成”。
・ 依次单击“关闭”和“确定”。
・ 扩展“证书”节点。
・ 打开“受信任的根证书颁发机构”。
・ 选择“证书”。 |
右窗格上将显示当前可信的全部根CA证书。如果愿意,可以删除多个证书。
(5) 禁用或删除所有的示例应用程序。示例只是示例;在默认情况下,并不安装它们,且从不在生产服务器上安装。请注意一些示例安装,它们只可从 [url]http://localhost[/url]或127.0.0.1访问;但是,它们仍应被删除。
表5.5列出一些示例的默认位置。
表5.5
示例
|
虚拟目录
|
位置
|
IIS
示例
|
\IISSamples
|
c:\inetpub\iissamples
|
IIS
文档
|
\IISHelp
|
c:\winnt\help\iishelp
|
数据访问
|
\MSADC
|
c:\program files\common files\system\msadc
|
启用或删除不需要的
COM
组件
(6) 启用或删除不需要的COM组件。某些COM组件不是多数应用程序所必需的,应加以删除。特别是,应考虑禁用文件系统对象组件,但是要注意这将也会删除 Dictionary 对象。切记某些程序可能需要您禁用的组件。例如,Site Server 3.0使用File System Object。以下命令将禁用 File System Object:
regsvr32 scrrun.dll /u
(7) 删除 IISADMPWD 虚拟目录。该目录可用于重置 Windows NT 和 Windows 2000 密码。它主要用于 Intranet 情况下,并不作为 IIS 5 的一部分安装,但是 IIS 4 服务器升级到 IIS 5 时,它并不删除。如果您不使用 Intranet 或如果将服务器连接到 Web 上,则应将其删除。有关该功能的详细信息,请参阅 Microsoft 知识库文章 Q184619。
(8) 删除无用的脚本映射。IIS 被预先配置为支持常用的文件名扩展如 .asp 和 .shtm 文件。IIS 接收到这些类型的文件请求时,该调用由 DLL 处理。如果您不使用其中的某些扩展或功能,则应删除该映射,步骤如下:
・ 打开Internet服务管理器。
・ 右键单击Web服务器,然后从上下文菜单中选择“属性”。
・ 主属性
・ 选择WWW 服务 | 编辑 | 主目录 | 配置
删除这些引用:
如果您不使用
...
|
删除该项:
|
基于
Web
的密码重设
|
.htr
|
Internet
数据库连接器(所有的
IIS 5 Web
站点应使用
ADO
或类似的技术)
|
.idc
|
服务器端包括
|
.stm
、
.shtm
和
.shtml
|
Internet
打印
|
.printer
|
索引服务器
|
.htw
、
.ida
和
.idq
|
(9) 要从IIS 5删除的扩展。除非您特别需要使用 .htr 功能,否则应删除 .htr 扩展。
(10) 少用或不用CGI程序。使用CGI程式时,因为处理程序(Process)须不断地产生与摧毁,造成执行效率不佳。一般而言,执行效率比较如下:静态网页(Static):100 ISAPI:50 ASP:10 CGI:1 换句话说,ASP比CGI可能快10倍,因此勿使用CGI程式可以改善IIS的执行效率。以弹性(Flexibility)而言:ASP > CGI > ISAPI > 静态网页(Static)。以安全(Security)而言:ASP(独立) = ISAPI(独立)= CGI > ASP(非独立)= ISAPI(非独立)= 静态网页(Static)。
当然有时不得不用CGI程序。因此这里提供了一个小技巧来对付日益增多的cgi漏洞扫描器。在IIS中将HTTP404 Object Not Found出错页面通过URL重定向到一个定制HTM文件,可以让目前绝大多数CGI漏洞扫描器失灵。其实原因很简单,大多数CGI扫描器在编写时为了方便,都是通过查看返回页面的HTTP代码来判断漏洞是否存在的,例如,著名的IDQ漏洞一般都是通过取1.idq来检验,如果返回HTTP200,就认为是有这个漏洞,反之如果返回HTTP404就认为没有,如果你通过URL将HTTP404出错信息重定向到HTTP404.htm文件,那么所有的扫描无论存不存在漏洞都会返回HTTP200,90%的CGI扫描器会认为你什么漏洞都有,结果反而掩盖了你真正的漏洞,让入侵者茫然无处下手。
(11) 检查ASP代码中的和查询字符串输入。许多站点使用用户的输入以调用其他代码或直接创建 SQL 语句。换句话说,它们将该输入视作有效的、格式正确的、非恶意的输入。不应这样看待;仍存在许多攻击,用户的输入被误以为是有效的输入,而该用户仍可获得对服务器的访问权或引起破坏。应对每一个输入和查询字符串进行检查,然后才能将它转到另一个可能使用外部资源(如文件系统或数据库)的进程或方法调用。
可用JScript V5和VBScript V5 正规表达式功能执行文本检查。以下示例代码可除去包含所有无效(不是0-9a-zA-Z或 _ 的字符)字符串:
Set reg = New RegExp
reg.Pattern = "\W+" ' One or more characters which
' are NOT 0-9a-zA-Z or '_'
strUnTainted = reg.Replace(strTainted, "")
以下示例可除去 | 操作符后面的所有文本:
Set reg = New RegExp
reg.Pattern = "^(.+)\|(.+)" ' Any character from the start of
' the string to a | character.
strUnTainted = reg.Replace(strTainted, "$1")
同样,在用Scripting File System Object打开文件或创建文件时要千万小心。如果文件名是基于用户的输入的,则该用户可能试图打开一个串口或打印机。以下JScript代码可除去无效的文件名:
var strOut = strIn.replace(/(AUX|PRN|NUL|COM\d|LPT\d)+\s*$/i,""); |
(12) 禁用父路径。“父路径”选项允许您在对诸如MapPath函数调用中使用“..”。在默认情况下,该选项处于启用状态,应该禁用它。禁用该选项的步骤如下:
・ 右键单击该Web站点的根,然后从上下文菜单中选择“属性”。
・ 单击“主目录”选项卡。
・ 单击“配置”。
・ 单击“应用程序选项”选项卡。
・ 取消选择“启用父路径”复选框。
(13) 禁用-内容位置中的IP地址。“内容-位置”标头可暴露通常在网络地址转换 (NAT) 防火墙或代理服务器后面隐藏或屏蔽的内部IP地址。
(14) 彻底删掉C盘Inetpub目录彻底删掉。在D盘建一个Inetpub(要是你不放心用默认目录名也可以改一个名字,但是自己要记得)在IIS管理器中将主目录指向D:\Inetpub。
(15) 备份。为了保险起见,你可以使用IIS的备份功能,将刚刚的设定全部备份下来,这样就可以随时恢复IIS的安全配置。还有,如果你怕IIS负荷过高导致服务器满负荷死机,也可以在性能中打开CPU限制,例如将IIS的最大CPU使用率限制在70%。