AWS - Lambda Persistence
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Lambda
Για περισσότερες πληροφορίες δείτε:
Lambda Layer Persistence
Είναι δυνατό να εισαγάγετε/backdoor ένα layer ώστε να εκτελεί αυθαίρετο κώδικα όταν η Lambda εκτελείται με stealth τρόπο:
AWS - Lambda Layers Persistence
Lambda Extension Persistence
Κακοποιώντας τα Lambda Layers, είναι επίσης δυνατό να κακοποιηθούν extensions και να παραμείνετε persist στη Lambda αλλά και να steal και να τροποποιηθούν αιτήματα.
AWS - Abusing Lambda Extensions
Via resource policies
Είναι δυνατόν να χορηγήσετε πρόσβαση σε διάφορα lambda actions (όπως invoke ή update code) σε εξωτερικούς λογαριασμούς:
.png)
Versions, Aliases & Weights
A Lambda can have different versions (with different code each version).
Στη συνέχεια, μπορείτε να δημιουργήσετε διαφορετικά aliases με διαφορετικές versions της Lambda και να ορίσετε διαφορετικά weights σε κάθε ένα.
Με αυτόν τον τρόπο ένας attacker θα μπορούσε να δημιουργήσει μια backdoored version 1 και μια version 2 με μόνο τον legit code και να εκτελεί μόνο τη version 1 σε 1% των αιτήσεων για να παραμείνει stealth.
.png)
Version Backdoor + API Gateway
- Copy the original code of the Lambda
- Create a new version backdooring the original code (or just with malicious code). Publish and deploy that version to $LATEST
- Call the API gateway related to the lambda to execute the code
- Create a new version with the original code, Publish and deploy that version to $LATEST.
- This will hide the backdoored code in a previous version
- 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 - Note the final :1 of the arn indicating the version of the function (version 1 will be the backdoored one in this scenario).
- Select the POST method created and in Actions select
Deploy API - Now, when you call the function via POST your Backdoor will be invoked
Cron/Event actuator
Το ότι μπορείτε να κάνετε lambda functions να τρέχουν όταν κάτι συμβαίνει ή όταν περάσει κάποιος χρόνος κάνει τη Lambda έναν καλό και συνηθισμένο τρόπο για να αποκτήσετε persistence και να αποφύγετε την ανίχνευση.
Εδώ έχετε μερικές ιδέες για να κάνετε την παρουσία σας στο AWS πιο stealth δημιουργώντας lambdas.
- Κάθε φορά που δημιουργείται νέος user, η Lambda δημιουργεί νέο user key και το στέλνει στον attacker.
- Κάθε φορά που δημιουργείται νέο role, η Lambda δίνει assume role permissions σε compromised users.
- Κάθε φορά που παράγονται νέα cloudtrail logs, διαγράψτε/τροποποιήστε τα
RCE abusing AWS_LAMBDA_EXEC_WRAPPER + Lambda Layers
Κακοποιήστε την environment μεταβλητή AWS_LAMBDA_EXEC_WRAPPER για να εκτελέσετε ένα attacker-controlled wrapper script πριν ξεκινήσει το runtime/handler. Παρέχετε το wrapper μέσω ενός Lambda Layer στο /opt/bin/htwrap, ορίστε AWS_LAMBDA_EXEC_WRAPPER=/opt/bin/htwrap, και στη συνέχεια invoke τη function. Το wrapper τρέχει μέσα στη διαδικασία του function runtime, κληρονομεί το function execution role, και τελικά κάνει exec στο πραγματικό runtime ώστε ο αρχικός handler να εκτελείται κανονικά.
AWS - Lambda Exec Wrapper Persistence
AWS - Lambda Function URL Public Exposure
Κακοποιήστε τα Lambda asynchronous destinations μαζί με τη Recursion configuration για να κάνετε μια function να επανεκκινεί συνεχώς τον εαυτό της χωρίς εξωτερικό scheduler (όπως EventBridge, cron, κ.λπ.). Από προεπιλογή, η Lambda τερματίζει recursive loops, αλλά με το να ορίσετε την recursion config σε Allow επανενεργοποιούνται. Τα Destinations παραδίδουν στην πλευρά της υπηρεσίας για async invokes, οπότε ένα μόνο seed invoke δημιουργεί ένα stealthy, code-free heartbeat/backdoor κανάλι. Προαιρετικά, χρησιμοποιήστε throttle με reserved concurrency για να κρατήσετε τον θόρυβο χαμηλό.
AWS - Lambda Async Self Loop Persistence
AWS - Lambda Alias-Scoped Resource Policy Backdoor
Δημιουργήστε μια κρυφή Lambda version με attacker logic και εφαρμόστε ένα resource-based policy σε εκείνη την συγκεκριμένη version (ή alias) χρησιμοποιώντας την παράμετρο --qualifier στο lambda add-permission. Χορηγήστε μόνο lambda:InvokeFunction στο arn:aws:lambda:REGION:ACCT:function:FN:VERSION σε attacker principal. Οι κανονικές invocations μέσω του function name ή του primary alias παραμένουν ανεπηρέαστες, ενώ ο attacker μπορεί να καλεί απευθείας το backdoored version ARN.
Αυτό είναι πιο stealthy από το να εκθέσετε ένα Function URL και δεν αλλάζει το primary traffic alias.
AWS - Lambda Alias Version Policy Backdoor
Freezing AWS Lambda Runtimes
Ένας attacker που έχει τα permissions lambda:InvokeFunction, logs:FilterLogEvents, lambda:PutRuntimeManagementConfig, και lambda:GetRuntimeManagementConfig μπορεί να τροποποιήσει τη runtime management configuration μιας function. Αυτή η επίθεση είναι ιδιαίτερα αποτελεσματική όταν ο στόχος είναι να κρατηθεί μια Lambda function σε μια ευάλωτη runtime version ή να διατηρηθεί η συμβατότητα με malicious layers που μπορεί να είναι ασύμβατες με νεότερα runtimes.
Ο attacker τροποποιεί τη runtime management configuration για να pinάρει την runtime version:
# 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
Επαληθεύστε την εφαρμοσμένη διαμόρφωση:
aws lambda get-runtime-management-config \
--function-name $TARGET_FN \
--region us-east-1
Προαιρετικό: Κλειδώστε σε συγκεκριμένη έκδοση του 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)
Κλειδώστε σε συγκεκριμένη έκδοση runtime:
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)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
HackTricks Cloud

