使用 Microsoft Entra 連線 Sync 實作密碼哈希同步處理

本文提供您將使用者密碼從 內部部署的 Active Directory 實例同步處理至雲端式 Microsoft Entra 實例所需的資訊。

密碼雜湊同步處理如何運作

Active Directory 網域服務會以哈希值表示形式儲存密碼,以實際用戶密碼的形式儲存密碼。 哈希值是單向數學函式的結果( 哈希演算法)。 沒有任何方法能將單向函數的結果還原成純文字版本的密碼。

若要同步處理密碼,Microsoft Entra 連線 Sync 會從 內部部署的 Active Directory 實例擷取您的密碼哈希。 系統會先對密碼雜湊套用額外的安全性處理,再將其同步至 Microsoft Entra 驗證服務。 密碼是以個別使用者為單位,依時間先後順序進行同步處理。

實際的密碼雜湊同步程序資料流程,與使用者資料的同步處理相似。 不過,密碼的同步處理頻率會高於其他屬性的標準目錄同步作業時程。 密碼雜湊同步流程每 2 分鐘就會執行一次。 您無法修改此流程的頻率。 當您同步處理密碼時,該密碼會覆寫現有的雲端密碼。

您第一次啟用密碼雜湊同步功能時,系統會對範圍內的所有使用者執行密碼的首次同步處理作業。 分段推出 可讓您選擇性地測試具有雲端驗證功能的使用者群組,例如 Microsoft Entra 多重要素驗證、條件式存取、身分識別保護,以取得外泄的認證、身分識別治理和其他認證,再剪下您的網域。 您無法明確定義您想要同步處理的使用者密碼子集。 不過,如果有多個連接器,可能會停用某些連接器的密碼哈希同步,但無法使用 Set-ADSyncAADPasswordSyncConfiguration Cmdlet 來停用其他連接器的密碼哈希同步處理。

當您變更內部部署密碼時,系統一般會在幾分鐘內同步更新後的密碼。 密碼雜湊同步功能會自動重試失敗的同步處理作業。 如果在嘗試同步處理密碼時發生錯誤,錯誤會記錄在您的事件檢視器中。

同步處理密碼不會影響目前登入的使用者。 您目前的雲端服務會話不會立即受到同步處理密碼變更的影響,該變更會在您登入雲端服務時發生。 不過,當雲端服務要求您再次驗證時,您必須提供新的密碼。

用戶必須第二次輸入其公司認證,才能向 Microsoft Entra 識別符進行驗證,無論他們是否登入其公司網路。 不過,如果使用者在登入時選取 [讓我保持登入](KMSI) 複選框,則可以將這個模式最小化。 此選取項目會設定會話 Cookie,以略過 180 天的驗證。 MICROSOFT Entra 系統管理員可以啟用或停用 KMSI 行為。 此外,您可以藉由設定 Microsoft Entra join 或 Microsoft Entra 混合式加入來減少密碼提示,當使用者在連線到公司網路的公司裝置上時,會自動將使用者登入。

其他優點

  • 一般而言,密碼哈希同步處理比同盟服務更容易實作。 它不需要任何其他伺服器,而且不需要依賴高可用性同盟服務來驗證使用者。
  • 除了同盟之外,也可以啟用密碼哈希同步處理。 如果您的同盟服務發生中斷,它可能會作為後援。

注意

只有 Active Directory 中的物件類型使用者才支援密碼同步處理。 iNetOrgPerson 物件類型不支援它。

密碼哈希同步處理運作方式的詳細描述

下一節將深入說明 Active Directory 與 Microsoft Entra 識別碼之間的密碼哈希同步處理運作方式。

