이 문서는 Kerberos 위임에 관한 일련의 문서를 마무리합니다. 읽기 전에 Active Directory 위임 과 Kerberos 위임 모두에 익숙한지 확인하고, 리소스 기반 제약 위임 과 무제약 위임이 어떻게 구성되는지, 그리고 어떻게 악용될 수 있는지에 대해 개괄하는 앞선 시리즈 글을 읽어보시길 권장합니다.
이 문서는 constrained delegation 공격이 공격자에게 필수 서비스에 대한 권한 상승 접근을 가능하게 하는 방법을 설명합니다.
Constrained Delegation
constrained delegation을 사용하면 관리자가 Active Directory 사용자 또는 컴퓨터 계정이 위임할 수 있는 서비스와 사용할 수 있는 인증 프로토콜을 구성할 수 있습니다. 이는 AD 개체의 위임(Delegation) 탭에서 구성됩니다:
계정에서 constrained delegation을 설정하면, 내부적으로 두 가지 일이 발생합니다:
- 해당 개체의 userAccountControl 속성이 “TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION” 플래그로 업데이트됩니다.
- msDS-AllowedToDelegateTo 속성은 지정된 SPN으로 채워집니다.
제한된 위임(Constrained Delegation) 공격
이론적으로 제한된 위임(Constrained Delegation)은 AD 계정이 손상되었을 때 발생할 수 있는 피해를 제한합니다. 하지만 제한된 위임은 악용될 수 있습니다. 즉, 서비스에 대해 제한된 위임이 구성된 계정의 평문 비밀번호 또는 비밀번호 해시를 공격자가 확보하면, 환경 내의 어떤 사용자로든 가장하여 해당 서비스에 액세스할 수 있습니다. 예를 들어 제한된 위임이 Microsoft SQL SPN에 대해 구성되어 있다면, 공격자는 해당 데이터베이스에 대한 높은 권한(특권) 액세스를 얻을 수 있습니다.
공격은 어떻게 전개되는가
다음과 같이 가정해 보겠습니다.
- 우리는 IT 환경에 침투하여 거점을 확보했습니다.
- 워크스테이션에서 로컬 관리자 권한이 있는 계정을 손상시켰습니다.
- 우리는 Mimikatz 를 사용해 로그인 후 메모리에 남아 있던 비밀번호 해시를 가져왔고, 연결된 계정(‘notadmin’ 계정)에는 제한 위임이 구성되어 있습니다.
따라서 현재까지 확보한 것은 우리가 침투한 단一 대의 장비에 대한 접근 권한과, 제한 위임이 구성된 계정의 비밀번호 해시뿐입니다.
1단계. 정찰
제한된 위임을 악용하려면 다음 세 가지 핵심이 필요합니다:
- 제한된 위임이 설정된 손상된 계정
- 서비스에 대한 액세스를 요청할 때 가장할 대상의 권한 있는 계정
- 우리가 액세스하려는 서비스를 호스팅하는 머신에 대한 정보
첫 번째는 이미 있으니, 나머지 두 가지를 가져옵시다.
1.1: 먼저 ‘notadmin’ 계정의 제한된 위임(Constrained Delegation)이 무엇에 대해 구성되어 있는지 확인해 봅시다:
1.2: 이제 SBPMLAB-DC2 호스트에서 CIFS와 LDAP SPN에 대해 제한된 위임(Constrained Delegation)이 구성되어 있음을 알았습니다. 그렇다면 SBPMLAB-DC2 호스트가 정확히 무엇인지 이해해 봅시다(이름만 봐도 어느 정도 짐작이 되긴 하지만!). 아마도 컴퓨터의 그룹 멤버십이 무언가를 알려줄 수 있을 겁니다.
1.3: 운이 좋습니다. 이 사용자가 위임(Delegate)하여 액세스할 수 있는 대상은 도메인 컨트롤러(DC)입니다. 이제 이 서비스를 접근할 때 가장 적절한(그럴듯한) 사용자를 가장(impersonate)할 수 있도록 찾아봅시다. 다음 PowerShell 명령은 Domain Admins 그룹의 구성원을 나열합니다:
Get-ADGroup ‘Domain Admins’ | Get-ADGroupMember
계정 ‘KevinJ’가 Domain Admins 그룹의 구성원임을 확인할 수 있습니다. 이제 제한된 위임(Constrained Delegation)을 악용하기 위해 필요한 모든 요소를 갖췄습니다.
2단계. 액세스 획득
Kekeo 같은 도구를 사용하면, 제약된 위임이 구성된 계정에 대해 티켓 부여 티켓(ticket granting ticket, TGT)을 요청하고, 우리가 가장(impersonate)하려는 계정에 대해 티켓 부여 서비스 요청을 실행한 다음 대상 서비스에 액세스할 수 있습니다.
다음 사항을 염두에 두세요. 현재 대상 호스트의 C$ 관리자 공유에 아직 액세스할 수 없습니다:
2.1. Kekeo를 사용하여 ‘notadmin’ 계정의 비밀번호 해시로 TGT를 요청합니다:
2.2. 이제 TGT를 확보했으므로, ‘notadmin’ 계정이 제약된 대상 서비스에 대해 우리가 가장(impersonate)하려는 계정의 TGS 요청을 실행합니다:
2.3. Mimikatz로 다시 전환하면 Pass the Ticket 를 사용하여 대상 호스트의 CIFS 서비스에 액세스할 수 있습니다:
보시는 것처럼, 티켓을 가져온(가져오기) 후에는 도메인 컨트롤러의 C$ 관리자 공유로 이동할 수 있습니다. 즉, NTDS.dit 파일의 복사본을 잠재적으로 탈취한 다음 오프라인에서 사용자 비밀번호를 크래킹을 시도할 수 있다는 뜻입니다.
위임(Delegation) 기반 공격으로부터 보호
위임 관련 공격에 대응하기 위한 핵심 기법은 위임하면 안 되는 중요한(민감한) 계정을 Protected Users 그룹에 넣거나, 또는 Active Directory Users and Computers 에서 계정(Account) 탭의 ‘Account is sensitive and cannot be delegated’ 확인란을 선택하는 것입니다:
더 폭넓은 보호를 위해 Netwrix Active Directory Security Solution 를 고려해 보세요. 이 제품은 무제한 위임(unconstrained)과 제한 위임(constrained)이 구성된 위치, 그리고 제한된 특정 서비스 계정을 명확하게 파악할 수 있는 종합 보고서를 제공합니다. 이 정보를 사용하면 위험을 줄이고 환경을 보다 효과적으로 보안할 수 있습니다. 또한 정교한 위협을 쉽게 감지하고 대응을 자동화하여 그 영향까지 완화할 수 있습니다.
자주 묻는 질문(FAQ)
제한 위임(constrained delegation) 공격이란 무엇인가요?
제한 위임(constrained delegation) 공격은 공격자가 서비스 계정에 부여된 권한을 악용해 대상 시스템 또는 서비스에 무단으로 접근하는 유형의 사이버 공격입니다. 공격자는 서비스 계정을 손상시키거나 서비스 간의 Kerberos 트래픽을 가로채고 조작함으로써 사용자를 가장(사칭)하고, 서비스 계정이 접근할 수 있도록 허용된 다른 서비스에 무단으로 접근할 수 있습니다. 이런 유형의 공격은 무제한 위임(unconstrained delegation) 공격보다 실행이 더 어려울 수 있지만, 네트워크 보안에 여전히 심각한 위협입니다.
제한 위임(constrained delegation)과 무제한 위임(unconstrained delegation)이란 무엇인가요?
제한 위임(constrained delegation)과 무제한 위임(unconstrained delegation)은 Kerberos 인증 프로토콜을 구성하는 두 가지 방식으로, 서비스가 사용자를 가장(사칭)해 다른 서비스에 액세스할 수 있도록 해줍니다. 무제한 위임은 서비스가 Active Directory 도메인 내의 어떤 다른 서비스에도 접근하기 위해 사용자를 가장할 수 있도록 허용합니다. Active Directory 도메인반면 제한 위임은, 사용자를 대신해 서비스가 접근할 수 있는 서비스가 무엇인지 지정함으로써 위임 범위를 제한합니다.
무제한 위임(unconstrained delegation)이란 무엇을 의미하나요?
무제한 위임(unconstrained delegation)은 서비스가 사용자를 가장(impersonate)하여 Active Directory 도메인 내의 다른 어떤 서비스에도 액세스할 수 있도록 허용하는 Kerberos 위임 구성입니다. 이러한 유형의 위임은 공격자가 네트워크 내부에서 가로 이동(lateral movement)하여 민감한 데이터나 시스템에 접근하는 데 악용될 수 있습니다.
무제한 위임(unconstrained delegation)이 왜 나쁜가요?
무제한 위임(unconstrained delegation)은 공격자가 네트워크 내부에서 가로 이동(lateral movement)하여 민감한 데이터나 시스템에 접근할 수 있게 해줄 수 있기 때문에 좋지 않은 것으로 간주됩니다. 대신 위임 범위를 제한하고 성공적인 공격의 위험을 줄이는 제한된 위임(constrained delegation)을 사용하는 것이 권장됩니다.
공유하기
더 알아보기
저자 소개
Joe Dibley
보안 연구원
Netwrix의 보안 연구원이며 Netwrix Security Research Team의 일원입니다. Joe는 Active Directory, Windows 및 다양한 엔터프라이즈 소프트웨어 플랫폼과 기술 분야의 전문가로, 새로운 보안 위험, 복잡한 공격 기법, 그리고 이에 대한 대응(완화)과 탐지 방법을 연구합니다.