AD FS 安全规划和部署的最佳实践

本主题提供最佳做法信息,帮助你在设计 Active Directory 联合身份验证服务 (AD FS) 部署时规划和评估安全性。 可以从本主题着手,检查和评估会影响使用 AD FS 时的整体安全性的注意事项。 本主题中的信息是为了补充并扩展现有安全规划和其他设计最佳做法。

AD FS 的核心安全最佳实践

下面的核心最佳做法对所有 AD FS 安装都通用,可以改进或扩展设计或部署的安全性:

  • 将 AD FS 作为“第 0 层”系统进行保护

    由于 AD FS 本质上是一种身份验证系统,因此应将其视为“第 0 层”系统,就像网络上的其他标识系统一样。 有关详细信息,请参阅 Active Directory 管理层模型

  • 使用安全配置向导对联合服务器和联合服务器代理计算机应用特定于 AD FS 的安全最佳做法

    安全配置向导 (SCW) 是一个预安装在所有 Windows Server 2008、Windows Server 2008 R2 和 Windows Server 2012 计算机上的工具。 基于你安装的服务器角色,你可以使用该向导来应用安全最佳实践,从而帮助减少服务器攻击面。

    在安装 AD FS 时,安装程序将创建角色扩展文件,你可将其与 SCW 一起使用来创建安全策略,该策略将应用到在安装期间选择的特定 AD FS 服务器角色(联合服务器或联合服务器代理)。

    每个已安装的角色扩展文件表示每台计算机配置的角色和子角色的类型。 以下角色扩展文件安装在 C:WindowsADFSScw 目录中:

    • Farm.xml

    • SQLFarm.xml

    • StandAlone.xml

    • Proxy.xml(此文件仅在将计算机配置为联合服务器代理角色时存在。)

    若要应用 SCW 中的 AD FS 角色扩展,请按顺序完成以下步骤:

    1. 安装 AD FS,并为该计算机选择相应的服务器角色。 有关详细信息,请参阅 AD FS 部署指南中的安装联合身份验证服务代理角色服务

    2. 使用 Scwcmd 命令行工具注册相应的角色扩展文件。 请参阅下表获取有关在你的计算机配置的角色中使用此工具的详细信息。

    3. 可以通过检查 SCWRegister_log.xml 文件来验证该命令是否已成功完成,此文件位于 WindowssecurityMsscwLogs 目录中。

    你必须在你希望对其应用 AD FS(基于 SCW 安全策略)的每个联合服务器或联合服务器代理计算机上执行所有这些步骤。

    下表介绍了如何基于你在安装 AD FS 的计算机上选择的 AD FS 服务器角色,注册相应的 SCW 角色扩展。

    AD FS 服务器角色 使用的 AD FS 配置数据库 在命令提示符下键入以下命令:
    独立联合服务器 Windows 内部数据库 scwcmd register /kbname:ADFS2Standalone /kbfile:"WindowsADFSscwStandAlone.xml"
    加入场的联合服务器 Windows 内部数据库 scwcmd register /kbname:ADFS2Standalone /kbfile:"WindowsADFSscwFarm.xml"
    加入场的联合服务器 SQL Server scwcmd register /kbname:ADFS2Standalone /kbfile:"WindowsADFSscwSQLFarm.xml"
    联合服务器代理 不可用 scwcmd register /kbname:ADFS2Standalone /kbfile:"WindowsADFSscwProxy.xml"

    有关可以与 AD FS 一起使用的数据库的详细信息,请参阅 The Role of the AD FS Configuration Database

  • 在安全性非常重要的情况下(例如使用展台时),使用令牌重放检测。 令牌重放检测是 AD FS 的一项功能,可确保检测到对联合身份验证服务所做的任何重播令牌请求的尝试,并确保该请求已被丢弃。 默认情况下启用了令牌重放检测。 它通过确保永远不会多次使用同一个令牌,而同时适用于 WS 联合身份验证被动配置文件和安全声明标记语言 (SAML) WebSSO 配置文件。

    当联合身份验证服务启动时,它开始构建任何完成的令牌请求的缓存。 针对联合身份验证服务,随着时间推移,并随着后续的令牌请求添加到缓存中,检测任何重播令牌请求的多次尝试的能力将会提升。 如果禁用令牌重放检测并在以后选择将它再次启用,请记住联合身份验证服务将仍然会在一个时间段内接受以前可能已使用的令牌,直到允许重播缓存有足够的时间来重建其内容。 有关详细信息,请参阅 AD FS 配置数据库的角色

  • 使用令牌加密,尤其当你在使用支持的 SAML 项目解析时。

    强烈建议使用令牌加密以提高安全性并加强保护,以防御可能会针对 AD FS 部署进行的潜在中间人 (MITM) 攻击。 使用加密可能会对整体稍有影响,但通常情况下,并不会经常注意到这种影响,并且在许多部署中,更高的安全性优势会超过服务器性能提升所需的任何成本。

    若要启用令牌加密,请首先向你的信赖方信任添加加密证书。 你可以在创建信赖方信任时配置加密证书,也可以在以后添加。 若以后要将加密证书添加到现有信赖方信任,可以在使用 AD FS 管理单元的同时,设置一个在信任属性中的“加密”选项卡上使用的证书。 若要为某个使用 AD FS cmdlet 的现有信任指定证书,请使用 Set-ClaimsProviderTrust 或 Set-RelyingPartyTrust cmdlet 的 EncryptionCertificate 参数。 若要设置要在解密令牌时使用的联合身份验证服务的证书,请使用 Set-ADFSCertificate cmdlet 并为 CertificateType 参数指定“Token-Encryption”。 为特定的信赖方信任启用和禁用加密可以通过使用 Set-RelyingPartyTrust cmdlet 的 EncryptClaims 参数来实现。

  • 利用扩展的身份验证保护

    若要帮助保护部署,可以设置并使用 AD FS 的身份验证扩展保护功能。 此设置指定联合服务器支持的身份验证的扩展保护级别。

    身份验证的扩展保护有助于保护计算机免受中间人 (MITM) 攻击,其中攻击者会截获客户端凭据,并将它们转发到服务器。 可以通过通道绑定令牌 (CBT) 实现针对此类攻击的保护,当服务器建立与客户端的通信时,服务器可要求、允许或不要求该令牌。

    若要启用扩展保护功能,请使用 Set-ADFSProperties cmdlet 上的 ExtendedProtectionTokenCheck 参数。 下表描述了用于此设置的可能值,以及这些值提供的安全级别。

    参数值 安全级别 保护设置
    需要 服务器完全强化。 强制执行并且始终要求扩展保护。
    允许 服务器部分强化。 在所涉及的系统已修补为支持扩展保护的情况下,强制执行扩展保护。
    服务器易受攻击。 不强制执行扩展保护。
  • 如果使用日志记录和跟踪,请确保任何敏感信息的私密性。

    默认情况下,作为联合身份验证服务或正常操作的一部分,AD FS 不会直接公开或跟踪个人身份信息 (PII)。 但是,在 AD FS 中启用事件日志记录和调试跟踪日志记录时,根据你配置的声明策略,某些声明类型及其关联的值可能包含可能记录在 AD FS 事件或跟踪日志中的 PII。

    因此,强烈建议在 AD FS 配置及其日志文件上强制执行访问控制。 如果不希望此类信息可见,则应禁用登录,或在与他人共享日志之前筛选掉日志中的任何 PII 或敏感数据。

    以下提示可以帮助你防止无意中泄露日志文件的内容:

    • 确保 AD FS 事件日志和跟踪日志文件受访问控制列表 (ACL) 的保护,这些列表将访问权限局限于那些需要访问这些文件的受信任管理员。

    • 不要使用可通过 Web 请求轻松处理的文件扩展名或路径复制或存档日志文件。 例如,.xml 文件扩展名不是安全的选择。 可以参考 Internet 信息服务 (IIS) 管理指南以查看可提供的扩展名的列表。

    • 如果要修改日志文件的路径,请确保为日志文件的位置指定绝对路径,该路径应该在 Web 主机虚拟根 (vroot) 公用目录以外,以防止使用 Web 浏览器的外部方访问它。

  • AD FS Extranet 软锁定和 AD FS Extranet 智能锁定保护

    如果遇到通过 Web 应用程序代理以使用无效(错误)密码的身份验证请求形式进行的攻击,可以通过 AD FS Extranet 锁定使你的用户免受 AD FS 帐户锁定。 除了保护用户免受 AD FS 帐户锁定之外,AD FS Extranet 锁定还可以防止暴力密码猜测攻击。

    对于 Windows Server 2012 R2 上的 AD FS 的 Extranet 软锁定,请参阅 AD FS Extranet 软锁定保护

    对于 Windows Server 2016 上的 AD FS 的 Extranet 智能锁定,请参阅 AD FS Extranet 智能锁定保护

