
Kerberos 티켓을 악용하여 Windows UAC를 우회하고, tgtdeleg 트릭과 SCM 액세스를 활용하여 서비스 티켓에 가짜 MachineID를 주입함으로써 SYSTEM 권한을 획득합니다.
이 POC는 James Forshaw(@tiraniddo)가 BlackHat USA 2022에서 발표한 "Taking Kerberos To The Next Level" 주제에서 영감을 받았습니다. 그는 Kerberos 티켓을 악용하여 UAC 우회를 달성하는 데모를 공유했습니다. 서비스 티켓에 KERB-AD-RESTRICTION-ENTRY를 추가하고 가짜 MachineID를 입력하면 쉽게 UAC를 우회하고 SCM에 접근하여 시스템 서비스를 생성함으로써 SYSTEM 권한을 얻을 수 있습니다. James Forshaw는 "Bypassing UAC in the most Complex Way Possible!"라는 블로그 게시물에서 이에 대한 근거를 설명했는데, 이에 매우 관심을 가지게 되었습니다. 그는 전체 익스플로잇 코드를 제공하지는 않았지만, Rubeus를 기반으로 POC를 구축했습니다. 원시 Kerberos 상호 작용 및 티켓 악용을 위한 C# 도구 세트인 Rubeus는 Kerberos 요청을 쉽게 시작하고 Kerberos 티켓을 조작할 수 있는 간편한 인터페이스를 제공합니다.
KRBUACBypass에 관한 관련 기사는 제 블로그 "Revisiting a UAC Bypass By Abusing Kerberos Tickets"에서 확인할 수 있으며, 배경 원리와 구현 방법을 포함하고 있습니다. 기사에서 언급했듯이, 이 글은 @tiraniddo의 "Taking Kerberos To The Next Level"에서 영감을 받았으며(그의 공유가 없었다면 하지 못했을 것입니다), 대학 졸업 전에 도구로 구현한 것뿐입니다.
현재 사용자의 자격 증명이 없고 접근할 수 없기 때문에 TGT를 수동으로 생성할 수 없습니다. 그러나 Benjamin Delpy(@gentilkiwi)는 그의 Kekeo에 tgtdeleg이라는 트릭을 추가하여 제한 없는 위임을 악용해 세션 키가 있는 로컬 TGT를 얻을 수 있도록 했습니다.
Tgtdeleg은 Kerberos GSS-API를 악용하여 호스트에서 상승된 권한을 얻지 않고 현재 사용자가 사용할 수 있는 TGT를 획득합니다. 이 방법은 AcquireCredentialsHandle 함수를 사용하여 현재 사용자에 대한 Kerberos 보안 자격 증명 핸들을 얻고, ISC_REQ_DELEGATE 플래그와 대상 SPN을 사용하여 HOST/DC.domain.com에 대해 InitializeSecurityContext 함수를 호출하여 도메인 컨트롤러에 보낼 의사 위임 컨텍스트를 준비합니다. 이로 인해 GSS-API 출력의 KRB_AP-REQ에 Authenticator 체크섬에 KRB_CRED가 포함됩니다. 그런 다음 로컬 Kerberos 캐시에서 서비스 티켓의 세션 키를 추출하고 이를 사용하여 Authenticator의 KRB_CRED를 해독하여 사용 가능한 TGT를 얻습니다. Rubeus 도구 세트도 이 기술을 통합하고 있습니다. 자세한 내용은 "Rubeus – Now With More Kekeo"를 참조하십시오.
이 TGT를 사용하여 자체 서비스 티켓을 생성할 수 있으며, 실행 가능한 작업 프로세스는 다음과 같습니다:
KERB-AD-RESTRICTION-ENTRY를 추가하되 가짜 MachineID를 입력합니다.서비스 티켓이 있으면 Kerberos 인증을 사용하여 HOST/HOSTNAME 또는 RPC/HOSTNAME SPN을 통해 서비스 제어 관리자(SCM) 명명된 파이프 또는 TCP에 접근할 수 있습니다. SCM의 Win32 API는 항상 Negotiate 인증을 사용합니다. James Forshaw는 간단한 POC인 SCMUACBypass.cpp를 만들었으며, 두 개의 API AcquireCredentialsHandle 및 InitializeSecurityContextW를 HOOK하여 SCM이 호출하는 인증 패키지 이름(pszPackage)을 Kerberos로 변경함으로써 SCM이 로컬 인증 시 Kerberos를 사용하도록 합니다.
자세한 내용은 다음을 읽어보세요:
이제 실행 효과를 살펴보겠습니다. 아래 그림과 같습니다. 먼저 asktgs 함수를 통해 현재 서버의 HOST 서비스에 대한 티켓을 요청한 다음, krbscm을 통해 시스템 서비스를 생성하여 SYSTEM 권한을 얻습니다.
KRBUACBypass.exe asktgs
KRBUACBypass.exe krbscm
