
このドキュメントでは、CVE-2026-54121 向けに構築された Splunk 検出について説明します。標準的な検出ユースケースの形式に従っているため、実際の検出エンジニアリングチームが維持するのと同じように検出カタログに収めることができます。
概要
検出の構築
対応と検証
ロードマップ
メタデータ
アラート : Certighost ( CVE-2026-54121 )
CVE-2026-54121 で説明されている AD CS 証明書登録のチェイス機構の悪用を検出します。このルールは、要求者が指定したチェイスターゲット(cdc 属性)が正規のドメインコントローラーに解決されない CA 上の証明書ライフサイクルイベントを検知します。これはまさに Certighost が用いる仕組みであり、CA にドメインコントローラーの識別情報を含む証明書を低権限の要求者に発行させ、結果としてドメイン全体の侵害と乗っ取りに至らしめます。
この検出は、マシンアカウントの作成ではなく cdc チェイスターゲットに基づいています。なぜなら、Microsoft の CVE-2026-54121 に関するアドバイザリでは、アカウントの前提条件として、デフォルトの ms-DS-MachineAccountQuota 値、または攻撃者がすでに制御しているアカウントのいずれかを挙げているからです。アカウント作成に基づくルールでは、2 つ目の経路を完全に見逃すうえ、アカウント作成と悪用が同じ時間枠内に発生することにも依存してしまいます。cdc のチェックは両方の経路をカバーし、そのような依存関係はありません。
このルールは、攻撃チェーンのうち証明書要求と発行の段階をカバーします。
| 戦術 | 手法 (ID) | 根拠 |
|---|---|---|
| 特権昇格 | 昇格制御メカニズムの悪用 (T1548) | 低権限のドメインユーザーが偽造された AD CS 証明書を介してドメインコントローラーの特権に昇格する |
| 資格情報アクセス | 認証証明書の窃取または偽造 (T1649) | Certighost の中核 - cdc/rmd 属性を使用して DC の識別情報を含む証明書を取得する |
| 資格情報アクセス | OS 資格情報のダンプ: DCSync (T1003.006) | DC アカウントの TGT を使用して MS-DRSR レプリケーションを実行し、krbtgt と全アカウントのハッシュを抽出する |
| 資格情報アクセス | ゴールデンチケット (T1558.001) | krbtgt ハッシュを用いて、攻撃者はパスワードリセット後も存続する Kerberos TGT を無期限に偽造する |
| 防御回避 | 代替認証マテリアルの使用: Pass-the-Ticket (T1550.003) | 証明書ベースの TGT を使用して DC として認証し、その TGT で DCSync を実行する |
| 永続化 | アカウントの作成: ローカルアカウント (T1136.001) | ms-DS-MachineAccountQuota を介してマシンアカウントを作成し、不正な LDAP エンドポイントで認証する |
| 横展開 | 代替認証マテリアルの使用 (T1550) | DC 証明書により、ドメインコントローラーアカウントと同等の完全なネットワークアクセスが付与される |
| 偵察 | ドメインアカウント (T1087.002) | 初期の LDAP 列挙により CA、DC、ドメイン SID、GUID、および MAQ 値を発見する |
4886 (証明書要求の受信)4887 (証明書の発行)4888 (証明書要求の拒否)![Splunk でログソースが稼働中であることを確認、ホスト DC01、EventCodes 4886/4887 が存在、Request ID 12、13、14 に対して抽出された追跡対象 172[.]66[.]66[.]33](images/log-sources.png)
index=wineventlog-lab sourcetype=WinEventLog source="WinEventLog:Security"
(EventCode=4886 OR EventCode=4887 OR EventCode=4888) cdc
| fields _time EventCode Request_ID Requester Attributes Subject host Message
| rex field=Message "(?m)^cdc:(?<chase_cdc>\S+)"
| where isnotnull(chase_cdc) AND lower(chase_cdc)!="dc01.atlasvec.lab"
| stats min(_time) as _time
values(Requester) as requester
values(Attributes) as template
values(chase_cdc) as chase_target
values(Subject) as cert_subject
values(EventCode) as codes
values(host) as ca_host
by Request_ID
| eval status = case(mvfind(codes,"4887")>=0,"ISSUED",
mvfind(codes,"4888")>=0,"DENIED",
true(),"PENDING")
| eval severity = "critical"
| sort - _time
| rename ca_host as "CA Host", Request_ID as "Request ID",
requester as "User Requester", template as "Certificate Template",
chase_target as "Chase Target (cdc)", cert_subject as "Issued Subject",
status as "Outcome", severity as "Severity",
_time as "Timestamp"
| table "Timestamp" "CA Host" "Request ID" "User Requester" "Certificate Template" "Chase Target (cdc)" "Issued Subject" "Outcome" "Severity"

