脅威リサーチ

60秒(以内)でユーザーからドメイン管理者に:CVE-2021-42278 / CVE-2021-42287

投稿者 Udi Yavo | 2022年1月27日

FortiGuard Labs Threat Research Report

影響を受けるプラットフォーム: Windows
影響ユーザー受けるユーザー:  Active Directory環境を使用するすべての組織
影響:             未権限のユーザーが権限をドメイン管理者に昇格することが可能
深刻度:            クリティカル
 

マイクロソフトは、昨年11月の月例パッチ(Patch Tuesday)にアドバイザリをリリースし、Active Directoryの複数の脆弱性に対応しました。これらの脆弱性を解析した結果、CVE-2021-42278およびCVE-2021-42287を組み合わせることで、デフォルトの状態で一般ユーザーが簡単にドメイン管理者になりすますことができることが明らかになりました。つまり、すべてのドメインユーザーが事実上、ドメイン管理者になることが可能であり、非常に深刻な脆弱性となっています。また、GitHubにはすでに自由に使用できるPoCコードを含む複数のリポジトリがあり、これらの脆弱性を簡単に悪用することができます。

この投稿では、これらの脆弱性を悪用することによる動作を説明し、FortiEDRを使用して攻撃を減災する方法を示します。

CVE-2021-42278:無効なコンピュータアカウント名

Active Directory環境のコンピュータアカウント名は必ず最後に「$」が付きますが、これが適切にチェックされていなかったのです。コンピュータアカウント名の属性は「sAMAccountName」です。図1で確認できるように、この属性は、ADSIEditツールを使用して手動で確認したり変更することができます。

図1:ADSIEditを使用してコンピュータアカウント名を編集

脆弱なマシンでは、ドメインコントローラのアカウント名に変更することが可能で、これは、エクスプロイトチェーンの重要なステップとなります。

セキュリティプリンシパル名

セキュリティプリンシパル名(SPN)とは、認証されたエンティティを識別する名前です(例:machinename$@domainname)。Kerberosでは、さまざまなエンティティの認証手続きの一部としてSPNが使用されます。SPNは、基本的には、サービスインスタンスの一意の識別子であり、Kerberosでは、サービスインスタンスとサービスログオンアカウントとを関連付けるために使用されます。

コンピュータアカウントをドメインコントローラのアカウント名に変更すると、samAccountName属性が変更されることで、アカウントのSPNがそれぞれ変更されるため、問題が起きる可能性があります。SPNの変更を試みると、該当の名前を持つSPNはすでに存在するため、失敗します。マシンの「servicePrincipalName」属性を消去することで、これに対処することができます。結果として、この脆弱性を悪用するには、「servicePrincipalName」属性の編集権限も必要になります。

CVE-2021-42287:Kerberosキー配布センターの混同

Kerberosキー配布センター(KDC)とは、Kerberosのチケット要求を処理するActive Directoryのサービスのことです。チケット保証チケットTicket-Granting Ticket(TGT)とは他のチケットを取得するために使用される特殊なタイプのチケットです。TGTは、チケット保証サービス(TGS)からドメイン内の特定のリソース / システムに対するアクセストークンをリクエストするために使用されます。サービスチケットのリクエストを送信し、それが見つからない場合、KDCは自動的に「$」が付いたリクエストチケットを検索します。

S4U2Self(Service for User to Self)とは拡張機能の1つで、サービスが自身のためにKerberosサービスチケットを取得することができます。このサービスチケットにはユーザーのグループが含まれているため、認証の判定に使用できます。Active Directoryのすべての用語および完全な説明については、こちらで確認できます。

この脆弱性は、ユーザーがTGTを取得し、そのユーザーが削除され、以前に取得したTGTを使用して他のユーザーのサービスチケットを自身にリクエストする場合(基本的にS4U2Self)に発生する可能性があります。この場合、該当のユーザーが見つからないため、「$」が付いたユーザーの検索が実行されます。該当の名前を持つドメインコントローラアカウントが存在する場合、リクエストユーザーにサービスチケットが付与され、リクエストユーザーがドメイン管理者になります。

脆弱性の組み合わせ

この問題を悪用するには、攻撃者はコンピュータアカウントを管理できる必要があります。前述のとおり、攻撃者は、「servicePrincipalName」属性と「sAMAccountName」属性の両方を変更できる必要があります。これを実現する最も簡単な方法は、ユーザーを作成することです。ドメインのデフォルトの設定では、未権限のユーザーはコンピュータアカウントを最大10個作成できます。これは、MachineAccountQuota属性で制御されます。

要約すると、これらの脆弱性を悪用してドメイン管理者権限を取得する手順は次のとおりです。

  1. Active Directoryを列挙して、ドメイン管理者アカウントを発見します。
  2. 「servicePrincipalName」が消去された状態の新しいコンピュータアカウントを作成します。
  3. CVE-2021-42278を利用して「sAMAccountName」をドメイン管理者のアカウント名に変更します。
  4. コンピュータアカウントのTGTを取得します。
  5. コンピュータアカウント名を復元し、KDCが検索したときに発見されないようにします。
  6. 取得したTGTを使ってCVE-2021-42287を利用し、S4U2Selfを含むサービスチケットをリクエストします。

このエクスプロイトの実装はこちらをご覧ください。以下の図2は、脆弱なサーバーに対するエクスプロイトコードの実行を示しています。

図2:CVE-2021-42278 / CVE-2021-42287の脆弱性の悪用

エクスプロイトに対する保護

未権限のユーザーは、CVE-2021-42278とCVE-2021-42287の脆弱性を組み合わせることで、簡単にドメイン管理者になることが可能です。したがって、当社は、マイクロソフトのパッチのKB5008380KB5008602をできるだけ早く適用し、問題を減災するよう強く推奨します。

FortiEDRは、CVE-2021-42278およびCVE-2021-42287の脆弱性を悪用する試みを検知し、ブロックすることができます。また、攻撃元を追跡することも可能です。

図3:ドメイン内のワークステーションからの脆弱性の悪用の試み

FortiGuard IPSは、次のシグネチャによってこれらのエクスプロイトを保護します。

MS.Active.Directory.SAM.Privilege.Escalation

これらのエクスプロイトは、FortiGuard IPS DB 19.228(FortiGate、FortiADC、FortiProxy)およびFortiEDR 5.0で検知され保護されます。お使いのデバイスに最新の保護がダウンロードされていることをご確認ください。

フォーティネット セキュリティ ファブリック全体の脅威ハンティングに関する詳細情報については、FortiGuardアウトブレイクアラートをご覧ください。

付録