AWS - Lambda Persistence

Reading time: 7 minutes

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें

Lambda

अधिक जानकारी के लिए देखें:

AWS - Lambda Enum

Lambda Layer Persistence

यह संभव है कि introduce/backdoor a layer to execute arbitrary code जब lambda execute होता है और वह स्टील्थी तरीके से:

AWS - Lambda Layers Persistence

Lambda Extension Persistence

Lambda Layers का abuse करकेextensions को भी abuse किया जा सकता है और lambda में persist किया जा सकता है, साथ ही requests को steal और modify भी किया जा सकता है।

AWS - Abusing Lambda Extensions

Via resource policies

यह संभव है कि विभिन्न lambda actions (जैसे invoke या update code) के लिए external accounts को access दिया जाए:

Versions, Aliases & Weights

A Lambda के पास different versions हो सकते हैं (प्रत्येक version में अलग code)।
फिर, आप different aliases with different versions बना सकते हैं और हर एक को अलग weights दे सकते हैं।
इस तरह एक attacker एक backdoored version 1 बना सकता है और version 2 with only the legit code रख सकता है और stealth बनाए रखने के लिए only execute the version 1 in 1% of the requests कर सकता है।

Version Backdoor + API Gateway

  1. Lambda का original code copy करें
  2. Create a new version backdooring the original code (or just with malicious code). Publish और deploy that version to $LATEST
  3. API Gateway को call करें जो lambda से संबंधित है ताकि code execute हो
  4. Create a new version with the original code, Publish और उस version को $LATEST पर deploy करें।
  5. यह backdoored code को एक पिछले version में छिपा देगा
  6. API Gateway पर जाएं और create a new POST method (or choose any other method) जो lambda के backdoored version को execute करेगा: arn:aws:lambda:us-east-1:<acc_id>:function:<func_name>:1
  7. arn के अंतिम :1 पर ध्यान दें — indicating the version of the function (इस सीनारियो में version 1 backdoored होगा)।
  8. बनाए गए POST method को select करें और Actions में Deploy API चुनें
  9. अब, जब आप call the function via POST your Backdoor तो invoke हो जाएगा

Cron/Event actuator

यह तथ्य कि आप lambda functions run when something happen or when some time pass सकता है, Lambda को persistence हासिल करने और detection से बचने का एक सामान्य तरीका बनाता है।
यहाँ कुछ विचार दिए गए हैं जिनसे आप अपनी presence in AWS more stealth by creating lambdas बना कर और stealthy रह सकते हैं।

  • हर बार जब एक नया user बनाया जाता है, lambda एक नया user key generate करता है और उसे attacker को भेज देता है।
  • हर बार जब नया role बनाया जाता है, lambda compromised users को assume role permissions दे देता है।
  • हर बार नए CloudTrail logs बनते हैं, उन्हें delete/alter कर दें

RCE abusing AWS_LAMBDA_EXEC_WRAPPER + Lambda Layers

Environment variable AWS_LAMBDA_EXEC_WRAPPER का abuse करके runtime/handler शुरू होने से पहले attacker-controlled wrapper script execute करवाएं। Wrapper को Lambda Layer के माध्यम से /opt/bin/htwrap पर पहुंचाएँ, AWS_LAMBDA_EXEC_WRAPPER=/opt/bin/htwrap सेट करें, और फिर function invoke करें। Wrapper function runtime process के अंदर चलता है, function execution role inherit करता है, और अंत में real runtime को exec करता है ताकि original handler सामान्य रूप से execute हो।

AWS - Lambda Exec Wrapper Persistence

AWS - Lambda Function URL Public Exposure

Lambda asynchronous destinations और Recursion configuration का abuse करके आप बिना किसी external scheduler (no EventBridge, cron, आदि) के एक function को लगातार स्वयं को re-invoke करवा सकते हैं। डिफ़ॉल्ट रूप से, Lambda recursive loops को terminate करता है, लेकिन recursion config को Allow पर सेट करने से वे फिर से सक्षम हो जाते हैं। Destinations service side पर async invokes के लिए deliver करते हैं, इसलिए एक single seed invoke एक stealthy, code-free heartbeat/backdoor चैनल बना देता है। शोर कम रखने के लिए वैकल्पिक रूप से reserved concurrency के साथ throttle करें।

AWS - Lambda Async Self Loop Persistence

AWS - Lambda Alias-Scoped Resource Policy Backdoor

attacker logic के साथ एक hidden Lambda version बनाएं और lambda add-permission में --qualifier parameter का उपयोग करके resource-based policy को उस specific version (या alias) तक scope करें। केवल lambda:InvokeFunction को arn:aws:lambda:REGION:ACCT:function:FN:VERSION पर एक attacker principal को दें। Function name या primary alias के माध्यम से सामान्य invocations प्रभावित नहीं होते, जबकि attacker सीधे backdoored version ARN को invoke कर सकता है।

यह Function URL को expose करने की तुलना में अधिक stealthier है और primary traffic alias को बदलता नहीं है।

AWS - Lambda Alias Version Policy Backdoor

Freezing AWS Lambda Runtimes

जिस attacker के पास lambda:InvokeFunction, logs:FilterLogEvents, lambda:PutRuntimeManagementConfig, और lambda:GetRuntimeManagementConfig permissions हों, वह किसी function की runtime management configuration को modify कर सकता है। यह attack खासकर प्रभावी होता है जब लक्ष्य किसी Lambda function को एक vulnerable runtime version पर बनाए रखना हो या उन malicious layers के साथ compatibility preserve करना हो जो नए runtimes के साथ incompatible हो सकती हैं।

attacker runtime management configuration को modify करके runtime version को pin कर देता है:

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

वैकल्पिक: किसी विशिष्ट रनटाइम संस्करण पर पिन करें

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 हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें