Az - Function Apps
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Azure Functions - це безсерверне рішення, яке дозволяє вам писати менше коду, підтримувати менше інфраструктури та економити кошти. Замість того, щоб турбуватися про розгортання та обслуговування серверів, хмарна інфраструктура надає всі актуальні ресурси, необхідні для підтримки ваших додатків.
У порталі Azure інтеграція між Azure Functions та Azure API Management спрощується, що дозволяє використовувати функціональні кінцеві точки з HTTP-тригерами як REST API. API, які відкриваються таким чином, описуються за допомогою визначення OpenAPI, що забезпечує стандартний, незалежний від мови інтерфейс для RESTful API.
Гнучкий план споживання пропонує динамічне, подієве масштабування з гнучкими варіантами обчислень. Він автоматично додає або видаляє екземпляри функцій залежно від попиту, забезпечуючи ефективне використання ресурсів та економічність через модель оплати за фактом споживання. Цей план підтримує віртуальну мережу для підвищення безпеки та дозволяє зменшити холодні старти шляхом попереднього надання екземплярів. Він ідеально підходить для додатків, які зазнають змін у навантаженні та потребують швидкого масштабування без необхідності підтримки контейнерів.
Традиційний план споживання для Azure Functions є стандартним варіантом безсерверного хостингу, де ви платите лише за обчислювальні ресурси, коли ваші функції працюють. Він автоматично масштабується залежно від кількості вхідних подій, що робить його дуже економічним для додатків з періодичними або непередбачуваними навантаженнями. Хоча він не підтримує розгортання контейнерів, він включає оптимізації для зменшення часу холодного старту і підходить для широкого спектра безсерверних додатків, які потребують автоматичного масштабування без витрат на управління інфраструктурою.
Преміум-план для Azure Functions розроблений для додатків, які потребують стабільної продуктивності та розширених функцій. Він автоматично масштабується залежно від попиту, використовуючи попередньо прогріті робочі елементи, усуваючи холодні старти та забезпечуючи своєчасне виконання функцій навіть після періодів бездіяльності. Цей план пропонує більш потужні екземпляри, розширені часи виконання та підтримує підключення до віртуальної мережі. Крім того, він дозволяє використовувати власні образи Linux, що робить його підходящим для критично важливих додатків, які потребують високої продуктивності та більшого контролю над ресурсами.
Виділений план, також відомий як план App Service, запускає ваші функції на виділених віртуальних машинах у середовищі App Service. Цей план забезпечує передбачуване виставлення рахунків і дозволяє ручне або автоматичне масштабування екземплярів, що робить його ідеальним для сценаріїв з тривалим виконанням, де Durable Functions не підходять. Він підтримує запуск кількох веб- і функціональних додатків на одному плані, пропонує більші розміри обчислень і забезпечує повну ізоляцію обчислень та безпечний доступ до мережі через середовища App Service (ASE). Цей варіант найкраще підходить для додатків, які потребують стабільного розподілу ресурсів та широкої кастомізації.
Контейнерні додатки дозволяють вам розгортати контейнеризовані функціональні додатки в повністю керованому середовищі, яке хоститься Azure Container Apps. Цей варіант ідеально підходить для створення подієво-орієнтованих, безсерверних додатків, які працюють поряд з іншими мікросервісами, API та робочими процесами. Він підтримує упаковку власних бібліотек з вашим кодом функції, міграцію застарілих додатків до хмарно-орієнтованих мікросервісів та використання потужних обчислювальних ресурсів з GPU. Контейнерні додатки спрощують розгортання, усуваючи необхідність управління кластерами Kubernetes, що робить їх ідеальними для розробників, які шукають гнучкість і масштабованість у контейнеризованому середовищі.
Коли ви створюєте новий Function App, не контейнеризований (але надаючи код для виконання), код та інші дані, пов'язані з функцією, будуть зберігатися в обліковому записі зберігання. За замовчуванням веб-консоль створює новий обліковий запис для кожної функції для зберігання коду.
Більше того, щоразу, коли потрібно запустити новий екземпляр програми, код програми буде зібрано звідси та виконано.
Це дуже цікаво з точки зору атакуючого, оскільки доступ на запис до цього кошика дозволить атакуючому компрометувати код і підвищити привілеї до керованих ідентичностей всередині Function App.
Можливо надати доступ до функції всьому Інтернету без вимоги аутентифікації або надати доступ на основі IAM.
Також можливо надати або обмежити доступ до Function App з Інтернету, надавши доступ до внутрішньої мережі (VPC) для Function App.
Це дуже цікаво з точки зору атакуючого, оскільки може бути можливим перехід до внутрішніх мереж з вразливої функції Lambda, відкритої для Інтернету.
можливо налаштувати змінні середовища всередині програми. Більше того, за замовчуванням змінні середовища AzureWebJobsStorage
та WEBSITE_CONTENTAZUREFILECONNECTIONSTRING
(серед інших) створюються. Ці змінні особливо цікаві, оскільки вони містять ключ облікового запису для контролю з ПОВНИМИ правами доступу до облікового запису зберігання, що містить дані програми.
Всередині пісочниці вихідний код знаходиться в /home/site/wwwroot
у файлі function_app.py
(якщо використовується Python), користувач, що виконує код, - це app
(без прав sudo).
Більше того, Function App може мати певні кінцеві точки, які вимагають певного рівня аутентифікації, такі як "адміністратор" або "анонім". Атакуючий може спробувати отримати доступ до дозволених анонімних кінцевих точок, щоб обійти обмеження та отримати доступ до чутливих даних або функціональності.
Зверніть увагу, що немає дозволів RBAC для надання доступу користувачам для виклику функцій. Виклик функції залежить від тригера, вибраного під час її створення, і якщо був вибраний HTTP Trigger, можливо, знадобиться використовувати ключ доступу.
Коли ви створюєте кінцеву точку всередині функції, використовуючи HTTP trigger, можливо вказати рівень авторизації ключа доступу, необхідний для активації функції. Доступні три варіанти:
ANONYMOUS: Кожен може отримати доступ до функції за URL.
FUNCTION: Кінцева точка доступна лише користувачам, які використовують ключ функції, хоста або майстра.
ADMIN: Кінцева точка доступна лише користувачам з ключем майстра.
Типи ключів:
Ключі функцій: Ключі функцій можуть бути або стандартними, або визначеними користувачем і призначені для надання доступу виключно до конкретних кінцевих точок функцій в рамках Function App. Це дозволяє здійснювати детальний контроль безпеки, забезпечуючи, щоб лише авторизовані користувачі або служби могли викликати певні функції без розкриття всього додатку.
Ключі хоста: Ключі хоста, які також можуть бути стандартними або визначеними користувачем, надають доступ до всіх кінцевих точок функцій в рамках Function App. Це корисно, коли потрібно отримати доступ до кількох функцій за допомогою одного ключа, спрощуючи управління та зменшуючи кількість ключів, які потрібно розподілити або зберігати в безпеці.
Ключ майстра: Ключ майстра (_master
) слугує адміністративним ключем, який пропонує підвищені права доступу, включаючи доступ до REST API виконання Function App. Цей ключ не може бути відкликаний і повинен оброблятися з максимальною обережністю. Важливо не ділитися ключем майстра з третіми особами або включати його в нативні клієнтські програми, щоб запобігти несанкціонованому адміністративному доступу.
Коли ви налаштовуєте аутентифікацію функції на ADMIN (а не ANONYMOUS або FUNCTION), потрібно використовувати цей ключ.
Системні ключі: Системні ключі керуються певними розширеннями і потрібні для доступу до кінцевих точок вебхуків, які використовуються внутрішніми компонентами. Прикладами є тригер Event Grid та Durable Functions, які використовують системні ключі для безпечної взаємодії зі своїми відповідними API. Системні ключі можна відновити через портал Azure або API ключів для підтримки безпеки.
Example to access a function API endpoint using a key:
https://<function_uniq_name>.azurewebsites.net/api/<endpoint_name>?code=<access_key>
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)