設定 AD FS 外部網路鎖定保護

在 Windows Server 2012 R2 上的 AD FS 中,我們導入了名為外部網路鎖定的安全性功能。 透過這項功能,AD FS 會「停止」驗證來自外部的「惡意」使用者帳戶一段時間。 這可避免您的使用者帳戶遭到 Active Directory 鎖定。 除了保護您的使用者免受 AD 帳戶鎖定之外,AD FS 外部網路鎖定也可以針對暴力密碼猜測破解攻擊進行保護。

注意

此功能僅適用於透過 Web 應用程式 Proxy 傳送驗證要求的外部網路案例,且僅適用於使用者名稱和密碼驗證

外部網路鎖定的優點

外部網路鎖定提供下列主要優點:

  • 可保護您的使用者帳戶不受暴力密碼破解攻擊;其間,攻擊者會持續傳送驗證要求以嘗試猜測使用者的密碼。 在此情況下,AD FS 會鎖定惡意使用者帳戶的外部網路存取
  • 可保護您的使用者帳戶不受惡意帳戶鎖定;其間,攻擊者會使用錯誤的密碼傳送驗證要求,藉以鎖定使用者帳戶。 在此情況下,雖然 AD FS 會鎖定使用者帳戶的外部網路存取,但 AD 中的實際使用者帳戶並不會遭到鎖定,且使用者仍可存取組織內的公司資源。 這稱為軟鎖定

運作方式

您必須設定 AD FS 中的三項設定才能啟用此功能:

  • EnableExtranetLockout <布林值>:如果您想要啟用外部網路鎖定,請將此布林值設定為 True。
  • ExtranetLockoutThreshold <整數>:這會定義錯誤密碼嘗試次數上限。 達到閾值後,AD FS 會立即拒絕來自外部網路的要求,而不嘗試連絡網域控制站以進行驗證 (無論密碼是否正確),直到外部網路觀測期間結束。 這表示 AD 帳戶的 badPwdCount 屬性值在帳戶遭到軟鎖定時並不會增加。
  • ExtranetObservationWindow <TimeSpan> 這會決定使用者帳戶將遭到軟鎖定多久的時間。該期間結束後,AD FS 會再次開始執行使用者名稱和密碼驗證。 AD FS 會使用 AD 屬性 badPasswordTime 作為參考,據以判斷外部網路觀測期間是否已結束。 如果目前的時間 > badPasswordTime + ExtranetObservationWindow,則表示該期間已結束。

注意

AD FS 外部網路鎖定功能與 AD 鎖定原則無關。 不過,強烈建議您將 ExtranetLockoutThreshold 參數值設定為小於 AD 帳戶鎖定閾值的值。 若未這麼做,會導致 AD FS 無法防止帳戶在 Active Directory 中遭到鎖定。

以下顯示使用最多 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 設定,且在外部網路觀測期間中定義的時間尚未結束,則 AD FS 會立即拒絕要求,這表示無論使用者從外部網路輸入的密碼是否正確,登入都將失敗,因為 AD FS 不會將認證傳送至 AD。 AD FS 不會維護任何與 badPwdCount 或鎖定的使用者帳戶相關的任何狀態。 AD FS 會使用 AD 進行所有狀態追蹤。

警告

當 Server 2012 R2 上的 AD FS 外部網路鎖定啟用時,所有透過 WAP 的驗證要求都會由 PDC 上的 AD FS 驗證。 當 PDC 無法使用時,使用者將無法從外部網路進行驗證。

Server 2016 提供了額外的參數,讓 AD FS 在 PDC 無法使用時能夠回復到另一個網域控制站:

  • ExtranetLockoutRequirePDC <布林值> - 啟用時:外部網路鎖定需要網域主控站 (PDC)。 停用時:如果 PDC 無法使用,外部網路鎖定將會回復到另一個網域控制站。

您可以使用下列 Windows PowerShell 命令在 Server 2016 上設定 AD FS 外部網路鎖定:

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

使用 Active Directory 鎖定原則

AD FS 中的外部網路鎖定功能在 AD 鎖定原則外獨立運作。 不過,您必須確定外部網路鎖定的設定已正確設定,而能夠透過 AD 鎖定原則發揮其安全方面的用途。

