本主题提供最佳做法信息,帮助你在设计 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 角色扩展,请按顺序完成以下步骤:
安装 AD FS 并为该计算机选择适当的服务器角色。 有关详细信息,请参阅 AD FS 部署指南中的安装联合身份验证服务代理角色服务。
使用 Scwcmd 命令行工具注册适当的角色扩展文件。 请参阅下表以了解在您计算机配置的角色中使用此工具的具体信息。
通过检查位于 WindowssecurityMsscwLogs 目录中的 SCWRegister_log.xml 文件,验证命令是否已成功完成。
必须在要向其应用基于 AD FS 的安全策略的每个联合服务器或联合服务器代理计算机上执行所有这些步骤。
下表说明如何根据在安装了 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 一起使用的数据库的详细信息,请参阅 AD FS 配置数据库的角色。
在安全性非常重要的情况下(例如使用展台时),使用令牌重放检测。 令牌重放检测是 AD FS 的一项功能,可确保检测到对联合身份验证服务所做的任何重播令牌请求的尝试,并确保该请求已被丢弃。 默认情况下启用了令牌重放检测。 它适用于 WS-Federation 被动配置文件和安全断言标记语言 (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)可以实现对这类攻击的保护。在服务器与客户端建立通信时,可以根据需要要求、允许或不要求使用CBT。
若要启用扩展保护功能,请在 Set-ADFSProperties cmdlet 上使用 ExtendedProtectionTokenCheck 参数。 下表描述了此设置的可能值以及值提供的安全性级别。
参数值 安全级别 保护设置 必需 服务器完全强化。 强制实施扩展保护,并且始终是必需的。 允许 服务器部分强化。 在涉及的系统已修补以支持其时,将强制实施扩展保护。 没有 服务器易受攻击。 未强制实施扩展保护。 如果使用日志记录和跟踪,请确保任何敏感信息的隐私。
默认情况下,AD FS 不会直接公开或跟踪个人身份信息(PII)作为联合服务或正常操作的一部分。 但是,在 AD FS 中启用事件日志记录和调试跟踪日志记录时,根据你配置的声明策略,某些声明类型及其关联的值可能包含可能记录在 AD FS 事件或跟踪日志中的 PII。
因此,强烈建议对 AD FS 配置及其日志文件强制实施访问控制。 如果不希望此类信息可见,则应禁用登录,或在与其他人共享日志之前筛选掉日志中的任何 PII 或敏感数据。
以下提示可帮助你防止无意中公开日志文件的内容:
确保 AD FS 事件日志和跟踪日志文件受到访问控制列表(ACL)的保护,这些列表仅限制对需要访问它们的受信任管理员的访问。
不要使用文件扩展名或路径复制或存档日志文件,这些路径可以使用 Web 请求轻松提供。 例如,.xml 文件扩展名不是安全的选择。 可以查看 Internet Information Services (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 Server 特定安全最佳做法
当这些数据库技术用于管理 AD FS 设计和部署中的数据时,以下安全最佳做法特定于使用 Microsoft SQL Server® 或 Windows 内部数据库(WID)。
注释
这些建议旨在扩展 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 身份验证。 这样就可以在客户端和服务器之间进行相互身份验证。 如果没有单独服务帐户的 SPN 注册,SQL Server 将使用 NTLM 进行基于 Windows 的身份验证,其中仅对客户端进行身份验证。
最小化 SQL Server 的图面区域。
只启用那些必需的 SQL Server 终结点。 默认情况下,SQL Server 提供一个无法删除的内置 TCP 终结点。 对于 AD FS,您应该启用这个 TCP 终结点以进行 Kerberos 身份验证。 若要查看当前的 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 数据库的访问可降低特权提升攻击的风险。