Az - Cloud Kerberos Trust

Reading time: 7 minutes

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기

이 게시물은 https://dirkjanm.io/obtaining-domain-admin-from-azure-ad-via-cloud-kerberos-trust/ 에 대한 요약으로, 공격에 대한 추가 정보를 확인할 수 있습니다. 이 기술은 https://www.youtube.com/watch?v=AFay_58QubY에서도 언급됩니다.

Kerberos Trust Relationship Overview

Cloud Kerberos Trust (Entra ID -> AD) -- 이 기능(Windows Hello for Business의 일부)은 온프레미스 AD가 Entra ID를 신뢰하여 AD에 대한 Kerberos 티켓을 발급하는 단방향 신뢰를 설정합니다. 이를 활성화하면 AD에 AzureADKerberos$ 컴퓨터 객체가 생성되고(읽기 전용 도메인 컨트롤러로 나타남) 연결된 krbtgt_AzureAD 계정(보조 KRBTGT)이 생성됩니다. Entra ID는 이러한 계정의 키를 보유하고 있으며 AD 사용자에 대한 "부분" Kerberos TGT를 발급할 수 있습니다. AD 도메인 컨트롤러는 이러한 티켓을 존중하지만 RODC와 유사한 제한이 있습니다: 기본적으로 고급 권한 그룹(도메인 관리자, 엔터프라이즈 관리자 등)은 거부되고 일반 사용자는 허용됩니다. 이는 Entra ID가 정상 조건에서 도메인 관리자를 신뢰를 통해 인증하는 것을 방지합니다. 그러나 우리가 볼 수 있듯이, 충분한 Entra ID 권한을 가진 공격자는 이 신뢰 설계를 악용할 수 있습니다.

Pivoting from Entra ID to On-Prem AD

시나리오: 대상 조직은 비밀번호 없는 인증을 위해 Cloud Kerberos Trust가 활성화되어 있습니다. 공격자는 Entra ID(Azure AD)에서 Global Administrator 권한을 얻었지만 아직 온프레미스 AD를 제어하지 않습니다. 공격자는 또한 도메인 컨트롤러에 대한 네트워크 접근 권한을 가진 발판을 확보하고 있습니다(예: VPN 또는 하이브리드 네트워크의 Azure VM을 통해). 클라우드 신뢰를 사용하여 공격자는 Azure AD 제어를 활용하여 AD에서 Domain Admin 수준의 발판을 얻을 수 있습니다.

전제 조건:

  • Cloud Kerberos Trust가 하이브리드 환경에 구성되어 있습니다(지표: AD에 AzureADKerberos$ RODC 계정이 존재함).

  • 공격자는 Entra ID 테넌트에서 Global Admin(또는 Hybrid Identity Admin) 권한을 가지고 있습니다(이 역할은 AD Connect 동기화 API를 사용하여 Azure AD 사용자를 수정할 수 있습니다).

  • 공격자가 인증할 수 있는 하이브리드 사용자 계정이 최소한 하나 존재해야 합니다(AD와 AAD 모두에 존재). 이는 자격 증명을 알고 있거나 재설정하거나 비밀번호 없는 방법(예: 임시 접근 패스)을 할당하여 기본 새로 고침 토큰(PRT)을 생성함으로써 얻을 수 있습니다.

  • 기본 RODC "거부" 정책에 포함되지 않는 높은 권한의 온프레미스 AD 대상 계정이 필요합니다. 실제로 훌륭한 대상은 AD Connect 동기화 계정(종종 **MSOL_***로 명명됨)으로, AD에서 DCSync(복제) 권한을 가지고 있지만 일반적으로 내장 관리자 그룹의 구성원이 아닙니다. 이 계정은 일반적으로 Entra ID와 동기화되지 않으므로 충돌 없이 SID를 가장할 수 있습니다.

공격 단계:

  1. Azure AD 동기화 API 접근 권한 얻기: Global Admin 계정을 사용하여 Azure AD Provisioning (sync) API에 대한 액세스 토큰을 획득합니다. 이는 ROADtools 또는 AADInternals와 같은 도구를 사용하여 수행할 수 있습니다. 예를 들어, ROADtools(roadtx)를 사용하여:
bash
# Using roadtx to get an Azure AD Graph token (no MFA)
roadtx gettokens -u <GlobalAdminUPN> -p <Password> --resource aadgraph

(대안으로, AADInternals의 Connect-AADInt를 사용하여 Global Admin으로 인증할 수 있습니다.)

  1. 하이브리드 사용자의 온프레미스 속성 수정: Azure AD 동기화 API를 활용하여 선택한 하이브리드 사용자의 **onPremises Security Identifier (SID)**와 onPremises SAMAccountName을 대상 AD 계정과 일치하도록 설정합니다. 이는 Azure AD에 클라우드 사용자가 우리가 가장하고자 하는 온프레미스 계정에 해당함을 효과적으로 알립니다. 오픈 소스 ROADtools Hybrid 툴킷을 사용하여:
bash
# Example: modify a hybrid user to impersonate the MSOL account
python3 modifyuser.py -u <GlobalAdminUPN> -p <Password>\
--sourceanchor <ImmutableID_of_User>\
--sid <TargetAD_SID> --sam <TargetAD_SAMName>

