MS14-068で普通のユーザーが管理者になれた理由 ── KerberosのPACと署名検証

· · Windows, 情報セキュリティ, CVE, Kerberos, Active Directory

更新履歴(初版のみ・2026年09月16日公開)
初版公開

一般社員の佐藤さんは会社のアカウントでログオンできます。でも、管理者専用の共有フォルダーは開けません。本人だと分かったことと、管理者として扱ってよいことは別だからです。

MS14-068で崩れたのは、後者を判断するための情報の信頼性でした。

1. 概要

MS14-068は、一般のドメインユーザーが偽った権限情報をWindowsのKDCに受け入れさせ、ドメイン管理者権限へ昇格できる問題を修正したセキュリティ情報です。 脆弱性の番号はCVE-2014-6324。KDCは、ドメインコントローラー上でKerberosのチケットを発行する機能です。1

項目 内容
CVE CVE-2014-6324
セキュリティ情報 MS14-068、更新はKB3011780
公開日 2014年11月18日(米国の告知日)
対象機能 Windows Kerberos KDCのPAC署名検証
問題の性質 偽造された権限情報の受け入れ
直接の影響 一般ドメインユーザーからの権限昇格
悪用実績 公開時点で限定的な標的型攻撃を確認

表は当時のMicrosoftの告知に基づきます。日本のJPCERT/CCの注意喚起は翌19日です。以下では佐藤さん、認証を担当するDC、ファイルサーバーを例に、所属情報が権限へ変わる流れを追います。23

2. 対象

当時の対象OSにはWindows Server 2003、2008、2008 R2、2012、2012 R2が含まれます。特に問題になるのはドメインコントローラー(DC)として動く機械です。各エディションとサービスパックは、MS14-068の対象製品表で確認できます。4

有効なドメイン資格情報を持ち、対象のKDCへ要求を送れることが攻撃の前提です。管理者の資格情報は要りませんが、匿名の外部利用者や、PCのローカルアカウントだけで攻撃できるわけではありません。5

一般ユーザーからドメインの権限発行機能へ届く一般のドメイン資格情報を持つ利用者がKDCへ要求を送り、その結果がドメイン内のサービス利用へ影響します。チケットを要求権限情報を含むチケット一般ドメインユーザーDC上のKDCドメイン内のサービス

図1: 入口は一般ユーザーでも、判断する相手はドメインの認証基盤です。6

当時確認された攻撃は2008 R2以前の経路を狙っていました。ただしMicrosoftは2012以降にも、悪用が難しい関連経路があると説明しています。「手元の検証コードが失敗したから2012は対象外」とは判断できません。一方、DCではないWindowsへの更新は多層防御のためで、この問題への直接の脆弱性とは区別されています。7

3. 詳細

チケットは、名前だけを運んでいるわけではない

佐藤さんがファイルサーバーへ接続する場合、まずKDCからTGTを受け取ります。TGTは、その後サービス用のチケットを求めるために使うチケットです。ファイルサーバーへ渡すのは、そのサーバー向けに発行されたサービスチケットになります。8

このチケットには、PAC(Privilege Attribute Certificate)という認可用のデータも入ります。そこには「誰か」だけでなく、「どのセキュリティグループに属するか」などが記録されます。プロキシ設定のPACファイルとは別物です。9

実際のPACでは、KERB_VALIDATION_INFOUserIdGroupIdsなどが、その情報を保持します。人間向けの表にすると、例えば次のような違いです。これは構造を説明するための要約で、実際のPACのバイト列ではありません。10

情報 正当な内容 攻撃者が主張したい内容
利用者 佐藤さん 佐藤さん
所属グループ 一般の利用者グループ 管理者グループも含む

Windowsは、受け取ったPACの情報を利用者のログオントークンへ反映します。トークンはユーザーやグループのSID、特権などを持つ、アクセス判断のためのオブジェクトです。サーバーが「管理者グループに許可する」と設定していれば、トークンにどのグループが入ったかが、開けるかどうかを変えます。11

PACのグループ情報がアクセス判断へ使われるサービスチケットのPACからログオントークンへ利用者とグループの情報が反映され、サーバーのアクセス許可と照合されます。チケット内のPAC利用者のログオントークングループなどの情報対象のアクセス許可と照合

図2: チケットとトークンは同じものではありません。運ばれた情報がサーバー側の判断に使われます。1211

所属欄を勝手に変えられないよう、鍵で保証する

利用者が自分で「管理者」と書けるだけなら、この仕組みは成立しません。そこでPACには署名を付け、内容が正当に作られたものかを検証します。PACの仕様で使う署名は、公開鍵の証明書ではなく、秘密の共有鍵を使ったチェックサム、つまり鍵付きの検査値です。13

