AWS - Abusing Lambda Extensions
Last updated
Last updated
Οι επεκτάσεις 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 (άνθρωπος στη μέση). Αυτό είναι δυνατό επειδή η επέκταση λειτουργεί με τα ίδια προνόμια με το Rapid Init, και το πυρήνα του συστήματος επιτρέπει τη τροποποίηση της μνήμης της διαδικασίας, επιτρέποντας την αλλαγή του αριθμού θύρας.
Επειδή οι επεκτάσεις λειτουργούν πριν από κάθε κώδικα χρόνου εκτέλεσης, η τροποποίηση της μεταβλητής περιβάλλοντος θα επηρεάσει τη διαδικασία χρόνου εκτέλεσης (π.χ., Python, Java, Node, Ruby) καθώς ξεκινά. Επιπλέον, οι επεκτάσεις που φορτώνονται μετά από τη δική μας, οι οποίες εξαρτώνται από αυτήν τη μεταβλητή, θα δρομολογηθούν επίσης μέσω της επέκτασής μας. Αυτή η ρύθμιση θα μπορούσε να επιτρέψει σε κακόβουλο λογισμικό να παρακάμψει εντελώς τα μέτρα ασφαλείας ή τις επεκτάσεις καταγραφής απευθείας μέσα στο περιβάλλον εκτέλεσης.
Το εργαλείο lambda-spy δημιουργήθηκε για να πραγματοποιήσει αυτήν τη εγγραφή μνήμης και να κλέψει ευαίσθητες πληροφορίες από τα αιτήματα lambda, άλλες επεκτάσεις αιτημάτων και ακόμη να τα τροποποιήσει.