概要
CVE-2022-21920 の保護は、2022 年 1 月 11 日の Windows 更新プログラム以降の Windows 更新プログラムに含まれています。 これらの更新プログラムには、Microsoft Negotiate 認証プロトコルを使用するときに、3 部構成の サービス プリンシパル名 に対するダウングレード攻撃を検出するための改善されたロジックが含まれています。
この記事では、Kerberos 認証が成功しない場合のガイダンスを提供します。
詳細
2022 年 1 月 11 日の Windows 更新プログラム以降の Windows 更新プログラムをインストールすると、Kerberos 認証が成功しない 3 部構成の SPN の認証が失敗する可能性があります。 これらの環境では、3 部構成の SPN に対する Kerberos 認証がしばらく機能していない可能性があります。 トリアージに役立つ Windows クライアント システムでは、次のイベントが表示される場合があります。
操作
Microsoft では、3 部構成の SPN に対する Kerberos 認証が失敗した理由をトリアージすることをお勧めします。 Kerberos 認証エラーの一般的な理由には、次のようなものがあります。
認証のターゲットとして使用されている SPN の形式が正しくありません。 詳細については、「 一意の SPN の名前形式」を参照してください。
注
アプリケーションと API は、サービスの正当な SPN を構成するものについて、より厳密または異なる定義を持つ場合があります。
正当な SPN の例
http/webserver ホスト/machine2.contoso.com Ldap/machine1.contoso.com/contoso.com Service/machine1:10100 形式が正しくない可能性がある SPN の例
SPN 理由 Host/host/machine1 "host" は通常、マシン名ではなくサービス クラスであるため、ホスト/ホストは間違いである可能性が最も高いです。 正当な SPN が host/machine1 である可能性があります。 Ldap/machine/contoso.com:10100 ポートは、サービス インスタンス名ではなく、ホスト名 ("machine") で指定できます。 正当な SPN が "ldap/machine:10100/contoso.com" である可能性があります Ldap/dc-a/DC=CONTOSO,DC=COM 特定の API では、FQDN ではなく DNS 名が必要です。 たとえば、 DsBindA 関数 (ntdsapi.h) は DNS 名で渡されることを想定しています。 FQDN が渡されると、形式が正しくない SPN になる可能性があります。
正当な SPN は "ldap/dc-a/contoso.com" である可能性がありますこれらの問題に対処するには、正しい SPN を使用するか、正しいサービス アカウントに正しい形式の SPN を登録することを検討してください。
認証のターゲットとして使用されている SPN が存在しません。 この問題に対処するには、SPN を正しいサービス アカウントに登録することを検討してください。
Windows クライアント マシンには、ドメイン コントローラーへの視線がありません (DC がオフラインになっている、DNS で検出できない、KDC ポートへのアクセスがブロックされているなど)。
NetBIOS 名が機能しないシナリオでは、NetBIOS 名を使用している可能性があります。 たとえば、ドメインに参加していないマシンからドメイン リソースにアクセスし、NetBIOS の名前解決が無効になっているか、機能していません。
Microsoft では、NetBIOS 名の代わりに ユーザー プリンシパル名 (UPN ) またはドメイン ネーム システム (DNS) 名を使用することをお勧めします。
SPN の登録
アプリケーションと環境の構成によっては、Kerberos クライアントが Kerberos 接続を確立しようとしている Active Directory ドメインにあるサービス アカウントまたはコンピューター アカウントのサービス プリンシパル名 属性で SPN を構成できます。 Kerberos 認証が正しく機能するには、ターゲット SPN が有効である必要があります。
Kerberos 認証を有効にする方法のガイダンスについては、デプロイ ドキュメントまたは各アプリケーションのサポート プロバイダーを参照してください。 一部のアプリケーション インストーラーまたはアプリケーションでは、SPN が自動的に登録されます。 開発者と管理者の両方が SPN を登録するためのさまざまなオプションがあります。
サービス インスタンスの SPN を手動で登録するには、「 Setspn」を参照してください。
サービス インスタンスの SPN をプログラムで登録するには、次の方法を説明する 「サービスが SPN を登録する方法」を 参照してください。
- DsGetSpn 関数を呼び出して、サービス インスタンスの一意の SPN を 1 つ以上作成します。 詳細については、「一意の SPN の名前形式」を参照してください。
- DsWriteAccountSpn 関数を呼び出して、サービスのログオン アカウントに名前を登録します。
既知の問題
現時点では、この更新プログラムに関する既知の問題はありません。