AD FS 的特定于 SQL 服务器的安全最佳实践

以下安全最佳做法取决于 Microsoft SQL Server® 或 Windows 内部数据库 (WID) 的使用,前提是这些数据库技术用于管理 AD FS 设计和部署中的数据。

注意

这些建议旨在扩展但不能替代 SQL Server 产品安全指南。 若要详细了解如何规划安全 SQL Server 安装,请参阅安全 SQL 安装的安全注意事项 (https://go.microsoft.com/fwlink/?LinkID=139831)。

  • 始终在物理安全的网络环境中在防火墙后部署 SQL Server。

    SQL Server 安装应永远不直接公开到 Internet 上。 只有数据中心内的计算机才能访问支持 AD FS 的 SQL Server 安装。 有关详细信息,请参阅安全最佳做法清单 (https://go.microsoft.com/fwlink/?LinkID=189229)。

  • 在服务帐户下而不是使用内置的默认系统服务帐户运行 SQL Server。

    默认情况下,经常将 SQL Server 安装和配置为使用一个受支持的内置系统帐户,例如 LocalSystem 或 NetworkService 帐户。 若要增强 AD FS 的 SQL Server 安装安全性,请尽可能使用单独的服务帐户访问 SQL Server 服务,并通过在 Active Directory 部署中注册此帐户的安全主体名称 (SPN) 来启用 Kerberos 身份验证。 这样可以使客户端和服务器之间进行相互身份验证。 SQL Server 将使用基于 Windows 的 NTLM 身份验证,而无需单独的服务帐户的 SPN 注册,在 NTLM 身份验证中只有客户端进行身份验证。

  • 最小化 SQL Server 的图面区域。

    只启用那些必需的 SQL Server 终结点。 默认情况下,SQL Server 提供了一个不能删除的内置 TCP 终结点。 对于 AD FS,你应该为 Kerberos 身份验证启用此 TCP 终结点。 若要查看当前的 TCP 终结点,以查看其他用户定义的 TCP 端口是否已添加到 SQL 安装,可以在 Transact-SQL (T-SQL) 会话中使用“SELECT * FROM sys.tcp_endpoints”查询语句。 有关 SQL Server 终结点配置的详细信息,请参阅如何:在多个 TCP 端口上配置要侦听的数据库引擎 (https://go.microsoft.com/fwlink/?LinkID=189231)。

  • 避免使用基于 SQL 的身份验证。

    若要避免通过网络以明文形式传输密码或将密码存储在配置设置中,请仅对你的 SQL Server 安装使用 Windows 身份验证。 SQL Server 身份验证是一种传统的身份验证模式。 当你使用 SQL Server 身份验证时,不建议存储结构化查询语言 (SQL) 登录凭据(SQL 用户名和密码)。 有关详细信息,请参阅身份验证模式 (https://go.microsoft.com/fwlink/?LinkID=189232)。

  • 仔细评估对 SQL 安装中其他通道安全性的需求。

    实际上,即使使用 Kerberos 身份验证,但 SQL Server 安全支持提供程序接口 (SSPI) 并不提供通道级别安全。 但是,对于服务器安全地位于防火墙保护的网络中的安装,可能并不需要加密 SQL 通信。

    虽然加密是可帮助确保安全性的有力工具,但它并不适用于所有数据或连接。 在决定是否实现加密时,请考虑用户访问数据的方式。 如果用户通过公共网络访问数据,则可能需要使用数据加密以增强安全性。 但是,如果所有通过 AD FS 进行的 SQL 数据访问都涉及某个安全的 Intranet 配置,则可能不需要加密。 任何时候使用加密时还应包括密码、密钥和证书的维护策略。

    如果需要考虑任何 SQL 数据可能会通过网络被看到或被篡改,则使用 Internet 协议安全 (IPsec) 或安全套接字层 (SSL) 来帮助确保 SQL 连接的安全。 但是,这可能会对 SQL Server 的性能带来负面影响,在某些情况下这可能会影响或限制 AD FS 性能。 例如,当来自基于 SQL 的属性存储的属性查找对令牌颁发而言非常关键时,令牌颁发中的 AD FS 性能可能会降低。 你可以通过强大的外围安全配置更好地消除 SQL 篡改威胁。 例如,用于保护 SQL Server 安装的更好的解决方案是确保它将始终无法访问 Internet 用户和计算机,并且始终只能由数据中心环境中的用户或计算机对它进行访问。

    有关详细信息,请参阅加密到 SQL Server 的连接SQL Server 加密

  • 使用存储过程配置安全设计的访问权限,以通过 AD FS 对 SQL 存储的数据执行所有基于 SQL 的查找。

    若要提供更好的服务和数据隔离,可以创建所有属性存储查找命令的存储过程。 你可以创建数据库角色,然后向其授予运行存储过程的权限。 将 AD FS Windows 服务的服务标识分配到此数据库角色。 除了运行用于属性查找的相应存储过程,AD FS Windows 服务应无法运行任何其他 SQL 语句。 以这种方式锁定对 SQL Server 数据库的访问会降低特权提升攻击的风险。

另请参阅

Windows Server 2012 中的 AD FS 设计指南