AWS - Lambda Enum
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
Η Amazon Web Services (AWS) Lambda περιγράφεται ως μια υπηρεσία υπολογισμού που επιτρέπει την εκτέλεση κώδικα χωρίς την ανάγκη παροχής ή διαχείρισης διακομιστή. Χαρακτηρίζεται από την ικανότητά της να διαχειρίζεται αυτόματα την κατανομή πόρων που απαιτούνται για την εκτέλεση του κώδικα, εξασφαλίζοντας χαρακτηριστικά όπως υψηλή διαθεσιμότητα, κλιμάκωση και ασφάλεια. Ένας σημαντικός τομέας της Lambda είναι το μοντέλο τιμολόγησής της, όπου οι χρεώσεις βασίζονται αποκλειστικά στον χρόνο υπολογισμού που χρησιμοποιείται, εξαλείφοντας την ανάγκη για αρχικές επενδύσεις ή μακροχρόνιες υποχρεώσεις.
Για να καλέσετε μια lambda, είναι δυνατόν να την καλέσετε τόσο συχνά όσο θέλετε (με το Cloudwatch), να εκθέσετε ένα URL endpoint και να την καλέσετε, να την καλέσετε μέσω API Gateway ή ακόμη και με βάση γεγονότα όπως αλλαγές στα δεδομένα σε έναν S3 κάδο ή ενημερώσεις σε έναν πίνακα DynamoDB.
Ο κώδικας μιας lambda αποθηκεύεται στο /var/task.
Lambda Aliases Weights
Μια Lambda μπορεί να έχει πολλές εκδόσεις.
Και μπορεί να έχει περισσότερες από 1 έκδοση εκτεθειμένη μέσω aliases. Τα βάρη των καθένα από τις εκδόσεις που εκτίθενται μέσα σε ένα alias θα αποφασίσουν ποιο alias θα λάβει την κλήση (μπορεί να είναι 90%-10% για παράδειγμα).
Εάν ο κώδικας μία από τις aliases είναι ευάλωτος, μπορείτε να στείλετε αιτήματα μέχρι η ευάλωτη έκδοση να λάβει την εκμετάλλευση.
.png)
Resource Policies
Οι πολιτικές πόρων Lambda επιτρέπουν να δώσουν πρόσβαση σε άλλες υπηρεσίες/λογαριασμούς για να καλέσουν τη lambda για παράδειγμα.
Για παράδειγμα, αυτή είναι η πολιτική για να επιτρέψει σε οποιονδήποτε να έχει πρόσβαση σε μια lambda που εκτίθεται μέσω URL:
Ή αυτή για να επιτρέψει σε ένα API Gateway να την καλέσει:
Lambda Database Proxies
Όταν υπάρχουν εκατοντάδες ταυτόχρονες αιτήσεις lambda, αν η καθεμία από αυτές χρειάζεται να συνδεθεί και να κλείσει μια σύνδεση σε μια βάση δεδομένων, απλά δεν θα λειτουργήσει (οι lambdas είναι χωρίς κατάσταση, δεν μπορούν να διατηρήσουν ανοιχτές συνδέσεις).
Έτσι, αν οι συναρτήσεις Lambda σας αλληλεπιδρούν με RDS Proxy αντί της βάσης δεδομένων σας. Διαχειρίζεται την πισίνα συνδέσεων που είναι απαραίτητη για την κλιμάκωση πολλών ταυτόχρονων συνδέσεων που δημιουργούνται από ταυτόχρονες συναρτήσεις Lambda. Αυτό επιτρέπει στις εφαρμογές Lambda σας να ξαναχρησιμοποιούν υπάρχουσες συνδέσεις, αντί να δημιουργούν νέες συνδέσεις για κάθε κλήση συνάρτησης.
Lambda EFS Filesystems
Για να διατηρήσουν και να μοιραστούν δεδομένα, οι Lambdas μπορούν να έχουν πρόσβαση σε EFS και να τα τοποθετήσουν, έτσι ώστε η Lambda να μπορεί να διαβάσει και να γράψει από αυτό.
Lambda Layers
Μια layer Lambda είναι ένα αρχείο .zip που μπορεί να περιέχει επιπλέον κώδικα ή άλλο περιεχόμενο. Μια layer μπορεί να περιέχει βιβλιοθήκες, μια προσαρμοσμένη εκτέλεση, δεδομένα ή αρχεία ρυθμίσεων.
Είναι δυνατόν να συμπεριλάβετε έως πέντε layers ανά συνάρτηση. Όταν συμπεριλαμβάνετε μια layer σε μια συνάρτηση, το περιεχόμενο εξάγεται στον φάκελο /opt στο περιβάλλον εκτέλεσης.
Από προεπιλογή, οι layers που δημιουργείτε είναι ιδιωτικές για τον λογαριασμό σας AWS. Μπορείτε να επιλέξετε να μοιραστείτε μια layer με άλλους λογαριασμούς ή να κάνετε τη layer δημόσια. Εάν οι συναρτήσεις σας καταναλώνουν μια layer που δημοσίευσε διαφορετικός λογαριασμός, οι συναρτήσεις σας μπορούν να συνεχίσουν να χρησιμοποιούν την έκδοση της layer μετά την διαγραφή της, ή μετά την ανάκληση της άδειας πρόσβασης στη layer. Ωστόσο, δεν μπορείτε να δημιουργήσετε μια νέα συνάρτηση ή να ενημερώσετε συναρτήσεις χρησιμοποιώντας μια διαγραμμένη έκδοση layer.
Οι συναρτήσεις που αναπτύσσονται ως εικόνα κοντέινερ δεν χρησιμοποιούν layers. Αντίθετα, συσκευάζετε την προτιμώμενη εκτέλεση, τις βιβλιοθήκες και άλλες εξαρτήσεις στην εικόνα κοντέινερ όταν δημιουργείτε την εικόνα.
Lambda Extensions
Οι επεκτάσεις Lambda ενισχύουν τις συναρτήσεις ενσωματώνοντας διάφορα εργαλεία παρακολούθησης, παρατηρησιμότητας, ασφάλειας και διακυβέρνησης. Αυτές οι επεκτάσεις, που προστίθενται μέσω .zip αρχείων χρησιμοποιώντας layers Lambda ή περιλαμβάνονται σε αναπτύξεις εικόνας κοντέινερ, λειτουργούν σε δύο λειτουργίες: εσωτερικές και εξωτερικές.
- Οι εσωτερικές επεκτάσεις συγχωνεύονται με τη διαδικασία εκτέλεσης, χειριζόμενες την εκκίνηση της χρησιμοποιώντας μεταβλητές περιβάλλοντος συγκεκριμένες για τη γλώσσα και σενάρια περιτύλιξης. Αυτή η προσαρμογή ισχύει για μια σειρά από εκτελέσεις, συμπεριλαμβανομένων των Java Correto 8 και 11, Node.js 10 και 12, και .NET Core 3.1.
- Οι εξωτερικές επεκτάσεις εκτελούνται ως ξεχωριστές διαδικασίες, διατηρώντας τη λειτουργική ευθυγράμμιση με τον κύκλο ζωής της συνάρτησης Lambda. Είναι συμβατές με διάφορες εκτελέσεις όπως Node.js 10 και 12, Python 3.7 και 3.8, Ruby 2.5 και 2.7, Java Corretto 8 και 11, .NET Core 3.1, και προσαρμοσμένες εκτελέσεις.
Enumeration
aws lambda get-account-settings
# List functions and get extra config info
aws lambda list-functions
aws lambda get-function --function-name <function_name>
aws lambda get-function-configuration --function-name <function_name>
aws lambda list-function-event-invoke-configs --function-name <function_name>
## Check for creds in env vars
aws lambda list-functions | jq '.Functions[].Environment'
## Download & check the source code
aws lambda get-function --function-name "<func_name>" --query 'Code.Location'
wget -O lambda-function.zip <url-from-previous-query>
# Get Lambda URL (if any)
aws lambda list-function-url-configs --function-name <function_name>
aws lambda get-function-url-config --function-name <function_name>
# Get who has permissions to invoke the Lambda
aws lambda get-policy --function-name <function_name>
# Versions and Aliases
aws lambda list-versions-by-function --function-name <func_name>
aws lambda list-aliases --function-name <func_name>
# List layers
aws lambda list-layers
aws lambda list-layer-versions --layer-name <name>
aws lambda get-layer-version --layer-name <name> --version-number <ver>
aws lambda get-layer-version-by-arn --arn <name> #Get external ARNs
# List other metadata
aws lambda list-event-source-mappings
aws lambda list-code-signing-configs
aws lambda list-functions-by-code-signing-config --code-signing-config-arn <arn>
Εκτέλεση ενός lambda
Χειροκίνητα
# Invoke function
aws lambda invoke --function-name FUNCTION_NAME /tmp/out
## Some functions will expect parameters, they will access them with something like:
## target_policys = event['policy_names']
## user_name = event['user_name']
aws lambda invoke --function-name <name> --cli-binary-format raw-in-base64-out --payload '{"policy_names": ["AdministratorAccess], "user_name": "sdf"}' out.txt
Μέσω εκτεθειμένου URL
aws lambda list-function-url-configs --function-name <function_name> #Get lambda URL
aws lambda get-function-url-config --function-name <function_name> #Get lambda URL
Καλέστε τη συνάρτηση Lambda μέσω URL
Τώρα είναι η ώρα να ανακαλύψουμε πιθανές συναρτήσεις lambda για εκτέλεση:
aws --region us-west-2 --profile level6 lambda list-functions
.png)
Μια συνάρτηση lambda με το όνομα “Level6” είναι διαθέσιμη. Ας δούμε πώς να την καλέσουμε:
aws --region us-west-2 --profile level6 lambda get-policy --function-name Level6
.png)
Τώρα που γνωρίζετε το όνομα και το ID, μπορείτε να αποκτήσετε το Όνομα:
aws --profile level6 --region us-west-2 apigateway get-stages --rest-api-id "s33ppypa75"
.png)
Και τελικά καλέστε τη συνάρτηση προσβάλλοντας (παρατηρήστε ότι το ID, το Όνομα και το όνομα της συνάρτησης εμφανίζονται στη διεύθυνση URL): https://s33ppypa75.execute-api.us-west-2.amazonaws.com/Prod/level6
URL:https://<rest-api-id>.execute-api.<region>.amazonaws.com/<stageName>/<funcName>
Άλλοι Ενεργοποιητές
Υπάρχουν πολλές άλλες πηγές που μπορούν να ενεργοποιήσουν μια lambda
.png)
Privesc
Στην επόμενη σελίδα μπορείτε να ελέγξετε πώς να καταχραστείτε τις άδειες Lambda για να κλιμακώσετε τα προνόμια:
Μη Αυθεντική Πρόσβαση
AWS - Lambda Unauthenticated Access
Μετά την Εκμετάλλευση
AWS - Lambda Post Exploitation
Επιμονή
Αναφορές
- https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-concepts.html#gettingstarted-concepts-layer
- https://aws.amazon.com/blogs/compute/building-extensions-for-aws-lambda-in-preview/
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

