AWS - Abusing Lambda Extensions
Last updated
Last updated
Μάθετε & εξασκηθείτε στο AWS Hacking: Μάθετε & εξασκηθείτε στο GCP Hacking:
Οι επεκτάσεις 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, και προσαρμοσμένες εκτελέσεις.
Για περισσότερες πληροφορίες σχετικά με .
Αυτή είναι μια περίληψη της τεχνικής που προτάθηκε σε αυτή την ανάρτηση:
Διαπιστώθηκε ότι ο προεπιλεγμένος πυρήνας Linux στο περιβάλλον εκτέλεσης Lambda είναι συμπιεσμένος με τις κλήσεις συστήματος “process_vm_readv” και “process_vm_writev”. Και όλες οι διαδικασίες εκτελούνται με το ίδιο αναγνωριστικό χρήστη, ακόμη και η νέα διαδικασία που δημιουργείται για την εξωτερική επέκταση. Αυτό σημαίνει ότι μια εξωτερική επέκταση έχει πλήρη πρόσβαση ανάγνωσης και εγγραφής στη μνήμη σωρού του Rapid, κατά σχεδίαση.
Επιπλέον, ενώ οι επεκτάσεις Lambda έχουν τη δυνατότητα να εγγραφούν σε γεγονότα κλήσης, η AWS δεν αποκαλύπτει τα ακατέργαστα δεδομένα σε αυτές τις επεκτάσεις. Αυτό διασφαλίζει ότι οι επεκτάσεις δεν μπορούν να αποκτήσουν πρόσβαση σε ευαίσθητες πληροφορίες που μεταδίδονται μέσω του αιτήματος HTTP.
Η διαδικασία Init (Rapid) παρακολουθεί όλα τα API αιτήματα στο ενώ οι επεκτάσεις 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, άλλα αιτήματα επεκτάσεων και ακόμη και να τα τροποποιεί.
Μάθετε & εξασκηθείτε στο AWS Hacking: Μάθετε & εξασκηθείτε στο GCP Hacking:
Ελέγξτε τα !
Εγγραφείτε στην 💬 ή στην ή ακολουθήστε μας στο Twitter 🐦 .
Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα και github repos.