Kerberoasting 및 골든 티켓 공격
Kerberoasting이 오프라인에서 해독 가능한 서비스 티켓 해시를 추출하는 방식과 골든 티켓 공격이 탈취한 KRBTGT 해시를 사용해 무제한 Kerberos 접속 권한을 부여하는 방식을 배웁니다.
Kerberoasting 및 골든 티켓 공격은(는) CoddyKit의 무료 Security+ Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Security+ Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Security+ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
Kerberos service ticket 아키텍처
Kerberoasting 및 Golden Ticket 공격을 이해하려면 Kerberos service ticket 발급 과정을 명확히 파악해야 합니다. 클라이언트가 서비스(예: SQL server)에 액세스하려면 Domain Controller의 Ticket Granting Service (TGS)에 자신의 Ticket Granting Ticket (TGT)를 제시합니다. 그러면 TGS는 service account의 password hash로 암호화된 Service Ticket을 발급합니다. 클라이언트는 이 티켓을 서비스에 제시하고, 서비스는 자체 hash로 티켓을 복호화하여 진위 여부를 확인합니다. 따라서 service ticket은 대상 서비스의 자격 증명으로 암호화되며, 이는 Kerberoasting이 악용하는 핵심 요소입니다.
Kerberoasting: 오프라인 password cracking
Kerberoasting은 인증된 모든 domain 사용자가 SPN (Service Principal Name)으로 등록된 모든 서비스에 대해 Kerberos service ticket을 요청할 수 있다는 점을 악용하는 공격입니다. 공격자는 SPN이 있는 account에 대한 service ticket을 요청하고 암호화된 티켓 데이터를 수집한 다음, Active Directory와 추가로 상호 작용하거나 account 잠금 위험을 감수하지 않고 오프라인에서 service account password를 cracking하려고 시도합니다. service account에는 취약한 password, 최신 복잡성 requirement가 적용되기 전에 설정된 오래된 password, 또는 만료되지 않는 password가 사용되는 경우가 많으므로 오프라인 cracking에 매우 취약합니다.
# Step 1: Find accounts with SPNs (attack setup)
Get-ADUser -Filter {ServicePrincipalName -ne '$null'} -Properties ServicePrincipalName
# Step 2: Request service tickets (using Impacket GetUserSPNs.py)
# GetUserSPNs.py domain/user:password -dc-ip 192.168.1.1 -request
# Outputs $krb5tgs$ hashes ready for cracking with HashcatKerberos 티켓 오프라인 cracking
Kerberoasting으로 수집한 service ticket hash는 기본적으로(호환성을 위해) RC4-HMAC (NTLM hash)로 암호화되며, AES-256 Kerberos 티켓보다 cracking 속도가 빠릅니다. 공격자는 수집한 $krb5tgs$23$ hash를 Hashcat 또는 John the Ripper에 입력하여 오프라인 사전 공격과 무차별 대입 공격을 수행합니다. RockYou와 같은 일반적인 wordlist에 rule set을 함께 사용하면 일반 사용자용 GPU 장비에서도 취약한 service account password 대부분을 수분에서 수시간 안에 cracking할 수 있습니다. cracking이 완료되면 공격자는 service account의 평문 password를 확보하고 이를 사용해 직접 인증할 수 있습니다.
# Crack Kerberoasted hashes with Hashcat
hashcat -m 13100 kerberoast_hashes.txt rockyou.txt \
-r best64.rule \
--force
# Mode 13100 = Kerberos 5, etype 23 (RC4-HMAC service ticket)
# Mode 19600 = Kerberos 5, etype 17 (AES-128) - slower
# Mode 19700 = Kerberos 5, etype 18 (AES-256) - slowestKerberoasting 방어
Kerberoasting 완화책은 네 가지 영역을 대상으로 합니다. password 강도 — service account에는 GPU cluster를 사용하더라도 오프라인 cracking을 견딜 수 있는 길고 무작위적인 password(25자 이상)를 사용해야 합니다. Group Managed Service Accounts (gMSA) — Windows가 gMSA password(30일마다 교체되는 240자 무작위 값)를 자동으로 관리하므로 Kerberoasting을 계산상 실행하기 어렵게 만듭니다. AES 전용 암호화 — service account가 AES-256 티켓을 사용하도록 msDS-SupportedEncryptionTypes를 구성하면 RC4보다 cracking 속도가 기하급수적으로 느려집니다. Detection — 표준적이지 않은 workstation에서 service account를 대상으로 비정상적으로 많은 TGS 요청(Event ID 4769)이 발생하면 경고하도록 합니다.
# Create a Group Managed Service Account (gMSA) - Kerberoasting immune
New-ADServiceAccount -Name 'svc-sql' \
-DNSHostName 'sqlserver.domain.com' \
-PrincipalsAllowedToRetrieveManagedPassword 'SQLServers'
# Install on the SQL server
Install-ADServiceAccount -Identity 'svc-sql'KRBTGT account: Kerberos의 수호자
KRBTGT account는 domain 내 모든 Kerberos TGT에 서명하고 암호화하는 데 사용되는 password hash를 보유한 Active Directory 기본 제공 특수 account입니다. domain controller는 KRBTGT hash를 사용해 TGT를 생성하고 수신한 TGT를 검증합니다. 따라서 KRBTGT hash는 Active Directory 환경에서 가장 가치 있는 단일 자격 증명입니다. 이 hash를 가진 사람은 존재하지 않는 사용자를 포함하여 모든 사용자의 완전히 유효한 Kerberos 티켓을 원하는 group membership과 유효 기간으로 생성할 수 있습니다. 변경 과정에 세심한 조정이 필요하기 때문에 많은 조직에서는 KRBTGT password를 한 번도 변경하지 않은 경우가 많습니다.
# Check when KRBTGT password was last changed
Get-ADUser -Identity KRBTGT -Properties PasswordLastSet |
Select-Object Name, PasswordLastSet
# If PasswordLastSet is years ago, the domain is vulnerable to persistent Golden TicketsGolden Ticket 공격: TGT 위조
Golden Ticket 공격은 침해된 KRBTGT account의 password hash를 사용하여 위조된 완전히 유효한 Kerberos TGT를 생성합니다. 공격자는 Mimikatz의 kerberos::golden command를 사용해 모든 사용자(흔히 가짜 Administrator와 유사한 account)의 TGT를 생성할 수 있으며, 원하는 group membership(일반적으로 Domain Admins 포함)과 유효 기간(흔히 10년)을 지정할 수 있습니다. 이 위조 티켓은 암호학적으로 유효하고 실제 KRBTGT hash로 서명되었기 때문에 domain controller에는 정상 티켓과 구별되지 않습니다. Golden Ticket은 domain에 대한 완전하고 지속적이며 제한 없는 제어를 제공합니다.
# Mimikatz Golden Ticket creation (attacker perspective - for defender awareness)
# Requires: domain name, domain SID, KRBTGT hash, target username
# mimikatz# kerberos::golden \
# /domain:corp.example.com \
# /sid:S-1-5-21-1234567890-1234567890-1234567890 \
# /krbtgt:aabbccddeeff00112233445566778899 \
# /user:GoldenTicketUser \
# /groups:512,519 \
# /ticket:golden.kirbiGolden Ticket이 오래 지속되는 이유
Golden Ticket은 최초 공격이 발견되고 정리된 후에도 계속 유효하므로 특히 위험합니다. 대상 사용자의 password를 변경해도 아무런 효과가 없습니다. 이 티켓은 사용자의 실제 자격 증명을 기반으로 한 것이 아니라 위조된 것이기 때문입니다. 유일한 해결 방법은 KRBTGT password를 두 번 변경하는 것입니다. 한 번은 기존 티켓을 무효화하기 위해서이고, 다시 한 번은 순환을 위해 언제든 두 개의 KRBTGT key가 존재하기 때문입니다. 그러나 KRBTGT password 변경에는 신중한 조정이 필요합니다. 잘못 변경하면 domain 전체의 Kerberos 인증이 중단됩니다. 많은 조직이 이 해결 조치를 꺼리기 때문에 Golden Ticket이 무기한 유효하게 남습니다.
# KRBTGT password reset procedure (Microsoft New-KrbtgtKeys.ps1)
# Step 1: Reset KRBTGT password on primary DC
# Step 2: Wait for AD replication (typically 24-48 hours)
# Step 3: Reset KRBTGT password again to invalidate all old tickets
# Step 4: Verify Kerberos authentication working across all sites
# This invalidates ALL existing Kerberos tickets domain-wideSilver Ticket 공격: service별 위조
Silver Ticket은 범위가 더 제한적이라는 점을 제외하면 Golden Ticket과 유사합니다. KRBTGT 대신 대상 service account의 hash를 사용해 특정 서비스에만 사용할 수 있는 service ticket을 위조합니다. 예를 들어 SQL server service account hash가 있으면 공격자는 해당 SQL server에 대한 모든 액세스 권한을 부여하는 service ticket을 위조할 수 있습니다. Silver Ticket은 domain controller를 완전히 우회하기 때문에 Golden Ticket보다 detection이 어렵습니다. 위조 티켓이 KDC에 접촉하지 않고 공격자에서 서비스로 직접 전달되기 때문입니다. 완화하려면 service account hash를 보호하고 민감한 서비스에서 비정상적인 액세스 패턴을 모니터링해야 합니다.
KRBTGT hash 획득: DCSync 공격
공격자는 Active Directory의 정상적인 domain replication protocol을 악용하는 DCSync 공격을 사용해 KRBTGT hash를 획득합니다. Directory Replication Service (DRS)를 사용하면 domain controller 간에 password hash를 포함한 AD data를 동기화할 수 있습니다. DCSync 권한이 있는 공격자(일반적으로 Domain Admin, Enterprise Admin 또는 Replicating Directory Changes All permission을 가진 account)는 domain controller를 사칭하여 모든 account의 hash replication을 요청할 수 있습니다. Mimikatz의 lsadump::dcsync command는 DC 자체에서 code를 실행하지 않고 전적으로 network를 통해 이 공격을 수행합니다.
# DCSync to extract KRBTGT hash (attacker perspective)
# mimikatz# lsadump::dcsync /domain:corp.example.com /user:KRBTGT
# Output includes:
# Hash NTLM: <krbtgt NT hash>
# Hash SHA1: <krbtgt SHA1 hash>
# Key: <AES-256 key>
# Detection: Event ID 4662 from a non-DC source (replication event from workstation = suspicious)Golden 및 Silver Ticket activity detection
Golden Ticket 사용을 detection하는 일은 어렵지만 Kerberos 티켓 metadata의 이상 징후를 살펴보면 가능합니다. 비정상적으로 긴 lifetime을 가진 티켓(정상 티켓의 TGT lifetime은 10시간이지만 Golden Ticket은 흔히 10년으로 설정됨), domain 기본값인 AES-256(0x12)이 아닌 RC4(0x17)인 ticket encryption type을 사용하는 Event ID 4769, AD에 존재하지 않는 account name이 포함된 티켓, 그리고 Event ID 4769(service ticket request) 전에 Event ID 4768(TGT request)이 누락된 경우를 확인해야 합니다. Golden Ticket은 TGT 자체가 위조되었기 때문에 TGT request 단계를 건너뜁니다. Microsoft Sentinel 또는 Defender for Identity rule을 사용하면 이러한 pattern에 자동으로 flag를 지정할 수 있습니다.
# Detection: Golden Ticket indicator - no corresponding TGT request
# Normal flow: Event 4768 (TGT requested) -> Event 4769 (service ticket)
# Golden Ticket: Event 4769 WITHOUT preceding 4768 from same host
# Also alert on: TGT encryption type = RC4 in AES-only environments
# Splunk: index=windows EventCode=4769 TicketEncryptionType=0x17
# NOT [expected legacy systems]Kerberos 기반 공격 방지
Kerberos 공격에 대한 계층형 방어는 다음과 같습니다. 모든 service account에 gMSA를 사용하여 Kerberoasting을 실행하기 어렵게 합니다. 모든 account, 특히 중요도가 높은 service account에 AES 전용 암호화를 활성화하여 cracking 난이도를 최대화합니다. DCSync 권한을 제한합니다. replication permission이 있는 account를 감사하고 필요하지 않은 account에서는 해당 권한을 제거합니다. Microsoft Defender for Identity(이전 명칭 ATA)를 활성화하여 Kerberos를 인식하는 threat detection을 제공합니다. 여기에는 Golden Ticket, Kerberoasting 및 DCSync alert가 실시간으로 포함됩니다. 또한 계층형 관리 모델을 구현하여 Tier 2 account가 침해되더라도 DC 수준의 자격 증명에 접근하는 데 사용되지 못하도록 합니다.
# Audit DCSync-capable accounts (these should be very few)
Get-ADUser -Filter * -Properties 'msDS-AllowedToDelegateTo' |
Where {$_.DistinguishedName -notlike '*Domain Controllers*'}
# Check replication permission holders using PowerView:
# Get-ObjectAcl -DistinguishedName 'DC=domain,DC=com' \
# -ResolveGUIDs | \
# Where {$_.ActiveDirectoryRights -like '*ExtendedRight*'}빠른 확인
이 lesson에서 배운 CompTIA Security+ (SY0-701) 개념을 제대로 이해했는지 확인해 보세요.
lesson 요약
이 lesson에서는 다음을 배웠습니다. Kerberoasting은 SPN으로 등록된 account에 대한 service ticket을 요청하고 이를 오프라인에서 cracking합니다 — gMSA, 강력한 password 및 AES 전용 암호화로 방어할 수 있습니다. Golden Ticket 공격은 KRBTGT hash를 사용해 제한 없이 TGT를 위조합니다 — 두 번의 KRBTGT password 재설정이 이루어질 때까지 지속되는 domain 제어 권한을 제공합니다. 또한 DCSync 공격은 DC에서 code를 실행하지 않고 network를 통해 KRBTGT hash를 replication합니다 — 따라서 DCSync 권한을 엄격하게 감사해야 합니다. 다음 lesson에서는 공격자 techniques를 방어책에 대응시키는 MITRE ATT&CK framework를 살펴봅니다.
자주 묻는 질문
“Kerberoasting 및 골든 티켓 공격” 강의는 무료인가요?
네 — “Kerberoasting 및 골든 티켓 공격” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Security+ Academy 강의 전체를 잠금 해제할 수 있습니다. Security+ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“Kerberoasting 및 골든 티켓 공격”에서 뭘 배우나요?
Kerberoasting이 오프라인에서 해독 가능한 서비스 티켓 해시를 추출하는 방식과 골든 티켓 공격이 탈취한 KRBTGT 해시를 사용해 무제한 Kerberos 접속 권한을 부여하는 방식을 배웁니다. 브라우저에서 직접 실행하는 실습 코드로 Security+ Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Security+ Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Security+ Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“Kerberoasting 및 골든 티켓 공격” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Security+ Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Security+ Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- APT 수명 주기: 초기 접속에서 지속성 확보까지
- 측면 이동: 해시 전달 및 티켓 전달
- Kerberoasting 및 골든 티켓 공격
- 탐지 및 대응을 위한 MITRE ATT&CK 프레임워크