システム イベント (ソース:Microsoft-Windows-Security-Kerberos) ID 4 エラーは、Kerberos 認証において接続先のサーバーから KRB_AP_ERR_MODIFIED エラーが返されたことを示すイベント ログです。
今回は、ID 4 の意味や確認すべきポイント、一般的な対処策について紹介します。
イベント ID 4 の概要
システム イベント ログに以下のようなエラーが記録されていることがあります。
ソース: Microsoft-Windows-Security-Kerberos
日付: YYYY/MM/DD HH:MM:SS
イベント ID: 4
タスクのカテゴリ: なし
レベル: エラー
キーワード: クラシック
ユーザー: N/A
コンピューター: <コンピューター名>
説明:
Kerberos クライアントはサーバー webapp$ から KRB_AP_ERR_MODIFIED エラーを受信しました。使用したターゲット名は HTTP/web.nekomaru.local でした。これは、ターゲット サーバーがクライアントにより提供されたチケットの暗号化解除に失敗したことを示します。これは、ターゲット サーバーのプリンシパル名 (SPN) が、ターゲット サービスにより使用されているアカウントとは別のアカウントで登録されている場合に発生します。ターゲット SPN は、サーバーによって使用されるアカウントでのみ登録してください。このエラーは、ターゲット サービス アカウントのパスワードが、そのターゲット サービスに対して Kerberos キー配布センター (KDC) で構成されているパスワードと異なる場合にも発生します。サーバー上のサービスと KDC の両方が同じパスワードを使用するように構成されていることを確認してください。ターゲット ドメイン (NEKOMARU.LOCAL) がクライアント ドメイン (NEKOMARU.LOCAL) と異なっており、サーバー名が完全修飾名になっていない場合は、これら 2 つのドメイン内に同じ名前を与えられたサーバー アカウントがないかをチェックするか、またはサーバーの指定に完全修飾名を使用してください。
この説明は、トラブルシューティングを行う時に着目すべき箇所となります。
赤マーカーの部分は KRB_AP_ERR_MODIFIED エラーを返してきたサーバー名、青マーカーの部分はサービス チケットの取得の際に指定した SPN となります。
KRB_AP_ERR_MODIFIED エラーのフロー
Kerberos 認証とは、ネットワーク認証方式の一つです。 Active Directory のドメイン環境では、ユーザーやコンピューターなどのリソースを一元管理できますが、その際の認証方式の基盤は Kerberos 認証で実現されていま[…]
- SPN を指定して、KDC にサービスチケットを要求
- KDC は SPN に紐づくアカウントの鍵で暗号化したサービス チケットをクライアントに提供
- クライアントはサービスチケットを受け取り、サービスを提供するサーバーへ提示
- サーバーは受け取ったサービスチケットを、自身が保持する鍵でチケットを復号
- チケットが正常に復号できずに、KRB_AP_ERR_MODIFIED エラーを返す
サービス チケットはパスワードで暗号化されており、KDC が管理するパスワードとサーバーが管理するパスワードは同じものなります。
同じパスワードであれば、本来はサービスチケットは正常に復号できますが、何らかの原因により「暗号化に利用したパスワード」と「復号に利用したパスワード」が異なっている場合は復号に失敗します。つまり、KRB_AP_ERR_MODIFIED エラーは、フロー②の「SPN に紐づくアカウントのパスワード」とフロー④の「サーバー自身が保持するパスワード」が異なっていることが原因のエラーとなります。
鍵が異なる一般的な原因の以下の通りです。
ID の主な原因について、具体的に紹介していきます。
DC 間の AD データベースの複製に問題がある
ドメイン コントローラー間の AD データベースの複製が何等かの理由で失敗しており、AD データベースの同期がとれていない場合、KRB_AP_ERR_MODIFIED エラーとなることがあります。
AD データベース間での複製に問題がある状態で、KRB_AP_ERR_MODIFIED エラーとなるケースをみていきます。今回のシナリオの環境は以下の通りです。
ドメイン コントローラー 4 台構成のドメイン環境にて、DC04 で出力方向の複製に失敗している状態となっている環境を想定します。DC04 からの出力方向の複製が失敗している状態であるため、DC04 での変更は他のドメイン コントローラーに同期されない状態となります。
そのような状態で、SV01 上にて IIS のサービス アカウントとして利用しているユーザー アカウント web のパスワードを変更します。その時、SV01 がパスワード変更を通知した先のドメイン コントローラーが DC04 であった場合、DC04 上では web のパスワードは新しいものに変更されますが、DC01、DC02、DC03 には web の新しいパスワードが同期されず、古いパスワードを保持したままの状態となります。
このような環境で、「ねこねこ」が http://web.nekomaru.local/ (IIS サーバーの URL) へアクセスします。IIS サーバーへアクセスするために、ドメイン コントローラーにサービス チケットを要求します。サービス チケットの要求の際に、利用するサービスの名前(SPN)を指定します。今回のシナリオの場合、SPN は “http/web.nekomaru.local” となります。
サービス チケットの要求を受け取ったドメイン コントローラーは、http/web.nekomaru.local という SPN が紐づけされている web というアカウントのパスワードでサービス チケットを暗号化します。今回、要求を受け取った DC03 では web は古いパスワードを保持しているため、古いパスワードでサービス チケットを暗号化します。
「ねこねこ」は DC03 から受け取ったサービス チケットを http/web.nekomaru.local の Web サーバーへ提示します。しかし、IIS サーバー上でにサービス アカウント web の設定では新しいパスワードに更新されているため、サービス チケットを復号することができません。このとき、Kerberos 認証は失敗し、Web サーバーは KRB_AP_ERR_MODIFIED エラーを応答します。
誤ったアカウントに SPN が紐づけされている
誤ったアカウントに SPN が紐づけされている場合、KRB_AP_ERR_MODIFIED エラーとなることがあります。
誤ったアカウントに SPN が紐づけされている状態で、KRB_AP_ERR_MODIFIED エラーとなるケースをみていきます。今回のシナリオの環境は以下の通りです。
web という名前のユーザー アカウントの servicePrincipalName 属性に “http/web.nekomaru.local” という SPN が登録されていたとします。
このような環境で、「ねこねこ」が http://web.nekomaru.local/ (IIS サーバーの URL) へアクセスします。IIS サーバーへアクセスするために、ドメイン コントローラーにサービス チケットを要求します。サービス チケットの要求の際に、利用するサービスの名前(SPN)を指定します。今回のシナリオの場合、SPN は “http/web.nekomaru.local” となります。
サービス チケットの要求を受け取ったドメイン コントローラーは、http/web.nekomaru.local という SPN が紐づけされている web というアカウントのパスワードでサービス チケットを暗号化します。
「ねこねこ」は DC03 から受け取ったサービス チケットを http/web.nekomaru.local の Web サーバーへ提示します。しかし、IIS サーバー上でのサービス アカウントは既定の System であるため、サービス チケットの復号にシステムのパスワードを利用します。しかしサービス チケットは web のパスワードで暗号化されているため、復号することができません。このとき、Kerberos 認証は失敗し、Web サーバーは KRB_AP_ERR_MODIFIED エラーを応答します。
1. 任意のドメイン コントローラーにログオンします。
2. 管理者権限でコマンド プロンプトを開きます。
3. 以下のコマンドを実行し、作成されたファイルを確認します。
ldifde -f ldif_domain.txt -d “#defaultNamingContext” -r “(servicePrincipalName=*)” -l servicePrincipalName
DNS レコードの登録状態に問題がある
DNS レコードの登録状態に問題がある場合、KRB_AP_ERR_MODIFIED エラーとなることがあります。
DNS レコードの登録状態に問題がある状態で、KRB_AP_ERR_MODIFIED エラーとなるケースをみていきます。今回のシナリオの環境は以下の通りです。
このような環境で、「ねこねこ」が http://web.nekomaru.local/ (IIS サーバーの URL) へアクセスします。IIS サーバーへアクセスするために、ドメイン コントローラーにサービス チケットを要求します。サービス チケットの要求の際に、利用するサービスの名前(SPN)を指定します。今回のシナリオの場合、SPN は “http/web.nekomaru.local” となります。
サービス チケットの要求を受け取ったドメイン コントローラーは、http/web.nekomaru.local という SPN が紐づけされている、本来の Web サーバーの端末ののパスワードでサービス チケットを暗号化します。
「ねこねこ」は DC03 から受け取ったサービス チケットを http/web.nekomaru.local の Web サーバーへ提示します。しかし、提示先の端末は SV03 であるため、SV03 のパスワードでサービス チケットの復号を行います。しかし、サービス チケットは本来の web のパスワードで暗号化されているため、復号することができません。このとき、Kerberos 認証は失敗し、Web サーバーは KRB_AP_ERR_MODIFIED エラーを応答します。
Kerberos クライアントはサーバー <リソース サーバ名>$ から KRB_AP_ERR_MODIFIED エラーを受信しました。使用したターゲット名は HTTP/<リソース サーバ名> でした。
セキュアチャネルが破損している
サービスを提供するサーバーがセキュアチャネルが破損している場合、KRB_AP_ERR_MODIFIED エラーとなることがあります。
セキュア チャネルが破損している状態で、KRB_AP_ERR_MODIFIED エラーとなるケースをみていきます。今回のシナリオの環境は以下の通りです。
ドメイン環境では、ドメイン端末が内部で保持するパスワードと、ドメイン コントローラーが管理するコンピューター アカウントでパスワードを保持しており、そのパスワードを利用して「セキュア チャネル」という通信を保護された通信を確立しています。
ドメイン コントローラーが管理するコンピューター アカウントのパスワードと、端末上で管理しているパスワードが一致しない場合、セキュア チャネルが確立できない状態となります。この状態をセキュア チャネルの破損と呼びます。
セキュア チャネルが破損している環境において、「ねこねこ」が http://web.nekomaru.local/ (IIS サーバーの URL) へアクセスします。IIS サーバーへアクセスするために、ドメイン コントローラーにサービス チケットを要求します。サービス チケットの要求の際に、利用するサービスの名前(SPN)を指定します。今回のシナリオの場合、SPN は “http/web.nekomaru.local” となります。
サービス チケットの要求を受け取ったドメイン コントローラーは、http/web.nekomaru.local という SPN が紐づけされている Web サーバーの端末のパスワードでサービス チケットを暗号化します。
「ねこねこ」は DC03 から受け取ったサービス チケットを http/web.nekomaru.local の Web サーバーへ提示します。しかし、提示先の端末は SV02 であるため、SV02 のパスワードでサービス チケットの復号を行います。しかし、サービス チケットで暗号化されているパスワードは、Web サーバーが端末上で管理しているパスワードとは異なるため、復号することができません。このとき、Kerberos 認証は失敗し、Web サーバーは KRB_AP_ERR_MODIFIED エラーを応答します。