Trust Domain
- 두 개의 서로 다른 도메인 또는 포리스트 간에 인증을 공유하여, 한 도메인의 사용자가 다른 도메인의 자원에 접근할 수 있게 하는 보안 설정이다.
- 서로가 서로를 신뢰하는 양방향 (Two-way) 신뢰가 있고, 일방향적인 신뢰 관계 (One-way) 신뢰가 있다.
SpoofSIDHistory (Extra SID 조작)
개념
- 공격자가 골든 티켓을 위조하는데, 티켓의
Extra SID필드에 임의의 SID(주로 Enterprise Admin SID인 519를 사용한다) 를 넣어 티켓을 위조하고, 신뢰 관계에 있는 다른 도메인에 인증하는데 사용한다. - 인증을 받는 서버는
Extra SID에 적힌SID권한을 반영해준다. - 원래
KDC가 사용자의SIDHistory속성을 읽어 티켓의Extra SIDs필드에 넣어주며 동작하지만,SpoofSIDHistory는 공격자가 직접 티켓의Extra SIDs에 고권한SID값을 넣어 위조한다. - 이를 이해하기 위해선 먼저
SIDHistory를 이해해야 한다.
SID History란?
구 도메인 :
old.domain.local, 신 도메인 :new.domain.local이 있다고 가정하자.John의 구 SID : S-1-5-21-OLD-1050, John의 신 SID : S-1-5-21-NEW-1050 이 되었다. John은 기존에
FS01에 있는 문서를 읽을 수 있었다. 문서의 ACL에 S-1-5-21-OLD-1050이 등록되어 있었기 때문.하지만 John은 신규 SID를 발급받았고, 기존에 사용하던
FS01의 문서를 읽으려고 하지만,FS01은S-1-5-21-NEW-1050은 모르는 SID이므로 접근을 거부함.따라서 John의 계정에
SIDHistory = S-1-5-21-OLD-1050을 넣음으로써, John이FS01에 접근할 수 있게 되었다.
성립 조건
- 공격자는 도메인을 완전히 장악하여, krbtgt의 hash 혹은 aesKey를 확보해야 한다.
- 서로 신뢰관계에 있는 다른 도메인이 존재해야 한다.
- 이동하려는 옆 도메인에서
SID Filtering이 비활성화 되어 있어야 한다. → 같은 포리스트 내에 있는 다른 도메인은 기본적으로 비활성화 되어있다. →SID Filtering이 활성화 되어있다면, 인증을 받는 DC는 Extra SID 필드값을 제거하고 티켓을 검증한다.
공격 시나리오 (예시)
하나의 포리스트 내 양방향 신뢰관계인 두 개의 도메인이 존재한다고 가정하자.
domain.local←>sub.domain.local은 서로 신뢰관계이다. 각 도메인의 DC는 아래와 같다고 가정한다.DC01.domain.local,DC02.sub.domain.local공격자는
sub.domain.local을 완전히 장악했고, DCSync까지 진행하여 sub 도메인 krbtgt의 해시까지 획득했다.공격자는 krbtgt 해시를 이용해
Extra SID에domain.local의Enterprise Admins SID가 삽입된 골든티켓을 위조한다. (impacket-ticketer)
PassTheTicket + psexec을 진행한다. 공격자는 우선 위조된 골든티켓을 DC02에 제출하고, DC02는 trust key로 서명된 referral ticket을 발급한다. 공격자는 해당 referral ticket으로DC01.domain.local에 인증을 시도하며, DC01은 Extra SID를 신뢰하여Enterprise Admins권한으로 반영해준다.