イベントはリクエストIDでグループ化されるため、1つの悪意あるリクエストのライフサイクル全体(received、続いてissuedまたはdenied)が1行として表示されます。
この検出の初期バージョンでは、攻撃チェーンの一部としてアカウント作成を示す公開された概念実証に基づき、前提条件としてイベントID 4741(コンピューターアカウントの作成)を含めていました。しかし、CVE-2026-54121に関するMicrosoftのアドバイザリでは、マシンアカウントの前提条件として、デフォルトのms-DS-MachineAccountQuota値、または攻撃者がすでに制御しているマシンアカウントのいずれかが挙げられています。
攻撃者が2番目の経路を取る場合、すでに制御しているマシンアカウントを使用するため、**4741イベントは生成されません。このルールはcdc**チェイスターゲットのみに基づくよう更新され、設計上両方の悪用経路をカバーしています。
これにより、アカウント作成と証明書の悪用が同じ時間枠内で発生する必要もなくなります。攻撃者が悪用の試行の数日前または数日後にマシンアカウントを作成した場合でも、ルールは引き続き発火します。
基本検索はDC01上のAD CSセキュリティ監査イベント(4886、4887、4888)を対象とし、Messageフィールドにリテラル文字列**"cdc"**を含むイベントに事前フィルタリングします。これは、チェイスの悪用試行のみがその属性をMessageフィールドに持つためです。
一致する各イベントについて、検索はMessageフィールドのcdc:行からチェイス先を抽出します。その値が存在しない、または正規のDC FQDN(dc01.atlasvec.lab)に一致するイベントは除外されます。
cdcの値が他のターゲットを指すイベントはフラグが立てられます。これは、CAが正規のDCインフラストラクチャ外へチェイスするよう指示された正確な条件であり、このCVEの核心的な悪用に当たります。
Critical - 検索ロジック内で直接設定された固定値です。スケールで計算されるものではなく、このルールが生成するすべての一致は重大として扱われます。これは、検出される条件(CAがリクエスター制御のチェイスに従って非DCターゲットへ向かうこと)が悪用のプリミティブそのものであるためです。
2026-08-02にこのラボで取得された実際のリクエストライフサイクルデータに対して検証済みです:

上記のPoC実行は、不正サーバーのセットアップから証明書要求、資格情報の抽出に至るまで、攻撃チェーン全体をエンドツーエンドで確認しています。以下のSplunkの証跡は、同じリクエストライフサイクルがCA側で捕捉されたことを示しています。
![Request ID 12、13、14 の Raw Event 4887: cdc:172[.]66[.]66[.]33、Subject CN=DC01.atlasvec.lab が各 GHOST アカウントに発行されている](images/raw-events-malicious.png)
ATLASVEC\Administrator)は追跡対象 DC01.atlasvec.lab(正規の DC)を示しており、ルールを正しくトリガーしなかった。
![アラート出力テーブル: Request ID 12、13、14 がフラグ付けされ、追跡対象 172[.]66[.]66[.]33、Outcome ISSUED、Severity critical](images/alert-output.png)
完全なテスト手法、確認済みの前提条件、および追加のスクリーンショットは、Document 2: Detection Validation Report に別途記録されている。
この検知と併せて、コンパニオンの監視ダッシュボードを構築した。これは 2 つのビューで Certighost 攻撃チェーンをカバーする。DC Monitoring タブでは AD CS 証明書イベント、DCSync インジケーター、マシンアカウントのアクティビティを追跡し、SOC 概要タブでは発火したすべてのアラートを重大度別に表示する。
悪用前の DC Monitoring タブ。4 つの KPI はすべてゼロ: DC 関連アラートの発火なし、追跡証明書イベントなし、DCSync レプリケーションなし、マシンアカウントの作成なし。