Microsoft Entra Connect 同期を使用してパスワード ハッシュ同期を実装する

この記事では、オンプレミスの Active Directory インスタンスからクラウドベースの Microsoft Entra インスタンスへのユーザー パスワードの同期に必要な情報を提供します。

パスワード ハッシュ同期のしくみ

Active Directory ドメイン サービスは、実際のユーザー パスワードをハッシュ値表現の形式で格納します。 ハッシュ値は、一方向の数学関数 ("ハッシュ アルゴリズム") の結果として求められます。 一方向の関数の結果をパスワードのプレーンテキスト バージョンに戻す方法はありません。

パスワードを同期するため、Microsoft Entra Connect 同期はオンプレミスの Active Directory インスタンスからパスワード ハッシュを抽出します。 Microsoft Entra 認証サービスに同期される前のパスワード ハッシュには、追加のセキュリティ処理が適用されます。 パスワードは、ユーザーごとに、時間順に同期されます。

パスワード ハッシュ同期処理の実際のデータ フローは、ユーザー データの同期と似ています。 ただし、パスワードは、他の属性に対する標準のディレクトリ同期ウィンドウよりも頻繁に同期されます。 パスワード ハッシュ同期プロセスは 2 分間隔で実行されます。 このプロセスの頻度を変更することはできません。 パスワードを同期すると、既存のクラウド パスワードが上書きされます。

パスワード ハッシュ同期機能を初めて有効にすると、スコープ内のすべてのユーザーの初回同期が実行されます。 段階的なロールアウトを行うと、ドメインを切り替える前に、Microsoft Entra 多要素認証、条件付きアクセス、漏洩した資格情報の ID 保護、ID ガバナンスなどのクラウド認証機能を使って、ユーザーのグループを選択的にテストできます。 同期するユーザー パスワードのサブセットを明示的に定義することはできません。 ただし、複数のコネクタが存在する場合、Set-ADSyncAADPasswordSyncConfiguration コマンドレットを使用してパスワード ハッシュ同期を無効にできるコネクタとできないコネクタがあります。

オンプレミス パスワードを変更すると、更新されたパスワードは、多くの場合、ほんの数分で同期されます。 同期の試行に失敗すると、パスワード ハッシュ同期機能により自動的に再試行が行われます。 パスワード同期の試行中にエラーが発生した場合、イベント ビューアーにエラーが記録されます。

パスワードの同期によって、現在サインイン中のユーザーが影響を受けることはありません。 クラウド サービスにサインインしている間、パスワード変更が同期された場合、現在のクラウド サービス セッションがその影響をすぐに受けることはありません。 しかしながら、クラウド サービスで認証が再び要求された場合は、新しいパスワードを指定する必要があります。

ユーザーは、自社のネットワークにサインインしているかどうかに関係なく、Microsoft Entra ID に対して認証を行うには、会社の資格情報をもう一度入力する必要があります。 ただし、ユーザーがサインイン時に [サインインしたままにする] (KMSI) チェックボックスをオンにすると、このパターンを最小限に抑えることができます。 このチェックボックスをオンにすると、180 日間認証をバイパスするセッション Cookie が設定されます。 Microsoft Entra 管理者は、KMSI の動作を有効または無効にできます。 さらに、ユーザーが自社のネットワークに接続された会社のデバイスを使っているときは、ユーザーを自動的にサインインさせる、Microsoft Entra 参加または Microsoft Entra ハイブリッド参加を構成することで、パスワードのプロンプトを減らすことができます。

その他の利点

  • 通常、パスワード ハッシュ同期は、フェデレーション サービスよりも実装が簡単です。 パスワード同期は追加のサーバーを必要としないため、ユーザーを認証するために高可用性フェデレーション サービスに依存するという状況を解消できるからです。
  • フェデレーションだけでなく、パスワード ハッシュ同期を有効にすることもできます。 これは、フェデレーション サービスで障害が発生した場合に、フォールバックとして使用できます。

注意

パスワード同期は、Active Directory でオブジェクトの種類がユーザーであるオブジェクトのみがサポートされます。 オブジェクトの種類が INetOrgPerson であるオブジェクトはサポートされません。

パスワード ハッシュ同期のしくみの詳しい説明

次のセクションでは、Active Directory と Microsoft Entra ID の間でパスワード ハッシュ同期がどのように行われるのかを詳しく説明します。