この区別が今回の核心です。普通のハッシュ値なら、元データを知る人は自分でも計算できます。所属欄を書き換えた後、新しいハッシュ値も計算し直せば、データと検査値のつじつまは合います。それだけでは、権限ある発行者が作った証拠になりません。

鍵付きのメッセージ認証コード(MAC)は、内容に加えて共有する秘密鍵を使います。正しい検査値を作るには、内容だけでなく鍵が必要です。利用者が持つ自分のログオン資格情報と、KDCがPACを保証するための鍵は、役割が違います。1413

内容だけで計算できる値と秘密鍵が必要な値普通のハッシュは内容だけで再計算できますが、MACの生成には内容に加えて秘密鍵が必要です。内容ハッシュ値内容と秘密鍵MAC

図3: 改ざん後の内容と検査値が一致していても、秘密を持つ発行者が作ったとは限りません。14

検証器が、鍵の要らない方式も受け入れた

MS14-068では、このPACの署名検証に欠陥がありました。KDCは、攻撃者の作ったPACを正しいものとして扱い、そこに記載された高い権限を受け入れてしまいます。6

どんな検査値が問題だったかは、Rapid7が公開している検証コードからも確かめられます。MS14-068用の実装はPACのチェックサム種別にRSA_MD5を指定しています。その型のchecksum実装は、引数の鍵を使わず、データから通常のMD5値を返します。名前にRSAとあっても、この処理でRSA署名を作っているわけではありません。1516

つまり、攻撃者が「自分は管理者グループの一員だ」というPACを作り、それに自分で計算した検査値を付けることができました。本来なら鍵を知らない相手には作れない保証を要求すべき場所で、鍵なしでも作れる値を受け入れたのです。MD5の衝突を見つけたり、管理者のパスワードを解読したりする話ではありません。151614

自分で作った権限情報がKDCの検証を通ってしまう攻撃者は偽のグループ情報と鍵なしで作れる検査値を用意でき、脆弱なKDCがそのPACを受け入れてしまいます。偽のグループ情報攻撃者が検査値も計算脆弱なKDCのPAC検証正当な情報として受け入れる

図4: 問題は計算の不一致ではなく、その方式を権限の証明として認めたことです。616

暗号文を直すのではなく、KDCに受け入れさせる

ここで「TGTは暗号化されているのに、中の所属欄をどう変えるのか」という疑問が残ります。単に手持ちのTGTをテキスト編集する、という説明では不正確です。

公開された検証では、チケットの要求に偽のPACを含め、脆弱なKDCに処理させる経路を使います。Rapid7の実装説明も、TGS要求中のPAC検証を利用して、偽のPACを含むTGTを取得するものとしています。チケット全体の暗号化を破る代わりに、発行側が攻撃者の権限情報を信じてしまう点を利用します。17

その結果、佐藤さんは本人の資格情報を出発点にしながら、管理者グループを主張する情報で扱われ得ます。最初からADのグループ登録を変更する権限があったのではなく、PACを通じた権限の主張が通ってしまったのです。6

4. 影響

直接の結果は、一般ユーザーからドメイン管理者への権限昇格です。そこから、ドメインコントローラーを含むドメイン内のコンピューターの侵害へ進めます。単なる一台のアプリの権限判定ミスではありません。18

佐藤さんのPCで管理者パスワードを当てたわけでも、ファイルサーバーの暗号を破ったわけでもありません。サーバーが信頼している認証基盤に、偽の権限情報を承認させたため、被害が他の機械へ及びます。実際のアクセスは各資源の許可にも依存しますが、ドメイン管理権限まで得られることが問題の重大さです。1118

一般ユーザーの侵害から認証基盤の侵害へ広がる一般のドメイン資格情報からPACの偽造が受け入れられ、ドメイン管理権限を得ると、DCや他のドメイン資源へ被害が広がり得ます。一般ドメイン資格情報偽のPACが受理されるドメイン管理権限DC・ドメイン資源の侵害

図5: 認証基盤の判断を共有する複数の機械が、同じ偽の情報を信用することになります。18

Microsoftは公開時点で限定的な標的型攻撃を把握していました。後に公開された検証コードだけから、当時すべての攻撃が同じ経路・同じ対象で行われたとは判断できません。2

5. 対策

すべてのDCで検証の欠陥を塞ぐ

2014年の修正はKB3011780です。Microsoftは、WindowsのKerberosで署名を検証する動作を修正したと説明しています。KDCが受け取ったPACを正しく検証することが対策の中心で、当時のセキュリティ情報に回避策は示されていません。19

更新の優先順位も、2008 R2以前のDC、2012以降のDC、その他のWindowsの順でした。よく使うDCだけ直して終わりにせず、認証を担うDCを把握して対応します。20

これは2014年の更新の解説です。現在の環境を点検する際に、古いKBの番号が一覧にあるかだけを合否判定にせず、対象OS・役割・修正を含む更新状態を管理情報で確認する必要があります。古い攻撃コードが動かないことも、修正済みの証明にはなりません。

