科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网安全频道IIS 5安全注意事项和安全配置

IIS 5安全注意事项和安全配置

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本节涵盖IIS5所特有的安全问题,同时微软的IIS默认安装实在不敢恭维,所以IIS的配置是也将是重点。

来源:比特网 2009年7月5日

关键字: IIS 系统安全

  • 评论
  • 分享微博
  • 分享邮件

  本节涵盖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) 禁用或删除所有的示例应用程序。示例只是示例;在默认情况下,并不安装它们,且从不在生产服务器上安装。请注意一些示例安装,它们只可从 http://localhost或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%。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章