詳細的密碼流程

  1. 每兩分鐘,AD 連線 伺服器上的密碼哈希同步處理代理程式會從 DC 要求儲存的密碼哈希(unicodePwd 屬性)。 此要求是透過標準 MS-DRSR 複寫通訊協定,用來同步處理 DC 之間的數據。 服務帳戶必須具有複寫目錄變更和複寫目錄變更所有 AD 許可權(預設在安裝時授與)才能取得密碼哈希。
  2. 傳送之前,DC 會使用 RPC 會話金鑰的 MD5 哈希和 salt 的金鑰來加密 MD4 密碼哈希。 然後,它會透過 RPC 將結果傳送至密碼哈希同步處理代理程式。 DC 也會使用 DC 複寫通訊協定將 salt 傳遞至同步處理代理程式,讓代理程式能夠解密信封。
  3. 密碼哈希同步處理代理程式具有加密信封之後,它會使用 MD5CryptoServiceProvider 和 salt 來產生密鑰,將接收的數據解密回其原始 MD4 格式。 密碼哈希同步處理代理程式永遠無法存取純文本密碼。 密碼哈希同步處理代理程式的 MD5 使用嚴格是為了與 DC 的復寫通訊協定相容性,而且只會在 DC 與密碼哈希同步代理程式之間使用。
  4. 密碼哈希同步處理代理程式會先將哈希轉換成 32 位元組十六進位字串,然後使用 UTF-16 編碼將此字串轉換為二進位字串,將 16 位元組二進位密碼哈希擴充為 64 個字節。
  5. 密碼哈希同步處理代理程式會將由10位元組長度 salt 組成的每個使用者 salt 新增至64位元組二進位檔,以進一步保護原始哈希。
  6. 密碼哈希同步處理代理程序接著會結合 MD4 哈希加上每個使用者 salt,並將它輸入 PBKDF2 函式。 使用 HMAC-SHA256 索引鍵哈希演算法的 1000 個反覆專案。 如需其他詳細數據,請參閱 Microsoft Entra 白皮書
  7. 密碼哈希同步處理代理程式會採用產生的 32 位元組哈希,串連每個使用者 salt 和 SHA256 反復專案的數目(供 Microsoft Entra ID 使用),然後透過 TLS 將字元串從 Microsoft Entra 連線 傳輸至 Microsoft Entra ID。
  8. 當用戶嘗試登入 Microsoft Entra ID 並輸入其密碼時,密碼會透過相同的 MD4+salt+PBKDF2+HMAC-SHA256 程式執行。 如果產生的哈希符合儲存在 Microsoft Entra ID 中的哈希,則使用者已輸入正確的密碼並經過驗證。

注意

原始 MD4 哈希不會傳送至 Microsoft Entra ID。 相反地,會傳輸原始 MD4 哈希的 SHA256 哈希。 因此,如果取得儲存在 Microsoft Entra ID 中的哈希,就無法在內部部署傳遞哈希攻擊中使用。

注意

密碼哈希值永遠不會儲存在 SQL 中。 只有在傳送至 Microsoft Entra ID 之前,才會在記憶體中處理這些值。

安全性考量

同步處理密碼時,密碼的純文本版本不會公開至密碼哈希同步處理功能、Microsoft Entra ID 或任何相關聯的服務。

使用者驗證會針對 Microsoft Entra 進行,而不是針對組織自己的 Active Directory 實例。 儲存在 Microsoft Entra ID 中的 SHA256 密碼數據(原始 MD4 哈希的哈希)比儲存在 Active Directory 中的哈希更安全。 此外,由於無法解密此 SHA256 哈希,因此無法回到組織的 Active Directory 環境,並在傳遞哈希攻擊中顯示為有效的用戶密碼。

密碼原則考慮

啟用密碼哈希同步處理會影響兩種類型的密碼原則:

  • 密碼複雜度原則
  • 密碼到期原則

密碼複雜度原則

啟用密碼哈希同步處理時,內部部署的 Active Directory 實例中的密碼複雜度原則會覆寫雲端中已同步處理使用者的複雜度原則。 您可以使用 內部部署的 Active Directory 實體的所有有效密碼來存取 Microsoft Entra 服務。

注意

直接在雲端中建立的用戶密碼仍受限於雲端中所定義的密碼原則。

密碼到期原則

如果使用者位於密碼哈希同步處理的範圍內,則預設雲端帳戶密碼會設定為 永不過期

您可以使用在內部部署環境中過期的同步密碼,繼續登入雲端服務。 您的雲端密碼會於下一次您在內部部署環境中變更密碼時更新。

CloudPasswordPolicyForPasswordSyncedUsersEnabled

如果有同步處理的使用者只與 Microsoft Entra 整合式服務互動,而且也必須遵守密碼到期原則,您可以啟用 CloudPasswordPolicyForPasswordSyncedUsersEnabled 功能來強制他們遵守 Microsoft Entra 密碼到期原則(在已被取代的 MSOnline PowerShell 模組中,稱為 EnforceCloudPasswordPolicyForPasswordSyncedUsers)。

CloudPasswordPolicyForPasswordSyncedUsersEnabled 停用時(這是預設設定),Microsoft Entra 連線 會將同步處理使用者的 PasswordPolicies 屬性設定為 “DisablePasswordExpiration”。 每次同步處理用戶的密碼,並指示 Microsoft Entra ID 忽略該使用者的雲端密碼到期原則時,就會這麼做。 您可以使用 Microsoft Graph PowerShell 模組搭配下列命令來檢查 屬性的值:

(Get-MgUser -UserId <User Object ID> -Property PasswordPolicies).PasswordPolicies

若要啟用 CloudPasswordPolicyForPasswordSyncedUsersEnabled 功能,請使用 Graph PowerShell 模組執行下列命令,如下所示:

$OnPremSync = Get-MgDirectoryOnPremiseSynchronization
$OnPremSync.Features.CloudPasswordPolicyForPasswordSyncedUsersEnabled = $true

Update-MgDirectoryOnPremiseSynchronization `
  -OnPremisesDirectorySynchronizationId $OnPremSync.Id `
  -Features $OnPremSync.Features 

注意

您必須安裝 MSGraph PowerShell 模組,才能讓上述腳本運作。 如果您收到與許可權不足相關的任何錯誤,請確定您已在連線時使用下列命令正確同意 API 範圍 Connect-MgGraph -Scopes "OnPremDirectorySynchronization.ReadWrite.All"

啟用之後,Microsoft Entra ID 不會移至每個同步處理的使用者,以從 PasswordPolicies 屬性中移除 DisablePasswordExpiration 該值。 相反地, DisablePasswordExpiration 在每個使用者下次密碼哈希同步處理期間,會在內部部署 AD 中的下一個密碼變更時,從 PasswordPolicies 移除此值。

啟用 CloudPasswordPolicyForPasswordSyncedUsersEnabled 功能之後,就會布建新的使用者,而不需要 PasswordPolicies 值。

提示

建議您先啟用 CloudPasswordPolicyForPasswordSyncedUsersEnabled ,再啟用密碼哈希同步處理,如此一來,使用者的初始密碼哈希同步不會將值新增 DisablePasswordExpiration 至 PasswordPolicies 屬性。

預設的 Microsoft Entra 密碼原則會要求使用者每隔 90 天變更其密碼。 如果您的 AD 原則也是 90 天,則這兩個原則應該相符。 不過,如果 AD 原則不是 90 天,您可以使用 Update-MgDomain PowerShell 命令來更新 Microsoft Entra 密碼原則以比對。

Microsoft Entra ID 支援每個已註冊網域的個別密碼到期原則。

注意:如果有同步處理的帳戶需要在 Microsoft Entra ID 中具有非過期的密碼,您必須在 Microsoft Entra ID 中明確將值新增 DisablePasswordExpiration 至用戶物件的 PasswordPolicies 屬性。 您可以執行下列命令來執行此動作。

Update-MgUser -UserID <User Object ID> -PasswordPolicies "DisablePasswordExpiration"

注意

對於將 PasswordPolicies 值設定為 DisablePasswordExpiration的混合式使用者,此值會在內部部署執行密碼變更之後切換為 None

注意

Update-MgDomain PowerShell 命令無法在同盟網域上運作。

注意

Update-MgUser PowerShell 命令無法在同盟網域上運作。

同步處理暫存密碼和「在下一次登入時強制變更密碼」

通常強制使用者在第一次登入期間變更其密碼,尤其是在發生系統管理員密碼重設之後。 它通常稱為設定「暫存」密碼,並藉由檢查 Active Directory (AD) 中用戶物件上的 [用戶必須在下次登入時變更密碼] 旗標來完成。

暫時密碼功能有助於確保第一次使用時完成認證擁有權的傳輸,以將超過一個人知道該認證的持續時間降到最低。

若要支援同步處理使用者的 Microsoft Entra ID 中的暫存密碼,您可以在 Microsoft Entra 連線 伺服器上執行下列命令來啟用 ForcePasswordChangeOnLogOn 功能:

Set-ADSyncAADCompanyFeature -ForcePasswordChangeOnLogOn $true

注意

強制使用者在下次登入時變更其密碼,需要同時變更密碼。 Microsoft Entra 連線 不會自行挑選強制密碼變更旗標;這是密碼哈希同步處理期間所偵測到的密碼變更補充。

如果使用者在 Active Directory 中設定了 [密碼永不過期] 選項,強制密碼變更旗標將不會在 Active Directory 中設定,因此不會在下一次登入期間提示使用者變更密碼。

使用 「用戶必須在下次登入時變更密碼」旗標在 Active Directory 中建立的新使用者,一律會在 Microsoft Entra ID 中布建密碼原則為「在下一次登入時強制變更密碼」,而不論 ForcePasswordChangeOnLogOn 功能為 true 或 false。 這是 Microsoft Entra 內部邏輯,因為新使用者未布建密碼,而 ForcePasswordChangeOnLogOn 功能只會影響系統管理員密碼重設案例。

如果在 Active Directory 中建立使用者,並在啟用此功能之前,使用「用戶必須在下次登入時變更密碼」,使用者就會在登入時收到錯誤。 若要補救此問題,請取消核取並重新檢查 [用戶必須在下次登入時變更密碼] 欄位,Active Directory 使用者和電腦。 同步處理使用者物件變更之後,使用者將會在 Microsoft Entra ID 中收到預期的提示,以更新其密碼。

警告

只有在租用戶上啟用 SSPR 和密碼回寫時,才應該使用此功能。 如此一來,如果使用者透過 SSPR 變更其密碼,則會同步處理至 Active Directory。

帳戶到期

如果您的組織使用 accountExpires 屬性作為用戶帳戶管理的一部分,則此屬性不會同步處理至 Microsoft Entra ID。 因此,針對密碼哈希同步處理所設定的環境中,過期的 Active Directory 帳戶仍會在 Microsoft Entra ID 中作用中。 我們建議使用排程的PowerShell腳本,停用使用者的AD帳戶一旦到期(使用 Set-ADUser Cmdlet)。 相反地,在從 AD 帳戶移除到期期間,應該重新啟用帳戶。

覆寫同步處理的密碼

系統管理員可以使用PowerShell直接在 Microsoft Entra ID 中手動重設密碼(除非使用者位於同盟網域中)。

在此情況下,新密碼會覆寫您同步處理的密碼,而雲端中定義的所有密碼原則都會套用至新的密碼。

如果您再次變更內部部署密碼,新密碼會同步處理至雲端,並覆寫手動更新的密碼。

密碼的同步處理不會影響登入的 Azure 使用者。 您目前的雲端服務會話不會立即受到登入雲端服務時所發生的同步密碼變更所影響。 KMSI 會延長此差異的持續時間。 當雲端服務要求您再次驗證時,您需要提供新的密碼。

Microsoft Entra Domain Services 的密碼哈希同步處理程式

如果您使用 Microsoft Entra Domain Services 為需要使用 Kerberos、LDAP 或 NTLM 的應用程式和服務提供舊版驗證,則某些額外的程式是密碼哈希同步處理流程的一部分。 Microsoft Entra 連線 會使用其他程式,將密碼哈希同步處理至 Microsoft Entra ID,以用於 Microsoft Entra Domain Services:

重要

Microsoft Entra 連線 應該只安裝並設定為與內部部署 AD DS 環境同步處理。 不支援在 Microsoft Entra Domain Services 受控網域中安裝 Microsoft Entra 連線,以將物件同步處理回 Microsoft Entra ID。

當您為 Microsoft Entra 租使用者啟用 Microsoft Entra Domain Services 時,Microsoft Entra 連線 只會同步處理舊版密碼哈希。 如果您只使用 Microsoft Entra 連線 同步處理內部部署 AD DS 環境與 Microsoft Entra 識別符,則不會使用下列步驟。

