2022 年 5 月 10 日の更新プログラムに含まれるドメイン コントローラーでの証明書ベースの認証の変更と対応の流れについて [KB5014754]

Last Update: feedback 共有

※※ 2023/7/3 更新
※※ ・完全適用モードの日付が 2023 年 11 月 14 日から 2025 年 2 月 11 日に変更されたことに伴い、本記事の内容を更新いたしました。

本記事はマイクロソフト社員によって公開されております。

こんにちは。Windows Commercial Support Directory Services チームです。

ドメイン コントローラーにおける証明書ベースの認証について、CVE-2022-34691、 CVE-2022-26931 および CVE-2022-26923 といった特権昇格の脆弱性に対処するため、2022 年 5 月 10 日の更新プログラムには証明書ベースの認証に関するセキュリティ強化が含まれております。

本記事では、 KB5014754: Windows ドメイン コントローラーでの証明書ベースの認証の変更 の内容を元に補足を交えながら、脆弱性対応の流れと追加されるイベントログ、および対処方法についておまとめしておりますので、ご参考としていただけますと幸いです。


セキュリティ強化のスケジュールについて


本セキュリティ強化は、全てのドメイン コントローラーに更新プログラムを適用することで段階的に対処が行われます。各段階におけるモードと、その時系列を以下におまとめしております。
完全適用(強制)モードまでに 対処方法について を実施しなければ、要件を満たしていない証明書は使用できなくなりますので、計画的な対応実施をご検討いただけますと幸いです。
説明中の “レジストリ”、”イベント ログ” については後述におまとめしておりますので、そちらをご参照ください。

1. 2022 年 5 月 10 日:互換モード

※ 2022 年 5 月の更新プログラムには、本脆弱性への対応に伴って潜在的な不具合が見つかり、後述いたしますような既知の問題が存在しております。後述の 既知の問題について をご参照いただき対処ください。

このフェーズでは、既定で StrongCertificateBindingEnforcement レジストリ が “1” と同等の動作となり、互換モードで動作します。StrongCertificateBindingEnforcement レジストリは既定では存在しません。存在しない場合の動作は “1” と同等の動作となります。

この更新プログラム適用後から、ドメイン コントローラーは証明書ベースの認証において、認証対象のアカウントとアカウントが認証に使用している証明書の結びつけ ( マッピング ) の強弱をより厳密に検証するようになります。
※マッピングの強弱については、アカウントへ証明書をマッピング の表をご参照ください

互換モードでは、アカウントと証明書のマッピングの強弱に関わらず、証明書を用いた認証が可能です。
ただし、証明書のマッピングが弱い場合は、警告イベント ログ ID 39 がドメイン コントローラーのシステム イベント ログに記録されますので、そのような証明書には 対処方法について にしたがって対処を行う必要がございます。

また、証明書のマッピングが弱い場合のうち、使用している証明書の作成日がアカウントの作成日より古い場合は、既定ではエラー イベント ログ ID 40 がドメイン コントローラーのシステム イベント ログに記録され、認証に失敗します。
このエラーイベント ログ ID 40 の一時回避策として、 CertificateBackdatingCompensation レジストリが用意されております。CertificateBackdatingCompensation レジストリを使用して認証失敗を回避した場合、対象の証明書を用いて認証が可能ですが、証明書のマッピングが弱い場合と同様、警告イベント ログ ID 39 がドメイン コントローラーに記録されます。

完全適用(強制)モードでは CertificateBackdatingCompensation レジストリの設定は無効となりますので、エラー イベント ログ ID 40 の対象となる証明書も同様に 対処方法について にしたがって対処を行う必要がございます。

2. 2023 年 4 月 11 日:無効モードの削除

StrongCertificateBindingEnforcement で設定できるモードのうち、”無効モード” の設定 ( StrongCertificateBindingEnforcement = 0 ) が削除されます。
StrongCertificateBindingEnforcement を 0 に設定しても、 “1” に設定したときと同じ動作となります。
明示的に StrongCertificateBindingEnforcement = 0 に設定していない環境では、このフェーズでは特に動作に変更はございません。

3. 2025 年 2 月 11 日:完全適用(強制)モード

StrongCertificateBindingEnforcement のレジストリが無効化され、StrongCertificateBindingEnforcement = 2 の動作となり、完全適用(強制)モードとなります。
完全適用モードでは 対処方法について に記載の対処策を実施していない証明書を用いて認証が行われた場合、認証が拒否されます。


対処方法について ( 証明書のマッピング )


以下の 2 つのうちいずれかの方法で利用ユーザーやコンピューターと証明書の結びつけ ( マッピング ) を行う必要があります。

  1. アカウントへ証明書をマッピング
  2. 証明書へアカウントをマッピング

どちらかの方法でマッピングされていれば問題ございません。それぞれマッピング方法の詳細について、以下におまとめしております。
対処実施後、対象の証明書に関する 追加されたイベントログについて に記載のイベント ログが記録され無くなれば、対処完了となります。

1. アカウントへ証明書をマッピング

証明書を使用した認証を行うユーザー アカウントやコンピューター アカウントの altSecurityIdentities 属性に証明書の情報を追加することで、マッピングを行うことになります。

// altSecurityIdentities 属性

具体的には、アカウントの altSecurityIdentities 属性に、使用している証明書に関する値をマッピング方法に従って登録します。
証明書のマッピングは、そのマッピング方法によって 強弱の種類 が分かれており、以下のような種類に分類されます。

マッピング方法 種類 補足
X509IssuerSubject “X509:<I>IssuerName<S>SubjectName” 弱い
X509SubjectOnly “X509:<S>SubjectName” 弱い
X509RFC822 “X509:<RFC822>user@contoso.com” 弱い Email アドレス
X509IssuerSerialNumber “X509:<I>IssuerName<SR>1234567890” 強い 推奨
X509SKI “X509:<SKI>123456789abcdef” 強い
X509SHA1PublicKey “X509:<SHA1-PUKEY>123456789abcdef” 強い

上記のうち、完全適用モード対処するためには 種類 が “強い” となっている方法で証明書をマッピングする必要があります。
ここでは推奨である、シリアル番号と発行者による X509IssuerSerialNumber の証明書マッピングの方法を説明します。

マッピング対象の証明書のファイルを開き、「発行者」と「シリアル番号」のフィールドを探します。

上図の証明書の場合、「発行者」と「シリアル番号」は以下の通りです。

発行者:CN=contoso-DC1-CA-1, DC=contoso, DC=com
シリアル番号:6b0000000203ac3c5052349f9f000000000002

発行者はプロパティの表示上は改行されておりますが、certutil -store コマンドで確認できるような DN 名となります。
//certutil -store コマンドの実行結果の例
================ 証明書 1 ================
シリアル番号: 6b0000000203ac3c5052349f9f000000000002
発行者: CN=contoso-DC1-CA-1, DC=contoso, DC=com
この日以降: 2022/12/27 16:26
この日以前: 2023/12/27 16:26

X509IssuerSerialNumber の方式で証明書をマッピングするための文字列は、“X509:<I>発行者<SR>シリアル番号”となりますが、確認した内容を元に変換が必要となります。

X509IssuerSerialNumber の方式では、証明書の発行者の DN 名は [ , ] 区切りで逆順に並べ替え [ , ] の後ろにある半角スペースは削除します。
上記を例にしますと、「CN=contoso-DC1-CA-1, DC=contoso, DC=com」の場合、[ , ] 区切りで逆順に並べ替えると、「DC=com, DC=contoso, CN=contoso-DC1-CA-1」となり、さらに [ , ] の後ろにある半角スペースを削除するので、最終的に「DC=com,DC=contoso,CN=contoso-DC1-CA-1」が指定する文字列となります。

証明書記載の発行者の DN 名 :CN=contoso-DC1-CA-1, DC=contoso, DC=com
↓
マッピング文字列での記載:DC=com,DC=contoso,CN=contoso-DC1-CA-1

また、シリアル番号はバイトスワップ ( 1 バイトずつ区切り逆順に並べること ) します。例えば「12 34 56」の場合、「56 34 12」というような形です。したがって、上記の例において、「6b0000000203ac3c5052349f9f000000000002」は、マッピングでは「0200000000009f9f3452503cac03020000006b」が指定する文字列となります。

その結果、X509IssuerSerialNumber のマッピング方式で altSecurityIdentities 属性に設定するマッピングの情報は以下の通りとなります。

X509:<I>DC=com,DC=contoso,CN=contoso-DC1-CA-1<SR>0200000000009f9f3452503cac03020000006b