我們先了解一下 AD 鎖定原則。 AD 中有三個關於鎖定原則的設定:

  • 帳戶鎖定閾值:此設定類似於 AD FS 中的 ExtranetLockoutThreshold 設定。 它會決定將導致使用者帳戶遭到鎖定的失敗登入嘗試次數。為了保護您的使用者帳戶不受惡意帳戶鎖定攻擊,您在 AD FS 中設定的 ExtranetLockoutThreshold 值應 < AD 中的帳戶鎖定閾值
  • 帳戶鎖定期間:此設定將決定使用者帳戶會鎖定多久。此設定在這段討論中並不重要,因為如果設定正確,外部網路鎖定就一律會在 AD 鎖定之前發生
  • 重設帳戶鎖定計數器前的等待時間:此設定會決定自使用者上次登入失敗起需經過多少時間,badPwdCount 才可重設為 0。 為了讓 AD FS 中的外部網路鎖定功能與 AD 鎖定原則妥善搭配運作,您應確保 AD FS 中的 ExtranetObservationWindow 值 > AD 中的「重設帳戶鎖定計數器前的等待時間」值。 下列範例將說明其原因。

我們來看看兩個範例,並確認 badPwdCount 隨著不同的設定和狀態在一段時間後有何變化。 假設這兩個範例中的帳戶鎖定閾值 = 4,ExtranetLockoutThreshold = 2。 紅色箭號代表錯誤密碼嘗試,綠色箭號代表正確密碼嘗試。 在範例 1 中,ExtranetObservationWindow>重設帳戶鎖定計數器前的等待時間。 在範例 2 中,ExtranetObservationWindow<重設帳戶鎖定計數器前的等待時間

範例 1

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

範例 2

Example1

從上面可以看出,在兩種情況下,badPwdCount 將會重設為 0。 其一是有人成功登入時。 其二則是需要重設此計數器時,如 [重設帳戶鎖定計數器前的等待時間] 設定中所定義。 重設帳戶鎖定計數器前的等待時間<ExtranetObservationWindow 時,帳戶不會有任何遭 AD 鎖定的風險。 不過,如果重設帳戶鎖定計數器前的等待時間>ExtranetObservationWindow,帳戶就有可能遭到 AD 鎖定,但會以「延遲的方式」進行。 視個人設定的不同,AD 鎖定帳戶可能需要一段時間,因為在 badPwdCount 達到帳戶鎖定閾值之前,AD FS 在其觀測期間內只會允許一次錯誤密碼嘗試。

如需詳細資訊,請參閱設定帳戶鎖定

已知問題

目前有下列已知問題:若 badPwdCount 屬性未複寫到 ADFS 正在查詢的網域控制站,AD 使用者帳戶就無法向 AD FS 進行驗證。 如需詳細資訊,請參閱 2971171。 您可以在這裡找到所有已發行的 AD FS QFE。

須留意的重點

  • 外部網路鎖定功能僅適用於透過 Web 應用程式 Proxy 傳送驗證要求的外部網路案例
  • Extranet Lockout 功能只適用使用者名稱 & 密碼驗證
  • AD FS 完全不會追蹤 badPwdCount 或已虛鎖定的使用者。AD FS 會使用 AD 進行所有狀態追蹤
  • 對於每次驗證嘗試,AD FS 都會透過 LDAP 呼叫對 PDC 上的使用者執行 badPwdCount 屬性的查閱
  • 2016 年之前的 AD FS 若無法存取 PDC,將會失敗。 AD FS 2016 導入了可讓 AD FS 在 PDC 無法使用時回復到其他網域控制站的改進。
  • 如果 badPwdCount < ExtranetLockoutThreshold,AD FS 就會允許來自外部網路的驗證要求
  • 如果 badPwdCount>= ExtranetLockoutThresholdbadPasswordTime + ExtranetObservationWindow< 目前的時間,AD FS 就會拒絕來自外部網路的驗證要求
  • 若要避免惡意帳戶鎖定,您應確保 ExtranetLockoutThreshold<帳戶鎖定閾值ExtranetObservationWindow>重設帳戶鎖定計數器