【AD DS】システム イベント ID 4 KRB_AP_ERR_MODIFIED エラー

システム イベント (ソース:Microsoft-Windows-Security-Kerberos) ID 4 エラーは、Kerberos 認証において接続先のサーバーから KRB_AP_ERR_MODIFIED エラーが返されたことを示すイベント ログです。

今回は、ID 4 の意味や確認すべきポイント、一般的な対処策について紹介します。

 

イベント ID 4 の概要

システム イベント ログに以下のようなエラーが記録されていることがあります。

ログの名前: System
ソース: 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 つのドメイン内に同じ名前を与えられたサーバー アカウントがないかをチェックするか、またはサーバーの指定に完全修飾名を使用してください。
このソース Security-Kerberos ID 4 エラーは、サービスの利用する際に行われた Kerberos 認証に失敗したことを意味します。Kerberos 認証に失敗しているため、ユーザーはサービスを利用できていません。
具体的には、ユーザーはサービスを利用するために、ドメイン コントローラーからサービス チケットを取得して、サービスを提供するサーバーへサービス チケットを渡した結果、サーバーから KRB_AP_ERR_MODIFIED エラーが返された時にクライアント側のシステム イベント ログに記録されます。
この KRB_AP_ERR_MODIFIED エラーとは、サーバー側でサービス チケットの復号に失敗してチケットの中身が確認できないため、Kerberos 認証に失敗したことをクライアント端末に通知するエラー コードとなります。
イベント ログの説明にある赤マーカー青マーカーは環境に応じて変化します。
この説明は、トラブルシューティングを行う時に着目すべき箇所となります。
赤マーカーの部分は KRB_AP_ERR_MODIFIED エラーを返してきたサーバー名、青マーカーの部分はサービス チケットの取得の際に指定した SPN となります。
 

KRB_AP_ERR_MODIFIED エラーのフロー

KRB_AP_ERR_MODIFIED エラーとは、サーバー側でサービス チケットの復号に失敗したことが原因のエラーです。
Kerberos 認証はクライアントとサーバーの相互認証を行っており、TGT とサービスチケットを発行して認証が行われます。Kerberos 認証の基本的な認証フローについては、以下の記事で紹介しております。
 
Kerberos 認証のフローを確認して、どのような問題なのか詳細を見ていきましょう。

  1. SPN を指定して、KDC にサービスチケットを要求
  2. KDC は SPN に紐づくアカウントの鍵で暗号化したサービス チケットをクライアントに提供
  3. クライアントはサービスチケットを受け取り、サービスを提供するサーバーへ提示
  4. サーバーは受け取ったサービスチケットを、自身が保持する鍵でチケットを復号
  5. チケットが正常に復号できずに、KRB_AP_ERR_MODIFIED エラーを返す

 

サービス チケットはパスワードで暗号化されており、KDC が管理するパスワードとサーバーが管理するパスワードは同じものなります。

同じパスワードであれば、本来はサービスチケットは正常に復号できますが、何らかの原因により「暗号化に利用したパスワード」と「復号に利用したパスワード」が異なっている場合は復号に失敗します。つまり、KRB_AP_ERR_MODIFIED エラーは、フロー②の「SPN に紐づくアカウントのパスワード」とフロー④の「サーバー自身が保持するパスワード」が異なっていることが原因のエラーとなります。

鍵が異なる一般的な原因の以下の通りです。

 

 ID 4 の主な原因
 DC 間のAD データベースの複製に問題がある
 誤ったアカウントに SPN が紐づけされている
 DNS レコードの登録状態に問題がある
 セキュアチャネルが破損している
 
原因ごとに ID 4 エラーの適切な対処策が異なりますので、どのパターンに該当するのか確認が必要です。
ID の主な原因について、具体的に紹介していきます。
 

DC 間の AD データベースの複製に問題がある

ドメイン コントローラー間の AD データベースの複製が何等かの理由で失敗しており、AD データベースの同期がとれていない場合、KRB_AP_ERR_MODIFIED エラーとなることがあります。

AD データベース間での複製に問題がある状態で、KRB_AP_ERR_MODIFIED エラーとなるケースをみていきます。今回のシナリオの環境は以下の通りです。

