mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-02-05 03:16:37 -08:00
Translated ['src/pentesting-cloud/azure-security/az-privilege-escalation
This commit is contained in:
@@ -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 <account-name> --resource-group <res-group> --name <runbook-name>
|
||||
az automation runbook start \
|
||||
--automation-account-name <account-name> \
|
||||
--resource-group <res-group> \
|
||||
--name <runbook-name> \
|
||||
[--run-on <name-hybrid-group>]
|
||||
```
|
||||
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/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automantion-account-name>/webhooks/<webhook-name>?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<rest-of-the-token>
|
||||
```
|
||||
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/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/variables/<variable-name>?api-version=2019-06-01" \
|
||||
--headers "Content-Type=application/json" \
|
||||
--body '{
|
||||
"name": "<variable-name>",
|
||||
"properties": {
|
||||
"description": "",
|
||||
"value": "\"<variable-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
|
||||
```
|
||||
|
||||
@@ -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 <AUTOMATION-ACCOU
|
||||
|
||||
# Get State Configuration content
|
||||
az automation dsc configuration show-content --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME> --name <DSC-CONFIG-NAME>
|
||||
|
||||
# Get hybrid worker groups for an automation account
|
||||
az automation hrwg list --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME>
|
||||
|
||||
# Get hybrid worker group details
|
||||
az automation hrwg show --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME> --name <HYBRID-WORKER-GROUP>
|
||||
|
||||
# Get more details about a hybrid worker group (like VMs inside it)
|
||||
az rest --method GET --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/hybridRunbookWorkerGroups/<hybrid-worker-group-name>/hybridRunbookWorkers?&api-version=2021-06-22"
|
||||
```
|
||||
|
||||
```powershell
|
||||
|
||||
Reference in New Issue
Block a user