mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-26 04:41:55 -08:00
Translated ['src/pentesting-cloud/aws-security/aws-persistence/aws-lambd
This commit is contained in:
@@ -12,7 +12,7 @@
|
||||
|
||||
### Lambda Layer Persistence
|
||||
|
||||
यह संभव है कि एक layer में introduce/backdoor करके arbitrary code चलाया जा सके जब Lambda stealthy तरीके से execute हो:
|
||||
यह संभव है कि **introduce/backdoor a layer to execute arbitrary code** जब lambda execute होता है और वह स्टील्थी तरीके से:
|
||||
|
||||
{{#ref}}
|
||||
aws-lambda-layers-persistence.md
|
||||
@@ -20,7 +20,7 @@ aws-lambda-layers-persistence.md
|
||||
|
||||
### Lambda Extension Persistence
|
||||
|
||||
Lambda Layers का दुरुपयोग करके extensions का भी दुरुपयोग कर lambda में persist करना संभव है, साथ ही requests को steal और modify भी किया जा सकता है।
|
||||
Lambda Layers का abuse करकेextensions को भी abuse किया जा सकता है और lambda में persist किया जा सकता है, साथ ही requests को steal और modify भी किया जा सकता है।
|
||||
|
||||
{{#ref}}
|
||||
aws-abusing-lambda-extensions.md
|
||||
@@ -28,42 +28,42 @@ aws-abusing-lambda-extensions.md
|
||||
|
||||
### Via resource policies
|
||||
|
||||
यह संभव है कि external accounts को विभिन्न lambda actions (जैसे invoke या update code) का access दिया जा सके:
|
||||
यह संभव है कि विभिन्न lambda actions (जैसे invoke या update code) के लिए external accounts को access दिया जाए:
|
||||
|
||||
<figure><img src="../../../../images/image (255).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Versions, Aliases & Weights
|
||||
|
||||
एक Lambda के पास **different versions** हो सकते हैं (प्रत्येक version में अलग code)।\
|
||||
फिर आप Lambda के लिए **different aliases with different versions** बना सकते हैं और प्रत्येक को अलग weights दे सकते हैं।\
|
||||
इस तरह एक attacker एक **backdoored version 1** और एक **version 2 with only the legit code** बना सकता है और stealth बनाए रखने के लिए केवल 1% requests में **version 1** को execute कर सकता है।
|
||||
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 कर सकता है।
|
||||
|
||||
<figure><img src="../../../../images/image (120).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Version Backdoor + API Gateway
|
||||
|
||||
1. Lambda का original code copy करें
|
||||
2. **Create a new version backdooring** the original code (or just with malicious code). Publish और उस version को $LATEST पर **deploy** करें
|
||||
1. कोड execute करने के लिए उस Lambda से संबंधित API Gateway को कॉल करें
|
||||
2. **Create a new version backdooring** the original code (or just with malicious code). Publish और **deploy that version** to $LATEST
|
||||
1. API Gateway को call करें जो lambda से संबंधित है ताकि code execute हो
|
||||
3. **Create a new version with the original code**, Publish और उस **version** को $LATEST पर deploy करें।
|
||||
1. यह backdoored code को एक previous version में छिपा देगा
|
||||
4. 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`
|
||||
1. arn के अंतिम :1 को नोट करें जो **function के version** को indicate करता है (इस scenario में version 1 backdoored होगा)।
|
||||
5. बने हुए POST method को select करें और Actions में **`Deploy API`** चुनें
|
||||
6. अब, जब आप POST के माध्यम से function को call करेंगे तो आपका Backdoor invoke हो जाएगा
|
||||
1. यह backdoored code को एक पिछले version में छिपा देगा
|
||||
4. 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`
|
||||
1. arn के अंतिम :1 पर ध्यान दें — **indicating the version of the function** (इस सीनारियो में version 1 backdoored होगा)।
|
||||
5. बनाए गए POST method को select करें और Actions में **`Deploy API`** चुनें
|
||||
6. अब, जब आप **call the function via POST your Backdoor** तो invoke हो जाएगा
|
||||
|
||||
### Cron/Event actuator
|
||||
|
||||
यह तथ्य कि आप **lambda functions को किसी घटना होने पर या समय बीतने पर चला सकते हैं**, lambda को persistence प्राप्त करने और detection से बचने का एक सामान्य तरीका बनाता है।\
|
||||
यहाँ कुछ ideas हैं ताकि आप अपनी **presence in AWS को अधिक stealth बनाएँ lambdas बनाकर**।
|
||||
यह तथ्य कि आप **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 कर दें
|
||||
- हर बार जब एक नया 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
|
||||
|
||||
रनटाइम/handler शुरू होने से पहले attacker-controlled wrapper script को execute करने के लिए environment variable `AWS_LAMBDA_EXEC_WRAPPER` का दुरुपयोग करें। wrapper को Lambda Layer के माध्यम से `/opt/bin/htwrap` पर deliver करें, सेट करें `AWS_LAMBDA_EXEC_WRAPPER=/opt/bin/htwrap`, और फिर function को invoke करें। wrapper function runtime process के अंदर चलता है, function execution role inherit करता है, और अंत में वास्तविक runtime को `exec` करता है ताकि original handler सामान्य तौर पर execute होता रहे।
|
||||
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 हो।
|
||||
|
||||
{{#ref}}
|
||||
aws-lambda-exec-wrapper-persistence.md
|
||||
@@ -71,7 +71,7 @@ aws-lambda-exec-wrapper-persistence.md
|
||||
|
||||
### AWS - Lambda Function URL Public Exposure
|
||||
|
||||
Lambda asynchronous destinations और Recursion configuration का दुरुपयोग करके बिना किसी external scheduler (जैसे EventBridge, cron, आदि) के function को लगातार खुद को re-invoke करवाया जा सकता है। डिफ़ॉल्ट रूप से, Lambda recursive loops को terminate कर देता है, लेकिन recursion config को Allow पर सेट करने से वे फिर से सक्षम हो जाते हैं। Destinations async invokes के लिए service side पर deliver करते हैं, इसलिए एक single seed invoke stealthy, code-free heartbeat/backdoor चैनल बना देता है। शोर कम रखने के लिए विकल्प के तौर पर reserved concurrency के साथ throttle करें।
|
||||
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 करें।
|
||||
|
||||
{{#ref}}
|
||||
aws-lambda-async-self-loop-persistence.md
|
||||
@@ -79,9 +79,9 @@ aws-lambda-async-self-loop-persistence.md
|
||||
|
||||
### AWS - Lambda Alias-Scoped Resource Policy Backdoor
|
||||
|
||||
attacker logic वाला एक hidden Lambda version बनाएं और उस specific version (या alias) पर resource-based policy scope करें `--qualifier` parameter का उपयोग करके `lambda add-permission` में। attacker principal को केवल `lambda:InvokeFunction` पर `arn:aws:lambda:REGION:ACCT:function:FN:VERSION` का access दें। function name या primary alias के माध्यम से normal invocations अप्रभावित रहते हैं, जबकि attacker सीधे backdoored version ARN को invoke कर सकता है।
|
||||
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 करने की तुलना में अधिक stealthy है और primary traffic alias को नहीं बदलता।
|
||||
यह Function URL को expose करने की तुलना में अधिक stealthier है और primary traffic alias को बदलता नहीं है।
|
||||
|
||||
{{#ref}}
|
||||
aws-lambda-alias-version-policy-backdoor.md
|
||||
@@ -89,9 +89,9 @@ aws-lambda-alias-version-policy-backdoor.md
|
||||
|
||||
### Freezing AWS Lambda Runtimes
|
||||
|
||||
यदि किसी attacker के पास lambda:InvokeFunction, logs:FilterLogEvents, lambda:PutRuntimeManagementConfig, और lambda:GetRuntimeManagementConfig permissions हैं, तो वह किसी function की runtime management configuration को बदल सकता है। यह attack विशेष रूप से तब प्रभावी होता है जब लक्ष्य किसी Lambda function को एक vulnerable runtime version पर बनाए रखना हो या malicious layers के साथ compatibility बनाए रखना हो जो नए runtimes के साथ incompatible हो सकते हैं।
|
||||
जिस 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 हो सकती हैं।
|
||||
|
||||
The attacker modifies the runtime management configuration to pin the runtime version:
|
||||
attacker runtime management configuration को modify करके runtime version को pin कर देता है:
|
||||
```bash
|
||||
# Invoke the function to generate runtime logs
|
||||
aws lambda invoke \
|
||||
@@ -107,13 +107,13 @@ aws lambda put-runtime-management-config \
|
||||
--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 \
|
||||
@@ -122,7 +122,7 @@ RUNTIME_ARN=$(aws logs filter-log-events \
|
||||
--query 'events[0].message' \
|
||||
--output text | grep -o 'Runtime Version ARN: [^,]*' | cut -d' ' -f4)
|
||||
```
|
||||
किसी विशिष्ट runtime संस्करण पर पिन करें:
|
||||
विशिष्ट runtime संस्करण पर पिन करें:
|
||||
```bash
|
||||
aws lambda put-runtime-management-config \
|
||||
--function-name $TARGET_FN \
|
||||
|
||||
Reference in New Issue
Block a user