AWS - Lambda Персистентність

Reading time: 6 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

Lambda

Для додаткової інформації див.:

AWS - Lambda Enum

Персистентність Lambda Layer

Можна впровадити/backdoor layer для виконання довільного коду під час виконання Lambda у прихований спосіб:

AWS - Lambda Layers Persistence

Персистентність Lambda Extension

Зловживаючи Lambda Layers, також можна зловживати extensions для персистенції в Lambda, а також викрадення й модифікації запитів.

AWS - Abusing Lambda Extensions

Через resource policies

Можна надати доступ до різних дій Lambda (наприклад invoke або update code) зовнішнім акаунтам:

Версії, Aliases & Ваги

Lambda може мати різні версії (кожна версія з різним кодом).
Потім ви можете створити різні aliases, що вказують на різні версії Lambda і призначити різні weights для кожного.
Таким чином атакуючий може створити backdoored версію 1 і версію 2 лише з легітимним кодом, і виконувати версію 1 лише в 1% запитів, щоб залишатися непомітним.

Version Backdoor + API Gateway

  1. Copy the original code of the Lambda
  2. Create a new version backdooring the original code (or just with malicious code). Publish and deploy that version to $LATEST
  3. Call the API gateway related to the lambda to execute the code
  4. Create a new version with the original code, Publish and deploy that version to $LATEST.
  5. This will hide the backdoored code in a previous version
  6. Go to the API Gateway and create a new POST method (or choose any other method) that will execute the backdoored version of the lambda: arn:aws:lambda:us-east-1:<acc_id>:function:<func_name>:1
  7. Note the final :1 of the arn indicating the version of the function (version 1 will be the backdoored one in this scenario).
  8. Select the POST method created and in Actions select Deploy API
  9. Now, when you call the function via POST your Backdoor will be invoked

Cron/Event actuator

Факт того, що ви можете змусити Lambda functions запускатися при певних подіях або через певний інтервал часу, робить Lambda популярним способом для отримання персистентності і уникнення виявлення.
Ось кілька ідей, щоб зробити вашу присутність в AWS більш непомітною шляхом створення Lambdas.

  • Кожного разу при створенні нового користувача Lambda генерує новий user key і надсилає його атакуючому.
  • Кожного разу при створенні нової ролі Lambda надає права assume role скомпрометованим користувачам.
  • Кожного разу при створенні нових CloudTrail логів — видаляти/змінювати їх

RCE abusing AWS_LAMBDA_EXEC_WRAPPER + Lambda Layers

Зловживайте змінною середовища AWS_LAMBDA_EXEC_WRAPPER, щоб виконати скрипт-обгортку, контрольований атакуючим, перед стартом runtime/handler. Доставте обгортку через Lambda Layer у /opt/bin/htwrap, встановіть AWS_LAMBDA_EXEC_WRAPPER=/opt/bin/htwrap, а потім викличте функцію. Обгортка запускається всередині процесу runtime функції, успадковує роль виконання функції і нарешті exec-ує реальний runtime, тому оригінальний handler все ще виконується нормально.

AWS - Lambda Exec Wrapper Persistence

AWS - Lambda Function URL: публічний доступ

Зловживайте асинхронними destinations Lambda разом з конфігурацією Recursion, щоб змусити функцію постійно перевикликати саму себе без зовнішнього планувальника (без EventBridge, cron тощо). За замовчуванням Lambda припиняє рекурсивні цикли, але встановлення recursion config в Allow знову їх дозволяє. Destinations доставляють на стороні сервісу для async invokes, тож один seed invoke створює прихований, безкодовий heartbeat/backdoor канал. Опційно обмежте через reserved concurrency, щоб знизити шум.

AWS - Lambda Async Self Loop Persistence

AWS - Lambda Alias-Scoped Resource Policy Backdoor

Створіть приховану версію Lambda з логікою атакуючого і застосуйте resource-based policy до цієї конкретної версії (або alias) за допомогою параметра --qualifier в lambda add-permission. Наділіть лише lambda:InvokeFunction на arn:aws:lambda:REGION:ACCT:function:FN:VERSION для принципалу атакуючого. Звичайні виклики через ім'я функції або головний alias залишаються без змін, тоді як атакуючий може безпосередньо викликати backdoored версію за ARN.

Це більш приховано, ніж відкривати Function URL, і не змінює основний alias трафіку.

AWS - Lambda Alias Version Policy Backdoor

Заморожування AWS Lambda Runtimes

Атакуючий, який має дозволи lambda:InvokeFunction, logs:FilterLogEvents, lambda:PutRuntimeManagementConfig та lambda:GetRuntimeManagementConfig, може змінити конфігурацію runtime management функції. Ця атака особливо ефективна, коли метою є утримати Lambda функцію на вразливій версії runtime або зберегти сумісність зі шкідливими layers, які можуть бути несумісні з новішими runtimes.

Атакуючий змінює конфігурацію runtime management, щоб зафіксувати версію runtime:

bash
# Invoke the function to generate runtime logs
aws lambda invoke \
--function-name $TARGET_FN \
--payload '{}' \
--region us-east-1 /tmp/ping.json

sleep 5

# Freeze automatic runtime updates on function update
aws lambda put-runtime-management-config \
--function-name $TARGET_FN \
--update-runtime-on FunctionUpdate \
--region us-east-1

Перевірте застосовану конфігурацію:

bash
aws lambda get-runtime-management-config \
--function-name $TARGET_FN \
--region us-east-1

Необов'язково: зафіксувати конкретну версію runtime

bash
# Extract Runtime Version ARN from INIT_START logs
RUNTIME_ARN=$(aws logs filter-log-events \
--log-group-name /aws/lambda/$TARGET_FN \
--filter-pattern "INIT_START" \
--query 'events[0].message' \
--output text | grep -o 'Runtime Version ARN: [^,]*' | cut -d' ' -f4)

Прив'язати до конкретної версії runtime:

bash
aws lambda put-runtime-management-config \
--function-name $TARGET_FN \
--update-runtime-on Manual \
--runtime-version-arn $RUNTIME_ARN \
--region us-east-1

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