Detailed password flow

  1. AD Connect サーバー上のパスワード ハッシュ同期エージェントは、保存されたパスワード ハッシュ (unicodePwd 属性) を 2 分ごとに DC に要求します。 この要求は、DC 間でデータを同期するために使用される標準の MS-DRSR レプリケーション プロトコルを介して行われます。 サービス アカウントには、パスワード ハッシュを取得するために、Replicate Directory Changes (ディレクトリの変更のレプリケート) と Replicate Directory Changes All AD (ディレクトリの変更をすべての AD にレプリケート) の権限が必要になります (インストール時に既定で付与されます)。
  2. DC は、送信する前に、RPC セッション キーの MD5 ハッシュであるキーと salt を使用して MD4 パスワード ハッシュを暗号化します。 次に、この結果を RPC 経由でパスワード ハッシュ同期エージェントに送信します。 DC は、DC のレプリケーション プロトコルを使用して同期エージェントにも salt を渡すので、エージェントはエンベロープの暗号化を解除できます。
  3. パスワード ハッシュ同期エージェントは、暗号化されたエンベロープを受け取ると、MD5CryptoServiceProvider と salt を使用して、受信したデータの暗号化を解除し元の MD4 形式に戻すためのキーを生成します。 パスワード ハッシュ同期エージェントが、クリア テキストのパスワードにアクセスすることはありません。 パスワード ハッシュ同期エージェントによる MD5 の使用は、DC とレプリケーション プロトコルとの互換性の維持に限定されており、DC とパスワード ハッシュ同期エージェントの間でオンプレミスでのみ使用されます。
  4. パスワード ハッシュ同期エージェントは、最初にハッシュを 32 バイトの 16 進数文字列に変換し、次にこの文字列を UTF-16 エンコーディングでバイナリに変換することで、16 バイトのバイナリ パスワード ハッシュを 64 バイトに拡張します。
  5. パスワード ハッシュ同期エージェントは、10 バイト長の salt で構成されるユーザーごとの salt を、64 バイトの バイナリに追加し、 元のハッシュの保護を強化します。
  6. それから、パスワード ハッシュ同期エージェントは、MD4 ハッシュとユーザーごとのsalt を結合し、それを PBKDF2 関数に入力します。 HMAC-SHA256 キー付きハッシュ アルゴリズムの 1000 のイテレーションが使用されます。 詳しくは、Microsoft Entra のホワイトペーパーをご覧ください。
  7. パスワード ハッシュ同期エージェントは、結果の 32 バイト ハッシュを取得し、(Microsoft Entra ID で使うために) ユーザーごとのソルトと SHA256 の反復の数の両方を連結した後、TLS 経由で Microsoft Entra Connect から Microsoft Entra ID にその文字列を送信します。
  8. ユーザーが Microsoft Entra ID にサインインしようとして自分のパスワードを入力すると、パスワードは同じ MD4 + ソルト + PBKDF2 + HMAC - SHA256 のプロセスで処理されます。 返されたハッシュが、Microsoft Entra ID に格納されているハッシュと一致する場合、ユーザーは正しいパスワードを入力しており、認証が行われます。

Note

元の MD4 ハッシュは Microsoft Entra ID に送信されません。 代わりに、元の MD4 ハッシュの SHA256 ハッシュが送信されます。 その結果、Microsoft Entra ID に格納されているハッシュが取得されても、オンプレミスの Pass-the-Hash 攻撃では使用できません。

Note

パスワード ハッシュ値が SQL に格納されることはありません。 これらの値は、Microsoft Entra ID に送信される前にメモリ内でのみ処理されます。

セキュリティに関する考慮事項

パスワードを同期するとき、ユーザーのプレーンテキスト形式のパスワードは、パスワード ハッシュ同期機能、Microsoft Entra ID、関連付けられているサービスのいずれにも公開されません。

ユーザー認証は、組織の独自の Active Directory インスタンスではなく、Microsoft Entra に対して行われます。 Microsoft Entra ID に格納される SHA256 パスワード データ (元の MD4 ハッシュのハッシュ) は、Active Directory に格納されるものより安全です。 さらに、SHA256 ハッシュの暗号化は解除できないため、組織の Active Directory 環境に戻して、Pass-the-Hash 攻撃で有効なユーザーのパスワードとして表示することはできません。

パスワード ポリシーの考慮事項

パスワード ハッシュ同期を有効にすることによって影響を受ける 2 種類のパスワード ポリシーがあります。

  • パスワードの複雑性のポリシー
  • パスワードの有効期限のポリシー

パスワードの複雑性のポリシー

パスワード ハッシュ同期が有効になっている場合、オンプレミスの Active Directory インスタンスでのパスワードの複雑性ポリシーによって、同期済みユーザーに対するクラウドでの複雑性ポリシーがオーバーライドされます。 オンプレミスの Active Directory インスタンスのすべての有効なパスワードを、Microsoft Entra サービスへのアクセスに使用できます。

Note

クラウド内で直接作成されたユーザーのパスワードには、引き続きクラウドで定義されているパスワード ポリシーが適用されます。

パスワードの有効期限のポリシー

ユーザーがパスワード ハッシュ同期のスコープ内にいる場合、既定でクラウド アカウントのパスワードは "期限なし" に設定されます。

オンプレミス環境で期限切れになった同期パスワードを利用し、引き続きクラウド サービスにサインインできます。 クラウドのパスワードは、次にオンプレミス環境でパスワードを変更したときに更新されます。

CloudPasswordPolicyForPasswordSyncedUsersEnabled

Microsoft Entra 統合サービスのみを操作し、パスワードの有効期限ポリシーにも準拠する必要がある同期済みユーザーがいる場合は、CloudPasswordPolicyForPasswordSyncedUsersEnabled 機能 (非推奨の MSOnline PowerShell モジュールでは、これは EnforceCloudPasswordPolicyForPasswordSyncedUsers と呼ばれていました) を有効にすることで、Microsoft Entra のパスワード有効期限ポリシーに準拠することを強制できます。

CloudPasswordPolicyForPasswordSyncedUsersEnabled が無効になっている場合 (これは既定の設定です)、Microsoft Entra Connect は、同期されたユーザーの 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 

有効にすると、Microsoft Entra ID は、PasswordPolicies 属性から DisablePasswordExpiration 値を削除するために、同期された各ユーザーにアクセスしなくなります。 代わりに、オンプレミス AD での次回のパスワードの変更時、各ユーザーの次のパスワード ハッシュ同期中に PasswordPolicies から DisablePasswordExpiration 値が削除されます。

CloudPasswordPolicyForPasswordSyncedUsersEnabled 機能が有効になると、新しいユーザーは PasswordPolicies の値なしでプロビジョニングされます。

ヒント

パスワード ハッシュの初期同期によってユーザーの PasswordPolicies 属性に DisablePasswordExpiration 値が追加されないよう、パスワード ハッシュ同期を有効にする前に、CloudPasswordPolicyForPasswordSyncedUsersEnabled を有効にすることをお勧めします。

既定の Microsoft Entra パスワード ポリシーでは、ユーザーは 90 日ごとにパスワードを変更する必要があります。 AD でのポリシーも 90 日になっている場合は、2 つのポリシーが一致しているはずです。 ただし、AD のポリシーが 90 日でない場合は、ユーザーは Update-MgDomain PowerShell コマンドを使って、Microsoft Entra パスワード ポリシーを一致するように更新できます。

Microsoft Entra ID では、登録されたドメインごとに個別のパスワード有効期限ポリシーがサポートされています。

注意: 有効期限が切れないパスワードが必要な同期済みアカウントが Microsoft Entra ID にある場合は、Microsoft Entra ID のユーザー オブジェクトの PasswordPolicies 属性に、DisablePasswordExpiration 値を明示的に追加する必要があります。 これを行うには、次のコマンドを実行します。

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

注意

PasswordPolicies 値が DisablePasswordExpiration に設定されているハイブリッド ユーザーの場合、この値は、パスワード変更がオンプレミスで実行された後 None に切り替わります。

Note

Update-MGDomain PowerShell コマンドは、フェデレーション ドメインでは機能しません。

Note

Update-MgUser PowerShell コマンドは、フェデレーションドメインでは機能しません。

一時パスワードと "次回ログオン時にパスワード変更を強制" を同期する

通常は、最初のログオン時、特に管理者によるパスワードのリセットが行われた後に、ユーザーにパスワードの変更を強制します。 一般的に "一時" パスワードの設定と呼ばれており、Active Directory (AD) では、ユーザー オブジェクト上の [ユーザーは次回ログオン時にパスワード変更が必要] フラグのチェックをオンにすることで実現できます。

一時パスワード機能を使用すると、資格情報の所有権の譲渡が初回使用時に確実に完了し、複数の個人がその資格情報に関する知識を持つ期間を最小限に抑えることができます。

