配置 AD FS Extranet 锁定保护

在 Windows Server 2012 R2 上的 AD FS 中,我们引入了名为 Extranet 锁定的安全功能。 借助此功能,AD FS 将在一段时间内从外部“停止”对“恶意”用户帐户进行身份验证。 这可以防止用户帐户在 Active Directory 中被锁定。 除了保护用户免受 AD 帐户锁定之外,AD FS Extranet 锁定还可防止暴力破解密码猜测攻击

注意

此功能仅适用于 Extranet 方案,其中身份验证请求通过 Web 应用程序代理,仅适用于用户名和密码身份验证

Extranet 锁定的优点

Extranet 锁定提供以下关键优势:

  • 它可保护用户帐户免受 暴力攻击 ,攻击者尝试通过持续发送身份验证请求来猜测用户的密码。 在这种情况下,AD FS 会锁定恶意用户帐户进行 Extranet 访问
  • 它通过发送具有错误密码的身份验证请求来保护用户帐户免受 恶意帐户锁定 。攻击者希望通过发送身份验证请求来锁定用户帐户。 在这种情况下,尽管 AD FS 将锁定用户帐户以进行 Extranet 访问,但 AD 中的实际用户帐户不会被锁定,并且用户仍然可以访问组织中的公司资源。 这称为 软锁定

工作方式

AD FS 中有 3 个设置需要配置为启用此功能:

  • EnableExtranetLockout <>如果要启用 Extranet 锁定,布尔值将此布尔值设置为 True。
  • ExtranetLockoutThreshold <此整数> 定义错误密码尝试的最大数目。 达到阈值后,AD FS 将立即拒绝来自 Extranet 的请求,而无需尝试联系域控制器进行身份验证,无论密码是好还是坏,直到传递 Extranet 观察窗口。 这意味着当帐户软锁定时,AD 帐户的 badPwdCount 属性的值不会增加。
  • ExtranetObservationWindow <TimeSpan> 这决定了用户帐户软锁定的时间。传递窗口时,AD FS 将再次开始执行用户名和密码身份验证。 AD FS 使用 AD 属性 badPasswordTime 作为确定 Extranet 观察窗口是否已传递的引用。 如果当前时间 > badPasswordTime + ExtranetObservationWindow,则窗口已传递。

注意

AD FS Extranet 锁定函数独立于 AD 锁定策略。 但是,强烈建议将 ExtranetLockoutThreshold 参数值设置为小于 AD 帐户锁定阈值的值。 未能这样做将导致 AD FS 无法保护帐户在 Active Directory 中被锁定。

启用 Extranet 锁定功能(最多 15 次错误密码尝试次数和 30 分钟软锁定持续时间)的示例如下所示:

Set-AdfsProperties -EnableExtranetLockout $true -ExtranetLockoutThreshold 15 -ExtranetObservationWindow (new-timespan -Minutes 30)

这些设置将应用于 AD FS 服务可以进行身份验证的所有域。 其工作方式是,当 AD FS 收到身份验证请求时,它将通过 LDAP 调用访问主域控制器 (PDC) ,并针对 PDC 上的用户的 badPwdCount 属性执行查找。 如果 AD FS 找到 badPwdCount>= ExtranetLockoutThreshold 设置的值,并且 Extranet 观察窗口中定义的时间尚未通过,AD FS 将立即拒绝请求,这意味着无论用户是否从 Extranet 输入良好或错误的密码,登录将失败,因为 AD FS 不会将凭据发送到 AD。 AD FS 不会保留与 badPwdCount 或锁定用户帐户相关的任何状态。 AD FS 将 AD 用于所有状态跟踪。

警告

当服务器 2012 R2 上的 AD FS Extranet 锁定通过 WAP 启用所有身份验证请求时,PDC 上的 AD FS 会验证这些请求。 PDC 不可用时,用户将无法从 Extranet 进行身份验证。

服务器 2016 提供了一个附加参数,该参数允许 AD FS 在 PDC 不可用时回退到另一个域控制器:

  • ExtranetLockoutRequirePDC <布尔值> - 启用时:extranet 锁定需要主域控制器 (PDC) 。 禁用时:如果 PDC 不可用,Extranet 锁定将回退到另一个域控制器。

可以使用以下Windows PowerShell命令在 Server 2016 上配置 AD FS extranet 锁定:

