AWS - Lambda Enum
Lambda
Amazon Web Services (AWS) Lambda описується як обчислювальний сервіс, який дозволяє виконувати код без необхідності надання або управління серверами. Він характеризується здатністю автоматично керувати розподілом ресурсів, необхідних для виконання коду, забезпечуючи такі функції, як висока доступність, масштабованість та безпека. Важливим аспектом Lambda є його модель ціноутворення, де оплата здійснюється виключно за використаний обчислювальний час, що усуває потребу в початкових інвестиціях або довгострокових зобов'язаннях.
Щоб викликати lambda, можна викликати її настільки часто, як хочете (з Cloudwatch), виставити URL-ендпоінт і викликати його, викликати через API Gateway або навіть на основі подій, таких як зміни даних у S3 бакеті або оновлення таблиці DynamoDB.
Код lambda зберігається в /var/task
.
Lambda Aliases Weights
Lambda може мати кілька версій. І вона може мати більше 1 версії, виставленої через aliases. Ваги кожної з версій, виставлених всередині alias, визначатимуть, який alias отримає виклик (це може бути 90%-10%, наприклад). Якщо код одного з alias вразливий, ви можете надсилати запити, поки вразлива версія не отримає експлойт.
Resource Policies
Політики ресурсів Lambda дозволяють надавати доступ іншим сервісам/акаунтам для виклику lambda, наприклад. Наприклад, це політика, яка дозволяє будь-кому отримати доступ до lambda, виставленої через URL:
Або це, щоб дозволити API Gateway викликати її:
Lambda Database Proxies
Коли є сотні одночасних запитів lambda, якщо кожен з них потребує підключення та закриття з'єднання з базою даних, це просто не спрацює (lambda є безстанова, не може підтримувати відкриті з'єднання). Тоді, якщо ваші функції Lambda взаємодіють з RDS Proxy замість вашого екземпляра бази даних. Вона обробляє пулінг з'єднань, необхідний для масштабування багатьох одночасних з'єднань, створених одночасними функціями Lambda. Це дозволяє вашим додаткам Lambda повторно використовувати існуючі з'єднання, замість створення нових з'єднань для кожного виклику функції.
Lambda EFS Filesystems
Для збереження та навіть спільного використання даних Lambdas можуть отримувати доступ до EFS та монтувати їх, тому Lambda зможе читати та записувати з нього.
Lambda Layers
Lambda layer - це архівний файл .zip, який може містити додатковий код або інший вміст. Шар може містити бібліотеки, custom runtime, дані або конфігураційні файли.
Можна включити до п'яти шарів на функцію. Коли ви включаєте шар у функцію, вміст витягується до /opt
каталогу в середовищі виконання.
За замовчуванням, шари, які ви створюєте, є приватними для вашого AWS акаунту. Ви можете вибрати поділитися шаром з іншими акаунтами або зробити шар публічним. Якщо ваші функції використовують шар, опублікований іншим акаунтом, ваші функції можуть продовжувати використовувати версію шару після її видалення або після відкликання вашого дозволу на доступ до шару. Однак ви не можете створити нову функцію або оновити функції, використовуючи видалену версію шару.
Функції, розгорнуті як контейнерний образ, не використовують шари. Замість цього ви пакуєте свій бажаний runtime, бібліотеки та інші залежності в контейнерний образ під час його створення.
Lambda Extensions
Розширення Lambda покращують функції, інтегруючись з різними інструментами моніторингу, спостережуваності, безпеки та управління. Ці розширення, додані через .zip архіви за допомогою шарів Lambda або включені в розгортання контейнерних образів, працюють у двох режимах: внутрішньому та зовнішньому.
Внутрішні розширення об'єднуються з процесом runtime, маніпулюючи його запуском за допомогою змінних середовища, специфічних для мови та скриптів-обгорток. Це налаштування застосовується до ряду runtime, включаючи Java Correto 8 та 11, Node.js 10 та 12, та .NET Core 3.1.
Зовнішні розширення працюють як окремі процеси, підтримуючи узгодженість роботи з життєвим циклом функції Lambda. Вони сумісні з різними runtime, такими як Node.js 10 та 12, Python 3.7 та 3.8, Ruby 2.5 та 2.7, Java Corretto 8 та 11, .NET Core 3.1, та custom runtimes.
Enumeration
Викликати lambda
Вручну
Через відкритий URL
Якщо URL-адреса функції aws lambda відкрита, ми можемо отримати доступ до неї без автентифікації. Це може призвести до витоку даних або виконання довільного коду.
Використання aws-cli
Ми можемо використовувати aws-cli для перерахування функцій aws lambda. Для цього нам потрібні облікові дані aws.
Ця команда поверне список функцій aws lambda у вказаному регіоні.
Використання boto3
boto3 - це бібліотека Python для взаємодії з aws. Ми можемо використовувати її для перерахування функцій aws lambda.
Цей скрипт поверне список функцій aws lambda у вказаному регіоні.
Виклик Lambda функції через URL
Тепер настав час дізнатися можливі lambda функції для виконання:
Доступна функція 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