사용자의 sourceAnchor (불변 ID)는 수정할 Azure AD 객체를 식별하는 데 필요합니다. 이 도구는 하이브리드 사용자의 온프레미스 SID와 SAM 계정 이름을 대상의 값(예: MSOL_xxxx 계정의 SID 및 SAM)으로 설정합니다. Azure AD는 일반적으로 이러한 속성을 Graph를 통해 변경하는 것을 허용하지 않지만(읽기 전용), 동기화 서비스 API는 이를 허용하며 Global Admin이 이 동기화 기능을 호출할 수 있습니다.

  1. Azure AD에서 부분 TGT 얻기: 수정 후, 하이브리드 사용자로 Azure AD에 인증합니다(예: 장치에서 PRT를 얻거나 자격 증명을 사용하여). 사용자가 로그인할 때(특히 도메인에 가입된 또는 Entra에 가입된 Windows 장치에서), Azure AD는 Cloud Kerberos Trust가 활성화되어 있기 때문에 해당 계정에 대해 부분 Kerberos TGT (TGTAD)를 발급합니다. 이 부분 TGT는 AzureADKerberos$ RODC 키로 암호화되며 우리가 설정한 대상 SID를 포함합니다. 우리는 ROADtools를 통해 사용자에 대한 PRT를 요청하여 이를 시뮬레이션할 수 있습니다:
bash
roadtx getprt -u <HybridUserUPN> -p <Password> -d <DeviceID_or_Cert>

이것은 부분 TGT와 세션 키를 포함하는 .prt 파일을 출력합니다. 계정이 클라우드 전용 비밀번호인 경우, Azure AD는 여전히 PRT 응답에 TGT_AD를 포함합니다.

  1. 부분 TGT를 전체 TGT로 교환 (AD에서): 이제 부분 TGT를 온프레미스 도메인 컨트롤러에 제시하여 대상 계정에 대한 전체 TGT를 얻을 수 있습니다. 이는 krbtgt 서비스(도메인의 주요 TGT 서비스)에 대한 TGS 요청을 수행하여 이루어집니다. 본질적으로 티켓을 전체 PAC이 포함된 정상 TGT로 업그레이드하는 것입니다. 이 교환을 자동화하는 도구가 제공됩니다. 예를 들어, ROADtools Hybrid의 스크립트를 사용하여:
bash
# Use the partial TGT from the PRT file to get a full TGT and NTLM hash
python3 partialtofulltgt.py -p roadtx.prt -o full_tgt.ccache --extract-hash

이 스크립트(또는 Impacket 동등물)는 도메인 컨트롤러에 연락하여 대상 AD 계정에 대한 유효한 TGT를 검색하며, 특별한 Kerberos 확장이 사용될 경우 계정의 NTLM 해시도 포함됩니다. KERB-KEY-LIST-REQ 확장은 DC에 암호화된 응답에서 대상 계정의 NTLM 해시를 반환하도록 요청하기 위해 자동으로 포함됩니다. 결과는 대상 계정에 대한 자격 증명 캐시(full_tgt.ccache) 또는 복구된 NTLM 비밀번호 해시입니다.

  1. 대상 가장하기 및 도메인 관리자 권한 상승: 이제 공격자는 효과적으로 대상 AD 계정을 제어합니다. 예를 들어, 대상이 AD Connect MSOL 계정인 경우, 디렉터리에 대한 복제 권한이 있습니다. 공격자는 해당 계정의 자격 증명 또는 Kerberos TGT를 사용하여 AD에서 비밀번호 해시를 덤프하기 위해 DCSync 공격을 수행할 수 있습니다(도메인 KRBTGT 계정 포함). 예를 들어:
bash
# Using impacket's secretsdump to DCSync as the MSOL account (using NTLM hash)
secretsdump.py 'AD_DOMAIN/<TargetSAM>$@<DC_IP>' -hashes :<NTLM_hash> LOCAL

이것은 모든 AD 사용자 비밀번호 해시를 덤프하여 공격자에게 KRBTGT 해시를 제공하며(이를 통해 도메인 Kerberos 티켓을 마음대로 위조할 수 있음) 사실상 Domain Admin 권한을 AD에 부여합니다. 대상 계정이 다른 특권 사용자라면, 공격자는 전체 TGT를 사용하여 해당 사용자로서 모든 도메인 리소스에 접근할 수 있습니다.

  1. 정리: 선택적으로, 공격자는 동일한 API를 통해 수정된 Azure AD 사용자의 원래 onPremisesSAMAccountName 및 SID를 복원하거나 생성된 임시 사용자를 삭제할 수 있습니다. 많은 경우, 다음 Azure AD Connect 동기화 주기가 동기화된 속성의 무단 변경을 자동으로 되돌립니다. (그러나 이 시점에서 피해는 이미 발생했습니다 -- 공격자는 DA 권한을 가지고 있습니다.)

warning

클라우드 신뢰 및 동기화 메커니즘을 악용함으로써, Azure AD의 Global Admin은 RODC 정책에 의해 명시적으로 보호되지 않는 거의 모든 AD 계정을 가장할 수 있으며, 해당 계정이 클라우드와 동기화된 적이 없더라도 가능합니다. 기본 구성에서는, 이것이 Azure AD 손상에서 온프레미스 AD 손상으로의 완전한 신뢰를 연결합니다.

References

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기