検知の手がかりと、分からないこと

Microsoftの当時の案内では、更新前の既知攻撃に、ログのSecurity IDとAccount Nameの不一致という手がかりがありました。ただし、その検知を回避する方法もあると明記されています。21

更新後のWindows Server 2008 R2以降では、監査が有効ならイベント4769の失敗コード0xfが調査の手がかりになります。別のまれな原因でも記録され得るため、1件だけで攻撃を断定しません。記録がない場合も、監査設定や保存期間を確認せずに「攻撃はなかった」とは言えません。22

更新と侵害からの復旧は別の作業

既に管理権限を得た攻撃者は、別の侵入経路を残せます。パッチを適用しても、作られたアカウントや変更された設定まで元へ戻るわけではありません。Microsoftの2014年の説明も、ドメイン侵害後の高い確度での復旧には再構築が必要になるほどの問題だと警告しています。23

脆弱性の修正と既に行われた変更の調査は別更新でPAC検証の欠陥を修正する作業と、侵害時に残されたアカウントや設定を調査して復旧する作業を分けます。修正更新を適用検証の欠陥を塞ぐ既存の侵害を調査残された変更から復旧

図6: 更新済みという事実だけでは、侵害前の状態へ戻った証拠にはなりません。23

6. 教訓

この問題を「Kerberosの暗号が弱かった」とだけ覚えると、直すべき場所を取り違えます。鍵が必要な証明を要求する場面で、鍵なしでも作れる検査値を受け入れた。暗号ライブラリが計算できる方式と、その用途で許可してよい方式を分ける必要がありました。

自作の認可処理でも、入力の形式と検査値が合うだけでは足りません。誰がその値を作れるのか。その人に権限情報を決めさせてよいのか。 この二つを検証側で決める必要があります。一般社員として認証済みの相手にも、自分の所属を自由に宣言させてよいわけではありません。

本稿は公開資料と公開検証実装の読み取りによる解説です。未修正Windowsへの攻撃、チケットの生成・注入、実環境での再現は行っていません。佐藤さんとサーバーの構成は説明用です。

図の実線は常に成り立つ関係、破線は条件付きの関係です(成立条件は詳細ページの各関係の説明に記載)。関係すべての一覧(全6件、根拠・確度つき)と主要概念の定義は知識マップ詳細ページにまとめています。データ: JSON-LD / Turtle

関連記事

