本模块内容 | |
目标 | |
适用范围 | |
如何使用本模块 | |
概述 | |
威胁与对策 | |
确保 Web 服务器安全的方法 | |
IIS 和 .NET Framework 安装注意事项 | |
安装建议 | |
确保 Web 服务器安全的步骤 | |
步骤 1:修补程序和更新程序 | |
步骤 2:IISLockdown | |
步骤 3:服务 | |
步骤 4:协议 | |
步骤 5:帐户 | |
步骤 6:文件和目录 | |
步骤 7:共享 | |
步骤 8:端口 | |
步骤 9:注册表 | |
步骤 10:审核和日志记录 | |
步骤 11:站点和虚拟目录 | |
步骤 12:脚本映射 | |
步骤 13:ISAPI 筛选器 | |
步骤 14:IIS 元数据库 | |
步骤 15:服务器证书 | |
步骤 16:Machine.Config | |
步骤 17:代码访问安全性 | |
安全 Web 服务器快照 | |
保持安全 | |
远程管理 | |
简化并自动设置安全性 | |
小结 | |
其他资源 |
Web 服务器位于宿主基础结构的前端。它直接连接到 Internet,负责接收来自客户端的请求、创建动态 Web 页并对请求的数据作出响应。
安全的 Web 服务器可为宿主环境提供可靠的基础,其配置在 Web 应用程序的整体安全方面起重要作用。但是,如何确保 Web 服务器安全呢?确保 Web 服务器安全的挑战之一就是要明确自己的目标。只有明白了何谓安全的 Web 服务器,您就可以了解如何为此应用所需的配置设置。
本模块提供了一种系统且可重复的方法,您可以使用它成功配置安全的 Web 服务器。模块还介绍了一种确保 Web 服务器安全的方法,该方法将服务器的配置划分为十二个安全区域。每一安全区域都由一系列高级操作步骤组成。这些步骤都是模块化的,介绍了将方法付诸实施的途径。
使用本模块可以实现:
• | 了解何谓安全的 Web 服务器。 |
• | 使用已证明正确的方法确保 Web 服务器安全。 |
• | 了解在默认情况下 Windows 2000 Server 中 IIS 的完整安装和 .NET Framework 的安装内容。 |
• | 了解安全 Web 服务器中可禁用的服务。 |
• | 安全配置 Web 服务器,包括操作系统协议、帐户、文件、目录、共享、端口、注册表、审核和日志记录。 |
• | 安全配置 Web 服务器应用程序(本例是 IIS)组件,包括 Web 站点、虚拟目录、脚本映射、ISAPI 筛选器、元数据库和服务器证书。 |
• | 安全配置 .NET Framework 设置,包括 Machine.config 文件和代码访问安全性。 |
• | 针对远程管理安装并使用安全的终端服务。 |
• | 了解解决常见 Web 服务器威胁(包括配置处理、拒绝服务、未经授权的访问、随意代码执行、特权提升、病毒、蠕虫和特洛伊木马)的常用对策。 |
本模块适用于下列产品和技术:
• | Microsoft Windows Server 2000 和 2003 |
• | Microsoft .NET Framework 1.1 和 ASP.NET 1.1 |
• | Microsoft Internet 信息服务 (IIS) 5.0 和 6.0 |
为了充分理解本模块内容,您应:
• | 阅读模块 2 威胁与对策。这有助于您更广泛地了解 Web 应用程序的潜在威胁。 |
||||||
• | 使用快照。安全 Web 服务器快照部分列出并说明了安全 Web 服务器的属性。它反映了来自各种源(包括客户、行业专家和内部 Microsoft 开发与支持小组)的输入。在配置服务器时,请参考快照表。 |
||||||
• | 使用检查表。本指南“检查表”部分的检查表:保护 Web 服务器提供了一份可打印的作业帮助,可将它用作快速参考。使用基于任务的检查表可快速评估必需的步骤,然后帮助您逐步完成各个步骤。 |
||||||
• | 使用“如何”部分。本指南“如何”部分包括了下列指导性文章:
|
究竟怎样的 Web 服务器才算安全?确保 Web 服务器安全的挑战之一就是明确您的目标。只有明白了何谓安全的 Web 服务器,您就可以了解如何为此应用所需的配置设置。本模块提供了一种系统且可重复的方法,您可以使用它成功配置安全的 Web 服务器。
本模块首先回顾了影响 Web 服务器的最常见威胁。然后,使用上述观点创建相应的方法。最后,模块将这种方法付诸实施,并逐步说明如何提高 Web 服务器的安全性。尽管基本方法可跨不同技术复用,但本模块的重点是如何保证运行 Microsoft Windows 2000 操作系统并驻留 Microsoft .NET Framework 的 Web 服务器的安全。
由于攻击者可远程攻击,Web 服务器常常是攻击对象。如果了解 Web 服务器的威胁并努力制定相应的对策,您可以预见很多攻击,进而阻止日渐增加的攻击者。
Web 服务器的主要威胁是:
• | 配置处理 |
• | 拒绝服务 |
• | 未经授权的访问 |
• | 随意代码执行 |
• | 特权提升 |
• | 病毒、蠕虫和特洛伊木马 |
图 16.1 汇总了目前流行的攻击和常见漏洞。
图 16.1
Web 服务器主要威胁和常见漏洞
配置处理或主机枚举是一种收集 Web 站点相关信息的探测过程。攻击者可利用这些信息攻击已知的薄弱点。
漏洞
致使服务器容易受到配置处理攻击的常见漏洞包括:
• | 不必要的协议 |
• | 打开的端口 |
• | Web 服务器在横幅中提供配置信息 |
攻击
常见的配置处理攻击包括:
• | 端口扫描 |
• | Ping 扫射 (ping sweep) |
• | NetBIOS 和服务器消息块 (SMB) 枚举 |
对策
有效的对策有,阻止所有不必要的端口、阻止 Internet 控制消息协议 (ICMP) 通信、禁用不必要的协议(如 NetBIOS 和 SMB)。
如果服务器被泛滥的服务请求所充斥,则出现拒绝服务攻击。此时的威胁是,Web 服务器因负荷过重而无法响应合法的客户端请求。
漏洞
导致拒绝服务攻击增加的可能漏洞包括:
• | 薄弱的 TCP/IP 堆栈配置 |
• | 未修补的服务器 |
攻击
常见的拒绝服务攻击包括:
• | 网络级 SYN flood(同步攻击) |
• | 缓冲区溢出 |
• | 使用来自分布式位置的请求淹没 Web 服务器 |
对策
有效的对策有,强化 TCP/IP 堆栈,以及始终将最新的软件修补程序和更新程序应用于系统软件。
如果权限不合适的用户访问了受限的信息或执行了受限的操作,则出现未经授权的访问。
漏洞
导致未经授权访问的常见漏洞包括:
• | 薄弱的 IIS Web 访问控制(包括 Web 权限) |
• | 薄弱的 NTFS 权限 |
对策
有效的对策有,使用安全的 Web 权限、NTFS 权限和 .NET Framework 访问控制机制(包括 URL 授权)。
如果攻击者在您的服务器中运行恶意代码来损害服务器资源或向下游系统发起其他攻击,则出现代码执行攻击。
漏洞
可导致恶意代码执行的漏洞包括:
• | 薄弱的 IIS 配置 |
• | 未修补的服务器 |
攻击
常见的代码执行攻击包括:
• | 路径遍历 |
• | 导致代码注入的缓冲区溢出 |
对策
有效的对策有,配置 IIS 拒绝带有“../”的 URL(防止路径遍历)、使用限制性访问控制列表 (ACL) 锁定系统命令和实用工具、安装新的修补程序和更新程序。
如果攻击者使用特权进程帐户运行代码,则出现特权提升攻击。
漏洞
导致 Web 服务器易受特权提升攻击的常见漏洞包括:
• | 过度授权进程帐户 |
• | 过度授权服务帐户 |
对策
有效的对策有,使用特权最少的帐户运行进程、使用特权最少的服务和用户帐户运行进程。
恶意代码有几种变体,具体包括:
• | 病毒。即执行恶意操作并导致操作系统或应用程序中断的程序。 |
• | 蠕虫。可自我复制并自我维持的程序。 |
• | 特洛伊木马。表面上有用但实际带来破坏的程序。 |
在很多情况下,恶意代码直至耗尽了系统资源,并因此减慢或终止了其他程序的运行后才被发现。例如,“红色代码”就是危害 IIS 的臭名昭著的蠕虫之一,它依赖 ISAPI 筛选器中的缓冲区溢出漏洞。
漏洞
导致易受病毒、蠕虫和特洛伊木马攻击的常见漏洞包括:
• | 未修补的服务器 |
• | 运行不必要的服务 |
• | 使用不必要的 ISAPI 筛选器和扩展 |
对策
有效的对策有,提示应用程序安装最新的软件修补程序、禁用无用的功能(如无用的 ISAPI 筛选器和扩展)、使用特权最少的帐户运行进程来减小危害发生时的破坏范围。
为了确保 Web 服务器的安全,必须应用很多配置设置来减少服务器受攻击的漏洞。但究竟在何处开始、何时才算完成呢?最佳的方法是,对必须采取的预防措施和必要配置的设置进行分类。通过分类,您可以从上到下系统安排保护过程,或选择特定的类别完成特定的步骤。
本模块的安全方法都归入图 16.2 所示的类别。
图 16.2
Web 服务器配置类别
分类基本原理如下:
• | 修补程序和更新程序 |
• | 服务 |
• | 协议 |
• | 帐户 |
• | 文件和目录 |
• | 共享 |
• | 端口 |
• | 注册表 |
• | 审核和日志记录 |
• | 站点和虚拟目录 |
• | 脚本映射 |
• | ISAPI 筛选器 |
• | IIS 元数据库 |
• | Machine.config |
• | 代码访问安全性 |
在确保 Web 服务器安全以前,必须先知道安装 IIS 和 .NET Framework 后在 Windows 2000 服务器中出现的组件。本节说明了安装哪些组件。
IIS 安装了很多服务、帐户、文件夹和 Web 站点。有些组件是 Web 应用程序所不用的,如果不在服务器中删除,可能导致服务器易受攻击。表 16.1 列出了在 Windows 2000 Server 系统中完整安装 IIS(选定所有组件)后创建的服务、帐户和文件夹。
表 16.1:IIS 安装默认值
项目 | 详细信息 | 默认值 |
服务 |
IIS Admin Service(管理 Web 和 FTP 服务) |
安装 |
帐户和组 |
IUSR_MACHINE(匿名 Internet 用户) |
添至 Guest 组 |
文件夹 |
%windir%/system32/inetsrv(IIS 程序文件) |
|
Web 站点 |
默认 Web 站点 – 端口 80:%SystemDrive%/inetpub/wwwroot |
允许匿名访问 |
如果在驻留 IIS 的服务器中安装 .NET Framework,.NET Framework 将注册 ASP.NET。作为该过程的一部分,系统将创建一个名为 ASPNET 的特权最少的本地帐户。这将运行 ASP.NET 工作进程 (aspnet_wp.exe) 和会话状态服务 (aspnet_state.exe),后者可用于管理用户会话状态。
注意:在运行 Windows 2000 和 IIS 5.0 的服务器计算机中,所有 ASP.NET Web 应用程序都运行在 ASP.NET 工作进程的单个实例中,由应用程序域提供隔离。在 Windows Server 2003 中,IIS 6.0 借助应用程序池提供进程级隔离。
表 16.2 显示了 .NET Framework 版本 1.1 默认安装的服务、帐户和文件夹。
表 16.2:.NET Framework 安装默认值
项目 | 详细信息 | 默认值 |
服务 |
ASP.NET State Service:为 ASP.NET 提供进程外会话状态支持。 |
手动启动 |
帐户和组 |
ASPNET:运行 ASP.NET 工作进程 (Aspnet_wp.exe) 和会话状态服务 (Aspnet_state.exe) 的帐户。 |
添至 Users 组 |
文件夹 |
%windir%/Microsoft.NET/Framework/{版本} |
|
ISAPI 扩展 |
Aspnet_isapi.dll:处理 ASP.NET 文件类型的请求。将请求转发给 ASP.NET 工作进程 (Aspnet_wp.exe)。 |
|
ISAPI 筛选器 |
Aspnet_filter.dll:仅用于支持无 cookie 的会话状态。在 Inetinfo.exe (IIS) 进程内部运行。 |
|
应用程序映射 |
ASAX、ASCX、ASHX、ASPX、AXD、VDISCO、REM、SOAP、CONFIG、CS、CSPROJ、VB、VBPROJ、WEBINFO、LICX、RESX、RESOURCES |
/WINNT/Microsoft.NET/Framework/{版本} Aspnet_isapi.dll |
在默认情况下,Windows 2000 Server 安装程序将安装 IIS。但建议不要将 IIS 作为操作系统安装的一部分来安装,最好是日后更新并修补了基本操作系统之后再安装。安装了 IIS 之后,必须重新应用 IIS 修补程序并强化 IIS 配置,确保 IIS 接受完整的保护。只有这样,将服务器连接到网络中才安全。
如果要安装并配置新的 Web 服务器,请执行如下操作步骤概述。
• | 构建新的 Web 服务器
|
不要在生产服务器中安装 .NET Framework 软件开发工具包 (SDK)。SDK 包含了很多服务器不需要的实用工具。一旦攻击者获取了服务器的访问权限,便可利用其中的部分工具帮助发起其他攻击。
正确的做法是,安装可重新分发的软件包。要获取该软件包,可访问 Microsoft.com 的 .NET Framework 站点,其网址为 http://www.microsoft.com/china/net/,单击“Downloads”链接。
如果要构建多个服务器,可将 Service Pack 直接并入您的 Windows 安装。Service Pack 包括一个名为 Update.exe 的程序,作用是将 Service Pack 与您的 Windows 安装文件组合在一起。
• | 要将 Service Pack 与 Windows 安装组合在一起,请执行下列操作:
|
有关详细信息,请参阅 MSDN 文章“Customizing Unattended Win2K Installations”,网址是 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnw2kmag01/html/custominstall.asp(英文)。
下面几节将指导您完成保护 Web 服务器的过程。这些内容使用了本模块确保 Web 服务器安全的方法一节中介绍的配置类别。每个高级步骤都包含了一项或多项确保特定区域或功能安全的操作。
步骤 1 |
修补程序和更新程序 |
步骤 10 |
审核和日志记录 |
步骤 2 |
IISLockdown |
步骤 11 |
站点和虚拟目录 |
步骤 3 |
服务 |
步骤 12 |
脚本映射 |
步骤 4 |
协议 |
步骤 13 |
ISAPI 筛选器 |
步骤 5 |
帐户 |
步骤 14 |
IIS 元数据库 |
步骤 6 |
文件和目录 |
步骤 15 |
服务器证书 |
步骤 7 |
共享 |
步骤 16 |
Machine.config |
步骤 8 |
端口 |
步骤 17 |
代码访问安全性 |
步骤 9 |
注册表 |
|
|
使用最新的 Service Pack 和修补程序更新服务器。必须更新并修补所有的 Web 服务器组件,包括 Windows 2000(以及 IIS)、.NET Framework 和 Microsoft 数据访问组件 (MDAC)。
在本步骤中,您要执行以下操作:
• | 检测并安装必需的修补程序和更新程序。 |
• | 更新 .NET Framework。 |
使用 Microsoft 基准安全分析器 (MBSA) 检测当前安装中可能遗漏的修补程序和更新程序。MBSA 将拿您的安装与一个 XML 文件中维护的当前可用更新列表进行比较。可以让 MBSA 在扫描服务器时下载该 XML 文件,或将 XML 文件手动下载到服务器中,或将它保存在网络服务器中。
• | 检测并安装修补程序和更新程序
|
编写本指南时(2003 年 5 月),MBSA 无法检测 .NET Framework 的更新程序和修补程序。因此,您必须手动检测 .NET Framework 的更新程序。
• | 手动更新 .NET Framework 1.0 版
|
IISLockdown 工具可帮助您自动执行某些安全步骤。该工具大大减少了 Windows 2000 Web 服务器的很多漏洞。您可选取特定类型的服务器角色,然后使用自定义模板提高该特定服务器的安全性。这些模板或禁用不同功能,或保护不同功能。此外,IISLockdown 还安装了 URLScan ISAPI 筛选器。URLScan 允许 Web 站点管理员基于一组自己可控制的规则来限制服务器可处理的 HTTP 请求的种类。通过阻止特定的 HTTP 请求,URLScan 筛选器可防止可能有害的请求抵达服务器,并因此带来损害。
在本步骤中,您要执行以下操作:
• | 安装并运行 IISLockdown。 |
• | 安装并配置 URLScan。 |
IISLockdown 可通过 Microsoft 网站下载,网址是 http://download.microsoft.com/download/iis50/Utility/2.1/NT45XP/EN-US/iislockd.exe(英文)。
将 IISlockd.exe 保存在本地文件夹中。IISlockd.exe 是 IISLockdown 向导,它不是安装程序。通过再次运行 IISlockd.exe,可撤消 IISLockdown 进行的任何更改。
如果要锁定驻留 ASP.NET 页的基于 Windows 2000 的计算机,请在出现 IISLockdown 工具提示时选择“Dynamic Web”(动态 Web)服务器模板。一旦选择“Dynamic Web”(动态 Web)服务器时,IISLockdown 将执行下列操作:
• | 禁用如下不安全的 Internet 服务:
|
||||||||||
• | 将如下文件扩展名映射至 404.dll 来禁用脚本映射:
|
||||||||||
• | 删除如下虚拟目录:IIS Samples、MSADC、IISHelp、Scripts 和 IISAdmin。 |
||||||||||
• | 限制匿名访问系统实用工具,限制使用 Web 权限写入 Web 内容目录的权限。 |
||||||||||
• | 禁用 Web 分布式创作和版本控制 (WebDAV)。 |
||||||||||
• | 安装 URLScan ISAPI 筛选器。 |
注意:如果不使用传统的 ASP,请不要使用静态 Web 服务器模板。该模板可删除 ASP.NET 页必需的基本功能,如 POST 命令。
IISLockdown 工具将创建如下两份报告,其中列出了已应用的更改:
• | %windir%/system32/inetsrv/oblt-rep.log:其中包含高级信息。 |
• | %windir%/system32/inetsrv/oblt-log.log:其中包含低级详细信息,如使用拒绝访问控制项 (ACE) 配置了哪些程序文件(为了阻止匿名 Internet 用户帐户访问它们)。该日志文件还可用于支持 IISLockdown 的“撤消更改”功能。 |
IISLockdown 工具将创建 Web Anonymous Users 组和 Web Application 组。Web Anonymous Users 组包含了 IUSR_MACHINE 帐户。Web Application 组包含了 IWAM_MACHINE 帐户。各种权限都基于这些组分配给系统工具和内容目录,而并非直接分配给 IUSR 和 IWAM 帐户。可通过查看 IISLockdown 日志 %windir%/system32/inetsrv/oblt-log.log 来检查特定权限。
IISLockdown 工具将安装 404.dll,可将客户端不应运行的文件扩展名映射至该文件。有关详细信息,请参阅 步骤 12:脚本映射。
如果将 URLScan ISAPI 筛选器作为 IISLockdown 的一部分安装,URLScan 设置将在 IISLockdown 工具运行时与选定服务器角色集成。例如,如果选定静态 Web 服务器,URLScan 将阻止 POST 命令。
要撤消 IISLockdown 的更改,请再次运行 IISLockd.exe。这不会删除 URLScan ISAPI 筛选器。有关详细信息,请参阅本指南的“如何:使用 URLScan”部分的“删除 URLScan”。
有关 IISLockdown 工具的详细信息,请参阅以下文章:
• | 有关运行 IISLockdown 的详细信息,请参阅本指南“如何”部分的如何:使用 IISLockdown.exe。 |
• | 有关 IISLockdown 疑难解答的相关信息,请参阅 Microsoft 知识库文章 325864 How To:Install and Use the IIS Lockdown Wizard(英文)。(最常见的问题是:运行 IISLockdown 后收到意外的“404 File Not Found”(未找到 404 文件)错误消息。) |
• | 有关自动运行 IISLockdown 的相关信息,请参阅 Microsoft 知识库文章 310725 How To:Run the IIS Lockdown Wizard Unattended in IIS(英文)。 |
URLScan 在您运行 IISLockdown 工具时安装,尽管您可以下载并单独安装它。
• | 要在不运行 IISLockdown 的情况下安装 URLScan,请执行下列操作:
|
URLScan 可阻止包含不安全字符(例如,像使用“..”字符遍历目录这样的探测漏洞字符)的请求。URLScan 可将包含这些字符的请求记录在 %windir%/system32/inetsrv/urlscan 目录中。
您可以使用 .ini 文件 %windir%/system32/inetsrv/urlscan/urlscan.ini 中的设置来配置 URLScan。
除了阻止恶意请求,您还可以使用 URLScan 在请求到达 ASP.NET 前防止服务器受到拒绝服务攻击。为此,请在 URLScan.ini 文件的 MaxAllowedContentLength、MaxUrl 和 MaxQueryString 参数中设置限制。有关详细信息,请参阅本指南“如何”部分的如何:使用 URLScan。
删除 URLScan 没有相应的自动操作。如果使用 URLScan 时遇到问题,可将 URLScan 从 IIS 中删除,或将被拒绝的请求记录下来供分析。为此,请在 URLScan .ini 文件中使用选项 RejectResponseUrl=/~*。
有关如何删除 ISAPI 筛选器的详细信息,请参阅本模块后面的步骤 13:ISAPI 筛选器。
有关 URLScan 工具的详细信息,请参阅以下文章:
• | 有关运行 URLScan 的相关信息,请参阅本指南“如何”部分的如何:使用 URLScan。 |
• | 有关 URLScan 配置和 URLScan.ini 文件设置的相关信息,请参阅 Microsoft 知识库文章 326444 How To:Configure the URLScan Tool(英文)。 |
不对客户端进行身份验证的服务、使用不安全协议的服务、或特权太多的服务都将带来风险。如果不需要这些服务,请不要运行它们。通过禁用不必要的服务,您可快速轻松地减少攻击面。而且,您还可以减少维护方面(修补程序、服务帐户,等等)的开销。
如果要运行某个服务,请确保它是安全的并有一定的维护。为此,请使用特权最少的帐户运行该服务,然后通过应用修补程序使服务保持最新。
在本步骤中,您要执行以下操作:
• | 禁用不必要的服务。 |
• | 禁用 FTP、SMTP 和 NNTP(除非需要)。 |
• | 禁用 ASP.NET State service(除非需要)。 |
面对那些设法探测服务特权和功能来获取本地和远程系统资源访问权限的攻击者时,Windows 服务显得比较脆弱。作为一种防御措施,请禁用系统和应用程序不必要的 Windows 服务。您可使用“管理工具”程序组中的“服务”MMC 管理单元来禁用 Windows 服务。
注意:在禁用某项服务之前,请确保首先在测试环境或临时环境中测试其影响。
在大多数情况下,Web 服务器无需下列默认 Windows 服务:Alerter、Browser、Messenger、Netlogon(仅在域控制器中必需)、Simple TCP/IP Services 和 Spooler。
Telnet 服务是随 Windows 安装的,但在默认情况下是禁用的。IIS 管理员一般会启用 Telnet。但它确是一种易被探测的不安全协议。终端服务可提供更安全的远程管理。有关远程管理的详细信息,请参阅本模块后面的远程管理。
FTP、SMTP 和 NNTP 都是常被滥用的不安全协议。如果不需要这些服务,请不要运行它们。如果当前要运行它们,请试着找出安全的替代服务。如果必须运行,请确保其安全。
注意:IIS Lockdown 提供了禁用 FTP、SMTP 和 NNTP 的相关选项。
要消除 FTP 被探测的可能性,请禁用 FTP 服务(如果不使用它)。如果启用了 FTP,且用于出站连接,攻击者可使用 FTP 将文件和工具从攻击者的远程系统上载至 Web 服务器。一旦这些工具和文件位于您的 Web 服务器,攻击者即可攻击该 Web 服务器或其他已连接的系统。
如果使用 FTP 协议,则访问 FTP 站点的用户名和密码,以及传输的数据都不编码或加密。IIS 不支持 FTP 的 SSL。如果安全通信非常重要,您又将 FTP 用作传输协议(而非借助 SSL 的万维网分布式创作和版本控制 (WebDAV)),请考虑通过加密通道(如使用点对点隧道协议 (PPTP) 或 Internet 协议安全 (IPSec) 保护的虚拟专用网络 (VPN) )使用 FTP。
.NET Framework 安装了 ASP.NET State service (aspnet_state.exe) 来管理 ASP.NET Web 应用程序和 Web 服务的进程外用户会话状态。在默认情况下,该服务是手动启动的,并使用特权最少的本地 ASPNET 帐户运行。如果您的应用程序都不使用该服务保存状态,请禁用它。有关确保 ASP.NET 会话状态安全的详细信息,请参阅模块 19 确保 ASP.NET 应用程序和 Web 服务的安全中的“会话状态”。
避免使用不必要的协议可降低遭受攻击的可能性。.NET Framework 可通过 Machine.config 文件中的设置提供对协议的粒度控制。例如,您可控制 Web 服务是否使用 HTTP GET、POST 或 SOAP。有关在 Machine.config 文件中配置协议的详细信息,请参阅步骤 16:Machine.config。
在本步骤中,您要执行以下操作:
• | 禁用或保护 WebDav。 |
• | 强化 TCP/IP 堆栈。 |
• | 禁用 NetBIOS 和 SMB。 |
IIS 支持 WebDAV 协议,该协议是 HTTP 1.1 的标准扩展,用于发布协作内容。如果不使用该协议,请在生产服务器中禁用它。
注意:IISLockdown 提供了删除 WebDAV 支持的选项。
从安全角度来看,WebDAV 比 FTP 更可取,但您必须确保 WebDAV 的安全。有关详细信息,请参阅 Microsoft 知识库文章 323470 How To:Create a Secure WebDAV Publishing Directory(英文)。
如果不需要 WebDAV,请参阅 Microsoft 知识库文章 241520 How To:Disable WebDAV for IIS 5.0(英文)。
Windows 2000 支持对很多配置 TCP/IP 实现的参数进行粒度控制。其中一些默认设置可提供服务器可用性和其他特定功能。
有关如何强化 TCP/IP 堆栈的相关信息,请参阅本指南“如何”部分的如何:强化 TCP/IP 堆栈。
禁用所有不必要的协议,包括 NetBIOS 和 SMB。Web 服务器面向 Internet 的网卡 (NIC) 不需要 NetBIOS 或 SMB。禁用这些协议可对抗主机枚举威胁。
注意:SMB 协议可通过空会话将大量计算机信息返回给未经身份验证的用户。您可以阻止空会话,方法是设置 RestrictAnonymous 注册表项,参见步骤 9:注册表。
NetBIOS 使用以下端口:
• | TCP 和用户数据报协议 (UDP) 端口 137(NetBIOS 名称服务) |
• | TCP 和 UDP 端口 138(NetBIOS 数据报服务) |
• | TCP 和 UDP 端口 139(NetBIOS 会话服务) |
要禁止 SMB 通信,仅禁用 NetBIOS 是不够的。原因是:如果标准 NetBIOS 端口不可用,SMB 将使用 TCP 端口 445。(此端口称为“SMB 直接主机”。)因此,您必须分别禁用 NetBIOS 和 SMB。
• | 禁用 TCP/IP 的 NetBIOS |
注意:这一过程将禁用 Nbt.sys 驱动程序,并要求重新启动系统。
1. |
右键单击桌面的“我的电脑”,然后单击“管理”。 |
2. |
展开“系统工具”,选择“设备管理器”。 |
3. |
右键单击“设备管理器”,指向“查看”,然后单击“显示隐藏的设备”。 |
4. |
展开“非即插即用驱动程序”。 |
5. |
右键单击“NetBios over Tcpip”,然后单击“禁用”。 这将在 TCP 445 和 UDP 445 中禁用 NetBIOS 直接主机侦听程序。 |
SMB 使用下列端口:
• | TCP 端口 139 |
• | TCP 端口 445 |
要禁用 SMB,请使用“本地连接”属性中的“TCP/IP 属性”对话框,解除 SMB 与面向 Internet 的端口的绑定。
• | 要解除 SMB 与面向 Internet 的端口的绑定,请执行下列操作:
|
注意:“高级 TCP/IP 设置”对话框的“WINS”选项卡包含一个“禁用 TCP/IP 上的 NetBIOS”单选按钮。选择该选项可禁用使用 TCP 端口 139 的 NetBIOS 会话服务,它不完全禁用 SMB。为此,请使用以上过程。
必须删除不用的帐户,因为攻击者可能发现这些帐户并加以利用。必须使用强密码。弱密码增加了强力攻击或字典攻击的成功概率。使用最少的特权。攻击者可利用特权较多的帐户访问未经授权的资源。
在本步骤中,您要执行以下操作:
• | 删除或禁用不使用的帐户。 |
• | 禁用 Guest 帐户。 |
• | 重命名 Administrator 帐户。 |
• | 禁用 IUSR 帐户。 |
• | 创建自定义的匿名 Web 帐户。 |
• | 强制强密码策略。 |
• | 限制远程登录。 |
• | 禁用空会话(匿名登录)。 |
攻击者可以利用不用的帐户及其权限获取访问服务器的机会。审核服务器中的本地帐户,然后禁用那些不用的帐户。如果禁用帐户不产生任何问题,请删除该帐户。(已删除的帐户是无法恢复的。)在生产服务器中禁用帐户之前,请先在测试服务器中禁用这些帐户。确保禁用帐户不会在应用程序操作方面产生负面影响。
注意:Administrator 帐户和 Guest 帐户无法删除。
Guest 帐户在用户匿名连接计算机时使用。为了限制计算机的匿名连接,请禁用该帐户。在默认情况下,Windows 2000 系统禁用 Guest 帐户。要检查是否启用,请在“计算机管理”工具中查看“用户”文件夹。其中的 Guest 帐户应带有叉形图标。如果未禁用,请显示“属性”对话框,然后选中“帐户已停用”。
默认的本地 Administrator 帐户由于享有很高的计算机控制权限,因此常常是攻击者利用的目标。为了增强安全性,请重命名默认的 Administrator 帐户并设置强密码。
如果打算执行本地管理,请将该帐户配置为拒绝网络登录权限,并要求管理员以交互方式登录。这将防止用户(无意或有意)使用 Administrator 帐户从远程位置登录服务器。如果本地管理策略不够灵活,请实施安全的远程管理解决方案。有关详细信息,请参阅本模块后面的远程管理。
禁用默认的匿名 Internet 用户帐户 IUSR_MACHINE。该帐户在 IIS 安装过程中创建。安装 IIS 时服务器的 NetBIOS 名称是 MACHINE。
如果应用程序支持匿名访问(例如,使用表单身份验证之类的自定义身份验证机制时),请创建自定义的、特权最少的匿名帐户。如果要运行 IISLockdown,请将自定义用户添至已创建的 Web Anonymous Users 组。IISLockdown 拒绝访问系统实用工具,并拒绝写入 Web Anonymous Users 组的 Web 内容目录。
如果要在 Web 服务器中驻留多个 Web 应用程序,您可能希望使用多个匿名帐户(每个应用程序使用一个)来单独保护和审核每个应用程序的操作。
有关驻留多个 Web 应用程序的详细信息,请参阅模块 20 驻留多个 Web 应用程序。
为了对抗攻击者施加给应用程序的密码猜测和强力字典攻击,请应用强密码策略。要强制使用强密码策略,请执行下列操作:
• | 设置密码长度和复杂性。使强密码减少密码猜测或字典攻击的威胁。强密码由八个或更多字符组成,必须既有字母也有数字。 |
• | 设置密码过期时间。定期过期的密码可减少旧密码被未经授权的访问利用的可能性。通常,过期频率遵循公司的安全策略。 |
表 16.3 列出了默认的和建议的密码策略设置。
表 16.3:密码策略的默认设置和建议设置
密码策略 | 默认设置 | 建议最低设置 |
强制密码历史 |
1 个记住的密码。 |
24 个记住的密码。 |
密码最长使用期限 |
42 天 |
42 天 |
密码最短使用期限 |
0 天 |
2 天 |
最短密码长度 |
0 个字符 |
8 个字符 |
密码必须满足复杂性要求。 |
禁用 |
启用 |
用可还原的加密来储存密码(针对域中的所有用户)。 |
禁用 |
禁用 |
此外,记录失败的登录尝试可检测并跟踪恶意行为。有关详细信息,请参阅步骤 10:审核和日志记录。
从 Everyone 组中删除“从网络访问此计算机”特权,限制可远程登录服务器的用户。
为了防止匿名访问,请禁用空会话。这些会话是在两台计算机之间建立的未经身份验证的会话或匿名会话。除非禁用空会话,否则攻击者可匿名(无须进行身份验证)连接您的服务器。
一旦攻击者建立了空会话,他(或她)就可以实施各种攻击,包括使用枚举技术来收集目标计算机中与系统相关的信息(这些信息大大帮助了攻击者发起后续攻击)。可通过空会话返回的信息类型包括域、信任细节、共享、用户信息(包括组和用户权限)、注册表项等等。
如果在注册表的以下子项将“RestrictAnonymous”设置为“1”,则可限制空会话:
HKLM/System/CurrentControlSet/Control/LSA/RestrictAnonymous=1
有关详细信息,请参阅 Microsoft 知识库文章 246261 How To:Use the RestrictAnonymous Registry Value in Windows 2000(英文)。
下面是进一步提高 Web 服务器安全性的其他步骤列表:
• | 要求审批帐户委派。 |
• | 不要使用共享帐户。 |
• | 限制本地 Administrators 组成员身份。 |
• | 要求 Administrator 以交互方式登录。 |
将 Windows 2000 安装在 NTFS 文件系统分区中有助于借助 NTFS 权限来限制访问。使用强大的访问控制可确保文件和目录不受攻击。在大多数情况下,许可访问特定的帐户要比拒绝访问特定的帐户更有效。请尽可能在目录级设置访问权限。文件一旦添加到文件夹中便继承了文件夹的相应权限,因此您无需再完成任何设置。
在本步骤中,您要执行以下操作:
• | 限制 Everyone 组。 |
• | 限制匿名 Web 帐户。 |
• | 保护或删除工具、实用工具和 SDK。 |
• | 删除示例文件。 |
Windows 2000 的默认 NTFS 权限可授予 Everyone 组成员完全控制很多关键位置(包括根目录、/inetpub 和 /inetpub/scripts)的权限。
首先,将根目录 (/) 的完全控制权限授予 Administrator 帐户,然后从以下目录删除 Everyone 组的访问权限。
• | 根目录 (/) |
• | 系统目录 (/WINNT/system32) |
• | Framework 工具目录 (/WINNT/Microsoft.NET/Framework/{版本}) |
• | Web 站点根目录和所有内容目录(默认值是 /inetpub/*) |
匿名帐户是众所周知的。攻击者可利用这种众所周知的帐户执行恶意操作。要确保匿名帐户的安全,请执行下列操作:
• | 拒绝对 Web 内容目录的写入访问。 |
• | 限制对系统工具的访问。 |
• | 将权限分配给组,而不是单独的帐户。 注意:IISLockdown 通过将拒绝写入控制项 (ACE) 应用于 Web Anonymous Users 和 Web Applications 组,从而拒绝匿名帐户对内容目录进行写入访问。此外,它还在命令行工具中添加拒绝执行 ACL。 |
• | 在不同的应用程序中使用不同的帐户。 有关使用多个匿名帐户和驻留多个应用程序的详细信息,请参阅模块 20 驻留多个 ASP.NET 应用程序。 |
SDK 和资源工具包不应安装在 Web 生产服务器中。如果存在,请将其删除。
• | 确保在服务器中仅安装 .NET Framework 可重新分发的软件包,且不安装任何 SDK 实用工具。不要在生产服务器中安装 Visual Studio .NET。 |
• | 确保对功能强大的系统工具和实用工具(如 /Program Files 目录中的系统工具和实用工具)的访问有一定限制。使用 IISLockdown 可做到这一点。 |
• | 调试工具不应在 Web 服务器中可用。如果必须进行生产调试,应创建一个包含必要调试工具的 CD。 |
通常,示例应用程序都不使用级别较高的安全设置来配置。攻击者有可能利用示例应用程序或配置本身的漏洞对您的 Web 站点进行攻击。删除示例应用程序可减少 Web 服务器受攻击的区域。
此外,请考虑删除不必要的数据源名称 (DSN)。这些数据源包含了应用程序用来连接 OLE DB 数据源的明文连接详细信息。只有 Web 应用程序必需的 DSN 才应安装在 Web 服务器中。
删除所有不使用的共享,然后强化必需共享的 NTFS 权限。在默认情况下,所有的用户都有完全控制新创建的文件共享的权限。强化这些默认权限可确保只有授权用户才能访问共享中的文件。除了明显的共享权限外,还可将 NTFS ACL 用于共享中的文件和文件夹。
在本步骤中,您要执行以下操作:
• | 删除不必要的共享。 |
• | 限制对所需共享的访问。 |
删除所有不必要的共享。要查看共享和相关联的权限,请运行“计算机管理”MMC 管理单元,然后在“共享文件夹”中选择“共享”,如图 16.3 所示。
图 16.3
“计算机管理”MMC 管理单元共享
删除 Everyone 组,然后授予特定的权限。如果不限制可访问共享的用户,则使用 Everyone。
如果不允许远程管理服务器,请删除不使用的管理共享,例如“C$”和“Admin$”。
注意:有些应用程序可能要求管理共享。例如,Microsoft Systems Management Server (SMS) 和 Microsoft Operations Manager (MOM)。有关详细信息,请参阅 Microsoft 知识库文章 318751 How To:Remove Administrative Shares in Windows 2000 or Windows NT 4.0(英文)。
在服务器中运行的服务将使用特定的端口,以便为传入请求提供服务。关闭所有不必要的端口,然后执行常规的审核来检测处于侦听状态的新端口(这些端口指出了未经授权的访问和安全漏洞)。
在本步骤中,您要执行以下操作:
• | 将面向 Internet 的端口限定为 TCP 80 和 443。 |
• | 加密或限制 Intranet 通信。 |
限定出站通信使用端口 80(对于 HTTP)和端口 443(对于 HTTPS (SSL))。
对于出站(面向 Internet)NIC,使用 IPSec 或 TCP 筛选。有关详细信息,请参阅本指南“如何”部分的如何:使用 IPSec。
对于内部(面向 Intranet)NIC,如果您没有安全的数据中心,但又要在计算机间传递敏感信息,则必须考虑是加密通信,还是限制 Web 服务器和下游服务器(如应用程序服务器或数据库服务器)的通信。加密网络通信可解决网络窃听带来的威胁。如果认为风险很小,可选择不对通信进行加密。
使用的加密类型也会影响要解决的威胁类型。例如,SSL 是应用程序级加密,而 IPSec 是传输层加密。因此,SSL 可对抗来自同一计算机另一进程的数据篡改或信息泄漏威胁,尤其是使用不同帐户(与网络窃听的帐户相比)运行的进程。
注册表是很多重要服务器配置设置的存储库。因此,必须确保只有经过授权的管理员才能访问它。如果攻击者能编辑注册表,他(或她)可重新配置您的服务器,然后破坏其安全性。
在本步骤中,您要执行以下操作:
• | 限制对注册表进行远程管理。 |
• | 确保 SAM 的安全(仅限独立服务器)。 |
Winreg 键可决定注册表键是否可用于远程访问。在默认情况下,该键可防止用户远程查看注册表中的大多数键,只有特权较高的用户才能修改它。在 Windows 2000 中,远程注册表访问在默认情况下限定给 Administrators 和 Backup operators 组的成员。管理员拥有完全控制权限,备份操作员拥有只读访问权限。
下面注册表位置的相关权限决定了可远程访问注册表的人。
HKLM/SYSTEM/CurrentControlSet/Control/SecurePipeServers/winreg
要查看该注册表键的权限,请运行 Regedt32.exe,找到该键,然后从“安全”菜单中选择“权限”。
注意:有些服务要求远程访问注册表。请参考 Microsoft 知识库文章 153183 How to Restrict Access to the Registry from a Remote Computer(英文),了解您的情况是否要限制注册表的远程访问。
独立服务器可将帐户名称和单向(不可逆)密码哈希值 (LMHash) 保存在本地安全帐户管理器 (SAM) 数据库中。SAM 是注册表的一部分。通常,只有 Administrators 组的成员才能访问帐户信息。
虽然密码实际上并未保存在 SAM 中,密码哈希值也不可逆,但如果攻击者获得了 SAM 数据库的副本,该攻击者便可以使用强力密码技术取得有效的用户名和密码。
通过在注册表中创建键(不是值)NoLMHash 可限制在 SAM 中存储 LMHash,如下所示:
HKLM/System/CurrentControlSet/Control/LSA/NoLMHash
有关详细信息,请参阅 Microsoft 知识库文章 299656 How to Prevent Windows from Storing a LAN Manager Hash of Your Password in Active Directory and Local SAM Databases(英文)。
审核过程不能防止系统受攻击,但它是明确入侵者和进行中的攻击的重要辅助方法,且可帮助您诊断攻击踪迹。在 Web 服务器中启用级别最低的审核,然后使用 NTFS 权限保护日志文件,确保攻击者无法借助任何方式删除或更新日志文件来达到掩盖踪迹的目的。使用 IIS W3C 扩展日志文件格式审核。
在本步骤中,您要执行以下操作:
• | 记录所有失败的登录尝试。 |
• | 记录文件系统中的所有失败操作。 |
• | 重定位并保护 IIS 日志文件。 |
• | 存档日志文件供脱机分析。 |
• | 审核对 Metabase.bin 文件的访问。 |
只有记录失败的登录尝试才能检测和跟踪可疑行为。
• | 要审核失败的登录尝试,请执行下列操作:
|
登录失败将作为事件记录在 Windows 安全事件日志中。下面的事件 ID 是可疑的:
• | 531:表示使用禁用帐户进行登录尝试。 |
• | 529:表示使用未知的用户帐户或密码无效的有效用户帐户进行登录尝试。上述审核事件数量的意外增加表示存在密码猜测企图。 |
在文件系统中使用 NTFS 审核可检测恶意企图。本过程包括两个步骤。
• | 启用日志记录
|
• | 要审核文件系统中的失败操作,请执行下列操作:
|
通过移动和重命名 IIS 日志文件,可使攻击者更难掩盖自己的踪迹。攻击者必须先找到日志文件,然后才能改变日志文件。要使攻击者的任务更难于执行,请使用 NTFS 权限保护日志文件。
将 IIS 日志文件目录移动到与 Web 站点所在卷不同的卷,然后重命名。不要使用系统卷。接着,将以下 NTFS 权限应用于日志文件文件夹和子文件夹。
• | Administrators:完全控制 |
• | System:完全控制 |
• | Backup Operators:读取 |
为了方便脱机分析 IIS 日志文件,可使用脚本将日志文件从 IIS 服务器自动删除,同时确保安全。必须至少每 24 小时删除一次日志文件。自动执行的脚本可使用 FTP、SMTP、HTTP 或 SMB 从服务器计算机中传输日志文件。但是,如果要启用其中一种协议,请确保启用的安全性,避免产生任何其他攻击。使用 IPSec 策略保护端口和通道。
审核 Everyone 组对 IIS metabase.bin 文件(位于 /WINNT/System32/inetsrv/)的所有失败访问。对 /Metabase 备份文件夹(元数据库的备份副本),执行同样的操作。
此外,可配置 IIS W3C 扩展日志文件格式审核。在 Web 站点“属性”对话框的“Web 站点”选项卡中,选择“W3C 扩展日志文件格式”。然后,选择诸如“URI 资源”和“URI 查询”之类的“扩展属性”。
将 Web 根目录和虚拟目录重定位至非系统分区,防止目录遍历攻击。这些攻击的攻击者可执行操作系统程序和实用工具。跨驱动器遍历是不可能的。例如,此方法可确保将来允许攻击者访问系统文件的所有规范化蠕虫病毒都失败。例如,如果攻击者给出包含以下路径的 URL,请求将失败:
/scripts/..%5c../winnt/system32/cmd.exe
在本步骤中,您要执行以下操作:
• | 将 Web 站点移至非系统卷。 |
• | 禁用父路径设置。 |
• | 删除可能危险的虚拟目录。 |
• | 删除或保护 RDS。 |
• | 设置 Web 权限。 |
• | 删除或保护 FrontPage Server Extensions。 |
不要使用默认的 /inetpub/wwwroot 目录。例如,如果系统安装在 C:驱动器,请将站点和内容目录移至 D:驱动器。这样做可缓解无法预料的规范化问题和目录遍历攻击风险。
该 IIS 元数据库设置禁止在类似 MapPath 这种函数的脚本和应用程序调用中使用“..”。这有助于防止目录遍历攻击。
• | 要禁用父路径,请执行下列操作:
|
注意:如果使用 Application Center 2002 管理站点,请参阅 Microsoft 知识库文章 288309 PRB:Disabling Parent Paths Breaks User Interface(英文)。
示例应用程序在默认情况下不安装,且不应在 Web 生产服务器中安装。删除所有示例应用程序,包括仅能使用 http://localhost 或 http://127.0.0.1 从本地计算机访问的示例应用程序。
从生产服务器中删除下列虚拟目录:IISSamples、IISAdmin、IISHelp 和 Scripts。
注意:IISLockdown 提供了一个选项来删除 Scripts、IISSamples、IISAdmin 和 IISHelp 虚拟目录。
远程数据服务 (RDS) 是一个组件,它允许通过 IIS 对远程数据资源进行受控的 Internet 访问。RDS 接口由 Msadcs.dll 提供,Msadcs.dll 位于:program files/common files/system/Msadc.
如果应用程序不使用 RDS,请删除它。
• | 要删除 RDS 支持,请执行下列操作:
|
注意:IISLockdown 提供了一个选项来删除 MSADC 虚拟目录。请注意,IISLockdown 仅删除虚拟目录,它不删除文件或注册表项。
如果应用程序要求使用 RDS,请确保安全。
• | 要确保 RDS 安全,请执行下列操作:
|
注意:可使用注册表脚本文件 Handsafe.reg 更改注册表项。该脚本文件位于 msadc 目录:
/Program Files/Common Files/System/msadc
有关确保 RDS 安全的详细信息,请参阅:
• | MS99-025 Microsoft Security Program:Unauthorized Access to IIS Servers through ODBC Data Access with RDS,网址是 http://www.microsoft.com/technet/security/bulletin/ms99-025.asp(英文)。 |
• | MS98-004 Microsoft Security Program:Microsoft Security Bulletin:Unauthorized ODBC Data Access with RDS and IIS,网址是 http://www.microsoft.com/technet/treeview/default.asp?url=/technet/security/bulletin/MS98-004.asp(英文)。 |
• | Microsoft 知识库文章 184375 PRB:Security Implications of RDS 1.5, IIS 3.0 or 4.0, and ODBC(英文)。 |
Web 权限在 IIS 管理单元中配置,并在 IIS 元数据库中维护。Web 权限不是 NTFS 权限。
请使用下列 Web 权限:
• | 读取权限。将读取权限限制在 include 目录。 |
• | 写入和执行权限。将写入和执行权限限制在允许匿名访问的虚拟目录。 |
• | 脚本源访问。仅在允许内容创作的文件夹中配置脚本源访问权限。 |
• | 写入。仅在允许内容创作的文件夹中配置写入权限。仅将写入访问权限授予内容作者。 注意:应将支持内容创作的文件夹配置为要求身份验证和使用 SSL 加密。 |
如果不使用 FrontPage Server Extensions (FPSE),请将其禁用。如果使用 FPSE,请执行下列步骤提高安全性:
• | 升级服务器扩展。请参考 MSDN 文章“Microsoft FrontPage Server Extensions 2002 for Windows”(网址是 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnservext/html/fpse02win.asp(英文))中的安全问题。 |
• | 使用 FrontPage 安全性来限制访问。FPSE 安装的组都有权访问配置了服务器扩展的网站。这些组的作用是基于用户角色来限制可用的访问。有关详细信息,请参阅 Assistance Center,网址是 http://office.microsoft.com/assistance/2002/articles/fp_colmanagesecurity.aspx(英文)。 |
脚本映射可将特定文件扩展名(如 .asp)与处理它的 ISAPI 扩展(如 Asp.dll)相关联。IIS 的配置要支持各种扩展名,其中包括 .asp、.shtm、.hdc 等。ASP.NET HTTP 处理程序大致等价于 ISAPI 扩展。在 IIS 中,文件扩展名(如 .aspx)先映射至 Aspnet_isapi.dll,然后 Aspnet_isapi.dll 再将请求转发至 ASP.NET 工作进程。之后,处理文件扩展名的实际 HTTP 处理程序由 Machine.config 或 Web.config 中的
与脚本映射相关的主要安全问题是:
• | 攻击者可利用在扩展中找到的漏洞。 |
• | 服务器端资源可被客户端下载。 |
在本步骤中,您要执行以下操作:
• | 映射 IIS 文件扩展名。 |
• | 映射 .NET Framework 文件扩展名。 |
在 Windows 2000 中,重要的 IIS 文件扩展名包括:.asp、.asa、.cer、.cdx、.htr、.idc、.shtm、.shtml、.stm 和 .printer。
如果不使用上述扩展名中的任何一个,请将该扩展名映射至 IISLockdown 提供的 404.dll。例如,如果不希望为客户端提供 ASP 页,请将 .asp 映射至 404.dll。
IISLockdown 具体改变怎样的映射取决于您选定的服务器模板:
• | 静态 Web 服务器。如果运行 IISLockdown 并选择“静态 Web 服务器”选项,所有上述扩展名都将映射至 404.dll。 |
• | 动态 Web 服务器。如果选择“动态 Web 服务器”选项(是处理 ASP.NET 页时的首选项),请将 .htr、.idc、.shtm、.shtml、.stm 和 .printer 映射至 404.dll,不要将 .asp、.cer、.cdx 和 .asa 映射至 404.dll。此时,应将 .cer、.cdx 和 .asa 手动映射至 404.dll。如果不使用 .asp,也可映射它。 |
通过将文件扩展名映射至 404.dll,可防止通过 HTTP 返回和下载文件。如果请求文件的扩展名已映射至 404.dll,系统显示一个 Web 页,其中包含消息“HTTP 404 - 未找到文件”。建议您将不使用的扩展名映射至 404.dll,而不是删除映射。如果删除映射,而文件又误留在服务器中(或错放在服务器中),则请求该文件时系统可明文显示文件,因为 IIS 不知道如何处理它。
• | 要将文件扩展名映射至 404.dll,请执行下列操作:
|
下列 .NET Framework 文件扩展名都映射至 aspnet_isapi.dll:.asax、.ascx、.ashx、.asmx、.aspx、.axd、.vsdisco、.jsl、.java、.vjsproj、.rem、.soap、.config、.cs、.csproj、.vb、.vbproj、.webinfo、.licx、.resx 和 .resources。
.NET Framework 保护的文件扩展名不应由客户端直接调用,做法是将它们与 Machine.config 中的 System.Web.HttpForbiddenHandler 关联。在默认情况下,下面的文件扩展名将映射至 System.Web.HttpForbiddenHandler:.asax、.ascx、.config、.cs、.csproj、.vb、.vbproj、.webinfo、.asp、.licx、.resx 和 .resources。
有关 HTTP 处理程序的详细信息,请参阅“步骤 16:Machine.config”。
由于 IIS 首先处理 Web 请求,可将不希望客户端调用的 .NET Framework 文件扩展名直接映射至 404.dll。这要执行两项任务:
• | 将请求传递到 ASP.NET 之前(并在 ASP.NET 工作进程处理请求之前),先由 404.dll 处理并拒绝这些请求。这可消除 ASP.NET 工作进程的不必要处理。此外,尽早阻止请求是比较好的安全做法。 |
• | 404.dll 返回消息“HTTP 404 - 未找到文件”,System.Web.HttpForbiddenHandler 返回消息“无法提供此类型的页”。“未找到文件”消息显示的信息更少,可被认为更安全(对此有争议)。 |
过去,ISAPI 筛选器中的漏洞可导致重大的 IIS 利用攻击。全新安装 IIS 之后,不再有多余的 ISAPI 筛选器,尽管 .NET Framework 安装了 ASP.NET ISAPI 筛选器 (Aspnet_filter.dll)(该筛选器被加载至 IIS 进程地址空间 (Inetinfo.exe),作用是支持无 cookie 的会话状态管理)。
如果应用程序无需支持无 cookie 的会话状态,且未将
在本步骤中,请删除不使用的 ISAPI 筛选器。
删除所有不使用的 ISAPI 筛选器,如下节所述。
• | 要查看 ISAPI 筛选器,请执行下列操作:
图 16.5 |
安全性和其他 IIS 配置设置都在 IIS 元数据库文件中维护。强化 IIS 元数据库(以及备份元数据库文件)的 NTFS 权限可确保攻击者无法以任何方式(例如,对于特定的虚拟目录禁用身份验证)修改您的 IIS 配置。
在本步骤中,您要执行以下操作:
• | 使用 NTFS 权限来限制对元数据库的访问。 |
• | 限制 IIS 返回的横幅信息。 |
在位于 /WINNT/system32/inetsrv 目录中的 IIS 元数据库文件 (Metabase.bin) 中设置以下 NTFS 权限。
• | 本地系统:完全控制 |
• | Administrators:完全控制 |
横幅信息可显示对攻击者有助的软件版本和其他信息。横幅信息可显示您运行的软件,它允许攻击者利用已知的软件漏洞。
如果要检索静态页(例如 .htm 或 .gif 文件),内容位置标头将被添加到响应中。在默认情况下,该内容标头引用 IP 地址,但不是完全限定的域名 (FQDN)。这意味着,您的内部 IP 地址被意外公开。例如,以下 HTTP 响应标头以粗体显示 IP 地址:
HTTP/1.1 200 OK Server:Microsoft-IIS/5.0 Content-Location:http://10.1.1.1/Default.htm Date:Thu, 18 Feb 1999 14:03:52 GMT Content-Type:text/html Accept-Ranges:bytes Last-Modified:Wed, 06 Jan 1999 18:56:06 GMT ETag:"067d136a639be1:15b6" Content-Length: 4325
您可隐藏 HTTP 响应标头中返回的内容位置,方法是修改 IIS 元数据库中的一个值,将默认行为从公开 IP 地址更改为发送 FQDN。
有关隐藏 HTTP 响应中的内容位置的详细信息,请参阅 Microsoft 知识库文章 218180 Internet Information Server Returns IP Address in HTTP Header (Content-Location)(英文)。
如果 Web 应用程序通过端口 443 支持 HTTPS (SSL),必须安装服务器证书。这项要求是会话协商过程(出现在客户端建立安全 HTTPS 会话时)的一部分。
有效的证书可提供安全的身份验证,客户端因此可信任与之通信的服务器。此外,有效的证书还可提供安全的通信,保证了在网络中传输的敏感数据依然机密,且不会被篡改。
在本步骤中,您将验证服务器证书。
检查下列四项内容,确认 Web 服务器证书有效:
• | 检查有效开始日期和有效截止日期。 |
• | 检查是否正确使用证书。如果证书是作为服务器证书颁发的,不应将它用于电子邮件。 |
• | 检查证书链中的公钥是否直至受信任的根目录都是有效的。 |
• | 检查证书是否未被吊销。证书不得位于颁发证书的服务器的证书吊销列表 (CRL) 上。 |
本节介绍了所有应用程序要应用的计算机级设置的强化信息。有关应用程序特定的强化设置,请参阅模块 19 确保 ASP.NET 应用程序和 Web 服务的安全。
Machine.config 文件可维护 .NET Framework 的大量计算机范围设置,很多设置都将影响安全性。Machine.config 位于:
%windir%/Microsoft.NET/Framework/{版本}/CONFIG
注意:可使用任何文本或 XML 编辑器(如记事本)编辑 XML 配置文件。XML 标记区分大小写,请务必使用正确的大小写。
在本步骤中,您要执行以下操作:
• | 将受保护的资源映射至 HttpForbiddenHandler。 |
• | 验证是否禁用了跟踪。 |
• | 验证是否禁用了调试编译。 |
• | 验证 ASP.NET 错误是否未返回至客户端。 |
• | 验证会话状态设置。 |
HTTP 处理程序位于 Machine.config,在
Machine.config 中的下列文件扩展名被映射至 HTTP 处理程序:
• | .aspx 用于 ASP.NET 页 |
• | .rem 和 .soap 用于远程处理 |
• | .asmx 用于 Web 服务 |
• | .asax、.ascx、.config、.cs、.csproj、.vb、.vbproj、.webinfo、.asp、.licx、.resx 和 .resources 是受保护的资源,它们映射至 System.Web.HttpForbiddenHandler。 |
对于 .NET Framework 资源,如果不使用某个文件扩展名,请将该扩展名映射至 Machine.config 中的 System.Web.HttpForbiddenHandler,如下例所示:
此时,将 .vbproj 文件扩展名映射至 System.Web.HttpForbiddenHandler。如果客户端请求的路径以 .vbproj 结尾,ASP.NET 返回一条消息,指出“无法提供此类型的页”。
下列准则适用于处理 .NET Framework 文件扩展名:
• | 将不使用的扩展名映射至 HttpForbiddenHandler。如果不使用 ASP.NET 页,请将 .aspx 映射至 HttpForbiddenHandler。如果不使用 Web 服务,请将 .asmx 映射至 HttpForbiddenHandler。 |
• | 在面向 Internet 的 Web 服务器中禁用远程处理。将面向 Internet 的 Web 服务器中的远程处理扩展名(.soap 和 .rem)映射至 HttpForbiddenHandler。 |
禁用 .NET 远程处理
要禁用对 .rem 和 .soap 扩展名的 .NET 远程处理禁用请求,请使用
注意:这不会阻止 Web 服务器中的 Web 应用程序使用远程处理基础结构连接下游对象。但是,它将阻止客户端连接 Web 服务器中的对象。
使用
在生产服务器中使用以下配置:
在生产服务器中设置 enabled="false"。如果确实要跟踪实际应用程序的问题,请在测试环境中模拟问题,或(根据需要)启用跟踪并设置 localOnly="true",防止将跟踪详细信息返回到远程客户端。
使用
使用
确保将模式属性设置为 "RemoteOnly",如下例所示:
安装了 ASP.NET 应用程序后,可将此设置配置为指向您的自定义错误页,如下例所示:
如果不使用会话状态,请验证 Machine.config 中是否禁用了会话状态,如下例所示:
此外,确保禁用 ASP.NET State Service。默认的会话状态模式是 "InProc",且 ASP.NET State Service 设置为“手动”。有关保护会话状态的详细信息(如果安装了必需它的 ASP.NET 应用程序),请参阅模块 19 确保 ASP.NET 应用程序和 Web 服务的安全中的“会话状态”。
计算机级代码访问安全策略由 Security.config 文件中的设置确定,该文件位于:
%windir%/Microsoft.NET/Framework/{版本}/CONFIG
运行下面的命令,确保在您的服务器中启用代码访问安全性:
caspol -s On
有关为 ASP.NET Web 应用程序配置代码访问安全性的详细信息,请参阅模块 9 ASP.NET 代码访问安全性。
在本步骤中,您要执行以下操作:
• | 删除本地 Intranet 区域的所有权限。 |
• | 删除 Internet 区域的所有权限。 |
本地 Intranet 区域将权限应用于在 UNC 共享或内部 Web 站点中运行的代码。将此区域与“Nothing”权限集关联,可重新配置为不授予权限。
• | 要删除本地 Intranet 区域的所有权限,请执行下列操作:
|
图 16.6
将“LocalIntranet_Zone”代码权限设置为“Nothing”
Internet 区域将代码访问权限应用于通过 Internet 下载的代码。在 Web 服务器中,应将此区域重新配置为不授予权限,方法是使其与“Nothing”权限集关联。
重复上一节“删除本地 Intranet 区域的所有权限”中的步骤,只是将“Internet_Zone”设置为“Nothing”权限集。
在显示安全 Web 服务器属性的快照视图中,您可快速轻松地将设置与 Web 服务器进行比较。表 16.4 所示设置的相应 Web 服务器位于抗攻击力强且安全措施得力的 Web 站点中。通过执行前面的步骤,可生成在安全性方面配置完全相同的服务器。
表 16.4:安全 Web 服务器快照
组件 | 特征 | |
修补程序和更新程序 |
Windows、IIS 和 .NET Framework 中应用了最新的 service pack 和修补程序。 |
|
服务 |
禁用不需要的服务。 |
|
协议 |
服务器未启用 NetBIOS 和 SMB 协议。 |
|
帐户 |
已删除不使用的帐户。 |
|
文件和目录 |
Everyone 组没有系统、Web 或工具目录的访问权限。匿名帐户没有 Web 站点内容目录和系统实用工具的访问权限。 |
|
共享 |
已从服务器中删除不使用的共享。 |
|
端口 |
阻止除 80 和 443 (SSL) 以外的所有端口,尤其是易受攻击的端口 135 – 139 和 445。 |
|
注册表 |
防止注册表的远程管理。 |
|
审核和日志记录 |
将登录失败记入日志。 |
|
IIS |
|
|
站点和虚拟目录 |
Web 根目录和虚拟目录分别位于与系统卷不同的卷。 |
|
脚本映射 |
不使用的脚本映射都映射至 404.dll:.idq、.htw、.ida、.shtml、.shtm、.stm、idc、.htr、.printer。 |
|
ISAPI 筛选器 |
已删除不使用的 ISAPI 筛选器。 |
|
IIS 元数据库 |
已使用 NTFS 权限对 IIS 元数据库的访问进行了限制。 |
|
Machine.config |
|
|
HttpForbiddenHandler |
受保护的资源都映射至 System.Web.HttpForbiddenHandler |
|
远程处理 |
已禁用 .NET 远程处理。 |
|
跟踪 |
跟踪信息和详细错误信息都不返回至客户端: |
|
编译 |
禁用调试编译 |
|
customErrors |
不将错误详细信息返回至客户端: 一般错误页将错误写入事件日志。 |
|
sessionState |
如果不需要会话状态,则禁用它: |
|
代码访问安全性 |
|
|
代码访问安全性 |
已在计算机中启用代码访问安全性。 |
|
LocalIntranet_Zone |
本地 Intranet 区域没有权限: |
|
Internet_Zone |
Internet 区域没有权限: |
|
必须监视服务器的安全状态并定期更新,防止新发现的漏洞被他人利用。要确保服务器一直安全,请执行下列操作:
• | 审核组成员身份。 |
• | 监视审核日志。 |
• | 应用最新的 service pack 和修补程序。 |
• | 执行安全评估。 |
• | 使用安全性通告服务。 |
跟踪用户组的成员身份,尤其是特权组(如 Administrators 组)。以下命令列出了 Administrators 组的成员:
net localgroup administrators
定期监视审核日志并分析日志文件,方法是手动查看它们,或参考 Microsoft 知识库文章 296085 How To:Use SQL Server to Analyze Web Logs(英文)中所述的技术。
制订计划来分析服务器软件并订阅安全警报。使用 MBSA 定期扫描服务器,确认缺少了哪些修补程序。下列链接提供了最新的更新程序:
• | Windows 2000 service packs。最新的 service pack 位于 http://www.microsoft.com/windows2000/downloads/servicepacks/default.asp(英文)。 |
• | .NET Framework Service Pack。有关获取 .NET Framework 最新更新程序的相关信息,请参阅 MSDN 文章“How to Get the Microsoft .NET Framework”,网址是 http://msdn.microsoft.com/netframework/downloads/howtoget.asp(英文)。 |
• | 关键更新程序。这些更新程序有助于解决已知的问题,并帮助您修补计算机的已知安全漏洞。有关最新关键更新程序,请参考“Critical Updates”,网址是 http://www.microsoft.com/windows2000/downloads/critical/default.asp(英文) |
• | 高级安全更新程序。有关其他安全更新程序的信息,请参考“Advanced Security Updates”,网址是 http://www.microsoft.com/windows2000/downloads/security/default.asp(英文)。 这些更新程序有助于您修补计算机的已知安全漏洞。 |
使用 MBSA 定期检查安全漏洞,确认缺少了哪些修补程序和更新程序。安排 MBSA 每天运行一次,然后分析结果并根据需要采取操作。有关自动运行 MBSA 的详细信息,请参阅本指南“如何”部分的如何:使用 MBSA。
使用表 16.5 中列出的 Microsoft 服务,获取安全布告并了解可能出现的系统漏洞通知。
表 16.5:安全性通告服务
服务 | 位置 |
TechNet 安全网站 |
http://www.microsoft.com/technet/treeview/default.asp?url=/technet/security/current.asp(英文) |
Microsoft 安全性通告服务 |
http://register.microsoft.com/subscription/subscribeme.asp?ID=135(英文) |
此外,请订阅表 16.3 所示的行业安全警报服务。这样,您就可以对修补程序尚不可用的漏洞进行威胁评估。
表 16.4:行业安全性通告服务
服务 | 位置 |
CERT 咨询邮件列表 |
http://www.cert.org/contact_cert/certmaillist.html(英文) |
Windows 和 .NET 杂志安全更新 |
http://email.winnetmag.com/winnetmag/winnetmag_prefctr.asp(英文) |
NTBugtraq |
http://www.ntbugtraq.com/default.asp?pid=31&sid=1#020(英文) |
通常,管理员要管理多台服务器。请确保远程管理解决方案的要求不损害安全性。如果需要远程管理功能,以下建议有助于提高安全性:
• | 限制管理帐户的数量。这包括限制管理帐户的数量以及限制允许哪些帐户远程登录。 |
• | 限制使用工具。主要包括 Internet 服务管理器和终端服务。另一选择是 Web 管理(使用 IISAdmin 虚拟目录),但不建议使用它(因为已由 IISLockdown.exe 删除)。Internet 服务管理器和终端服务都使用 Windows 安全性。此处的主要注意事项是,限制您使用的 Windows 帐户和端口。 |
• | 限制允许管理服务器的计算机。可使用 IPSec 限制哪些计算机连接 Web 服务器。 |
可以安全使用 Microsoft 终端服务来远程管理您的 Web 服务器。
终端服务基于称为远程桌面协议 (RDP) 的 Microsoft 专有协议。RDP 使用 TCP 3389 端口并支持两个并发用户。下面几节描述了如何为安全管理安装并配置终端服务:
• | 安装终端服务。 |
• | 配置终端服务。 |
要安装终端服务,请执行下列操作:
1. |
使用控制面板中的“添加/删除程序”,安装终端服务。使用“添加/删除 Windows 组件”选项。不必为远程管理安装 Terminal Services Licensing 服务。 |
2. |
为远程管理模式配置终端服务。 |
3. |
删除 TsInternetUser 帐户(在安装终端服务期间创建)。该帐户用于支持对终端服务的匿名 Internet 访问,在服务器中不应启用它。 |
使用“管理工具”程序组中的“终端服务配置”MMC 管理单元,进行如下配置:
1. |
连接终端服务有三种加密级别(低、中和高)可用。将加密设置为 128 位密钥。请注意,Windows 高级加密包应同时安装在服务器和客户端中。 |
2. |
配置终端服务会话,使其超过空闲连接时间限制后断开连接。将它设置为终止断开连接的会话。如果用户关闭终端服务客户端应用程序(在十分钟内不注销),则认为会话已断开连接。 |
3. |
最后,限制终端服务的访问权限。使用“RDP”对话框中的“RDP 权限”选项卡。在默认情况下,允许 Administrators 组的所有成员访问终端服务。如果不希望 Administrators 组的所有成员访问终端服务,请删除该组,然后添加需要访问的单独帐户。请注意,SYSTEM 帐户必须包含在列表中。 |
使用客户端和服务器之间的安全 VPN 连接或 IPSec 隧道来加强安全性。该方法可提供相互身份验证,且 RDP 有效负载是加密的。
终端服务不提供文件传输的内置支持。但您可从 Windows 2000 Server 资源工具包中安装“文件复制”实用工具,从而将文件传输功能添加到终端服务的剪贴板重定向功能。有关该实用工具和安装说明的详细信息,请参阅 Microsoft 知识库文章 244732 How To:Install the File Copy Tool Included with the Windows 2000 Resource Kit(英文)。
本模块已向您说明了如何为 ASP.NET Web 服务器手动配置安全设置。手动过程有助于您了解配置,但它比较耗时。使用下列资源可自动执行本模块提供的步骤:
• | 有关如何自动运行 IISLockdown 的信息,请参阅 Microsoft 知识库文章 310725 How To:Run the IIS Lockdown Wizard Unattended in IIS(英文)。 |
||||||
• | 可使用安全模板创建并部署安全策略。有关详细信息,请参阅下列 Microsoft 知识库文章:
|
||||||
• | 有关自定义和自动设置安全模板的详细指导,请参阅“Microsoft patterns & practices, Microsoft Solution for Securing Windows 2000 Server”,网址是 http://www.microsoft.com/technet/treeview/default.asp?url=/technet/security/prodtech/windows/secwin2k/default.asp(英文)。 “Microsoft Solution for Securing Windows 2000 Server”介绍了最常见的服务器角色,包括域控制器、DNS 服务器、DHCP 服务器、IIS Web 服务器以及文件和打印服务器。通过本指南中的方法,您可以进行 Windows 2000 的默认安装,然后创建安全的服务器,服务器的详细配置随角色而异。此后,管理员可有意识地削弱安全性来满足特定环境的需要。本指南提供了与服务帐户、组策略等的基准安全建议有关的基础知识,您可以将它们用作常见服务器角色类型的起点。 |
安全的 Web 服务器为驻留 Web 应用程序提供了安全的基础。本模块说明了可能影响 ASP.NET Web 服务器的主要威胁,并提供了缓解这些风险要执行的安全步骤。通过执行本模块提供的强化步骤,您可以创建安全的平台和主机基础结构,从而支持 ASP.NET Web 应用程序和 Web 服务。
本模块使用的方法可供您从头开始构建安全的 Web 服务器,还可强化现有 Web 服务器的安全配置。下一步是如何确保正确配置所有已部署的应用程序。
有关其他相关阅读材料,请参阅:
• | 有关保护开发人员工作站的信息,请参阅本指南“如何”部分的如何:保护开发人员工作站。 |
• | 有关确保 ASP.NET Web 应用程序和 Web 服务安全的详细信息,请参阅模块 19 确保 ASP.NET 应用程序和 Web 服务的安全。 |
• | 有关配置 Open Hack 应用程序的信息,请参阅 MSDN 文章构建和配置更安全的网站。 |
• | 有关 TechNet 中的安全资源,请参阅 TechNet 安全页,网址是 http://www.microsoft.com/china/technet/security/default.asp(英文)。 |
• | 有关可打印检查表的信息,请参阅检查表:保护 Web 服务器。 |
返回页首 |