Translated ['src/pentesting-cloud/aws-security/aws-privilege-escalation/

This commit is contained in:
Translator
2025-10-23 15:10:30 +00:00
parent 57fd31fbbb
commit a710bee367
12 changed files with 866 additions and 367 deletions

View File

@@ -1,4 +1,4 @@
# AWS - Lambda स्थायी पहुँच
# AWS - Lambda Persistence
{{#include ../../../../banners/hacktricks-training.md}}
@@ -10,9 +10,9 @@
../../aws-services/aws-lambda-enum.md
{{#endref}}
### Lambda Layer परसिस्टेंस
### Lambda Layer Persistence
यह संभव है कि आप किसी layer को **introduce/backdoor करके arbitrary code execute करने** के लिए सेट कर सके जब Lambda stealthy तरीके से executed हो:
यह संभव है कि एक layer में introduce/backdoor करके arbitrary code चलाया जा सके जब Lambda stealthy तरीके से execute हो:
{{#ref}}
aws-lambda-layers-persistence.md
@@ -20,50 +20,50 @@ aws-lambda-layers-persistence.md
### Lambda Extension Persistence
Lambda Layers का दुरुपयोग करके extensions का भी दुरुपयोग कर के lambda में persist करना संभव है और साथ ही requests को steal और modify भी किया जा सकता है।
Lambda Layers का दुरुपयोग करके extensions का भी दुरुपयोग कर lambda में persist करना संभव है, साथ ही requests को steal और modify भी किया जा सकता है।
{{#ref}}
aws-abusing-lambda-extensions.md
{{#endref}}
### Resource policies के माध्यम से
### Via resource policies
यह संभव है कि आप अलग-अलग lambda actions (जैसे invoke या update code) के लिए एक्सेस बाहरी खातों को दे सके:
यह संभव है कि external accounts को विभिन्न lambda actions (जैसे invoke या update code) का access दिया जा सके:
<figure><img src="../../../../images/image (255).png" alt=""><figcaption></figcaption></figure>
### Versions, Aliases & Weights
एक Lambda के पास **different versions** हो सकते हैं (हर version में अलग code हो सकता है).\
फिर, आप Lambda के अलग-अलग versions के लिए **different aliases** बना सकते हैं और हर alias को अलग weight दे सकते हैं.\
इस तरह attacker एक **backdoored version 1** बना सकता है और **version 2 जिसमें सिर्फ legit code हो**, और केवल अनुरोधों के 1% में ही **version 1 को execute** करके stealth बनाए रख सकता है.
एक 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 कर सकता है
<figure><img src="../../../../images/image (120).png" alt=""><figcaption></figcaption></figure>
### Version Backdoor + API Gateway
1. Lambda का original code copy करें
2. **original code में नई version backdooring बनाएँ** (या सिर्फ malicious code के साथ). Publish करें और उस version को $LATEST पर **deploy** करें
1. Lambda से जुड़े API gateway को कॉल करके code execute करें
3. **original code के साथ एक नई version बनाएं**, Publish करें और उस **version** को $LATEST पर deploy करें.
1. यह backdoored code को previous version में छिपा देगा
4. API Gateway पर जाएँ और **create a new POST method** (या कोई और method चुनें) जो lambda के backdoored version को execute करेगा: `arn:aws:lambda:us-east-1:<acc_id>:function:<func_name>:1`
1. ARN के अंत में मौजूद :1 पर ध्यान दें जो **function क version दर्शाता है** (इस scenario में version 1 backdoored होगा).
2. **Create a new version backdooring** the original code (or just with malicious code). Publish और उस version को $LATEST पर **deploy** करें
1. कोड execute करने के लिए उस Lambda से संबंधित API Gateway को कॉल करें
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 को कॉल करेंगे तो आपका Backdoor invoke होगा
6. अब, जब आप POST के माध्यम से function को call करेंगे तो आपका Backdoor invoke हो जाएगा
### Cron/Event actuator
यह कि आप **lambda functions को किसी घटना होने पर या समय के आधार पर चला सकते हैं** Lambda को persistence प्राप्त करने और detection से बचने का एक आसान और आम तरीका बनाता है.\
यहाँ कुछ विचार दिए गए हैं ताकि आप AWS में अपनी **presence को अधिक stealthy बनाने के लिए lambdas** बना सकें.
यह तथ्य कि आप **lambda functions को किसी घटना होने पर या समय बीतने पर चला सकते हैं**, lambda को persistence प्राप्त करने और detection से बचने का एक सामान्य तरीका बनाता है\
यहाँ कुछ ideas हैं ताकि आप अपनी **presence in AWS को अधिक stealth बनाएँ lambdas बनाकर**
- हर बार जब नया 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
Environment variable `AWS_LAMBDA_EXEC_WRAPPER` का दुरुपयोग करके runtime/handler शुरू होने से पहले attacker-controlled wrapper script चलाया जा सकता है. Wrapper को एक Lambda Layer के माध्यम से `/opt/bin/htwrap` पर deliver करें, `AWS_LAMBDA_EXEC_WRAPPER=/opt/bin/htwrap` सेट करें, और फिर function invoke करें. Wrapper function runtime process के अंदर चलता है, function execution role को inherit करता है, और अंत में `exec`s असली runtime को ताकि original handler सामान्य रूप से execute हो सके।
रनटाइम/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 होता रहे।
{{#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 का दुरुपयोग करके आप एक function को बिना किसी external scheduler (जैसे EventBridge, cron, आदि) के लगातार खुद को re-invoke करवा सकत हैं. डिफ़ॉल्ट रूप से, Lambda recursive loops को terminate कर देता है, लेकिन recursion config को Allow पर सेट करने से वे पुनः सक्षम हो जाते हैं. Destinations async invokes के लिए सर्विस-साइड पर delivery करते हैं, इसलिए एक single seed invoke एक stealthy, code-free heartbeat/backdoor चैनल बना देता है. शोर कम रखने के लिए reserved concurrency optional throttle कर सकते हैं.
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 करें।
{{#ref}}
aws-lambda-async-self-loop-persistence.md
@@ -79,13 +79,55 @@ aws-lambda-async-self-loop-persistence.md
### AWS - Lambda Alias-Scoped Resource Policy Backdoor
एक hidden Lambda version बनाएं जिसमें attacker logic हो और `lambda add-permission` में `--qualifier` parameter का उपयोग करके resource-based policy को उस specific version (या alias) तक scope करें. Attacker principal को केवल `lambda:InvokeFunction` पर `arn:aws:lambda:REGION:ACCT:function:FN:VERSION`ी अनुमति दें. Function name या primary alias के माध्यम से सामान्य invocations अप्रभावित रहते हैं, जबकि attacker सीधे backdoored version का ARN invoke कर सकता है.
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 कर सकता है
यह Function URL को expose करने की तुलना में अधिक stealthy है और primary traffic alias को बदलता नहीं है.
यह Function URL को expose करने की तुलना में अधिक stealthy है और primary traffic alias को नहीं बदलता।
{{#ref}}
aws-lambda-alias-version-policy-backdoor.md
{{#endref}}
### 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 हो सकते हैं।
The attacker modifies the runtime management configuration to pin the runtime version:
```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
```
{{#include ../../../../banners/hacktricks-training.md}}