同期されたユーザーに対して Microsoft Entra ID で一時パスワードをサポートするには、Microsoft Entra Connect サーバーで次のコマンドを実行して、ForcePasswordChangeOnLogOn 機能を有効にできます。

Set-ADSyncAADCompanyFeature -ForcePasswordChangeOnLogOn $true

Note

次回ログオン時のパスワード変更をユーザーに強制すると、同時でのパスワード変更が必要になります。 Microsoft Entra Connect では、パスワードの強制変更フラグは単独では取得されません。これは、パスワード ハッシュ同期の間に発生する、検出されたパスワードの変更を補足するものです。

ユーザーが Active Directory (AD) で [パスワードを無期限にする] オプションを設定した場合、Active Directory (AD) では、パスワードの強制変更フラグが設定されないため、次回のサインイン時にパスワードの変更を求めるメッセージは表示されません。

"次回ログオン時のパスワードの変更を必須にする" フラグを指定して Active Directory で作成された新しいユーザーは、ForcePasswordChangeOnLogOn 機能が true か false かに関係なく、常に "次回のサインイン時にパスワードの変更を強制する" というパスワード ポリシーを使用して Microsoft Entra ID でプロビジョニングされます。 新しいユーザーはパスワードなしでプロビジョニングされるため、これは Microsoft Entra の内部的なロジックですが、ForcePasswordChangeOnLogOn 機能は管理者のパスワード リセット シナリオにのみ影響します。

機能が有効になる前に、Active Directory で [ユーザーは次回ログオン時にパスワードの変更が必要] をオンにしてユーザーが作成された場合、サインイン中にエラーが表示されます。 この問題を修復するには、[Active Directory ユーザーとコンピューター] の [ユーザーは次回ログオン時にパスワードの変更が必要] フィールドをオフにしてから再度オンにします。 ユーザー オブジェクトの変更を同期した後、ユーザーには、Microsoft Entra ID でのパスワードの更新を求めるメッセージが想定どおりに表示されます。

注意事項

この機能は、テナント上で SSPR とパスワード ライトバックが有効になっている場合にのみ使用してください。 これは、ユーザーが SSPR を使用してパスワードを変更した場合に、Active Directory に同期されるようにするためです。

アカウントの有効期限

組織でユーザー アカウント管理の一部として accountExpires 属性を使っている場合、この属性は Microsoft Entra ID に同期されません。 結果として、パスワード ハッシュ同期用に構成された環境の期限切れの Active Directory アカウントは、Microsoft Entra ID で引き続きアクティブなままになります。 ユーザーの AD アカウントの有効期限が切れたら、アカウントを無効にするようスケジュールされた PowerShell スクリプトの使用をお勧めします ( Set-ADUser コマンドレットを使用 します)。 逆に、AD アカウントから有効期限を削除するプロセス中に、アカウントを再び有効にする必要があります。

同期されたパスワードの上書き

管理者は、PowerShell を使って Microsoft Entra ID でパスワードを直接手動でリセットできます (ユーザーがフェデレーション ドメインに属している場合を除く)。

この場合、新しいパスワードによって同期されたパスワードは上書きされ、クラウドで定義されているすべてのパスワード ポリシーが新しいパスワードに適用されます。

オンプレミスのパスワードを再び変更した場合、新しいパスワードはクラウドに同期され、手動で更新したパスワードを上書きします。

パスワードの同期によって、サインイン中の Azure ユーザーが影響を受けることはありません。 クラウド サービスにログインしている間、パスワード変更が同期された場合、現在のクラウド サービス セッションがその影響をすぐに受けることはありません。 KMSI を使用すると、この差異のある期間が長くなります。 クラウド サービスで認証が再び要求された場合は、新しいパスワードを指定する必要があります。

Microsoft Entra Domain Services のパスワード ハッシュ同期プロセス

Microsoft Entra Domain Services を使って、Kerberos、LDAP、または NTLM を使う必要があるアプリケーションやサービスにレガシ認証を提供する場合、追加のプロセスがパスワード ハッシュ同期フローに含まれます。 Microsoft Entra Connect は、次の追加プロセスを使って、Microsoft Entra Domain Services で使うためにパスワード ハッシュを Microsoft Entra ID に同期します。

重要

Microsoft Entra Connect は、オンプレミスの AD DS 環境との同期のためにのみインストールおよび構成する必要があります。 オブジェクトを Microsoft Entra ID に同期するために、Microsoft Entra Domain Services マネージド ドメインに Microsoft Entra Connect をインストールすることはサポートされていません。

