AWS - Lambda Enum
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)
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 і монтувати їх, щоб лямбда могла читати та записувати з них.
Шар лямбди - це архів .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, та кастомними середовищами виконання.
Тепер час дізнатися про можливі функції lambda для виконання:
Доступна функція лямбда під назвою "Level6". Давайте дізнаємося, як її викликати:
Тепер, коли ви знаєте ім'я та ID, ви можете отримати ім'я:
І нарешті викликаємо функцію доступу (зверніть увагу, що ID, Ім'я та назва функції з'являються в 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
На наступній сторінці ви можете перевірити, як зловживати дозволами Lambda для ескалації привілеїв:
AWS - Lambda PrivescВчіться та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вчіться та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)