AWS - Lambda Enum
Lambda
Amazon Web Services (AWS) Lambda описується як обчислювальна служба, яка дозволяє виконувати код без необхідності в постачанні або управлінні серверами. Вона характеризується здатністю автоматично обробляти виділення ресурсів, необхідних для виконання коду, забезпечуючи такі функції, як висока доступність, масштабованість і безпека. Значним аспектом Lambda є її модель ціноутворення, де плата стягується виключно за використаний обчислювальний час, що усуває необхідність у початкових інвестиціях або довгострокових зобов'язаннях.
Щоб викликати лямбду, можна викликати її так часто, як ви хочете (з Cloudwatch), викрити URL кінцеву точку і викликати її, викликати через API Gateway або навіть на основі подій, таких як зміни в даних у S3 бакеті або оновлення в DynamoDB таблиці.
Код лямбди зберігається в /var/task
.
Ваги Аліасів Лямбди
Лямбда може мати кілька версій. І вона може мати більше ніж 1 версію, викриту через аліаси. Ваги кожної з версій, викритих всередині імені, визначать, який аліас отримає виклик (це може бути 90%-10%, наприклад). Якщо код одного з аліасів є вразливим, ви можете надсилати запити, поки вразлива версія не отримає експлойт.
Політики Ресурсів
Політики ресурсів Lambda дозволяють надавати доступ іншим службам/акаунтам для виклику лямбди, наприклад. Наприклад, це політика, яка дозволяє будь-кому отримати доступ до лямбди, викритої через URL:
Або це, щоб дозволити API Gateway викликати її:
Проксі Бази Даних Лямбди
Коли є сотні паралельних запитів лямбди, якщо кожен з них потребує підключення та закриття з'єднання з базою даних, це просто не спрацює (лямбди є безстанними, не можуть підтримувати відкриті з'єднання). Тоді, якщо ваші функції Lambda взаємодіють з RDS Proxy замість вашої бази даних. Він обробляє пул з'єднань, необхідний для масштабування багатьох одночасних з'єднань, створених паралельними функціями Lambda. Це дозволяє вашим Lambda додаткам повторно використовувати існуючі з'єднання, а не створювати нові з'єднання для кожного виклику функції.
Файлові Системи EFS Лямбди
Щоб зберегти та навіть поділитися даними, лямбди можуть отримати доступ до EFS і монтувати їх, щоб лямбда могла читати та записувати з них.
Шари Лямбди
Шар лямбди - це архів .zip, який може містити додатковий код або інший вміст. Шар може містити бібліотеки, кастомний час виконання, дані або конфігураційні файли.
Можна включити до п'яти шарів на функцію. Коли ви включаєте шар у функцію, вміст витягується до каталогу /opt
в середовищі виконання.
За замовчуванням шари, які ви створюєте, є приватними для вашого облікового запису AWS. Ви можете вибрати поділитися шаром з іншими обліковими записами або зробити шар публічним. Якщо ваші функції споживають шар, який опублікував інший обліковий запис, ваші функції можуть продовжувати використовувати версію шару після його видалення або після відкликання вашого дозволу на доступ до шару. Однак ви не можете створити нову функцію або оновити функції, використовуючи видалену версію шару.
Функції, розгорнуті як контейнерне зображення, не використовують шари. Замість цього ви упаковуєте ваше бажане середовище виконання, бібліотеки та інші залежності в контейнерне зображення під час його створення.
Розширення Лямбди
Розширення лямбди покращують функції, інтегруючись з різними інструментами моніторингу, спостереження, безпеки та управління. Ці розширення, додані через .zip архіви за допомогою шарів Lambda або включені в розгортання контейнерних зображень, працюють у двох режимах: внутрішньому та зовнішньому.
Внутрішні розширення зливаються з процесом виконання, маніпулюючи його запуском за допомогою змінних середовища, специфічних для мови та обгорткових скриптів. Це налаштування застосовується до ряду середовищ виконання, включаючи Java Correto 8 і 11, Node.js 10 і 12, та .NET Core 3.1.
Зовнішні розширення працюють як окремі процеси, підтримуючи узгодженість роботи з життєвим циклом функції Lambda. Вони сумісні з різними середовищами виконання, такими як Node.js 10 і 12, Python 3.7 і 3.8, Ruby 2.5 і 2.7, Java Corretto 8 і 11, .NET Core 3.1, та кастомними середовищами виконання.
Перерахування
Викликати лямбду
Вручну
Через відкритий URL
Call Lambda function via URL
Тепер час дізнатися про можливі функції lambda для виконання:
Доступна функція лямбда під назвою "Level6". Давайте дізнаємося, як її викликати:
Тепер, коли ви знаєте ім'я та ID, ви можете отримати ім'я:
І нарешті викликаємо функцію, звертаючись (зверніть увагу, що ID, Name та function-name з'являються в URL): https://s33ppypa75.execute-api.us-west-2.amazonaws.com/Prod/level6
URL:
https://<rest-api-id>.execute-api.<region>.amazonaws.com/<stageName>/<funcName>
Інші тригери
Є багато інших джерел, які можуть викликати lambda
Privesc
На наступній сторінці ви можете перевірити, як зловживати дозволами Lambda для ескалації привілеїв:
AWS - Lambda PrivescНеавтентифікований доступ
AWS - Lambda Unauthenticated AccessПостексплуатація
AWS - Lambda Post ExploitationПерсистентність
AWS - Lambda PersistenceПосилання
Last updated