如果您的舊版應用程式未使用NTLM驗證或LDAP簡單系結,建議您停用 Microsoft Entra Domain Services 的NTLM密碼哈希同步處理。 如需詳細資訊,請參閱 停用弱式加密套件和 NTLM 認證哈希同步處理

  1. Microsoft Entra 連線 擷取租使用者 Microsoft Entra Domain Services 實例的公鑰。
  2. 當使用者變更其密碼時,內部部署域控制器會將密碼變更的結果儲存在兩個屬性中:
    • NTLM 密碼哈希的 unicodePwd
    • kerberos 密碼哈希的 supplementalCredentials
  3. Microsoft Entra 連線 會透過目錄複寫通道偵測密碼變更(需要複寫至其他域控制器的屬性變更)。
  4. 對於已變更密碼的每個使用者,Microsoft Entra 連線 會執行下列步驟:
    • 產生隨機的 AES 256 位對稱金鑰。
    • 產生第一輪加密所需的隨機初始化向量。
    • 從 supplementalCredentials 屬性擷取 Kerberos 密碼哈希。
    • 檢查 Microsoft Entra Domain Services 安全性設定 SyncNtlmPasswords 設定。
      • 如果停用此設定,則會產生隨機、高 entropy NTLM 哈希(與使用者的密碼不同)。 接著,此哈希會與補充Crendetials 屬性中確切的 Kerberos 密碼哈希合併成一個數據結構。
      • 如果啟用,請將 unicodePwd 屬性的值與從 supplementalCredentials 屬性擷取的 Kerberos 密碼哈希合併成一個數據結構。
    • 使用 AES 對稱金鑰加密單一數據結構。
    • 使用租使用者的 Microsoft Entra Domain Services 公鑰來加密 AES 對稱密鑰。
  5. Microsoft Entra 連線 會將加密的 AES 對稱密鑰、包含密碼哈希的加密數據結構,以及初始化向量傳送至 Microsoft Entra ID。
  6. Microsoft Entra ID 會儲存加密的 AES 對稱金鑰、加密的數據結構,以及使用者的初始化向量。
  7. Microsoft Entra ID 會將加密的 AES 對稱密鑰、加密的數據結構,以及使用內部同步處理機制,將加密的 HTTP 會話推送至 Microsoft Entra Domain Services。
  8. Microsoft Entra Domain Services 會從 Azure Key Vault 擷取租用戶實例的私鑰。
  9. 針對每組加密的數據(代表單一使用者的密碼變更),Microsoft Entra Domain Services 接著會執行下列步驟:
    • 使用其私鑰來解密 AES 對稱金鑰。
    • 使用 AES 對稱金鑰搭配初始化向量來解密包含密碼哈希的加密數據結構。
    • 將它收到的 Kerberos 密碼哈希寫入 Microsoft Entra Domain Services 域控制器。 哈希會儲存到用戶物件的 supplementalCredentials 屬性中,該屬性會加密至 Microsoft Entra Domain Services 域控制器的公鑰。
    • Microsoft Entra Domain Services 會將它收到的 NTLM 密碼哈希寫入 Microsoft Entra Domain Services 域控制器。 哈希會儲存到用戶物件的 unicodePwd 屬性中,該屬性會加密至 Microsoft Entra Domain Services 域控制器的公鑰。

啟用密碼雜湊同步功能

重要

如果您要從 AD FS(或其他同盟技術)移轉至密碼哈希同步處理,請檢視 將應用程式移轉至 Microsoft Entra ID 的資源。

當您透過 [快速設定] 選項安裝 Microsoft Entra Connect 時,就會自動啟用密碼雜湊同步功能。 如需詳細資訊,請參閱使用快速設定開始使用 Microsoft Entra 連線。

若安裝 Microsoft Entra Connect 時使用自訂設定,您就能在使用者登入頁面上使用密碼雜湊同步功能。 如需詳細資訊,請參閱 Microsoft Entra 連線 的自定義安裝。

啟用密碼雜湊同步處理

密碼哈希同步處理和 FIPS

若您的伺服器已根據聯邦資訊處理標準 (FIPS) 進行鎖定,MD5 便會停用。

若要啟用密碼雜湊同步功能的 MD5,請執行下列步驟:

  1. 移至 %programfiles%\Microsoft Azure AD 同步\Bin。
  2. 開啟 [Server.exe.config]。
  3. 前往檔案結尾處的 [設定/執行階段] 節點。
  4. 新增下列節點:<enforceFIPSPolicy enabled="false" />
  5. 儲存您的變更。
  6. 重新啟動,變更才會生效。

做為參考,此片段應如下列所示:

    <configuration>
        <runtime>
            <enforceFIPSPolicy enabled="false" />
        </runtime>
    </configuration>

如需安全性和 FIPS 的相關信息,請參閱 Microsoft Entra 密碼哈希同步處理、加密和 FIPS 合規性

針對密碼哈希同步處理進行疑難解答

如果您有密碼哈希同步處理的問題,請參閱 針對密碼哈希同步處理進行疑難解答。

下一步