AWS - Lambda Enum
Reading time: 8 minutes
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
Lambda
Amazon Web Services (AWS) Lambda описується як обчислювальна служба, яка дозволяє виконувати код без необхідності в постачанні або управлінні серверами. Вона характеризується здатністю автоматично обробляти виділення ресурсів, необхідних для виконання коду, забезпечуючи такі функції, як висока доступність, масштабованість і безпека. Значним аспектом Lambda є її модель ціноутворення, де плата стягується виключно за використаний обчислювальний час, що усуває необхідність у початкових інвестиціях або довгострокових зобов'язаннях.
Щоб викликати лямбду, можна викликати її так часто, як ви хочете (з Cloudwatch), експонувати URL кінцеву точку і викликати її, викликати через API Gateway або навіть на основі подій, таких як зміни в даних у S3 бакеті або оновлення в DynamoDB таблиці.
Код лямбди зберігається в /var/task
.
Ваги псевдонімів Lambda
Лямбда може мати кілька версій.
І вона може мати більше ніж 1 версію, експоновану через псевдоніми. Ваги кожної з версій, експонованих всередині псевдоніма, визначать, який псевдонім отримує виклик (це може бути 90%-10%, наприклад).
Якщо код одного з псевдонімів є вразливим, ви можете надсилати запити, поки вразлива версія не отримає експлойт.
Політики ресурсів
Політики ресурсів Lambda дозволяють надавати доступ іншим службам/обліковим записам для виклику лямбди, наприклад.
Наприклад, це політика, яка дозволяє будь-кому отримати доступ до лямбди, експонованої через URL:
Або це, щоб дозволити API Gateway викликати її:
Проксі бази даних Lambda
Коли є сотні паралельних запитів до лямбди, якщо кожен з них потребує підключення та закриття з'єднання з базою даних, це просто не спрацює (лямбди є безстанними, не можуть підтримувати відкриті з'єднання).
Тоді, якщо ваші функції Lambda взаємодіють з RDS Proxy замість вашої бази даних. Він обробляє пул з'єднань, необхідний для масштабування багатьох одночасних з'єднань, створених паралельними функціями Lambda. Це дозволяє вашим Lambda додаткам повторно використовувати існуючі з'єднання, а не створювати нові з'єднання для кожного виклику функції.
Файлові системи EFS Lambda
Щоб зберегти та навіть поділитися даними, лямбди можуть отримати доступ до EFS і монтувати їх, щоб лямбда могла читати та записувати з них.
Шари Lambda
Шар Lambda це архів .zip файлів, який може містити додатковий код або інший контент. Шар може містити бібліотеки, кастомний час виконання, дані або конфігураційні файли.
Можна включити до п'яти шарів на функцію. Коли ви включаєте шар у функцію, вміст витягується до каталогу /opt
в середовищі виконання.
За замовчуванням шари, які ви створюєте, є приватними для вашого облікового запису AWS. Ви можете вибрати поділитися шаром з іншими обліковими записами або зробити шар публічним. Якщо ваші функції споживають шар, який опублікував інший обліковий запис, ваші функції можуть продовжувати використовувати версію шару після його видалення або після відкликання вашого дозволу на доступ до шару. Однак ви не можете створити нову функцію або оновити функції, використовуючи видалену версію шару.
Функції, розгорнуті як контейнерне зображення, не використовують шари. Натомість ви упаковуєте ваше бажане середовище виконання, бібліотеки та інші залежності в контейнерне зображення під час його створення.
Розширення Lambda
Розширення Lambda покращують функції, інтегруючись з різними інструментами моніторингу, спостереження, безпеки та управління. Ці розширення, додані через .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, та кастомними середовищами виконання.
Перерахування
aws lambda get-account-settings
# List functions and get extra config info
aws lambda list-functions
aws lambda get-function --function-name <function_name>
aws lambda get-function-configuration --function-name <function_name>
aws lambda list-function-event-invoke-configs --function-name <function_name>
## Check for creds in env vars
aws lambda list-functions | jq '.Functions[].Environment'
## Download & check the source code
aws lambda get-function --function-name "<func_name>" --query 'Code.Location'
wget -O lambda-function.zip <url-from-previous-query>
# Get Lambda URL (if any)
aws lambda list-function-url-configs --function-name <function_name>
aws lambda get-function-url-config --function-name <function_name>
# Get who has permissions to invoke the Lambda
aws lambda get-policy --function-name <function_name>
# Versions and Aliases
aws lambda list-versions-by-function --function-name <func_name>
aws lambda list-aliases --function-name <func_name>
# List layers
aws lambda list-layers
aws lambda list-layer-versions --layer-name <name>
aws lambda get-layer-version --layer-name <name> --version-number <ver>
aws lambda get-layer-version-by-arn --arn <name> #Get external ARNs
# List other metadata
aws lambda list-event-source-mappings
aws lambda list-code-signing-configs
aws lambda list-functions-by-code-signing-config --code-signing-config-arn <arn>
Викликати лямбду
Вручну
# Invoke function
aws lambda invoke --function-name FUNCTION_NAME /tmp/out
## Some functions will expect parameters, they will access them with something like:
## target_policys = event['policy_names']
## user_name = event['user_name']
aws lambda invoke --function-name <name> --cli-binary-format raw-in-base64-out --payload '{"policy_names": ["AdministratorAccess], "user_name": "sdf"}' out.txt
Через відкритий URL
aws lambda list-function-url-configs --function-name <function_name> #Get lambda URL
aws lambda get-function-url-config --function-name <function_name> #Get lambda URL
Виклик функції Lambda через URL
Тепер час дізнатися про можливі функції lambda для виконання:
aws --region us-west-2 --profile level6 lambda list-functions
Доступна функція lambda під назвою "Level6". Давайте дізнаємось, як її викликати:
aws --region us-west-2 --profile level6 lambda get-policy --function-name Level6
Тепер, коли ви знаєте ім'я та ID, ви можете отримати ім'я:
aws --profile level6 --region us-west-2 apigateway get-stages --rest-api-id "s33ppypa75"
І нарешті викликайте функцію, звертаючись (зверніть увагу, що 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
.png)
Privesc
На наступній сторінці ви можете перевірити, як зловживати дозволами Lambda для ескалації привілеїв:
Неавтентифікований доступ
AWS - Lambda Unauthenticated Access
Постексплуатація
AWS - Lambda Post Exploitation
Персистентність
Посилання
- https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-concepts.html#gettingstarted-concepts-layer
- https://aws.amazon.com/blogs/compute/building-extensions-for-aws-lambda-in-preview/
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.