SPN通信 2022年1月30日

修正されたSAMAccountName偽装による権限昇格問題


みなさん、こんにちは。 SPNの塩月です。

昨年11月のWindows更新プログラムではActive Directory(AD)に関連するいくつかの脆弱性の修正が行われましたが、今回はその中の「SAMAccountName偽装による権限昇格問題」[1]についてお話しましょう。

AD内のユーザやコンピュータアカウントには「sAMAccountName」という属性があり、Windows NTなど以前のバージョンのWindows OSをサポートするためのアカウント名が格納されています。まあ簡単に言うと「ドメイン名\ユーザ名」の「ユーザ名」部分ですね。コンピュータアカウントの場合は「HOGE$」のように最後に「$」記号が付くため、通常は末端の$記号によってユーザアカウントとの区別を行うことができます。

今、組織内ネットワークに侵入しドメインの標準ユーザ権限を取得した攻撃者がいたとしましょう。攻撃者は「HOGE」という名前の架空のコンピュータ(sAMAccountNameはHOGE$)をドメインに登録します。ちなみにコンピュータのドメインへの登録は、ADのデフォルト設定では標準ユーザでも10台までなら可能で、かつ登録したユーザは当該コンピュータの各種属性データを変更する権限を持ちます。

次に攻撃者は、コンピュータHOGEのsAMAccountNameをドメインコントローラ「DC01」のコンピュータ名($記号なし)に変更します。

  コンピュータ名  sAMAccountName
      HOGE         HOGE$ -> DC01
      DC01            DC01$

この状態で攻撃者はsAMAccountName DC01(つまりコンピュータHOGE)のTicket Granting Ticket(TGT)を取得し、再びHOGEのsAMAccountNameを別のもの(例えばFUGA)に変更します。

  コンピュータ名  sAMAccountName
      HOGE         DC01 -> FUGA
      DC01            DC01$

その後、先ほどのTGTを用いて自分自身に対するService Ticket(ST)を要求する(S4U2self)と、要求を受けたドメインコントローラはADのオブジェクトの中からsAMAccountNameがDC01であるアカウントを探します。しかしDC01はFUGAに変わっているためそのようなアカウントは存在しません。そこで次にドメインコントローラはDC01の最後に$を付けて探し、sAMAccountNameがDC01$のアカウント(つまりドメインコントローラDC01)を見つけます。その結果、ドメインコントローラDC01に対する任意のユーザのSTが発行されてしまい、攻撃者はドメイン管理者権限へと不正に権限昇格できてしまうわけです。

この問題に対しマイクロソフトは、11月の更新プログラムで以下の二つの修正を行いました。

  • KB5008102 (CVE-2021-42278) [2]

    管理者権限のないユーザがコンピュータアカウントのsAMAccountNameについて、$で終わらない名前を付けられないようにする等、sAMAccountNameの作成/変更時に厳密にチェックする。

  • KB5008380 (CVE-2021-42287) [3]

    TGTを要求したアカウントの情報(SID)をTGT内部のPAC(Privilege Attribute Certificate)に「要求元」として記録し、ST作成の過程においてアカウントが異なっていないかどうかを検証する。

この二つ目(CVE-2021-42287)の修正はTGTのPACに新たなデータフィールド(PAC_REQUESTORおよびPAC_ATTRIBUTES_INFO)が追加されるというものであり、結構インパクトの大きな仕様変更になります。例えばパッチが適用されたドメインコントローラと適用されていないドメインコントローラが混在していたり、サードパーティのKerberos製品と共に運用していたりする場合などに、互換性のないTGTが拒絶されてしまうといった問題が発生するかもしれません。良いか悪いかは別として、実際のところ古いバージョンのMimikatzやRubeusのような攻撃ツールでGolden Ticketを作成しても、この修正によりそのTGTは使えなくなってしまいます。

そのため11月の更新ではまず準備段階として、問題が発生するようなTGTが使用された場合にドメインコントローラがイベントログを記録するようになりました。最終的には2022年7月の更新時点で強制的にこの修正が運用状態になりますので、それまでにイベントログをチェックして問題を検出し、該当するサードパーティ製品などは対応を図る必要があります。詳しくは参考資料[4]をご覧ください。

それではみなさん、またお会いしましょう。

[1] CVE-2021-42287/CVE-2021-42278 Weaponisation
[2] KB5008102 - Active Directory Security Accounts Manager hardening changes (CVE-2021-42278)
[3] KB5008380 - Authentication updates (CVE-2021-42287)
[4] CVE-2021-42287で追加されたイベントメッセージID 35, 37と脆弱性対応の流れについて

合同会社セキュリティ・プロフェッショナルズ・ネットワーク
代表社員 塩月誠人