
CVE-2026-54121 (CertiGhost)에 대한 Splunk 탐지 분석 문서: 전체 도메인 장악으로 이어지는 AD CS 인증서 체이스(certificate chase) 남용. 랩 검증된 탐지, 트라이지 절차, 실행 중인 DC를 대상으로 한 사고 조사.
이 문서는 CVE-2026-54121을 위해 구축된 Splunk 탐지를 설명합니다. 실제 탐지 엔지니어링 팀이 유지 관리하는 방식과 동일하게 탐지 카탈로그에 포함될 수 있도록 표준 탐지 유스케이스 형식을 따릅니다.
개요
탐지 구축
대응 및 검증
로드맵
메타데이터
경보 : Certighost ( CVE-2026-54121 )
CVE-2026-54121에 설명된 AD CS 인증서 등록 chase 메커니즘의 악용을 탐지합니다. 이 규칙은 요청자가 제공한 chase 대상(cdc 속성)이 정당한 도메인 컨트롤러로 확인되지 않는 CA의 인증서 수명 주기 이벤트를 표시합니다. 이는 Certighost가 CA로 하여금 도메인 컨트롤러 신원 데이터를 포함한 인증서를 저권한 요청자에게 발급하게 만들어 전체 도메인 장악 및 탈취에 이르게 하는 정확한 메커니즘입니다.
이 탐지는 머신 계정 생성이 아닌 cdc chase 대상을 기준으로 합니다. CVE-2026-54121에 대한 Microsoft 권고에서 계정 사전 조건을 기본 ms-DS-MachineAccountQuota 값 또는 공격자가 이미 제어하는 계정 중 하나로 명시하기 때문입니다. 계정 생성에 기반한 규칙은 두 번째 경로를 완전히 놓칠 뿐만 아니라 계정 생성과 악용이 동일한 시간 창 내에 발생하는지에 의존하게 됩니다. 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별로 그룹화되어, 하나의 악성 요청의 전체 수명 주기(received, 이후 issued 또는 denied)가 단일 행으로 표시됩니다.
이 탐지의 초기 버전에는 공개 개념 증명이 공격 체인의 일부로 계정 생성을 시연한 것을 근거로, 이벤트 ID 4741(컴퓨터 계정 생성)을 사전 조건으로 포함했습니다. 그러나 CVE-2026-54121에 대한 Microsoft 권고는 머신 계정 사전 조건을 기본 ms-DS-MachineAccountQuota 값 또는 공격자가 이미 제어하는 머신 계정 중 하나로 명시합니다.
두 번째 경로를 택한 공격자는 이미 제어하고 있는 머신 계정을 사용하며 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 측에서 포착된 동일한 요청 수명 주기를 보여줍니다.
![요청 ID 12, 13, 14에 대한 원시 이벤트 4887: cdc:172[.]66[.]66[.]33, Subject CN=DC01.atlasvec.lab이 각 GHOST 계정에 발급됨](images/raw-events-malicious.png)
ATLASVEC\Administrator)은 추적 대상 DC01.atlasvec.lab(정상 DC)을 보여주며, 규칙을 올바르게 트리거하지 않았습니다.