mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-14 05:46:25 -08:00
Translated ['src/pentesting-cloud/azure-security/az-persistence/az-cloud
This commit is contained in:
@@ -398,8 +398,8 @@
|
||||
- [Az - Enumeration Tools](pentesting-cloud/azure-security/az-enumeration-tools.md)
|
||||
- [Az - Unauthenticated Enum & Initial Entry](pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/README.md)
|
||||
- [Az - OAuth Apps Phishing](pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/az-oauth-apps-phishing.md)
|
||||
- [Az - Storage Unath](pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/az-storage-unauth.md)
|
||||
- [Az - VMs Unath](pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/az-vms-unauth.md)
|
||||
- [Az - Storage Unauth](pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/az-storage-unauth.md)
|
||||
- [Az - VMs Unauth](pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/az-vms-unauth.md)
|
||||
- [Az - Device Code Authentication Phishing](pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/az-device-code-authentication-phishing.md)
|
||||
- [Az - Password Spraying](pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/az-password-spraying.md)
|
||||
- [Az - Services](pentesting-cloud/azure-security/az-services/README.md)
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
### ("Microsoft.Resources/subscriptions/resourcegroups/read", "Microsoft.Logic/workflows/read", "Microsoft.Logic/workflows/write" && "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action") && ("Microsoft.Logic/workflows/triggers/run/action")
|
||||
|
||||
З цією дозволом ви можете створювати або оновлювати робочі процеси Azure Logic Apps. Робочі процеси визначають автоматизовані процеси та інтеграції між різними системами та сервісами.
|
||||
З цим дозволом ви можете створювати або оновлювати робочі процеси Azure Logic Apps. Робочі процеси визначають автоматизовані процеси та інтеграції між різними системами та сервісами.
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
||||
@@ -13,7 +13,7 @@ Azure App Services дозволяє розробникам **створюват
|
||||
- Ізольовані тарифи працюють на **присвячених ВМ у присвячених віртуальних мережах**, що покращує ізоляцію додатків.
|
||||
|
||||
> [!WARNING]
|
||||
> Зверніть увагу, що **жодна** з цих ізоляцій **не запобігає** іншим загальним **веб-вразливостям** (таким як завантаження файлів або ін'єкції). І якщо використовується **ідентифікатор управління**, він може мати можливість **підвищити привілеї до них**.
|
||||
> Зверніть увагу, що **жодна** з цих ізоляцій **не запобігає** іншим загальним **веб-вразливостям** (таким як завантаження файлів або ін'єкції). І якщо використовується **ідентифікатор управління**, він може **підвищити привілеї до них**.
|
||||
|
||||
Додатки мають деякі цікаві конфігурації:
|
||||
|
||||
@@ -21,14 +21,80 @@ Azure App Services дозволяє розробникам **створюват
|
||||
- Це необхідно, якщо у вас є вебробота, яка повинна працювати безперервно, оскільки вебробота зупиниться, якщо додаток зупиниться.
|
||||
- **SSH**: Якщо ввімкнено, користувач з достатніми правами може підключитися до додатка за допомогою SSH.
|
||||
- **Debugging**: Якщо ввімкнено, користувач з достатніми правами може налагоджувати додаток. Однак це автоматично вимикається кожні 48 годин.
|
||||
- **Web App + Database**: Веб-консоль дозволяє створити додаток з базою даних. У цьому випадку можна вибрати базу даних для використання (SQLAzure, PostgreSQL, MySQL, MongoDB), а також створити Azure Cache для Redis.
|
||||
- **Веб-додаток + База даних**: Веб-консоль дозволяє створити додаток з базою даних. У цьому випадку можна вибрати базу даних для використання (SQLAzure, PostgreSQL, MySQL, MongoDB), а також створити Azure Cache для Redis.
|
||||
- URL, що містить облікові дані для бази даних та Redis, буде зберігатися в **appsettings**.
|
||||
- **Container**: Можна розгорнути контейнер в App Service, вказавши URL контейнера та облікові дані для доступу до нього.
|
||||
- **Mounts**: Можна створити 5 монтувань з облікових записів зберігання, які є Azure Blob (тільки для читання) або Azure Files. Конфігурація зберігатиме ключ доступу над обліковим записом зберігання.
|
||||
- **Контейнер**: Можна розгорнути контейнер в App Service, вказавши URL контейнера та облікові дані для доступу до нього.
|
||||
- **Монтажі**: Можна створити 5 монтажів з облікових записів зберігання, які є Azure Blob (тільки для читання) або Azure Files. Конфігурація зберігатиме ключ доступу в обліковому записі зберігання.
|
||||
|
||||
## Basic Authentication
|
||||
|
||||
При створенні веб-додатку (а також Azure функції зазвичай) можна вказати, чи хочете ви, щоб **базова аутентифікація була ввімкнена** (за замовчуванням вим
|
||||
При створенні веб-додатка (а також Azure функції зазвичай) можна вказати, чи хочете ви, щоб **базова аутентифікація була ввімкнена** (за замовчуванням вимкнена). Це в основному **включає SCM (менеджер контролю версій) та FTP (протокол передачі файлів)** для програми, тому буде можливим розгортати програму, використовуючи ці технології.
|
||||
|
||||
Для доступу до серверів SCM та FTP потрібні **ім'я користувача та пароль**. Тому Azure надає деякі **API для отримання URL** до цих платформ та облікових даних.
|
||||
|
||||
**FTP сервер не має жодної особливої магії**, просто з дійсним URL, ім'ям користувача та паролем можна підключитися та отримати права на читання та запис у середовищі програми.
|
||||
|
||||
SCM
|
||||
Можна підключитися до SCM, використовуючи веб-браузер за адресою `https://<SMC-URL>/BasicAuth` та перевірити всі файли та розгортання там.
|
||||
|
||||
### Kudu
|
||||
|
||||
Kudu - це платформа, яка **керує як SCM, так і веб-інтерфейсом API** для управління App Service, і надає можливості розгортання на основі Git, віддаленого налагодження та управління файлами. Доступ до неї здійснюється через URL SCM, визначений у веб-додатку.
|
||||
|
||||
Зверніть увагу, що версії Kudu, які використовуються App Services та Function Apps, різні, причому версія Function Apps значно обмежена.
|
||||
|
||||
Деякі цікаві кінцеві точки, які ви можете знайти в Kudu, це:
|
||||
- `/BasicAuth`: Вам потрібно отримати доступ до цього шляху, щоб **увійти в Kudu**.
|
||||
- `/DebugConsole`: Консоль, яка дозволяє виконувати команди в середовищі, де працює Kudu.
|
||||
- Зверніть увагу, що це середовище **не має доступу** до служби метаданих для отримання токенів.
|
||||
- `/webssh/host`: Веб-клієнт SSH, який дозволяє підключитися всередину контейнера, де працює додаток.
|
||||
- Це середовище **має доступ до служби метаданих** для отримання токенів від призначених керованих ідентичностей.
|
||||
- `/Env`: Отримати інформацію про систему, налаштування програми, змінні середовища, рядки підключення та HTTP заголовки.
|
||||
- `/wwwroot/`: Коренева директорія веб-додатка. Ви можете завантажити всі файли звідси.
|
||||
|
||||
Більше того, Kudu раніше був з відкритим кодом на [https://github.com/projectkudu/kudu](https://github.com/projectkudu/kudu), але проект був застарілий, і порівнюючи поведінку поточного Kudu в Azure зі старим, можна побачити, що **декілька речей вже змінилися**.
|
||||
|
||||
## Sources
|
||||
|
||||
App Services дозволяють завантажувати код у вигляді zip-файлу за замовчуванням, але також дозволяють підключатися до стороннього сервісу та отримувати код звідти.
|
||||
|
||||
- В даний час підтримувані сторонні джерела - це **Github** та **Bitbucket**.
|
||||
- Ви можете отримати токени аутентифікації, запустивши `az rest --url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"`
|
||||
- Azure за замовчуванням налаштує **Github Action** для розгортання коду в App Service щоразу, коли код оновлюється.
|
||||
- Також можливо вказати **віддалений git-репозиторій** (з ім'ям користувача та паролем), щоб отримати код звідти.
|
||||
- Ви можете отримати облікові дані для віддаленого репозиторію, запустивши `az webapp deployment source show --name <app-name> --resource-group <res-group>` або `az rest --method POST --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/config/metadata/list?api-version=2022-03-01" --resource "https://management.azure.com"`
|
||||
- Також можливо використовувати **Azure Repository**.
|
||||
- Також можливо налаштувати **локальний git-репозиторій**.
|
||||
- Ви можете отримати URL git-репозиторію за допомогою `az webapp deployment source show --name <app-name> --resource-group <res-group>`, і це буде SCM URL додатка.
|
||||
- Щоб клонувати його, вам знадобляться облікові дані SCM, які ви можете отримати за допомогою `az webapp deployment list-publishing-profiles --resource-group <res-group> -n <name>`
|
||||
|
||||
## Webjobs
|
||||
|
||||
Azure WebJobs - це **фонові завдання, які працюють у середовищі Azure App Service**. Вони дозволяють розробникам виконувати скрипти або програми разом з їх веб-додатками, що полегшує обробку асинхронних або трудомістких операцій, таких як обробка файлів, обробка даних або заплановані завдання.
|
||||
Існує 2 типи вебробіт:
|
||||
- **Безперервні**: Працюють безперервно в циклі і запускаються, щойно створені. Вони ідеальні для завдань, які потребують постійної обробки. Однак, якщо додаток перестане працювати, оскільки Always On вимкнено і не отримав запит за останні 20 хвилин, вебробота також зупиниться.
|
||||
- **Запущені**: Працюють за запитом або за розкладом. Вони найкраще підходять для періодичних завдань, таких як пакетні оновлення даних або рутинні обслуговування.
|
||||
|
||||
Веброботи дуже цікаві з точки зору атакуючого, оскільки їх можна використовувати для **виконання коду** в середовищі та **підвищення привілеїв** до прикріплених керованих ідентичностей.
|
||||
|
||||
Більше того, завжди цікаво перевіряти **журнали**, згенеровані веброботами, оскільки вони можуть містити **чутливу інформацію**.
|
||||
|
||||
## Slots
|
||||
|
||||
Слоти Azure App Service використовуються для **розгортання різних версій програми** в одному й тому ж App Service. Це дозволяє розробникам тестувати нові функції або зміни в окремому середовищі перед їх розгортанням у виробничому середовищі.
|
||||
|
||||
Більше того, можливо направити **відсоток трафіку** на конкретний слот, що корисно для A/B тестування та для **задніх дверей**.
|
||||
|
||||
## Azure Function Apps
|
||||
|
||||
В основному **Azure Function apps є підмножиною Azure App Service** у веб-консолі, і якщо ви перейдете до веб-консолі та перелікуєте всі служби додатків або виконаєте `az webapp list` в az cli, ви зможете **побачити, що функціональні програми також перераховані там**.
|
||||
|
||||
Отже, обидві служби насправді мають в основному **однакові конфігурації, функції та опції в az cli**, хоча вони можуть налаштовувати їх трохи по-різному (наприклад, значення за замовчуванням appsettings або використання облікового запису зберігання в функціональних програмах).
|
||||
|
||||
## Enumeration
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="az" }}
|
||||
```bash
|
||||
# List webapps
|
||||
az webapp list
|
||||
@@ -235,7 +301,7 @@ az webapp up --runtime PYTHON:3.9 --sku B1 --logs
|
||||
Як і в попередньому випадку, увійшовши в SCM портал або через FTP, можна побачити в `/wwwroot` стиснутий файл `output.tar.gz`, який містить код веб-додатку.
|
||||
|
||||
> [!TIP]
|
||||
> Просто підключення через FTP та зміна файлу `output.tar.gz` і повторне триггерування розгортання недостатньо для зміни коду, що виконується веб-додатком.
|
||||
> Просто підключення через FTP та зміна файлу `output.tar.gz` і повторне ініціювання розгортання недостатньо для зміни коду, що виконується веб-додатком.
|
||||
|
||||
## Підвищення привілеїв
|
||||
|
||||
|
||||
@@ -26,8 +26,8 @@
|
||||
**Середовище**: Azure Cloud Shell забезпечує безпечне середовище, працюючи на Azure Linux, власному дистрибутиві Linux Microsoft, призначеному для хмарної інфраструктури. Усі пакунки, включені до репозиторію Azure Linux, внутрішньо компілюються Microsoft для захисту від атак на ланцюг постачання.
|
||||
**Попередньо встановлені інструменти**: Cloud Shell включає в себе комплексний набір попередньо встановлених інструментів, таких як Azure CLI, Azure PowerShell, Terraform, Docker CLI, Ansible, Git та текстові редактори, такі як vim, nano та emacs. Ці інструменти готові до використання. Щоб перерахувати встановлені пакунки та модулі, ви можете використовувати "Get-Module -ListAvailable", "tdnf list" та "pip3 list".
|
||||
**$HOME збереження**: При першому запуску Azure Cloud Shell ви можете використовувати його з або без підключеного облікового запису зберігання. Вибір без підключення зберігання створює епізодичну сесію, де файли видаляються, коли сесія закінчується. Щоб зберегти файли між сесіями, змонтуйте обліковий запис зберігання, який автоматично підключається як **$HOME\clouddrive**, з вашим **$HOME** каталогом, збереженим як файл **.img** в Azure File Share. Однак файли поза $HOME та стани машин не зберігаються. Для безпечного зберігання секретів, таких як SSH ключі, використовуйте Azure Key Vault.
|
||||
**Диск Azure (Azure:)**: PowerShell в Azure Cloud Shell включає диск Azure (Azure:), що дозволяє легко навігувати по ресурсах Azure, таким як Обчислення, Мережа та Сховище, використовуючи команди, схожі на файлову систему. Перейдіть на диск Azure за допомогою cd Azure: і поверніться до свого домашнього каталогу за допомогою cd ~. Ви все ще можете використовувати команди Azure PowerShell для управління ресурсами з будь-якого диска.
|
||||
**Встановлення користувацьких інструментів**: Користувачі, які налаштовують Cloud Shell з обліковим записом зберігання, можуть встановлювати додаткові інструменти, які не потребують прав адміністратора. Ця функція дозволяє додаткову настройку середовища Cloud Shell, даючи можливість користувачам налаштувати свою конфігурацію відповідно до своїх потреб.
|
||||
**Диск Azure (Azure:)**: PowerShell в Azure Cloud Shell включає диск Azure (Azure:), який дозволяє легко навігувати по ресурсах Azure, таким як Обчислення, Мережа та Зберігання, використовуючи команди, схожі на файлову систему. Перейдіть на диск Azure за допомогою cd Azure: і поверніться до свого домашнього каталогу за допомогою cd ~. Ви все ще можете використовувати команди Azure PowerShell для управління ресурсами з будь-якого диска.
|
||||
**Встановлення користувацьких інструментів**: Користувачі, які налаштовують Cloud Shell з обліковим записом зберігання, можуть встановлювати додаткові інструменти, які не потребують прав адміністратора. Ця функція дозволяє додаткову настройку середовища Cloud Shell, що дозволяє користувачам налаштувати свою конфігурацію відповідно до своїх конкретних потреб.
|
||||
|
||||
## Посилання
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/image (2) (1).p
|
||||
|
||||
## Azure CosmosDB
|
||||
|
||||
**Azure Cosmos DB** - це повністю **керована NoSQL, реляційна та векторна база даних**, яка забезпечує час відповіді в одиничних мілісекундах, автоматичну масштабованість та доступність з підтримкою SLA з безпекою корпоративного рівня. Вона дозволяє швидше розробляти додатки завдяки готовій багаторегіональній розподільній системі даних, відкритим API, SDK для популярних мов та функціям бази даних AI, таким як інтегрована підтримка векторів та безшовна інтеграція з Azure AI.
|
||||
**Azure Cosmos DB** - це повністю **керована NoSQL, реляційна та векторна база даних**, яка забезпечує час відповіді в одиничні мілісекунди, автоматичну масштабованість та доступність з підтримкою SLA з безпекою корпоративного рівня. Вона дозволяє швидше розробляти додатки завдяки готовій багаторегіональній розподільній системі даних, відкритим API, SDK для популярних мов та функціям бази даних AI, таким як інтегрована підтримка векторів та безшовна інтеграція з Azure AI.
|
||||
|
||||
Azure Cosmos DB надає кілька API бази даних для моделювання реальних даних, використовуючи документи, реляційні, ключ-значення, графові та колонові сімейні моделі даних, такими API є NoSQL, MongoDB, PostgreSQL, Cassandra, Gremlin та Table.
|
||||
|
||||
@@ -339,16 +339,16 @@ print(f"Inserted document with ID: {result.inserted_id}")
|
||||
[az-cosmosDB-privesc.md](../az-privilege-escalation/az-cosmosDB-privesc.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Після експлуатації
|
||||
## Постексплуатація
|
||||
|
||||
{% content-ref url="../az-post-exploitation/az-cosmosDB-post-exploitation.md" %}
|
||||
[az-cosmosDB-post-exploitation.md](../az-post-exploitation/az-sql-post-exploitation.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Завдання
|
||||
## ToDo
|
||||
|
||||
* Решта БД тут, таблиці, cassandra, gremlin...
|
||||
* Ознайомтеся з пост-експлуатацією "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read" та визначеннями ролей, оскільки тут може бути підвищення привілеїв
|
||||
* Ознайомтеся з постексплуатацією "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read" та визначеннями ролей, оскільки тут може бути підвищення привілеїв
|
||||
* Ознайомтеся з відновленнями
|
||||
|
||||
|
||||
@@ -359,10 +359,10 @@ print(f"Inserted document with ID: {result.inserted_id}")
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Підтримати HackTricks</summary>
|
||||
<summary>Підтримка HackTricks</summary>
|
||||
|
||||
* Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)!
|
||||
* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на github.
|
||||
|
||||
</details>
|
||||
|
||||
@@ -2,29 +2,29 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Основна інформація
|
||||
## Basic Information
|
||||
|
||||
**Azure Function Apps** - це **безсерверна обчислювальна служба**, яка дозволяє запускати невеликі фрагменти коду, звані **функціями**, без управління підлягаючою інфраструктурою. Вони призначені для виконання коду у відповідь на різні тригери, такі як **HTTP запити, таймери або події з інших служб Azure**, таких як Blob Storage або Event Hubs. Function Apps підтримують кілька мов програмування, включаючи C#, Python, JavaScript та Java, що робить їх універсальними для створення **додатків, орієнтованих на події**, автоматизації робочих процесів або інтеграції служб. Вони є економічно вигідними, оскільки зазвичай ви платите лише за час обчислень, коли ваш код виконується.
|
||||
|
||||
> [!NOTE]
|
||||
> Зверніть увагу, що **Functions є підмножиною App Services**, тому багато функцій, обговорюваних тут, також будуть використовуватися додатками, створеними як Azure Apps (`webapp` в cli).
|
||||
|
||||
### Різні плани
|
||||
### Different Plans
|
||||
|
||||
- **Flex Consumption Plan**: Пропонує **динамічне, орієнтоване на події масштабування** з оплатою за фактом використання, додаючи або видаляючи екземпляри функцій залежно від попиту. Підтримує **віртуальну мережу** та **попередньо підготовлені екземпляри**, щоб зменшити холодні старти, що робить його підходящим для **змінних навантажень**, які не потребують підтримки контейнерів.
|
||||
- **Traditional Consumption Plan**: За замовчуванням безсерверний варіант, де ви **платите лише за обчислювальні ресурси, коли функції виконуються**. Він автоматично масштабується на основі вхідних подій і включає **оптимізації холодного старту**, але не підтримує розгортання контейнерів. Ідеально підходить для **періодичних навантажень**, які потребують автоматичного масштабування.
|
||||
- **Premium Plan**: Призначений для **послідовної продуктивності**, з **попередньо прогрітими працівниками**, щоб усунути холодні старти. Пропонує **подовжені часи виконання, віртуальну мережу** та підтримує **кастомізовані образи Linux**, що робить його ідеальним для **додатків критичного призначення**, які потребують високої продуктивності та розширених функцій.
|
||||
- **Flex Consumption Plan**: Пропонує **динамічне, орієнтоване на події масштабування** з оплатою за фактом використання, додаючи або видаляючи екземпляри функцій залежно від попиту. Підтримує **віртуальне мережеве з'єднання** та **попередньо підготовлені екземпляри**, щоб зменшити холодні старти, що робить його підходящим для **змінних навантажень**, які не потребують підтримки контейнерів.
|
||||
- **Traditional Consumption Plan**: За замовчуванням безсерверний варіант, де ви **платите лише за обчислювальні ресурси, коли функції виконуються**. Автоматично масштабується на основі вхідних подій і включає **оптимізації холодного старту**, але не підтримує розгортання контейнерів. Ідеально підходить для **періодичних навантажень**, які потребують автоматичного масштабування.
|
||||
- **Premium Plan**: Призначений для **послідовної продуктивності**, з **попередньо прогрітими працівниками**, щоб усунути холодні старти. Пропонує **подовжені часи виконання, віртуальне мережеве з'єднання** та підтримує **кастомізовані образи Linux**, що робить його ідеальним для **додатків критичного призначення**, які потребують високої продуктивності та розширених функцій.
|
||||
- **Dedicated Plan**: Виконується на виділених віртуальних машинах з **передбачуваним білінгом** і підтримує ручне або автоматичне масштабування. Дозволяє запускати кілька додатків на одному плані, забезпечує **ізоляцію обчислень** і гарантує **безпечний доступ до мережі** через App Service Environments, що робить його ідеальним для **додатків з тривалим виконанням**, які потребують послідовного виділення ресурсів.
|
||||
- **Container Apps**: Дозволяє розгортати **контейнеризовані функціональні додатки** в керованому середовищі, поряд з мікросервісами та API. Підтримує кастомні бібліотеки, міграцію спадкових додатків та **обробку GPU**, усуваючи управління кластерами Kubernetes. Ідеально підходить для **додатків, орієнтованих на події, масштабованих контейнеризованих додатків**.
|
||||
|
||||
### **Сховища**
|
||||
### **Storage Buckets**
|
||||
|
||||
При створенні нового Function App, який не контейнеризований (але надає код для виконання), **код та інші дані, пов'язані з функцією, будуть зберігатися в обліковому записі зберігання**. За замовчуванням веб-консоль створить новий обліковий запис для кожної функції для зберігання коду.
|
||||
|
||||
Більше того, модифікуючи код всередині сховища (в різних форматах, в яких він може бути збережений), **код програми буде змінено на новий і виконано** наступного разу, коли функція буде викликана.
|
||||
Більше того, модифікуючи код всередині кошика (в різних форматах, в яких він може бути збережений), **код програми буде змінено на новий і виконано** наступного разу, коли функція буде викликана.
|
||||
|
||||
> [!CAUTION]
|
||||
> Це дуже цікаво з точки зору атакуючого, оскільки **доступ на запис до цього сховища** дозволить атакуючому **компрометувати код і підвищити привілеї** до керованих ідентичностей всередині Function App.
|
||||
> Це дуже цікаво з точки зору атакуючого, оскільки **доступ на запис до цього кошика** дозволить атакуючому **компрометувати код і підвищити привілеї** до керованих ідентичностей всередині Function App.
|
||||
>
|
||||
> Більше про це в **розділі підвищення привілеїв**.
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
Зверніть увагу, що Functions також дозволяють зберігати код у віддаленому місці, просто вказуючи URL на нього.
|
||||
|
||||
### Мережа
|
||||
### Networking
|
||||
|
||||
Використовуючи HTTP тригер:
|
||||
|
||||
@@ -42,26 +42,26 @@
|
||||
> [!CAUTION]
|
||||
> Це дуже цікаво з точки зору атакуючого, оскільки може бути можливим **перемикання на внутрішні мережі** з вразливої функції, відкритої для Інтернету.
|
||||
|
||||
### **Налаштування Function App та змінні середовища**
|
||||
### **Function App Settings & Environment Variables**
|
||||
|
||||
Можливо налаштувати змінні середовища всередині програми, які можуть містити чутливу інформацію. Більше того, за замовчуванням змінні середовища **`AzureWebJobsStorage`** та **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** (серед інших) створюються. Ці змінні особливо цікаві, оскільки **містять ключ облікового запису для контролю з ПОВНИМИ правами доступу до облікового запису зберігання, що містить дані програми**. Ці налаштування також потрібні для виконання коду з облікового запису зберігання.
|
||||
Можливо налаштувати змінні середовища всередині програми, які можуть містити чутливу інформацію. Більше того, за замовчуванням змінні середовища **`AzureWebJobsStorage`** та **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** (серед інших) створюються. Ці змінні особливо цікаві, оскільки вони **містять ключ облікового запису для контролю з ПОВНИМИ правами доступу до облікового запису зберігання, що містить дані програми**. Ці налаштування також потрібні для виконання коду з облікового запису зберігання.
|
||||
|
||||
Ці змінні середовища або параметри конфігурації також контролюють, як функція виконує код, наприклад, якщо **`WEBSITE_RUN_FROM_PACKAGE`** існує, це вказує на URL, де розташований код програми.
|
||||
|
||||
### **Пісочниця функцій**
|
||||
### **Function Sandbox**
|
||||
|
||||
Всередині пісочниці Linux вихідний код розташований у **`/home/site/wwwroot`** у файлі **`function_app.py`** (якщо використовується Python), користувач, що виконує код, - **`app`** (без прав sudo).
|
||||
Всередині linux пісочниці вихідний код розташований у **`/home/site/wwwroot`** у файлі **`function_app.py`** (якщо використовується python), користувач, що виконує код, - **`app`** (без прав sudo).
|
||||
|
||||
У **Windows** функції, що використовує NodeJS, код розташовувався у **`C:\home\site\wwwroot\HttpTrigger1\index.js`**, ім'я користувача було **`mawsFnPlaceholder8_f_v4_node_20_x86`** і він був частиною **груп**: `Mandatory Label\High Mandatory Level Label`, `Everyone`, `BUILTIN\Users`, `NT AUTHORITY\INTERACTIVE`, `CONSOLE LOGON`, `NT AUTHORITY\Authenticated Users`, `NT AUTHORITY\This Organization`, `BUILTIN\IIS_IUSRS`, `LOCAL`, `10-30-4-99\Dwas Site Users`.
|
||||
|
||||
### **Керовані ідентичності та метадані**
|
||||
### **Managed Identities & Metadata**
|
||||
|
||||
Так само, як і [**VMs**](vms/index.html), функції можуть мати **керовані ідентичності** двох типів: системно призначені та призначені користувачем.
|
||||
Так само, як і [**VMs**](vms/index.html), Functions можуть мати **Managed Identities** двох типів: системно призначені та призначені користувачем.
|
||||
|
||||
**Системно призначена** ідентичність буде керованою ідентичністю, яку **тільки функція**, якій вона призначена, зможе використовувати, тоді як **керовані ідентичності, призначені користувачем**, є керованими ідентичностями, які **будь-яка інша служба Azure зможе використовувати**.
|
||||
**Системно призначена** ідентичність буде керованою ідентичністю, яку **тільки функція**, якій вона призначена, зможе використовувати, тоді як **призначені користувачем** керовані ідентичності - це керовані ідентичності, які **будь-яка інша служба Azure зможе використовувати**.
|
||||
|
||||
> [!NOTE]
|
||||
> Так само, як і в [**VMs**](vms/index.html), функції можуть мати **1 системно призначену** керовану ідентичність і **кілька призначених користувачем**, тому завжди важливо намагатися знайти всі з них, якщо ви компрометуєте функцію, оскільки ви можете підвищити привілеї до кількох керованих ідентичностей з однієї функції.
|
||||
> Так само, як і в [**VMs**](vms/index.html), Functions можуть мати **1 системно призначену** керовану ідентичність і **кілька призначених користувачем**, тому завжди важливо намагатися знайти всі з них, якщо ви компрометуєте функцію, оскільки ви можете підвищити привілеї до кількох керованих ідентичностей з однієї функції.
|
||||
>
|
||||
> Якщо не використовується системно призначена ідентичність, але одна або кілька призначених користувачем ідентичностей прикріплені до функції, за замовчуванням ви не зможете отримати жоден токен.
|
||||
|
||||
@@ -71,12 +71,12 @@
|
||||
|
||||
Зверніть увагу, що вам потрібно знайти спосіб **перевірити всі керовані ідентичності, прикріплені до функції**, оскільки якщо ви цього не вкажете, кінцева точка метаданих **використовуватиме лише за замовчуванням** (перевірте попереднє посилання для отримання додаткової інформації).
|
||||
|
||||
## Ключі доступу
|
||||
## Access Keys
|
||||
|
||||
> [!NOTE]
|
||||
> Зверніть увагу, що немає дозволів RBAC для надання доступу користувачам для виклику функцій. **Виклик функції залежить від тригера**, вибраного під час її створення, і якщо був вибраний HTTP тригер, можливо, знадобиться використовувати **ключ доступу**.
|
||||
|
||||
При створенні кінцевої точки всередині функції за допомогою **HTTP тригера** можливо вказати **рівень авторизації ключа доступу**, необхідний для тригера функції. Доступні три варіанти:
|
||||
При створенні кінцевої точки всередині функції за допомогою **HTTP тригера** можливо вказати **рівень авторизації ключа доступу**, необхідний для виклику функції. Доступні три варіанти:
|
||||
|
||||
- **ANONYMOUS**: **Кожен** може отримати доступ до функції за URL.
|
||||
- **FUNCTION**: Кінцева точка доступна лише користувачам, які використовують **ключ функції, хоста або майстра**.
|
||||
@@ -84,27 +84,27 @@
|
||||
|
||||
**Типи ключів:**
|
||||
|
||||
- **Ключі функцій:** Ключі функцій можуть бути або за замовчуванням, або визначеними користувачем і призначені для надання доступу виключно до **конкретних кінцевих точок функцій** в рамках Function App, що дозволяє більш детальний доступ до кінцевих точок.
|
||||
- **Ключі хоста:** Ключі хоста, які також можуть бути за замовчуванням або визначеними користувачем, надають доступ до **всіх кінцевих точок функцій в рамках Function App з рівнем доступу FUNCTION**.
|
||||
- **Ключ майстра:** Ключ майстра (`_master`) слугує адміністративним ключем, який пропонує підвищені права доступу, включаючи доступ до всіх кінцевих точок функцій (включаючи рівень доступу ADMIN). Цей **ключ не може бути відкликаний.**
|
||||
- **Системні ключі:** Системні ключі **керуються конкретними розширеннями** і потрібні для доступу до кінцевих точок вебхуків, які використовуються внутрішніми компонентами. Прикладами є тригер Event Grid та Durable Functions, які використовують системні ключі для безпечної взаємодії з їхніми відповідними API.
|
||||
- **Function Keys:** Ключі функцій можуть бути або за замовчуванням, або визначеними користувачем і призначені для надання доступу виключно до **конкретних кінцевих точок функцій** в рамках Function App, що дозволяє більш детально контролювати доступ до кінцевих точок.
|
||||
- **Host Keys:** Ключі хоста, які також можуть бути за замовчуванням або визначеними користувачем, надають доступ до **всіх кінцевих точок функцій в рамках Function App з рівнем доступу FUNCTION**.
|
||||
- **Master Key:** Ключ майстра (`_master`) служить адміністративним ключем, який пропонує підвищені права, включаючи доступ до всіх кінцевих точок функцій (включаючи рівень доступу ADMIN). Цей **ключ не може бути відкликаний.**
|
||||
- **System Keys:** Системні ключі **керуються конкретними розширеннями** і потрібні для доступу до кінцевих точок вебхуків, які використовуються внутрішніми компонентами. Прикладами є тригер Event Grid та Durable Functions, які використовують системні ключі для безпечної взаємодії зі своїми відповідними API.
|
||||
|
||||
> [!TIP]
|
||||
> Приклад доступу до кінцевої точки API функції за допомогою ключа:
|
||||
>
|
||||
> `https://<function_uniq_name>.azurewebsites.net/api/<endpoint_name>?code=<access_key>`
|
||||
|
||||
### Основна аутентифікація
|
||||
### Basic Authentication
|
||||
|
||||
Так само, як і в App Services, функції також підтримують основну аутентифікацію для підключення до **SCM** та **FTP** для розгортання коду, використовуючи **ім'я користувача та пароль у URL**, наданому Azure. Більше інформації про це в:
|
||||
Так само, як і в App Services, Functions також підтримують базову аутентифікацію для підключення до **SCM** та **FTP** для розгортання коду, використовуючи **ім'я користувача та пароль у URL**, наданому Azure. Більше інформації про це в:
|
||||
|
||||
{{#ref}}
|
||||
az-app-services.md
|
||||
{{#endref}}
|
||||
|
||||
### Розгортання на основі Github
|
||||
### Github Based Deployments
|
||||
|
||||
Коли функція генерується з репозиторію Github, веб-консоль Azure дозволяє **автоматично створити робочий процес Github у конкретному репозиторії**, тому що щоразу, коли цей репозиторій оновлюється, код функції оновлюється. Насправді YAML дії Github для функції Python виглядає так:
|
||||
Коли функція генерується з репозиторію Github, веб-консоль Azure дозволяє **автоматично створити робочий процес Github у конкретному репозиторії**, тому що щоразу, коли цей репозиторій оновлюється, код функції оновлюється. Насправді YAML дії Github для функції на python виглядає так:
|
||||
|
||||
<details>
|
||||
|
||||
@@ -192,7 +192,7 @@ package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
|
||||
```
|
||||
</details>
|
||||
|
||||
Більше того, **Managed Identity** також створюється, щоб Github Action з репозиторію міг увійти в Azure з його допомогою. Це робиться шляхом генерації федеративних облікових даних через **Managed Identity**, що дозволяє **Issuer** `https://token.actions.githubusercontent.com` та **Subject Identifier** `repo:<org-name>/<repo-name>:ref:refs/heads/<branch-name>`.
|
||||
Більше того, **Managed Identity** також створюється, щоб Github Action з репозиторію міг увійти в Azure за його допомогою. Це робиться шляхом генерації федеративних облікових даних через **Managed Identity**, що дозволяє **Issuer** `https://token.actions.githubusercontent.com` та **Subject Identifier** `repo:<org-name>/<repo-name>:ref:refs/heads/<branch-name>`.
|
||||
|
||||
> [!CAUTION]
|
||||
> Отже, будь-хто, хто скомпрометує цей репозиторій, зможе скомпрометувати функцію та пов'язані з нею Managed Identities.
|
||||
|
||||
@@ -19,7 +19,7 @@ Logic Apps надає візуальний дизайнер для створе
|
||||
|
||||
<figure><img src="../../../images/image (197).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
або перевірити код у розділі "**Перегляд коду логічного додатку**".
|
||||
або перевірити код у розділі "**Перегляд коду Logic App**".
|
||||
|
||||
### Захист від SSRF
|
||||
|
||||
@@ -261,7 +261,7 @@ Get-AzIntegrationAccountSchema -ResourceGroupName <resource-group-name> -Integra
|
||||
|
||||
## Підвищення Привілеїв
|
||||
|
||||
Те ж саме, що і privesc логічних додатків:
|
||||
Так само, як і в логічних додатках privesc:
|
||||
|
||||
{% content-ref url="../az-privilege-escalation/az-logic-apps-privesc.md" %}
|
||||
[az-logic-apps-privesc.md](../az-privilege-escalation/az-logic-apps-privesc.md)
|
||||
@@ -274,8 +274,8 @@ Get-AzIntegrationAccountSchema -ResourceGroupName <resource-group-name> -Integra
|
||||
{% endcontent-ref %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Вивчайте та практикуйте AWS Hacking:<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">\
|
||||
Вивчайте та практикуйте GCP Hacking: <img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Вивчайте та практикуйте Hacking AWS:<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">\
|
||||
Вивчайте та практикуйте Hacking GCP: <img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ Azure Service Bus - це хмарна **служба обміну повідом
|
||||
- Кілька незалежних підписок отримують копії повідомлень.
|
||||
- Підписки можуть мати правила/фільтри для контролю доставки або додавання метаданих.
|
||||
- Підтримує комунікацію багато-до-багато.
|
||||
3. **Namespaces:** Контейнер для всіх компонентів обміну повідомленнями, черг і тем, подібний до вашої власної частини потужного Azure кластера, що забезпечує виділену ємність і, за бажанням, охоплює три зони доступності.
|
||||
3. **Namespaces:** Контейнер для всіх компонентів обміну повідомленнями, черг і тем, схожий на вашу власну частину потужного Azure кластера, що забезпечує виділену ємність і, за бажанням, охоплює три зони доступності.
|
||||
|
||||
### Advance Features
|
||||
|
||||
@@ -35,9 +35,9 @@ Azure Service Bus - це хмарна **служба обміну повідом
|
||||
|
||||
### Authorization-Rule / SAS Policy
|
||||
|
||||
SAS Policies визначають дозволи доступу для сутностей Azure Service Bus, простору імен (найважливіший), черг і тем. Кожна політика має такі компоненти:
|
||||
SAS Policies визначають дозволи доступу для сутностей Azure Service Bus, простору імен (найважливіше), черг і тем. Кожна політика має такі компоненти:
|
||||
|
||||
- **Permissions**: Прапорці для визначення рівнів доступу:
|
||||
- **Permissions**: Прапорці для вказівки рівнів доступу:
|
||||
- Manage: Надає повний контроль над сутністю, включаючи управління конфігурацією та дозволами.
|
||||
- Send: Дозволяє надсилати повідомлення до сутності.
|
||||
- Listen: Дозволяє отримувати повідомлення з сутності.
|
||||
@@ -47,7 +47,7 @@ SAS Policies визначають дозволи доступу для сутн
|
||||
|
||||
### NameSpace
|
||||
|
||||
sku, правило авторизації,
|
||||
sku, authrorization rule,
|
||||
|
||||
### Enumeration
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## Static Web Apps Basic Information
|
||||
|
||||
Azure Static Web Apps - це хмарний сервіс для хостингу **статичних веб-додатків з автоматичним CI/CD з репозиторіїв, таких як GitHub**. Він пропонує глобальну доставку контенту, безсерверні бекенди та вбудований HTTPS, що робить його безпечним і масштабованим. Однак, навіть якщо сервіс називається "статичним", це не означає, що він повністю безпечний. Ризики включають неправильно налаштований CORS, недостатню аутентифікацію та підробку контенту, що може піддати додатки атакам, таким як XSS та витік даних, якщо їх не управляти належним чином.
|
||||
Azure Static Web Apps - це хмарний сервіс для хостингу **статичних веб-додатків з автоматичним CI/CD з репозиторіїв, таких як GitHub**. Він пропонує глобальну доставку контенту, безсерверні бекенди та вбудований HTTPS, що робить його безпечним і масштабованим. Однак, навіть якщо сервіс називається "статичним", це не означає, що він повністю безпечний. Ризики включають неправильно налаштований CORS, недостатню аутентифікацію та підробку контенту, що може піддати додатки атакам, таким як XSS та витік даних, якщо їх не належним чином управляти.
|
||||
|
||||
### Deployment Authentication
|
||||
|
||||
@@ -13,7 +13,7 @@ Azure Static Web Apps - це хмарний сервіс для хостингу
|
||||
|
||||
- **Токен розгортання**: Токен генерується і використовується для аутентифікації процесу розгортання. Будь-хто з **цим токеном достатньо, щоб розгорнути нову версію додатку**. **Github Action автоматично розгортається** в репозиторії з токеном у секреті для розгортання нової версії додатку щоразу, коли репозиторій оновлюється.
|
||||
- **Робочий процес GitHub Actions**: У цьому випадку дуже схожий Github Action також розгортається в репозиторії, і **токен також зберігається в секреті**. Однак, цей Github Action має відмінність, він використовує **`actions/github-script@v6`** для отримання IDToken репозиторію та використання його для розгортання додатку.
|
||||
- Навіть якщо в обох випадках використовується дія **`Azure/static-web-apps-deploy@v1`** з токеном у параметрі `azure_static_web_apps_api_token`, у цьому другому випадку випадковий токен з форматом, що підходить, як `12345cbb198a77a092ff885781a62a15d51ef5e3654ca11234509ab54547270704-4140ccee-e04f-424f-b4ca-3d4dd123459c00f0702071d12345`, є достатнім для розгортання додатку, оскільки авторизація здійснюється за допомогою IDToken у параметрі `github_id_token`.
|
||||
- Навіть якщо в обох випадках використовується дія **`Azure/static-web-apps-deploy@v1`** з токеном у параметрі `azure_static_web_apps_api_token`, у цьому другому випадку випадковий токен з форматом, що підходить, таким як `12345cbb198a77a092ff885781a62a15d51ef5e3654ca11234509ab54547270704-4140ccee-e04f-424f-b4ca-3d4dd123459c00f0702071d12345`, є достатнім для розгортання додатку, оскільки авторизація здійснюється за допомогою IDToken у параметрі `github_id_token`.
|
||||
|
||||
### Web App Basic Authentication
|
||||
|
||||
@@ -62,7 +62,7 @@ az rest --method GET \
|
||||
}
|
||||
}
|
||||
```
|
||||
Зверніть увагу, що можливо **захистити шлях за допомогою ролі**, тоді користувачам потрібно буде автентифікуватися в додатку та отримати цю роль для доступу до шляху. Також можливо **створити запрошення**, надаючи конкретні ролі конкретним користувачам, які входять через EntraID, Facebook, GitHub, Google, Twitter, що може бути корисним для ескалації привілеїв у додатку.
|
||||
Зверніть увагу, як можна **захистити шлях за допомогою ролі**, тоді користувачам потрібно буде автентифікуватися в додатку та отримати цю роль для доступу до шляху. Також можливо **створити запрошення**, надаючи конкретні ролі конкретним користувачам, які входять через EntraID, Facebook, GitHub, Google, Twitter, що може бути корисно для ескалації привілеїв у додатку.
|
||||
|
||||
> [!TIP]
|
||||
> Зверніть увагу, що можливо налаштувати додаток так, щоб **зміни у файлі `staticwebapp.config.json`** не приймалися. У цьому випадку може бути недостатньо просто змінити файл з Github, але також потрібно **змінити налаштування в додатку**.
|
||||
@@ -71,7 +71,7 @@ URL для стадії має такий формат: `https://<app-subdomain>
|
||||
|
||||
### Керовані ідентичності
|
||||
|
||||
Azure Static Web Apps можна налаштувати для використання **керованих ідентичностей**, однак, як згадано в [цьому FAQ](https://learn.microsoft.com/en-gb/azure/static-web-apps/faq#does-static-web-apps-support-managed-identity-), вони підтримуються лише для **витягування секретів з Azure Key Vault для цілей автентифікації, а не для доступу до інших ресурсів Azure**.
|
||||
Azure Static Web Apps можна налаштувати для використання **керованих ідентичностей**, однак, як зазначено в [цьому FAQ](https://learn.microsoft.com/en-gb/azure/static-web-apps/faq#does-static-web-apps-support-managed-identity-), вони підтримуються лише для **витягування секретів з Azure Key Vault для цілей автентифікації, а не для доступу до інших ресурсів Azure**.
|
||||
|
||||
Для отримання додаткової інформації ви можете знайти посібник Azure про використання секрету сховища в статичному додатку за адресою https://learn.microsoft.com/en-us/azure/static-web-apps/key-vault-secrets.
|
||||
|
||||
|
||||
@@ -79,8 +79,8 @@ Get-AzStorageTableStoredAccessPolicy -Table <Table> -Context (Get-AzStorageAccou
|
||||
> За замовчуванням `az` cli використовуватиме ключ облікового запису для підписання ключа та виконання дії. Щоб використовувати привілеї Entra ID, використовуйте параметри `--auth-mode login`.
|
||||
|
||||
> [!TIP]
|
||||
> Використовуйте параметр `--account-key`, щоб вказати ключ облікового запису для використання\
|
||||
> Використовуйте параметр `--sas-token` з SAS токеном для доступу через SAS токен
|
||||
> Використовуйте параметр `--account-key`, щоб вказати ключ облікового запису, який потрібно використовувати\
|
||||
> Використовуйте параметр `--sas-token` з токеном SAS для доступу через токен SAS
|
||||
|
||||
## Підвищення привілеїв
|
||||
|
||||
|
||||
Reference in New Issue
Block a user