AS-REP Roasting¶
요약
보통 사용자는 DC가 AS-REP를 돌려주기 전에 비밀번호를 안다는 것을 증명해야 합니다(Kerberos 사전 인증). 그런데 어떤 계정에 "Do not require Kerberos preauthentication"(DONT_REQ_PREAUTH, userAccountControl 플래그 0x400000)이 설정되어 있으면, 누구든 DC에 그 계정의 AS-REP를 요청할 수 있습니다 — 그리고 그 일부는 계정의 비밀번호 해시로 암호화되어 있습니다. 공격자는 Kerberoasting처럼 이것을 오프라인에서 크랙합니다. 차이점: 공격자가 DC에 닿을 수 있고 사용자 이름을 추측하거나 열거할 수 있다면, AS-REP roasting은 도메인 자격 증명이 전혀 없어도 통합니다.
공격 원리¶
sequenceDiagram
participant A as Attacker (no creds needed)
participant DC as Domain Controller
A->>DC: LDAP (if authenticated): userAccountControl:1.2.840.113556.1.4.803:=4194304
DC->>A: accounts with DONT_REQ_PREAUTH
A->>DC: AS-REQ for user — no pre-auth data, request RC4
DC->>A: AS-REP — enc-part encrypted with the user's key
A->>A: hashcat -m 18200 offline
이 플래그가 존재하는 이유: 아주 오래된 Kerberos 클라이언트와 일부 Unix/레거시 연동은 사전 인증을 할 수 없었습니다. 오늘날 대부분의 환경에서 이것은 잘못된 설정입니다 — 문제 해결 중에 한 번 설정하고 잊어버린 경우가 많습니다.
공격 도구 / 명령¶
# Enumerate + roast with domain creds
Rubeus.exe asreproast /format:hashcat /outfile:asrep.txt
Get-DomainUser -PreauthNotRequired # PowerView
# Without creds — supply a username list
GetNPUsers.py corp.local/ -usersfile users.txt -no-pass -dc-ip 10.0.0.1 -format hashcat
# Crack
hashcat -m 18200 asrep.txt wordlist.txt
영향받는 Windows 버전¶
모든 Active Directory 버전에 있는 설정상의 약점입니다. 계정은 DONT_REQ_PREAUTH가 설정된 경우에만 노출되며 — 모든 버전에서 새 계정은 기본적으로 꺼져 있습니다. 노출 정도는 도메인의 암호화 설정에 따라 다릅니다: RC4가 꺼져 있으면 공격자는 AES로 암호화된 AS-REP(etype 18)를 받게 되는데, 크랙이 훨씬 느리지만 약한 비밀번호라면 여전히 크랙됩니다.
남는 흔적¶
| 위치 | 아티팩트 | 찾을 것 |
|---|---|---|
| DC Security 로그 | Pre_Authentication_Type=0이고 Ticket_Encryption_Type=0x17인 4768 (TGT 요청) |
사전 인증 없이 RC4로 발급된 TGT — roasting |
| DC Security 로그 | 한 IP에서 Result_Code=0x6(알 수 없는 주체)인 4768이 다수 |
목록을 이용한 사용자 이름 열거 (자격 증명 없는 변형) |
| AD | 0x400000이 포함된 userAccountControl |
노출 그 자체 — 감사하세요 |
| DC Security 로그 | 변경 내용이 Don't Require Preauth를 설정한 4738 (사용자 계정 변경) |
누군가 플래그를 켬 (공격자가 자신이 제어하는 대상에 이를 설정하기도 함, "targeted AS-REP roasting") |
| 네트워크 | Zeek kerberos.log — 도메인에 속하지 않은 호스트에서 request_type=AS, 성공, 암호 RC4 |
네트워크상의 흔적 |
탐지¶
index=botsv3 sourcetype=WinEventLog EventCode=4768 Result_Code=0x0 Pre_Authentication_Type=0
| stats count, values(Ticket_Encryption_Type) as etype, values(Client_Address) as src by Account_Name
| sort - count
4768 = Kerberos TGT가 요청됨. Result_Code=0x0 = 성공. Pre_Authentication_Type=0은 사전 인증이 제공되지 않았다는 뜻입니다(정상 로그온은 비밀번호면 2, 스마트카드/PKINIT이면 15/16). 걸리는 것은 모두 알려진 레거시 연동(허용 목록에 넣으세요)이거나 roasting입니다.
대응¶
정말 필요하지 않은 모든 계정에서 플래그를 해제하고, roasting당한 계정은 비밀번호를 재설정하세요(크랙될 것이라고 가정하세요). 플래그를 유지해야 하는 계정이라면 30자 이상의 무작위 비밀번호를 주고 로그온할 수 있는 곳을 제한하세요.
Windows 버전별 대응책¶
| 대응책 | 막는 것 | 적용 가능 버전 |
|---|---|---|
모든 계정에서 DONT_REQ_PREAUTH 제거; 이를 설정하는 4738에 경보 |
노출 전체 | 모든 AD 버전 |
| 예외 계정에 길고 무작위인 비밀번호 | 크랙을 사실상 불가능하게 함 | 모든 버전 |
| Kerberos에서 RC4 끄기 (AES 전용) | 느린 AES 크랙을 강제 | 7 / 2008 R2+에서 설정 가능 |
| Kerberos Authentication Service 감사 (성공 + 실패) | 사전 인증 유형이 담긴 4768 생성 | 고급 감사 정책 2008 R2+ (2003은 기본 계정 로그온 감사) |
| 특권 계정에 Protected Users | 항상 AES로 사전 인증을 요구 | DFL 2012 R2+ |
참고 자료¶
- MITRE ATT&CK — T1558.004
- 관련 페이지: Kerberoasting · Windows 이벤트 ID · 버전별 강화