공격자는 Pass-the-Ticket, Pass-the-Hash, Overpass-the-Hash 및 Golden Tickets 공격을 포함하여 온프레미스 Windows 머신 전반에 걸쳐 측면으로 확산하기 위해 다양한 전술을 사용합니다. 하지만 유사한 기술은 Pass-the-Ticket, Pass-the-Hash, Overpass-the-Hash 및 Golden Tickets 공격도 포함됩니다. 그러나 유사한 기술은 손상된 워크스테이션에서 연결된 클라우드 리소스로 측면 이동을 수행하고, MFA 같은 강력한 인증 조치를 우회하는 데도 효과적입니다.
이 문서는 공격자가 Pass-the-PRT라는 공격 기법으로 클라우드로 측면 이동(lateral movement)을 수행할 수 있는 방법을 설명합니다.
PRT란 무엇인가요?
primary refresh token (PRT)는 Kerberos 티켓-그랜팅 티켓(TGT)과 유사합니다. 둘 다 단일 로그인(SSO)을 제공하는 데 사용되기 때문입니다. 하지만 TGT가 Windows 시스템용인 반면, PRT는 Windows 10 디바이스에 로그인한 다음 다시 인증할 필요 없이 Azure 및 Microsoft 365 리소스에 액세스할 수 있게 해줍니다. Windows 10 디바이스는 Azure-joined 또는 하이브리드 Azure-joined 상태여야 합니다.
이 과정이 어떻게 작동하는지에 대한 개요는 다음과 같습니다. 로그인하면 Windows 10 디바이스가 Windows 10 Cloud Authentication Provider와 통신합니다. 해당 AD 플러그인이 사용자 인증 정보를 확인하고 PRT와 세션 키를 반환합니다. 그러면 디바이스는 Trusted Platform Module(TPM)로 세션 키를 다시 암호화한 뒤, 세션 키와 PRT를 모두 LSASS에 저장합니다. 이후 Azure로 SSO를 지원하는 브라우저(Edge 또는 Windows 10 확장 기능이 있는 Chrome)를 사용해 웹사이트에 로그인하려고 하면, Cloud Authentication Provider가 브라우저용 PRT 쿠키를 생성하고 그 쿠키로 Azure AD에서 토큰을 가져옵니다. Azure AD는 PRT 쿠키를 검증한 후 사용자의 로그인을 허용합니다.
(더 자세히 알아보려면 Microsoft documentation, Jairo Cadena의 summary of PRT and SSO, Dirk-jan Mollema의 이 article on PRT, 그리고 GitHub의 ROADtoken 및 RequestAADRefreshToken 프로젝트를 참고하세요.)
PRT가 있는지 확인하려면 다음 명령을 실행하세요:
Dsregcmd.exe /status
SSO State 섹션에서 AzureAdPrt 를 확인하세요. 값이 YES로 설정되어 있으면 PRT가 있는 것입니다.
값이 NO로 설정되어 있다면, PRT를 발급받으려면 Azure AD에 디바이스가 조인되어 있어야 하므로 아래 명령을 사용해 디바이스가 Azure AD에 조인되어 있는지 확인하세요.
Pass-the-PRT 공격 수행
공격자가 사용자의 PRT와 세션 키를 확보할 수 있다면, 해당 사용자인 것처럼 웹 리소스에 접근할 수 있는 PRT 쿠키를 생성해 기존의 조건부 액세스 요구 사항을 우회할 수 있습니다. PRT는 14일 동안 유효하므로, 계정이 비활성화되지 않는 한 최대 2주 동안 접근 권한을 가질 수 있습니다.
이러한 공격을 실제로 수행하는 방법을 정확히 단계별로 살펴보겠습니다.
사전 조건: PRT가 발급된 Windows 10 장치를 이미 손상시켰고, 해당 머신에 로컬 관리자 권한이 있습니다.
단계 개요:
- LSASS에서 PRT를 추출한 뒤 나중에 사용할 수 있도록 저장합니다.
- 세션 키를 추출합니다.
- 세션 키를 해독하고 DPAPI masterkey를 사용해 이를 활용하세요. 우리는 해당 내용을 Pass-the-Cookie 공격에서 배웠으며, 동일한 접근 방식을 사용할 것입니다.
- 복호화된 Session Key를 사용해 파생 키와 컨텍스트를 얻으세요. 이는 PRT 쿠키를 생성하는 데 필요합니다. 파생 키는 쿠키용 JWT에 서명하는 데 사용됩니다.
- 어떤 시스템에서든 PRT, 파생 키, 컨텍스트를 사용해 새 PRT 쿠키를 생성하세요.
- 쿠키를 Chrome 브라우저 세션에 가져오세요. 이제 사용자의 비밀번호를 전혀 알 필요도 없고, 어떤 MFA 프롬프트도 처리할 필요 없이 사용자인 것처럼 웹사이트에 인증됩니다.
각 단계에 대해 더 자세히 살펴보겠습니다.
1단계. LSASS에서 PRT를 추출합니다.
침해한 장비의 PRT 데이터를 확인하려면 다음 명령을 Mimikatz release 2.2.0 20200807 이상에서 사용합니다:
Privilege::debug
Sekurlsa::cloudap
다음은 출력 결과입니다. PRT로 표시된 부분을 복사한 뒤 나중에 사용할 수 있도록 저장합니다.
PRT 데이터가 표시되지 않으면, 앞에서와 같이 명령 dsregcmd /status 를 실행해 해당 장비가 Azure AD에 조인되어 있는지 확인합니다. AzureAdPrt 가 YES 로 설정되어 있다면, 해당 머신이 실행 중인 Windows 10 버전을 확인하세요. 저희 랩에서는 공격이 작동하려면 최소 1909 버전으로 업그레이드해야 했습니다.
2단계. 소유 증명(Proof of possession) 키를 추출합니다.
이제 아래에 강조 표시된 세션 키(“ProofOfPosessionKey”)를 추출하겠습니다. 이는 암호화되어 있으므로 이를 해독하기 위해 DPAPI masterkeys를 사용해야 합니다.
3단계. 세션 키를 해독합니다.
이제 권한을 SYSTEM으로 상승시키고 컴퓨터 컨텍스트에서 실행하여 DPAPI masterkey를 사용할 수 있게 함으로써 세션 키를 해독합니다:
Token::elevate
Dpapi::cloudapkd /keyvalue:[PASTE ProofOfPosessionKey HERE] /unprotect
이제 두 가지 값을 복사하겠습니다. 첫 번째는 컨텍스트 값입니다:
두 번째는 Derived Key 값입니다:
4단계. PRT 쿠키를 생성합니다.
이 공격의 나머지는 어떤 워크스테이션에서도 수행할 수 있습니다. PRT 쿠키를 생성하려면 아래 명령을 그대로 실행하면 됩니다:
Dpapi::cloudapkd /context:[CONTEXT] /derivedkey:[DerivedKey] /Prt:[PRT]
출력에는 Signature with key 이후에 서명된 PRT 쿠키가 포함됩니다. 해당 텍스트를 복사하세요.
5단계. 브라우저 세션에 PRT 쿠키를 주입합니다.
시크릿 모드로 Google Chrome을 실행한 다음 https://login.microsoftonline.com 로 이동합니다. 로그인 데이터 입력을 요청받으면 페이지 아무 곳이나 마우스 오른쪽 버튼으로 클릭한 뒤 Inspect 를 선택하여 Chrome용 개발자 도구를 엽니다.
애플리케이션(Application) 탭으로 이동한 다음 Cookies 를 두 번 클릭하고 login.microsoftonline.com 을 클릭합니다. 오른쪽 창에서 상단 작업 표시줄에 있는 대각선이 그어진 원을 클릭하여 기존 쿠키를 모두 지웁니다.
그런 다음 표에서 빈 행을 두 번 클릭하고 다음 새 쿠키를 추가하세요:
Name: x-ms-RefreshTokenCredential
Value: [Paste your output from above]
HttpOnly: Set to True (checked)
다른 필드는 기본값 그대로 두세요.
페이지를 새로고침하고 쿠키가 사라지지 않았는지 확인합니다. 사라졌다면 실수를 했을 수 있으므로, 과정을 다시 진행해야 합니다.
다음으로 이동합니다: https://login.microsoftonline.com 다시 접속하면 손상된(침해된) 사용자로 자동 로그인됩니다:
Pass-the-PRT 공격으로부터 보호
Pass-the-PRT 공격은 정상적인 SSO 프로세스를 악용하기 때문에 탐지가 어렵습니다. 유용한 전략 중 하나는 공격의 첫 단계에서 실행되는 Mimikatz의 사용을 탐지할 수 있는 엔드포인트 보호 소프트웨어를 사용하는 것입니다.
하지만 예방이 탐지보다 훨씬 더 중요합니다. Pass-the-PRT는 횡적 이동(lateral movement) 기술이라는 점을 기억하세요. 이를 수행하려면 침입자가 이미 어떤 시스템에 대한 접근 권한을 확보해야 합니다. Netwrix Active Directory Security Solution 를 사용하면 애초에 악의적인 행위자가 환경 내에서 그 발판을 마련하지 못하도록 막을 수 있습니다.
또한 이 공격은 로컬 관리자 권한을 필요로 합니다. Netwrix PolicyPak 같은 엔드포인트 관리 소프트웨어를 사용하면 사용자 생산성을 저해하지 않으면서도 이처럼 강력한 권한을 사용자에게서 제거할 수 있습니다. 또한 컴퓨터가 악성 소프트웨어를 실행하지 못하게 막고, 브라우저 설정까지 보호할 수 있습니다.
공유하기
더 알아보기
저자 소개
Jeff Warren
최고 제품 책임자
Jeff Warren은 Netwrix의 제품 포트폴리오를 총괄하며, 보안에 초점을 둔 제품 관리 및 개발 분야에서 10년이 넘는 경험을 바탕으로 기여하고 있습니다. Netwrix에 합류하기 전 Jeff는 Stealthbits Technologies에서 제품 조직을 이끌었으며, 소프트웨어 엔지니어로서의 경험을 활용해 혁신적이고 엔터프라이즈 규모의 보안 솔루션을 개발했습니다. 직접적인 실행 중심의 접근 방식과 까다로운 보안 과제를 해결하는 데 강점을 지닌 Jeff는 실제로 효과가 있는 실용적인 솔루션을 구축하는 데 집중하고 있습니다. 그는 델라웨어 대학교에서 정보 시스템(Information Systems) 학사 학위를 취득했습니다.