上記の文字列をaltSecurityIdentities 属性に設定することで、証明書のマッピングが完了となります。
PowerShell コマンドで altSecurityIdentities 属性を更新する場合は以下のようなコマンドで実行可能です。

//ユーザーの場合 ( DomainUser の部分は適宜ユーザー名に置き換えます)

set-aduser ‘DomainUser’ -replace @{ altSecurityIdentities="X509:<I>DC=com,DC=contoso,CN=contoso-DC1-CA-1<SR>0200000000009f9f3452503cac03020000006b"}

//コンピューターの場合( Computer の部分は適宜コンピューター名に置き換えます)

set-adcomputer 'Computer' -replace @{ altSecurityIdentities="X509:<I>DC=com,DC=contoso,CN=contoso-DC1-CA-1<SR>0200000000009f9f3452503cac03020000006b"}

※ 上記の例では -replace オプションを用いておりますので、既存の値を置き換えるような操作となります。もし altSecurityIdentities 属性にすでに値がある場合は、削除されても問題ない値かどうか確認いただいてから実施したり、-add として追加とする形にするなど、ご留意いただければと存じます。

※ altSecurityIdentities 属性は複数のマッピング文字列を設定できる属性となり、altSecurityIdentities 属性に設定されているマッピング文字列の一覧の中に、使用している証明書と一致する情報が含まれていれば問題ございません。

 //複数設定した場合の例
 

2. 証明書へアカウントをマッピング

証明書の OID (1.3.6.1.4.1.311.25.2) 拡張に SID が含まれる証明書を使用することになります。
その証明書を使用して認証を行ったアカウントの SID が、証明書に含まれる SID と一致していると、強いマッピングとしてみなされます。

// OID (1.3.6.1.4.1.311.25.2) 拡張が含まれる証明書の例。

現在使用している証明書に OID (1.3.6.1.4.1.311.25.2) 拡張が含まれていない場合は
証明書の “1.3.6.1.4.1.311.25.2” という OID の拡張機能の項目に、アカウントの SID の情報が含まれるように証明書を発行して、使用する証明書を差し替えます。

OID (1.3.6.1.4.1.311.25.2) 拡張が含まれる証明書の発行方法について、
証明書を発行する証明機関が “Active Directory 証明書サービス” で構築したエンタープライズ CA の場合、CA に 2022 年 5 月以降のセキュリティ更新プログラムを適用することで OID (1.3.6.1.4.1.311.25.2) 拡張付きの証明書を発行することが可能です。
更新プログラム適用した後、発行に使用する証明書テンプレートの [ サブジェクト ] タブが “Active Directory の情報から構築する” となっていれば、 “1.3.6.1.4.1.311.25.2” という OID の拡張機能に、証明書の発行要求を行ったアカウントの SID が追加されます。

もし証明書認証にサードパーティの証明機関をご利用の場合は、証明機関のベンダーと協力し OID (1.3.6.1.4.1.311.25.2) 拡張が含まれる証明書の発行を行っていただくか、先述の 1. アカウントへ証明書をマッピング の方法にて対処することをご検討ください。


追加されたイベントログについて


本セキュリティ強化に伴って、以下のイベントログが追加されております。なお、無効モードの場合は各イベントは記録されません。

イベント メッセージ ID 39 (Windows Server 2008 R2 は ID 41) について

以下のイベントは、「User:」に記載のアカウントと「Certificate ~」で示されている証明書の間で 強い マッピングが行われていない証明書にて、認証を行った際に記録されます。
互換性モードでは、警告イベントとして出力され、実際の認証動作に影響はありませんが、完全適用モードではこのイベントはエラーとして出力され、認証をブロックします。

イベント ID 39 (Windows Server 2008 R2 は ID 41)

ログの名前:         System
ソース:           Microsoft-Windows-Kerberos-Key-Distribution-Center
イベント ID:       39
レベル:           ( 互換モード: 警告), ( 完全適用モード : エラー )
説明:
キー配布センター ( KDC ) で、有効なユーザー証明書が見つかりましたが、セキュリティで保護された方法で
ユーザーにマップできませんでした( 明示的なマッピング、キー信頼マッピング、SID など ) 
このような証明書は、明示的なマッピングを使用して置き換えるか、ユーザーに直接マップする必要があります。
詳細については、https://go.microsoft.com/fwlink/?linkid=2189925 を参照してください。