参考リンク

  1. CERT/CC, VU#213119. 2014年11月18日公開、19日改訂。参照箇所: Overview。認証された非特権ドメインユーザーからの権限昇格という全体像。 

  2. Microsoft, Security Bulletin MS14-068. 2014年11月18日、v1.0。参照箇所: 冒頭の公開日とKB番号、Executive Summary末尾の標的型攻撃の記述。  2

  3. JPCERT/CC, JPCERT-AT-2014-0048. 2014年11月19日。参照箇所: 文頭の日付、I. 概要。日本の告知日と問題の要約。 

  4. Microsoft, MS14-068の対象製品. 参照箇所: Affected Softwareの製品表と脚注[1]。クライアントOSの更新は多層防御であり、同じ意味で脆弱ではない点もここで確認する。 

  5. Microsoft, MS14-068の前提条件. 参照箇所: Executive Summaryの有効なドメイン資格情報と、ローカル資格情報だけの利用者を区別する記述。 

  6. CERT/CC, VU#213119の技術説明. 参照箇所: Description。チケット要求中のPAC署名検証が不十分で、偽った所属情報が受け入れられる点。  2 3 4

  7. Microsoft MSRC, Additional information about CVE-2014-6324. 2014年11月18日。参照箇所: Vulnerability Detailsの第2段落。2008 R2以前の既知経路、2012以降の関連経路、非DCへの多層防御更新の区別。 

  8. Microsoft MSRC, 同技術説明. 参照箇所: Vulnerability Details、TGTからサービスチケットへPACをコピーする段落。ここでは当時の基本経路を説明している。 

  9. Microsoft, MS-PAC §2.5 KERB_VALIDATION_INFO. 参照箇所: 冒頭の定義。DCが供給するユーザーログオン・認可情報を表す構造。現行公開仕様はデータ構造の説明に使い、2014年の未修正動作の証拠とはしていない。 

  10. Microsoft, MS-PAC §2.5の各フィールド. 参照箇所: UserId、GroupCount、GroupIds、LogonDomainId。表の氏名・グループ名は筆者による読みやすい要約で、実際の符号化形式ではない。 

  11. Microsoft Learn, Access Tokens. 参照箇所: Access token contentsのユーザーSID・グループSID・特権の一覧と、保護対象へのアクセスにトークンを使う説明。  2 3

  12. Microsoft MSRC, PACからトークンへの反映. 参照箇所: Vulnerability Details、サービスの検証とログオントークン生成の段落。SueとDomain Adminsの例を、佐藤さんの構成へ置き換えて説明した。 

  13. Microsoft, MS-PAC §2.8.4 Server Signature および §2.8.5 KDC Signature. 参照箇所: 各節冒頭の鍵付きハッシュの計算と鍵の説明。前者は対象サービスと共有する鍵、後者はkrbtgtの鍵を使う。現行仕様の説明であり、後年追加された署名を2014年へ遡って適用してはいない。  2

  14. IETF, RFC 2104 §1–2. 参照箇所: §1の秘密の共有鍵によるMACの説明、§2のHMACの定義。普通のハッシュとMACの違いを説明するために参照し、古いアルゴリズム選択を現在の推奨として紹介してはいない。  2 3

  15. Rapid7, MS14-068検証実装. 参照箇所: run内のchecksum_typeへのRSA_MD5の指定。公開実装の静的な読み取りであり、本稿では攻撃を実行していない。参照コミットを固定した。  2

  16. Rapid7, RsaMd5の実装. 参照箇所: checksumメソッドと、keyを使わないことを記したコメント。dataのみからMD5値を返すことを確認した。  2 3

  17. Rapid7, MS14-068検証モジュールの説明. 参照箇所: Description。TGS要求のPAC検証を利用してTGTを取得すること、作者側でのWindows 2008検証の記述。作者の検証結果と、本稿の実行実績は区別する。 

  18. CERT/CC, VU#213119の影響. 参照箇所: Impact。DCを含むドメイン内コンピューターの侵害に至る権限昇格。本文の図は影響関係を筆者が整理したもの。  2 3

  19. Microsoft, MS14-068の修正と回避策. 参照箇所: Executive Summaryの署名検証修正、Workaroundsの回避策なしという記述。KB3011780は当時の更新番号。 

  20. Microsoft MSRC, 更新の優先順位. 参照箇所: Update Priorityの3項目。特定のDCだけの修正で済ませない運用上の説明へ使用した。 

  21. Microsoft MSRC, 更新前の検知情報. 参照箇所: Detection Guidanceの前半。Security IDとAccount Nameの不一致、および既知攻撃だけを拾い回避可能であるという注意。 

  22. Microsoft MSRC, 更新後の検知情報. 参照箇所: 同節のイベント4769、対象OS、Failure Code 0xfに関する段落。別の原因でも記録され得る点を含む、2014年時点の案内。 

  23. Microsoft MSRC, 侵害後の復旧. 参照箇所: Remediation。更新後も攻撃者がアクセスを維持できる変更を残せることと、ドメイン再構築に関する当時の警告。  2

同じタグを共有する最新の記事です。さらに近い話題で知識を深められます。

このテーマと近いトピックページです。記事を起点に、関連するサービスや他の記事へ進めます。

この記事は次のサービスページにつながります。近い入口からご覧ください。

よくある質問

この記事のテーマについて、相談時によくある質問をまとめています。

MS14-068とCVE-2014-6324は何が違いますか?
MS14-068は2014年11月18日に公開されたMicrosoftのセキュリティ情報の番号で、CVE-2014-6324はそこで扱われたKerberosの脆弱性の識別子です。更新プログラムはKB3011780として案内されました。
攻撃にはドメイン管理者のパスワードが必要でしたか?
必要ありませんでした。一般の有効なドメイン資格情報が前提で、管理者の秘密を破る代わりに、偽ったPACをKDCに受け入れさせます。匿名の外部利用者やローカルアカウントだけで成立する、という意味ではありません。
PACには何が入っていますか?
Kerberosチケットで運ばれる認可用のデータで、ユーザーや所属グループの識別情報などを含みます。Windowsはその情報をログオントークンへ反映し、アクセス判断に使います。プロキシ設定のPACファイルとは別物です。
暗号化されたチケットを書き換える攻撃ですか?
単に既存のTGTの暗号文を編集する説明では不正確です。公開された検証では、チケット要求に含めた偽のPACの検証を通す経路が使われました。PACの署名検証とチケット全体の暗号化は、別の保護です。
更新後にイベント4769の0xfがなければ安全ですか?
その判断はできません。Microsoftの当時の案内には対象OS・更新・監査設定の条件があり、修正前の検知にも限界がありました。また0xfは別の理由でも記録され得ます。記録の有無だけで侵害を断定したり否定したりせず、更新状況と他の証拠を確認します。

著者プロフィール

記事の著者プロフィールページです。

小村 豪

合同会社小村ソフト 代表

Windows ソフト開発、技術相談、不具合調査を中心に、既存資産が残る案件や原因が見えにくい障害調査に強みがあります。

ブログ一覧に戻る