AWS - Lambda Persistence

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks

Lambda

Aby uzyskać więcej informacji zobacz:

AWS - Lambda Enum

Lambda Layer Persistence

Możliwe jest introduce/backdoor a layer to execute arbitrary code gdy lambda jest uruchamiana w sposób dyskretny:

AWS - Lambda Layers Persistence

Lambda Extension Persistence

Wykorzystując Lambda Layers można także nadużyć extensions i uzyskać utrzymanie dostępu w Lambdzie, a także przechwytywać i modyfikować żądania.

AWS - Abusing Lambda Extensions

Via resource policies

Możliwe jest przyznanie dostępu do różnych akcji lambda (takich jak invoke lub update code) zewnętrznym kontom:

Versions, Aliases & Weights

Lambda może mieć różne versions (każda wersja z innym kodem).
Następnie można utworzyć różne aliases powiązane z różnymi versions funkcji lambda i ustawić dla nich różne weights.
W ten sposób atakujący może stworzyć backdoored version 1 oraz version 2 zawierającą tylko legit code i wykonywać version 1 tylko w 1% żądań, aby pozostać dyskretnym.

Version Backdoor + API Gateway

  1. Skopiuj oryginalny kod Lambdy
  2. Create a new version backdooring the original code (or just with malicious code). Publish and deploy that version to $LATEST
  3. Wywołaj API Gateway powiązany z Lambdą, aby wykonać kod
  4. Create a new version with the original code, Publish and deploy that version to $LATEST.
  5. To ukryje zbackdoorowany kod w poprzedniej wersji
  6. Przejdź do API Gateway i create a new POST method (lub wybierz inną metodę), która wykona zbackdoorowaną wersję Lambdy: arn:aws:lambda:us-east-1:<acc_id>:function:<func_name>:1
  7. Zwróć uwagę na końcowe :1 w ARN wskazujące wersję funkcji (version 1 będzie zbackdoorowaną w tym scenariuszu).
  8. Wybierz utworzoną metodę POST i w Actions wybierz Deploy API
  9. Teraz, gdy wywołasz funkcję przez POST, Twój Backdoor zostanie uruchomiony

Cron/Event actuator

Fakt, że możesz uruchamiać funkcje Lambda, gdy coś się wydarzy lub po upływie określonego czasu, czyni Lambdy popularnym sposobem na uzyskanie utrzymania dostępu i unikanie wykrycia.
Oto kilka pomysłów, jak uczynić swoją obecność w AWS bardziej dyskretną przez tworzenie lambd.

  • Za każdym razem, gdy zostanie utworzony nowy użytkownik, Lambda generuje nowy klucz użytkownika i wysyła go do atakującego.
  • Za każdym razem, gdy tworzona jest nowa rola, Lambda przyznaje uprawnienia assume role skompromitowanym użytkownikom.
  • Za każdym razem, gdy pojawiają się nowe logi CloudTrail, usuń/zmodyfikuj je

RCE abusing AWS_LAMBDA_EXEC_WRAPPER + Lambda Layers

Wykorzystaj zmienną środowiskową AWS_LAMBDA_EXEC_WRAPPER, aby wykonać skrypt wrapper kontrolowany przez atakującego przed uruchomieniem runtime/handlera. Dostarcz wrapper jako Lambda Layer pod /opt/bin/htwrap, ustaw AWS_LAMBDA_EXEC_WRAPPER=/opt/bin/htwrap, a następnie wywołaj funkcję. Wrapper działa wewnątrz procesu runtime funkcji, dziedziczy rolę wykonywania funkcji i ostatecznie wykonuje (exec) prawdziwy runtime, dzięki czemu oryginalny handler nadal wykonuje się normalnie.

AWS - Lambda Exec Wrapper Persistence

AWS - Lambda Function URL Public Exposure

Wykorzystaj asynchroniczne destinations Lambdy razem z konfiguracją Recursion, aby funkcja stale ponownie wywoływała samą siebie bez zewnętrznego schedulera (bez EventBridge, cron itp.). Domyślnie Lambda przerywa pętle rekursywne, ale ustawienie recursion config na Allow ponownie je włącza. Destinations dostarczają po stronie serwisu dla asynchronicznych wywołań, więc pojedyncze seed invoke tworzy dyskretny, bezkodowy kanał heartbeat/backdoor. Opcjonalnie ograniczaj przepustowość za pomocą reserved concurrency, aby zmniejszyć poziom szumu.

AWS - Lambda Async Self Loop Persistence

AWS - Lambda Alias-Scoped Resource Policy Backdoor

Utwórz ukrytą wersję Lambdy z logiką atakującego i zastosuj resource-based policy do tej konkretnej wersji (lub aliasu) używając parametru --qualifier w lambda add-permission. Przyznaj tylko lambda:InvokeFunction na arn:aws:lambda:REGION:ACCT:function:FN:VERSION principalowi atakującemu. Normalne wywołania przez nazwę funkcji lub główny alias pozostają niezmienione, podczas gdy atakujący może bezpośrednio wywołać ARN zbackdoorowanej wersji.

To jest bardziej dyskretne niż wystawienie Function URL i nie zmienia głównego aliasu ruchu.

AWS - Lambda Alias Version Policy Backdoor

Freezing AWS Lambda Runtimes

Atakujący, który ma uprawnienia lambda:InvokeFunction, logs:FilterLogEvents, lambda:PutRuntimeManagementConfig oraz lambda:GetRuntimeManagementConfig, może zmodyfikować konfigurację zarządzania runtime funkcji. Ten atak jest szczególnie skuteczny, gdy celem jest utrzymanie funkcji Lambda na podatnej wersji runtime lub zachowanie zgodności ze złośliwymi layers, które mogą być niekompatybilne z nowszymi runtime’ami.

Atakujący modyfikuje konfigurację zarządzania runtime, aby przypiąć wersję runtime:

# 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

Zweryfikuj zastosowaną konfigurację:

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

Opcjonalnie: Przypnij do konkretnej wersji runtime

# 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)

Przypnij do konkretnej wersji środowiska uruchomieniowego:

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

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks