AWS - Abusing Lambda Extensions
Last updated
Last updated
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Οι επεκτάσεις Lambda ενισχύουν τις λειτουργίες ενσωματώνοντας διάφορα εργαλεία παρακολούθησης, παρατηρησιμότητας, ασφάλειας και διακυβέρνησης. Αυτές οι επεκτάσεις, που προστίθενται μέσω .zip αρχείων χρησιμοποιώντας επίπεδα 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, και προσαρμοσμένες εκτελέσεις.
Για περισσότερες πληροφορίες σχετικά με πώς λειτουργούν οι επεκτάσεις lambda ελέγξτε τα έγγραφα.
Αυτή είναι μια περίληψη της τεχνικής που προτάθηκε σε αυτή την ανάρτηση: https://www.clearvector.com/blog/lambda-spy/
Διαπιστώθηκε ότι ο προεπιλεγμένος πυρήνας Linux στο περιβάλλον εκτέλεσης Lambda είναι συμπιεσμένος με τις κλήσεις συστήματος “process_vm_readv” και “process_vm_writev”. Και όλες οι διαδικασίες εκτελούνται με το ίδιο αναγνωριστικό χρήστη, ακόμη και η νέα διαδικασία που δημιουργείται για την εξωτερική επέκταση. Αυτό σημαίνει ότι μια εξωτερική επέκταση έχει πλήρη πρόσβαση ανάγνωσης και εγγραφής στη μνήμη σωρού του Rapid, κατά σχεδίαση.
Επιπλέον, ενώ οι επεκτάσεις Lambda έχουν τη δυνατότητα να εγγραφούν σε γεγονότα κλήσης, η AWS δεν αποκαλύπτει τα ακατέργαστα δεδομένα σε αυτές τις επεκτάσεις. Αυτό διασφαλίζει ότι οι επεκτάσεις δεν μπορούν να αποκτήσουν πρόσβαση σε ευαίσθητες πληροφορίες που μεταδίδονται μέσω του αιτήματος HTTP.
Η διαδικασία Init (Rapid) παρακολουθεί όλα τα API αιτήματα στο http://127.0.0.1:9001 ενώ οι επεκτάσεις Lambda αρχικοποιούνται και εκτελούνται πριν από την εκτέλεση οποιουδήποτε κώδικα εκτέλεσης, αλλά μετά το Rapid.
Η μεταβλητή AWS_LAMBDA_RUNTIME_API
υποδεικνύει τη διεύθυνση IP και τον αριθμό θύρας του Rapid API προς τις διαδικασίες εκτέλεσης παιδιών και τις επιπλέον επεκτάσεις.
Αλλάζοντας τη μεταβλητή περιβάλλοντος AWS_LAMBDA_RUNTIME_API
σε μια θύρα
που έχουμε πρόσβαση, είναι δυνατό να παγιδεύσουμε όλες τις ενέργειες εντός της εκτέλεσης Lambda (man-in-the-middle). Αυτό είναι δυνατό επειδή η επέκταση εκτελείται με τα ίδια δικαιώματα όπως το Rapid Init, και ο πυρήνας του συστήματος επιτρέπει τη τροποποίηση της μνήμης διαδικασίας, επιτρέποντας την αλλαγή του αριθμού θύρας.
Επειδή οι επεκτάσεις εκτελούνται πριν από οποιονδήποτε κώδικα εκτέλεσης, η τροποποίηση της μεταβλητής περιβάλλοντος θα επηρεάσει τη διαδικασία εκτέλεσης (π.χ., Python, Java, Node, Ruby) καθώς ξεκινά. Επιπλέον, οι επεκτάσεις που φορτώνονται μετά από εμάς, οι οποίες βασίζονται σε αυτή τη μεταβλητή, θα δρομολογηθούν επίσης μέσω της επέκτασής μας. Αυτή η ρύθμιση θα μπορούσε να επιτρέψει σε κακόβουλο λογισμικό να παρακάμψει εντελώς τα μέτρα ασφαλείας ή τις επεκτάσεις καταγραφής απευθείας μέσα στο περιβάλλον εκτέλεσης.
Το εργαλείο lambda-spy δημιουργήθηκε για να εκτελεί αυτή τη γραφή μνήμης και να κλέβει ευαίσθητες πληροφορίες από αιτήματα lambda, άλλα αιτήματα επεκτάσεων και ακόμη και να τα τροποποιεί.
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)