Spacebar Campaigns

WL-010 Windows Security 4768 Kerberos Authentication Ticket Request

Log ID:
WL-010
Source:
Windows Event Log Security
Representative Path:
Windows Logs > Security (Event ID 4768)
Collection:
Winlogbeat
Primary Use:
단독 탐지보다는 WL-007에서 WL-003과의 상관관계 분석을 위해 사용되며, 특정 서비스 요청(4769) 이전에 정상적인 TGT 인증 절차가 선행되었는지 검증하는 대조 데이터로 활용

주요 필드

필드의미예시
@timestamp사용자 계정이 도메인 컨트롤러(DC)에 인증을 요청하여 TGT 인증서가 발급된 정확한 시간2026-05-25T15:29:24.399Z
winlog.event_data.ResponseTicket발급된 TGT(인증서)의 고유 해시값 (WL-007 쿼리 내에서 ticket_hash로 가공되어 WL-003과 매칭되는 핵심 식별자)ASvNAQxD1VFRjUfuT14RNhFg/C6NcVRH8V/5H2LR4xQ=
winlog.event_data.IpAddress도메인 컨트롤러에 Kerberos 인증을 요청한 출발지(클라이언트 단말) IP 주소::ffff:10.0.1.194
winlog.event_data.TargetUserNameTGT 인증서를 발급받은 Active Directory 계정명Administrator

커버하는 Techniques Used

TechniqueMapping Reason
T1558.001 - Steal or Forge Kerberos Tickets: Golden Ticket골든 티켓 공격 발생 시, 공격자는 도메인 컨트롤러를 거치지 않고 자체적으로 가짜 TGT를 위조하여 서비스를 실행한다. 따라서 정상적인 환경이라면 존재해야 할 WL-010(4768) 로그의 부재를 확인하여 위조 및 우회 여부를 입증하는 결정적 근거가 된다.

탐지 포인트

Technique관찰할 행위주요 필드
T1558.001 - Steal or Forge Kerberos Tickets: Golden Ticket관리자 계정(Administrator 등)이 다수의 서비스 티켓(4769)을 요청하며 도메인 자원에 접근하고 있으나, 정작 해당 티켓 해시(ResponseTicket)와 매칭되는 정상적인 TGT 발급 기록(4768)이 로그상에서 전혀 관찰되지 않는 비정상적 상태를 추적하기 위해 본 로그의 존재 여부를 대조@timestamp, winlog.event_data.ResponseTicket, winlog.event_data.IpAddress, winlog.event_data.TargetUserName

ELK Query 예시

from winlogbeat-*
| where winlog.channel == "Security" 
  and winlog.event_id in ("4768", "4769")
  and winlog.event_data.TargetUserName in ("Administrator@MYCOMPANY.LOCAL", "admin_user@MYCOMPANY.LOCAL", "Administrator", "admin_user")
| eval ticket_hash = case(
    winlog.event_id == "4769", winlog.event_data.RequestTicketHash,
    winlog.event_id == "4768", winlog.event_data.ResponseTicket,
    null
  )
| eval is_4769 = to_integer(case(winlog.event_id=="4769",1,0))
| eval is_4768 = to_integer(case(winlog.event_id=="4768",1,0))
| eval targetUserName = case(
    winlog.event_data.TargetUserName in ("Administrator@MYCOMPANY.LOCAL", "Administrator"), "Administrator",
    winlog.event_data.TargetUserName in ("admin_user@MYCOMPANY.LOCAL", "admin_user"), "admin_user",
    null
)
| stats
    count_4769 = sum(is_4769),
    count_4768 = sum(is_4768),
    first_seen = min(to_long(@timestamp)),
    last_seen = max(to_long(@timestamp))
by ticket_hash, winlog.event_data.IpAddress, targetUserName
| where count_4769 > 0 and count_4768 == 0
| eval first_seen = to_datetime(first_seen)
| eval last_seen = to_datetime(last_seen)
| keep ticket_hash, winlog.event_data.IpAddress, targetUserName, first_seen, last_seen, count_4768, count_4769