From 2d49bdf9fddcab962b61787075d74f5704a2c4da Mon Sep 17 00:00:00 2001 From: Translator Date: Fri, 10 Jan 2025 13:19:11 +0000 Subject: [PATCH] Translated ['src/pentesting-cloud/azure-security/az-privilege-escalation --- .../az-automation-accounts-privesc.md | 52 +++++++++++++++---- .../az-services/az-automation-accounts.md | 36 +++++++++---- 2 files changed, 67 insertions(+), 21 deletions(-) diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-automation-accounts-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-automation-accounts-privesc.md index 12e56d5b3..9603ccd72 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-automation-accounts-privesc.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-automation-accounts-privesc.md @@ -10,9 +10,18 @@ Para mais informações, consulte: ../az-services/az-automation-accounts.md {{#endref}} +### Hybrid Workers + +Lembre-se de que, se de alguma forma um atacante conseguir executar um runbook arbitrário (código arbitrário) em um worker híbrido, ele irá **pivotar para a localização da VM**. Isso pode ser uma máquina local, uma VPC de uma nuvem diferente ou até mesmo uma VM do Azure. + +Além disso, se o worker híbrido estiver sendo executado no Azure com outras Identidades Gerenciadas anexadas, o runbook poderá acessar a **identidade gerenciada do runbook e todas as identidades gerenciadas da VM a partir do serviço de metadados**. + +> [!TIP] +> Lembre-se de que o **serviço de metadados** tem uma URL diferente (**`http://169.254.169.254`**) do serviço de onde se obtém o token de identidades gerenciadas da conta de automação (**`IDENTITY_ENDPOINT`**). + ### `Microsoft.Automation/automationAccounts/jobs/write`, `Microsoft.Automation/automationAccounts/runbooks/draft/write`, `Microsoft.Automation/automationAccounts/jobs/output/read`, `Microsoft.Automation/automationAccounts/runbooks/publish/action` (`Microsoft.Resources/subscriptions/resourcegroups/read`, `Microsoft.Automation/automationAccounts/runbooks/write`) -Em resumo, essas permissões permitem **criar, modificar e executar Runbooks** na Conta de Automação, que você pode usar para **executar código** no contexto da Conta de Automação e escalar privilégios para as **Identidades Gerenciadas** atribuídas e vazar **credenciais** e **variáveis** criptografadas armazenadas na Conta de Automação. +Em resumo, essas permissões permitem **criar, modificar e executar Runbooks** na Conta de Automação, que você poderia usar para **executar código** no contexto da Conta de Automação e escalar privilégios para as **Identidades Gerenciadas** atribuídas e vazar **credenciais** e **variáveis criptografadas** armazenadas na Conta de Automação. A permissão **`Microsoft.Automation/automationAccounts/runbooks/draft/write`** permite modificar o código de um Runbook na Conta de Automação usando: ```bash @@ -38,7 +47,11 @@ az automation runbook publish \ ``` A permissão **`Microsoft.Automation/automationAccounts/jobs/write`** permite que o usuário execute um Runbook na Conta de Automação usando: ```bash -az automation runbook start --automation-account-name --resource-group --name +az automation runbook start \ +--automation-account-name \ +--resource-group \ +--name \ +[--run-on ] ``` A permissão **`Microsoft.Automation/automationAccounts/jobs/output/read`** permite que o usuário leia a saída de um trabalho na Conta de Automação usando: ```bash @@ -110,13 +123,13 @@ az rest --method PUT \ }' ``` > [!TIP] -> No exemplo anterior, o id do jobchedule foi deixado como **`b510808a-8fdc-4509-a115-12cfc3a2ad0d` como exemplo** mas você precisará usar um valor arbitrário para criar esta atribuição. +> No exemplo anterior, o id do jobchedule foi deixado como **`b510808a-8fdc-4509-a115-12cfc3a2ad0d` como exemplo** mas você precisará usar um valor arbitrário para criar essa atribuição. ### `Microsoft.Automation/automationAccounts/webhooks/write` Com a permissão **`Microsoft.Automation/automationAccounts/webhooks/write`** é possível criar um novo Webhook para um Runbook dentro de uma Conta de Automação usando o seguinte comando. -Observe que você precisará **indicar a URI do webhook** com o token a ser utilizado. +Observe que você precisará **indicar a URI do webhook** com o token a ser usado. ```bash az rest --method PUT \ --url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Automation/automationAccounts//webhooks/?api-version=2018-06-30" \ @@ -150,6 +163,7 @@ az automation runbook replace-content --no-wait \ --content 'echo "Hello World"' # Run the unpublished code +## Indicate the name of the hybrid worker group in runOn to execute the runbook there az rest \ --method PUT \ --url "https://management.azure.com/subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.Automation/automationAccounts/autoaccount1/runbooks/AzureAutomationTutorialWithIdentity/draft/testJob?api-version=2023-05-15-preview" \ @@ -180,16 +194,32 @@ az automation source-control create \ --token-type PersonalAccessToken \ --access-token github_pat_11AEDCVZ ``` -Isso importará automaticamente os runbooks do repositório do Github para a Automation Account e, com algumas outras permissões para começar a executá-los, seria **possível escalar privilégios**. +Isso importará automaticamente os runbooks do repositório do Github para a Conta de Automação e, com algumas outras permissões para começar a executá-los, seria **possível escalar privilégios**. -Além disso, lembre-se de que, para o controle de versão funcionar nas Automation Accounts, deve ter uma identidade gerenciada com o papel **`Contributor`** e, se for uma identidade gerenciada pelo usuário, isso também pode ser configurado definindo na variável **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`** o **client id** da identidade gerenciada pelo usuário a ser utilizada. +Além disso, lembre-se de que, para o controle de versão funcionar nas Contas de Automação, deve haver uma identidade gerenciada com o papel **`Contributor`** e, se for uma identidade gerenciada pelo usuário, o ID do cliente da MI deve ser especificado na variável **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**. > [!TIP] -> Note que não é possível alterar a URL do repositório de um controle de versão uma vez que ele é criado. +> Observe que não é possível alterar a URL do repositório de um controle de versão uma vez que ele é criado. +### `Microsoft.Automation/automationAccounts/variables/write` + +Com a permissão **`Microsoft.Automation/automationAccounts/variables/write`**, é possível escrever variáveis na Conta de Automação usando o seguinte comando. +```bash +az rest --method PUT \ +--url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Automation/automationAccounts//variables/?api-version=2019-06-01" \ +--headers "Content-Type=application/json" \ +--body '{ +"name": "", +"properties": { +"description": "", +"value": "\"\"", +"isEncrypted": false +} +}' +``` ### Ambientes de Execução Personalizados -Se uma conta de automação estiver usando um ambiente de execução personalizado, pode ser possível sobrescrever um pacote personalizado do runtime com algum código malicioso (como **um backdoor**). Dessa forma, sempre que um runbook usando aquele runtime personalizado for executado e carregar o pacote personalizado, o código malicioso será executado. +Se uma conta de automação estiver usando um ambiente de execução personalizado, pode ser possível sobrescrever um pacote personalizado do ambiente com algum código malicioso (como **um backdoor**). Dessa forma, sempre que um runbook que usa esse ambiente personalizado for executado e carregar o pacote personalizado, o código malicioso será executado. ### Comprometendo a Configuração de Estado @@ -198,14 +228,14 @@ Se uma conta de automação estiver usando um ambiente de execução personaliza - Passo 1 — Criar Arquivos **Arquivos Necessários:** Dois scripts PowerShell são necessários: -1. `reverse_shell_config.ps1`: Um arquivo de Desired State Configuration (DSC) que busca e executa o payload. Ele pode ser obtido em [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/reverse_shell_config.ps1). +1. `reverse_shell_config.ps1`: Um arquivo de Configuração de Estado Desejado (DSC) que busca e executa a carga útil. Ele pode ser obtido em [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/reverse_shell_config.ps1). 2. `push_reverse_shell_config.ps1`: Um script para publicar a configuração na VM, disponível em [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/push_reverse_shell_config.ps1). -**Personalização:** Variáveis e parâmetros nesses arquivos devem ser adaptados ao ambiente específico do usuário, incluindo nomes de recursos, caminhos de arquivos e identificadores de servidor/payload. +**Personalização:** Variáveis e parâmetros nesses arquivos devem ser adaptados ao ambiente específico do usuário, incluindo nomes de recursos, caminhos de arquivos e identificadores de servidor/carga útil. - Passo 2 — Compactar o Arquivo de Configuração -O `reverse_shell_config.ps1` é compactado em um arquivo `.zip`, tornando-o pronto para transferência para a Azure Storage Account. +O `reverse_shell_config.ps1` é compactado em um arquivo `.zip`, tornando-o pronto para transferência para a Conta de Armazenamento do Azure. ```powershell Compress-Archive -Path .\reverse_shell_config.ps1 -DestinationPath .\reverse_shell_config.ps1.zip ``` diff --git a/src/pentesting-cloud/azure-security/az-services/az-automation-accounts.md b/src/pentesting-cloud/azure-security/az-services/az-automation-accounts.md index c83db83c9..6d203b4aa 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-automation-accounts.md +++ b/src/pentesting-cloud/azure-security/az-services/az-automation-accounts.md @@ -16,7 +16,7 @@ As Contas de Automação do Azure são serviços baseados em nuvem na Microsoft ## Runbooks & Trabalhos -Um Runbook na Automação do Azure é um **script que executa tarefas automaticamente** dentro do seu ambiente de nuvem. Os runbooks podem ser escritos em PowerShell, Python ou editores gráficos. Eles ajudam a automatizar tarefas administrativas como gerenciamento de VM, aplicação de patches ou verificações de conformidade. +Um Runbook na Automação do Azure é um **script que executa tarefas automaticamente** dentro do seu ambiente de nuvem. Os runbooks podem ser escritos em PowerShell, Python ou editores gráficos. Eles ajudam a automatizar tarefas administrativas, como gerenciamento de VMs, aplicação de patches ou verificações de conformidade. No **código** localizado dentro dos **Runbooks** pode conter **informações sensíveis** (como credenciais). @@ -40,13 +40,13 @@ Existem 3 maneiras principais de executar um Runbook: ### Controle de Versão -Permite importar Runbooks do **Github, Azure Devops (Git) e Azure Devops (TFVC)**. É possível indicar que publique os Runbooks do repositório na conta de automação do Azure e também é possível indicar para **sincronizar as alterações do repositório** para a conta de automação do Azure. +Permite importar Runbooks do **Github, Azure Devops (Git) e Azure Devops (TFVC)**. É possível indicar que deseja publicar os Runbooks do repositório na conta de automação do Azure e também é possível indicar para **sincronizar as alterações do repositório** com a conta de automação do Azure. Quando a sincronização está habilitada, um **webhook é criado no repositório do Github** para disparar a sincronização sempre que um evento de push ocorre. Exemplo de uma URL de webhook: `https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=DRjQyFiOrUtz%2fw7o23XbDpOlTe1%2bUqPQm4pQH2WBfJg%3d` Observe que esses webhooks **não serão visíveis** ao listar webhooks nos runbooks associados ao repositório do Github. Também observe que **não é possível alterar a URL do repositório** de um controle de versão uma vez que ele é criado. -Para que o controle de versão configurado funcione, a **Conta de Automação do Azure** precisa ter uma identidade gerenciada (sistema ou usuário) com o papel de **`Contribuidor`**. Além disso, para atribuir uma identidade gerenciada de usuário à Conta de Automação, é possível fazer isso apenas definindo a variável **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`** para o **ID do Cliente da Identidade Gerenciada do Usuário**. +Para que o controle de versão configurado funcione, a **Conta de Automação do Azure** precisa ter uma identidade gerenciada (sistema ou usuário) com o papel de **`Contribuidor`**. Além disso, para atribuir uma identidade gerenciada de usuário à Conta de Automação, é necessário indicar o ID do cliente da MI do usuário na variável **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**. ### Ambientes de Execução @@ -61,21 +61,28 @@ Ao criar um Runbook, é possível selecionar o ambiente de execução. Por padr No entanto, também é possível **criar seus próprios ambientes**, usando um desses como base. No caso do Python, é possível fazer upload de pacotes `.whl` para o ambiente que será utilizado. No caso do PowerShell, é possível fazer upload de pacotes `.zip` com os módulos a serem utilizados na execução. -### Trabalhador Híbrido +### Grupos de Trabalhadores Híbridos -Um Runbook pode ser executado em um **container dentro do Azure** ou em um **Trabalhador Híbrido** (máquina não-Azure).\ -O **Agente de Log Analytics** é implantado na VM para registrá-la como um trabalhador híbrido.\ -Os trabalhos do trabalhador híbrido são executados como **SYSTEM** no Windows e como **nxautomation** na Linux.\ -Cada Trabalhador Híbrido é registrado em um **Grupo de Trabalhadores Híbridos**. +Na Automação do Azure, o ambiente de execução padrão para runbooks é o **Azure Sandbox**, uma plataforma baseada em nuvem gerenciada pelo Azure, adequada para tarefas envolvendo recursos do Azure. No entanto, esse sandbox tem limitações, como acesso restrito a recursos locais e restrições de tempo de execução e uso de recursos. Para superar essas limitações, são empregados Grupos de Trabalhadores Híbridos. Um Grupo de Trabalhadores Híbridos consiste em **um ou mais Trabalhadores de Runbook Híbridos instalados em suas próprias máquinas**, seja em locais, em outros ambientes de nuvem ou VMs do Azure. Essa configuração permite que os runbooks sejam executados diretamente nessas máquinas, proporcionando acesso direto a recursos locais, a capacidade de executar tarefas mais longas e mais intensivas em recursos, e a flexibilidade de interagir com ambientes além do alcance imediato do Azure. -Portanto, se você puder escolher executar um **Runbook** em um **Trabalhador Híbrido Windows**, você executará **comandos arbitrários** dentro de uma máquina externa como **System** (boa técnica de pivotagem). +Quando um grupo de trabalhadores híbridos é criado, é necessário indicar as **credenciais** a serem usadas. Existem 2 opções: + +- **Credenciais padrão**: Você não precisa fornecer as credenciais e os runbooks serão executados dentro das VMs como **Sistema**. +- **Credenciais específicas**: Você precisa fornecer o nome do objeto de credenciais dentro da conta de automação, que será usado para executar os **runbooks dentro das VMs**. Portanto, nesse caso, pode ser possível **roubar credenciais válidas** para as VMs. + +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 **Sistema** (boa técnica de pivotagem). + +Além disso, se o trabalhador híbrido estiver sendo executado no Azure com outras Identidades Gerenciadas anexadas, o runbook poderá acessar a **identidade gerenciada do runbook e todas as identidades gerenciadas da VM a partir do serviço de metadados**. + +> [!TIP] +> Lembre-se de que o **serviço de metadados** tem uma URL diferente (**`http://169.254.169.254`**) do serviço de onde se obtém o token de identidade gerenciada da conta de automação (**`IDENTITY_ENDPOINT`**). ### Configuração de Estado (SC) >[!WARNING] > Como indicado na [documentação](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview), a Configuração de Estado do Azure Automation será descontinuada em 30 de setembro de 2027 e substituída pela [Configuração de Máquina do Azure](https://learn.microsoft.com/en-us/azure/governance/machine-configuration/overview). -As Contas de Automação também suportam **Configuração de Estado (SC)**, que é um recurso que ajuda a **configurar** e **manter** o **estado** das suas VMs. É possível **criar** e **aplicar** configurações DSC em máquinas **Windows** e **Linux**. +As Contas de Automação também suportam **Configuração de Estado (SC)**, que é um recurso que ajuda a **configurar** e **manter** o **estado** de suas VMs. É possível **criar** e **aplicar** configurações DSC em máquinas **Windows** e **Linux**. Do ponto de vista de um atacante, isso era interessante porque permitia **executar código PS arbitrário em todas as VMs configuradas**, permitindo escalar privilégios para as identidades gerenciadas dessas VMs, potencialmente pivotando para novas redes... Além disso, as configurações poderiam conter **informações sensíveis**. @@ -180,6 +187,15 @@ az automation dsc configuration show --automation-account-name --resource-group --name + +# Get hybrid worker groups for an automation account +az automation hrwg list --automation-account-name --resource-group + +# Get hybrid worker group details +az automation hrwg show --automation-account-name --resource-group --name + +# Get more details about a hybrid worker group (like VMs inside it) +az rest --method GET --url "https://management.azure.com/subscriptions//resourceGroups/>/providers/Microsoft.Automation/automationAccounts//hybridRunbookWorkerGroups//hybridRunbookWorkers?&api-version=2021-06-22" ``` ```powershell