User: <principal name>
Certificate Subject: <Subject name in Certificate>
Certificate Issuer: <Issuer Fully Qualified Domain Name (FQDN)>
Certificate Serial Number: <Serial Number of Certificate>
Certificate Thumbprint: <Thumbprint of Certificate>

イベント メッセージ ID 40 (Windows Server 2008 R2 は ID 48) について

以下のイベントは、「User:」記載のアカウントの作成よりも前に、「Certificate ~」で示されている証明書を作成して、その証明書を利用した認証が行われた場合に記録されます。互換モードでこの認証は既定でブロックされます。 完全適用モードではこのイベント ログは記録されません。

イベント ID 40 (Windows Server 2008 R2 は ID 48)

ログの名前:         System
ソース:           Microsoft-Windows-Kerberos-Key-Distribution-Center
イベント ID:       40
レベル:           エラー
説明:
キー配布センター (KDC) で、有効なユーザー証明書が見つかりましたが、セキュリティで保護された方法で
ユーザーにマップできませんでした(明示的なマッピング、キー信頼マッピング、SID など)。
この証明書は、マップ先のユーザーの前に置かれたため、拒否されました。
詳細については、https://go.microsoft.com/fwlink/?linkid=2189925 を参照してください。

User: <principal name>
Certificate Subject: <Subject name in Certificate>
Certificate Issuer: <Issuer FQDN>
Certificate Serial Number: <Serial Number of Certificate>
Certificate Thumbprint: <Thumbprint of Certificate>
Certificate Issuance Time: <FILETIME of certificate>
Account Creation Time: <FILETIME of principal object in AD>

イベント メッセージ ID 41 (Windows Server 2008 R2 は ID 43)

以下のイベントは、証明書の拡張フィールドに OID ( 1.3.6.1.4.1.311.25.2 ) 拡張が付与された証明書が使用されているものの、利用アカウントの SID と OID ( 1.3.6.1.4.1.311.25.2 ) 拡張に記載の SID が異なる場合に記録されます。互換モード、強制モードの両方でこの認証はブロックされます。

イベント ID 41 (Windows Server 2008 R2 は ID 43)

ログの名前:         System
ソース:           Microsoft-Windows-Kerberos-Key-Distribution-Center
イベント ID:       41
レベル:           エラー
説明:
キー配布センター (KDC) は、有効なユーザー証明書を検出しましたが、マップ先のユーザーとは異なる SID を含んでいます。
その結果、証明書を含む要求が失敗しました。
詳細については、https://go.microsoft.com/fwlink/?linkid=2189925 を参照してください。

User: <principal name>
User SID: <SID of the authenticating principal>
Certificate Subject: <Subject name in Certificate>
Certificate Issuer: <Issuer FQDN>
Certificate Serial Number: <Serial Number of Certificate>
Certificate Thumbprint: <Thumbprint of Certificate>
Certificate SID: <SID found in the new Certificate Extension>

追加されたレジストリ キーについて


2022 年 5 月 10 日にリリースされた更新プログラムをドメインコントローラーに適用すると以下のレジストリ キーが設定できるようになります。各レジストリとも、設定後の OS 再起動は不要です。

StrongCertificateBindingEnforcement について

このレジストリ キーは、無効モード、互換モード、または完全適用モードの設定で利用します。無効モードについては 2023 年 4 月 11 日で利用できなくなります。また、2025 年 2 月 11 日以降はこのレジストリの設定は無効化され、ドメイン コントローラーは完全適用モードで動作するようになります。

Registry Key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdc
Name: StrongCertificateBindingEnforcement
Type: REG_DWORD
Data: ※以下の値が利用可能です。
 0 – 無効モード ( 証明書のマッピングがあるかどうかのチェックを無効にします。
         この設定はセキュリティ強化を無効にしますので、推奨されません。) 
 1 – 互換モード(既定値。レジストリが存在しない場合には、この値となります。)
 2 - 完全適用モード

CertificateMappingMethods について

ドメイン コントローラーが証明書のマッピング認証をおこなう際に、ドメイン コントローラーの “schannel” が証明書マッピング処理をおこなう場合があります。このときに、ドメイン コントローラー がおこなう証明書マッピングの強度を制御するレジストリが CertificateMappingMethods です。

Registry Key: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\Schannel
Name: CertificateMappingMethods
Type: REG_DWORD
Data: ※以下の値が利用可能です。(レジストリが存在しない場合、既定値は 0x18 となります。)