Microsoft Entra テナントに対して Microsoft Entra Domain Services を有効にすると、Microsoft Entra Connect はレガシ パスワード ハッシュのみを同期します。 オンプレミスの AD DS 環境と Microsoft Entra ID を同期するためにのみ Microsoft Entra Connect を使う場合、以下の手順は使われません。

レガシ アプリケーションで NTLM 認証または LDAP simple bind が使われていない場合は、Microsoft Entra Domain Services に対する NTLM パスワード ハッシュ同期を無効にすることをお勧めします。 詳しくは、「弱い暗号スイートと NTLM 資格情報ハッシュの同期を無効にする」をご覧ください。

  1. Microsoft Entra Connect は、テナントの Microsoft Entra Domain Services インスタンスの公開キーを取得します。
  2. ユーザーがパスワードを変更すると、オンプレミスのドメイン コントローラーは、パスワード変更 (ハッシュ) の結果を次の 2 つの属性に格納します。
    • unicodePwd: NTLM パスワード ハッシュ。
    • supplementalCredentials: Kerberos パスワード ハッシュ。
  3. Microsoft Entra Connect は、ディレクトリ レプリケーション チャネル通してパスワードの変更を検出します (他のドメイン コントローラーにレプリケートする必要がある属性の変更)。
  4. パスワードが変更されたユーザーごとに、Microsoft Entra Connect によって次の手順が実行されます。
    • ランダムな AES 256 ビット対称キーを生成します。
    • 暗号化の最初のラウンドに必要なランダムな初期化ベクターを生成します。
    • Kerberos パスワードハッシュを supplementalCredentials 属性から抽出します。
    • Microsoft Entra Domain Services セキュリティ構成の SyncNtlmPasswords の設定を調べます。
      • この設定が無効になっている場合、ランダムな高エントロピ NTLM ハッシュ (ユーザーのパスワードとは異なる) が生成されます。 このハッシュは、supplementalCrendetials 属性から抽出された Kerberos パスワード ハッシュと結合されて 1 つのデータ構造になります。
      • 有効になっている場合は、unicodePwd属性の値と supplementalCredentials から抽出された Kerberos パスワード ハッシュが結合されて 1 つのデータ構造になります。
    • AES 対称キーを使用して 1 つのデータ構造を暗号化します。
    • テナントの Microsoft Entra Domain Services の公開キーを使って、AES 対称キーを暗号化します。
  5. Microsoft Entra Connect は、暗号化された AES 対称キー、パスワード ハッシュを含む暗号化されたデータ構造、初期化ベクターを、Microsoft Entra ID に送信します。
  6. Microsoft Entra ID は、ユーザーに対する暗号化された AES 対称キー、暗号化されたデータ構造、初期化ベクターを格納します。
  7. Microsoft Entra ID は、暗号化された HTTP セッションによる内部同期メカニズムを使って、暗号化された AES 対称キー、暗号化されたデータ構造、初期化ベクターを Microsoft Entra Domain Services にプッシュします。
  8. Microsoft Entra Domain Services は、テナントのインスタンスの秘密キーを Azure Key Vault から取得します。
  9. 暗号化されたデータのセット (1 人のユーザーのパスワード変更を表します) ごとに、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 Connect の開始」をご覧ください。

Microsoft Entra Connect のインストール時にカスタム設定を使うと、ユーザー サインイン ページでパスワード ハッシュ同期を使用できるようになります。 詳しくは、「Microsoft Entra Connect のカスタム インストール」をご覧ください。

Enabling password hash synchronization

パスワード ハッシュ同期と FIPS

Federal Information Processing Standard (FIPS) に従ってサーバーがロックされた場合、MD5 は無効になります。

パスワード ハッシュ同期で MD5 を有効にするには、次の手順を実行します。

  1. %programfiles%\Microsoft Azure AD Sync\Bin に移動します。
  2. miiserver.exe.config を開きます。
  3. ファイルの末尾にある configuration/runtime ノードに移動します。
  4. <enforceFIPSPolicy enabled="false" />
  5. 変更を保存します。
  6. 変更を有効にするために再起動してください。

参考までに、このスニペットは次のようになります。

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

セキュリティと FIPS の詳細については、Microsoft Entra のパスワード ハッシュ同期、暗号化、および FIPS コンプライアンスに関するページを参照してください。

パスワード ハッシュ同期のトラブルシューティング

パスワード ハッシュ同期に問題がある場合は、パスワード ハッシュ同期のトラブルシューティングに関するページをご覧ください。

次のステップ