ドメイン名:nekomaru.local
ドメイン環境:ドメイン コントローラー 4 台
Web サーバー:ホスト名 SV01。IIS で Web サーバーを構築、IIS のサービス アカウント名は web。Windows 認証が必須
障害内容:DC04出力方向の複製が失敗している(=DC04 での変更は同期されない)

ドメイン コントローラー 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 エラーを応答します。

 

対処策
全てのドメイン コントローラー上で repadmin /showrepl コマンドを実行し、ドメイン コントローラー間の複製状態を確認します。複製に失敗している場合は、エラー コードより原因を判断します。
 

 

誤ったアカウントに SPN が紐づけされている

誤ったアカウントに SPN が紐づけされている場合、KRB_AP_ERR_MODIFIED エラーとなることがあります。

誤ったアカウントに SPN が紐づけされている状態で、KRB_AP_ERR_MODIFIED エラーとなるケースをみていきます。今回のシナリオの環境は以下の通りです。

ドメイン名:nekomaru.local
ドメイン環境:ドメイン コントローラー 4 台
Web サーバー:ホスト名 SV01。IIS で Web サーバーを構築、IIS のサービス アカウントは System。Windows 認証が必須
障害内容:SPN が web というユーザー アカウントに紐づいている

 

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 エラーを応答します。

 

対処策
SPN が登録されている AD アカウントの一覧を ldifde コマンドで確認できます。コマンドの実行結果から、対象の SPN が紐づいている AD アカウントが何か確認します。

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 エラーとなるケースをみていきます。今回のシナリオの環境は以下の通りです。

ドメイン名:nekomaru.local
ドメイン環境:ドメイン コントローラー 4 台
Web サーバー:ホスト名 web。IIS で Web サーバーを構築、IIS のサービス アカウントは System。Windows 認証が必須
障害内容:同じ IP アドレスの A レコードが重複して登録されている
 
ドメイン コントローラー上に同居している DNS サーバーにて、DNS レコードが誤って登録されており、IP アドレスが重複した A レコードが登録されてしまっています。この場合、web の DNS 名前解決をした時に、10.1.1.2 で名前解決されます。ただし、10.1.1.2 に対して接続すると SV03 へ送信される可能性があります。

このような環境で、「ねこねこ」が 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 エラーを応答します。

 

対処策
イベント ID 4 の説明文を確認して、<リソース サーバー名> に差分がないか確認します。差分がある場合、DNS レコードが誤って登録されており、間違った宛先へサービス チケットを提示している可能性があります。DNS サーバーのレコードの登録状況を確認してください。

Kerberos クライアントはサーバー <リソース サーバ名>$ から KRB_AP_ERR_MODIFIED エラーを受信しました。使用したターゲット名は HTTP/<リソース サーバ名> でした。

 

 

セキュアチャネルが破損している

サービスを提供するサーバーがセキュアチャネルが破損している場合、KRB_AP_ERR_MODIFIED エラーとなることがあります。

セキュア チャネルが破損している状態で、KRB_AP_ERR_MODIFIED エラーとなるケースをみていきます。今回のシナリオの環境は以下の通りです。

ドメイン名:nekomaru.local
ドメイン環境:ドメイン コントローラー 4 台
Web サーバー:ホスト名 SV01。IIS で Web サーバーを構築、IIS のサービス アカウントは System。Windows 認証が必須
障害内容:リソース サーバーのセキュア チャネルが破損している

 

ドメイン環境では、ドメイン端末が内部で保持するパスワードと、ドメイン コントローラーが管理するコンピューター アカウントでパスワードを保持しており、そのパスワードを利用して「セキュア チャネル」という通信を保護された通信を確立しています。

ドメイン コントローラーが管理するコンピューター アカウントのパスワードと、端末上で管理しているパスワードが一致しない場合、セキュア チャネルが確立できない状態となります。この状態をセキュア チャネルの破損と呼びます。

セキュア チャネルが破損している環境において、「ねこねこ」が 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 エラーを応答します。

 

対処策
セキュア チャネルが破損している場合、システム イベント ログに ID 3210 エラー(ソース NETLOGON) が記録されます。リソース サーバーのシステム イベント ログに ID 3210 が記録されていないか確認します。
記録されていたらリソース サーバーはセキュア チャネルが破損しているため、修復作業を行います。