Set-AdfsProperties -EnableExtranetLockout $true -ExtranetLockoutThreshold 15 -ExtranetObservationWindow (new-timespan -Minutes 30) -ExtranetLockoutRequirePDC $false

使用 Active Directory 锁定策略

AD FS 中的 Extranet 锁定功能独立于 AD 锁定策略工作。 但是,确实需要确保正确配置 Extranet 锁定的设置,以便它可以在 AD 锁定策略中实现其安全目的。 让我们先看看 AD 锁定策略。 AD 中关于锁定策略有三个设置:

  • 帐户锁定阈值:此设置类似于 AD FS 中的 ExtranetLockoutThreshold 设置。 它确定导致用户帐户被锁定的失败登录尝试次数。为了保护用户帐户免受恶意帐户锁定攻击,你想要在 AD FS < 中设置 ExtranetLockoutThreshold 值,即 AD 中的帐户锁定阈值
  • 帐户锁定持续时间:此设置确定用户帐户被锁定的时间。此设置在此会话中并不重要,因为在正确配置 AD 锁定之前,应始终发生 Extranet 锁定
  • 重置帐户锁定计数器之后:此设置确定在 badPwdCount 重置为 0 之前,用户上次登录失败必须花费多少时间。 为了使 AD FS 中的 Extranet 锁定功能能够很好地使用 AD 锁定策略,需要确保 AD FS > 中的 ExtranetObservationWindow 值在 AD 中重置帐户锁定计数器后的值。 以下示例将解释原因。

让我们看一下两个示例,并了解基于不同设置和状态随时间变化 的糟糕PwdCount 。 假设这两个示例 帐户锁定阈值 = 4, ExtranetLockoutThreshold = 2。 红色箭头表示错误的密码尝试,绿色箭头表示良好的密码尝试。 在示例 #1 中,ExtranetObservationWindowReset>帐户锁定计数器之后。 在示例 #2 中,ExtranetObservationWindowReset<帐户锁定计数器之后

示例 1

Diagram that shows how badPwdCount changes over time based on different settings and states.

示例 2

Example1

如上所示, 将 badPwdCount 重置为 0 时有两个条件。 一种是成功登录。 另一种是在设置 后重置帐户锁定计数器 中定义的此计数器的时间。 重置帐户锁定计数器AfterExtranetObservationWindow< 时,帐户没有任何被 AD 锁定的风险。 但是,如果重置帐户锁定计数器AfterExtranetObservationWindow>,则可能会由 AD 锁定帐户,但以“延迟的方式”锁定帐户。 根据配置,AD 锁定帐户可能需要一段时间,因为 AD FS 只会在其观察窗口中允许一个错误的密码尝试,直到 badPwdCount 达到 帐户锁定阈值

有关详细信息,请参阅 配置帐户锁定

已知问题

存在一个已知问题,即 AD 用户帐户无法使用 AD FS 进行身份验证,因为 badPwdCount 属性不会复制到 ADFS 正在查询的域控制器。 有关详细信息 ,请参阅2971171 。 可在此处 找到到目前为止已发布的所有 AD FS FPGA。

要记住的关键点

  • Extranet 锁定功能仅适用于身份验证请求通过 Web 应用程序代理
  • Extranet 锁定功能仅适用于 用户名 & 密码身份验证
  • AD FS 不会跟踪已软锁定的 badPwdCount 或用户。AD FS 将 AD 用于所有状态跟踪
  • AD FS 通过针对 PDC 上的用户的 LDAP 调用执行 对 badPwdCount 属性的查找,以便每次尝试进行身份验证
  • 如果 AD FS 无法访问 PDC,则超过 2016 的 AD FS 将失败。 AD FS 2016 引入了一些改进,允许 AD FS 在 PDC 不可用的情况下回退到其他域控制器。
  • 如果 badPwdCount < ExtranetLockoutThreshold,AD FS 将允许来自 Extranet 的身份验证请求
  • 如果 badPwdCount>= ExtranetLockoutThreshold AND badPasswordTimeExtranetObservationWindow + < Current time,AD FS 将拒绝来自 Extranet 的身份验证请求
  • 为了避免恶意帐户锁定,应确保 ExtranetLockoutThresholdAccount<锁定阈值ExtranetObservationWindowReset>帐户锁定计数器

其他参考

AD FS 操作