0x0001 - サブジェクト/発行者の証明書マッピング (弱 – 既定では無効)
0x0002 - 発行者証明書マッピング (弱 – 既定では無効)
0x0004 - UPN 証明書マッピング (弱 – 既定では無効)
0x0008 - S4U2Self 証明書マッピング (厳密 - 既定で有効)
0x0010 - S4U2Self 明示的な証明書マッピング (厳密 - 既定で有効)

CertificateBackdatingCompensation について

このレジストリを設定すると、アカウント作成日時より、最大 50 年前に作成された証明書でも許可することができるようになります。
レジストリが設定されていない ( 既定 ) 場合は、アカウント作成日時より 10 分前までに作成された証明書であれば、許可されるようになっています。

※ AD CS で証明書を発行すると、実際に発行した日時より 10 分前の日時で証明書が作られるため、それを考慮しての既定値となっております。

2025 年 2 月 11 日以降はこのレジストリの設定は無効化され、利用できなくなります。

Registry Key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdc
Name: CertificateBackdatingCompensation
Type: REG_DWORD
Data: ※以下の値が利用可能です。(レジストリが存在しない場合、既定値は 10 分となります。)

50 年 - 0x5E0C89C0
25 年 - 0x2EFE0780
10 年 - 0x12CC0300
 5 年 - 0x9660180
 3 年 - 0x5A39A80
 1 年 - 0x1E13380

既知の問題について


2022 年 5 月 10 日にリリースされた更新プログラムには既知の問題があり、ドメイン コントローラーにインストールした後、ネットワーク ポリシー サーバー (NPS)、ルーティングとリモート アクセス サービス (RRAS)、RADIUS、拡張認証プロトコル (EAP)、保護された拡張認証プロトコル (PEAP) などのサービスで認証エラーが発生する可能性があります。
この問題は、ドメイン コントローラーに 2022 年 5 月 10 日の更新プログラムを適用することで事象が発生します。

本問題を修正する定例外の更新プログラムがリリースされておりますので、適用をご検討ください。
修正が含まれる更新プログラムは上記のような認証シナリオにおける不具合に対処するため、ドメインコントローラーだけでなく NPS サーバーなどクライアントのコンピュータ証明書を中継してドメインコントローラーに送る中間のサーバーに対しても修正が加えられています。

そのため NPSサーバーなどクライアントのコンピュータ証明書を中継してドメインコントローラーに送る中間のサーバーとドメイン コントローラーの双方に適用する必要があります。※ 適用後はサーバーの再起動が必要となります。

更新プログラムを適用する順番について、ドメイン コントローラーに先に適用してしまうと、本不具合の対象となる構成となってしまいますので、NPS サーバーなどクライアントのコンピュータ証明書を中継してドメインコントローラーに送る中間のサーバーへ先に更新プログラムを適用したうえで、その後ドメイン コントローラーに適用するという順序で、対処いただくことをご検討ください。

各 OS 毎の更新プログラムは、以下の通りとなります。

■ Windows Server 2022
May 19, 2022—KB5015013 (OS Build 20348.709) Out-of-band

■ Windows Server 2019
May 19, 2022—KB5015018 (OS Build 17763.2931) Out-of-band

■ Windows Server 2016
May 19, 2022—KB5015019 (OS Build 14393.5127) Out-of-band

■ Windows Server 2012 R2
KB5014986: Authentication failures occur after the May 10, 2022 update is installed on domain controllers running Windows Server 2012 R2

■ Windows Server 2012
KB5014991: Authentication failures occur after the May 10, 2022 update is installed on domain controllers running Windows Server 2012

■ Windows Server 2008 R2
KB5014987: Authentication failures occur after the May 10, 2022 update is installed on domain controllers running Windows Server 2008 R2 SP1

■ Windows Server 2008
KB5014990: Authentication failures occur after the May 10, 2022 update is installed on domain controllers running Windows Server 2008 SP2

参考情報

KB5014754—Certificate-based authentication changes on Windows domain controllers

Windows Kerberos の特権の昇格の脆弱性

Active Directory Domain Services Elevation of Privilege Vulnerability

2.2.2.7.7.4 szOID_NTDS_CA_SECURITY_EXT

更新履歴

2023/04/11 : 本ブログの公開
2023/07/03 : 完全適用モードの日付を変更