Az - Function Apps
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Οι Azure Functions είναι μια serverless λύση που σας επιτρέπει να γράφετε λιγότερο κώδικα, να διατηρείτε λιγότερη υποδομή και να εξοικονομείτε κόστος. Αντί να ανησυχείτε για την ανάπτυξη και τη συντήρηση διακομιστών, η υποδομή του cloud παρέχει όλους τους ενημερωμένους πόρους που χρειάζεστε για να διατηρήσετε τις εφαρμογές σας σε λειτουργία.
Στο Azure portal, η ενσωμάτωση μεταξύ των Azure Functions και του Azure API Management διευκολύνεται, επιτρέποντας HTTP trigger function endpoints να εκτίθενται ως REST APIs. Οι APIs που εκτίθενται με αυτόν τον τρόπο περιγράφονται χρησιμοποιώντας έναν ορισμό OpenAPI, παρέχοντας μια τυπική, γλώσσα-ανεξάρτητη διεπαφή για RESTful APIs.
Το Flex Consumption plan προσφέρει δυναμική, event-driven κλιμάκωση με ευέλικτες επιλογές υπολογισμού. Προσθέτει ή αφαιρεί αυτόματα τις λειτουργικές παρουσίες με βάση τη ζήτηση, εξασφαλίζοντας αποτελεσματική χρήση πόρων και οικονομία μέσω ενός pay-as-you-go μοντέλου. Αυτό το σχέδιο υποστηρίζει εικονική δικτύωση για ενισχυμένη ασφάλεια και σας επιτρέπει να μειώσετε τις κρύες εκκινήσεις προ-παρέχοντας παρουσίες. Είναι ιδανικό για εφαρμογές που βιώνουν μεταβλητά φορτία εργασίας και απαιτούν γρήγορη κλιμάκωση χωρίς την ανάγκη υποστήριξης κοντέινερ.
Το παραδοσιακό Consumption plan για Azure Functions είναι η προεπιλεγμένη επιλογή φιλοξενίας serverless, όπου πληρώνετε μόνο για τους υπολογιστικούς πόρους όταν οι λειτουργίες σας εκτελούνται. Κλιμακώνει αυτόματα με βάση τον αριθμό των εισερχόμενων γεγονότων, καθιστώντας το εξαιρετικά οικονομικό για εφαρμογές με διαλείποντα ή απρόβλεπτα φορτία εργασίας. Ενώ δεν υποστηρίζει αναπτύξεις κοντέινερ, περιλαμβάνει βελτιστοποιήσεις για τη μείωση των χρόνων κρύας εκκίνησης και είναι κατάλληλο για ένα ευρύ φάσμα serverless εφαρμογών που απαιτούν αυτόματη κλιμάκωση χωρίς το βάρος της διαχείρισης υποδομής.
Το Premium plan για Azure Functions έχει σχεδιαστεί για εφαρμογές που χρειάζονται συνεπή απόδοση και προηγμένα χαρακτηριστικά. Κλιμακώνει αυτόματα με βάση τη ζήτηση χρησιμοποιώντας προθερμασμένους εργαζόμενους, εξαλείφοντας τις κρύες εκκινήσεις και διασφαλίζοντας ότι οι λειτουργίες εκτελούνται άμεσα ακόμη και μετά από περιόδους αδράνειας. Αυτό το σχέδιο προσφέρει πιο ισχυρές παρουσίες, επεκταμένους χρόνους εκτέλεσης και υποστηρίζει τη σύνδεση εικονικού δικτύου. Επιπλέον, επιτρέπει τη χρήση προσαρμοσμένων εικόνων Linux, καθιστώντας το κατάλληλο για κρίσιμες εφαρμογές που απαιτούν υψηλή απόδοση και μεγαλύτερο έλεγχο στους πόρους.
Το Dedicated plan, γνωστό και ως App Service plan, εκτελεί τις λειτουργίες σας σε αφιερωμένες εικονικές μηχανές εντός ενός περιβάλλοντος App Service. Αυτό το σχέδιο παρέχει προβλέψιμη χρέωση και επιτρέπει την χειροκίνητη ή αυτόματη κλιμάκωση των παρουσιών, καθιστώντας το ιδανικό για σενάρια μακράς διάρκειας όπου οι Durable Functions δεν είναι κατάλληλες. Υποστηρίζει την εκτέλεση πολλών web και function apps στο ίδιο σχέδιο, προσφέρει μεγαλύτερα μεγέθη υπολογισμού και διασφαλίζει πλήρη απομόνωση υπολογισμού και ασφαλή πρόσβαση στο δίκτυο μέσω των App Service Environments (ASE). Αυτή η επιλογή είναι καλύτερη για εφαρμογές που χρειάζονται συνεπή κατανομή πόρων και εκτενή προσαρμογή.
Οι Container Apps σας επιτρέπουν να αναπτύξετε κοντεϊνεροποιημένες εφαρμογές λειτουργιών εντός ενός πλήρως διαχειριζόμενου περιβάλλοντος που φιλοξενείται από τις Azure Container Apps. Αυτή η επιλογή είναι τέλεια για την κατασκευή event-driven, serverless εφαρμογών που εκτελούνται παράλληλα με άλλες μικροϋπηρεσίες, APIs και ροές εργασίας. Υποστηρίζει τη συσκευασία προσαρμοσμένων βιβλιοθηκών με τον κώδικα της λειτουργίας σας, τη μετανάστευση κληρονομημένων εφαρμογών σε cloud-native μικροϋπηρεσίες και την αξιοποίηση υψηλής απόδοσης επεξεργασίας με πόρους GPU. Οι Container Apps απλοποιούν την ανάπτυξη εξαλείφοντας την ανάγκη διαχείρισης κλάσεων Kubernetes, καθιστώντας τις ιδανικές για προγραμματιστές που αναζητούν ευελιξία και κλιμάκωση σε ένα κοντεϊνεροποιημένο περιβάλλον.
Όταν δημιουργείτε μια νέα Function App που δεν είναι κοντεϊνεροποιημένη (αλλά δίνετε τον κώδικα για εκτέλεση), τα κωδικοποιημένα και άλλα δεδομένα που σχετίζονται με τη λειτουργία θα αποθηκευτούν σε έναν λογαριασμό αποθήκευσης. Από προεπιλογή, η διαδικτυακή κονσόλα θα δημιουργήσει έναν νέο ανά λειτουργία για να αποθηκεύσει τον κώδικα.
Επιπλέον, κάθε φορά που χρειάζεται να εκτελεστεί μια νέα παρουσία της εφαρμογής, ο κώδικας της εφαρμογής θα συγκεντρωθεί από εδώ και θα εκτελεστεί.
Αυτό είναι πολύ ενδιαφέρον από την προοπτική ενός επιτιθέμενου καθώς η πρόσβαση εγγραφής σε αυτόν τον κάδο θα επιτρέψει σε έναν επιτιθέμενο να συμβιβάσει τον κώδικα και να κλιμακώσει τα δικαιώματα στις διαχειριζόμενες ταυτότητες μέσα στην Function App.
Είναι δυνατόν να δώσετε πρόσβαση σε μια λειτουργία σε όλο το Διαδίκτυο χωρίς να απαιτείται καμία πιστοποίηση ή να δώσετε πρόσβαση με βάση το IAM.
Είναι επίσης δυνατό να δώσετε ή να περιορίσετε την πρόσβαση στην Function App από το Διαδίκτυο δίνοντας πρόσβαση σε ένα εσωτερικό δίκτυο (VPC) στην Function App.
Αυτό είναι πολύ ενδιαφέρον από την προοπτική ενός επιτιθέμενου καθώς μπορεί να είναι δυνατό να περάσετε σε εσωτερικά δίκτυα από μια ευάλωτη λειτουργία Lambda που εκτίθεται στο Διαδίκτυο.
είναι δυνατόν να ρυθμίσετε μεταβλητές περιβάλλοντος μέσα σε μια εφαρμογή. Επιπλέον, από προεπιλογή οι μεταβλητές περιβάλλοντος AzureWebJobsStorage
και WEBSITE_CONTENTAZUREFILECONNECTIONSTRING
(μεταξύ άλλων) δημιουργούνται. Αυτές είναι ιδιαίτερα ενδιαφέρουσες γιατί περιέχουν το κλειδί λογαριασμού για τον έλεγχο με ΠΛΗΡΗ δικαιώματα του λογαριασμού αποθήκευσης που περιέχει τα δεδομένα της εφαρμογής.
Μέσα στο sandbox ο πηγαίος κώδικας βρίσκεται στο /home/site/wwwroot
στο αρχείο function_app.py
(αν χρησιμοποιείται python) ο χρήστης που εκτελεί τον κώδικα είναι app
(χωρίς δικαιώματα sudo).
Επιπλέον, η Function App μπορεί να έχει ορισμένα endpoints που απαιτούν ένα συγκεκριμένο επίπεδο πιστοποίησης, όπως "admin" ή "anonymous". Ένας επιτιθέμενος θα μπορούσε να προσπαθήσει να αποκτήσει πρόσβαση στα ανώνυμα επιτρεπόμενα endpoints για να παρακάμψει τους περιορισμούς και να αποκτήσει πρόσβαση σε ευαίσθητα δεδομένα ή λειτουργικότητα.
Σημειώστε ότι δεν υπάρχουν δικαιώματα RBAC για να δώσετε πρόσβαση στους χρήστες να καλέσουν τις λειτουργίες. Η κλήση της λειτουργίας εξαρτάται από τον trigger που επιλέχθηκε κατά τη δημιουργία της και αν επιλέχθηκε ένας HTTP Trigger, μπορεί να χρειαστεί να χρησιμοποιήσετε ένα access key.
Όταν δημιουργείτε ένα endpoint μέσα σε μια λειτουργία χρησιμοποιώντας έναν HTTP trigger, είναι δυνατόν να υποδείξετε το επίπεδο εξουσιοδότησης access key που απαιτείται για να ενεργοποιήσετε τη λειτουργία. Διατίθενται τρεις επιλογές:
ANONYMOUS: Ο καθένας μπορεί να έχει πρόσβαση στη λειτουργία μέσω του URL.
FUNCTION: Το endpoint είναι προσβάσιμο μόνο σε χρήστες που χρησιμοποιούν ένα function, host ή master key.
ADMIN: Το endpoint είναι προσβάσιμο μόνο σε χρήστες με ένα master key.
Τύποι κλειδιών:
Function Keys: Τα κλειδιά λειτουργίας μπορεί να είναι είτε προεπιλεγμένα είτε καθορισμένα από τον χρήστη και έχουν σχεδιαστεί για να παρέχουν πρόσβαση αποκλειστικά σε συγκεκριμένα endpoints λειτουργίας εντός μιας Function App. Αυτό επιτρέπει λεπτομερή έλεγχο ασφαλείας, διασφαλίζοντας ότι μόνο εξουσιοδοτημένοι χρήστες ή υπηρεσίες μπορούν να ενεργοποιήσουν συγκεκριμένες λειτουργίες χωρίς να εκθέσουν ολόκληρη την εφαρμογή.
Host Keys: Τα κλειδιά host, τα οποία μπορεί επίσης να είναι προεπιλεγμένα ή καθορισμένα από τον χρήστη, παρέχουν πρόσβαση σε όλα τα endpoints λειτουργίας εντός μιας Function App. Αυτό είναι χρήσιμο όταν πολλές λειτουργίες χρειάζονται πρόσβαση χρησιμοποιώντας ένα μόνο κλειδί, απλοποιώντας τη διαχείριση και μειώνοντας τον αριθμό των κλειδιών που πρέπει να διανεμηθούν ή να αποθηκευτούν με ασφάλεια.
Master Key: Το master key (_master
) λειτουργεί ως διοικητικό κλειδί που προσφέρει ανυψωμένα δικαιώματα, συμπεριλαμβανομένης της πρόσβασης στα runtime REST APIs μιας Function App. Αυτό το κλειδί δεν μπορεί να ανακληθεί και θα πρέπει να χειρίζεται με τη μέγιστη προσοχή. Είναι κρίσιμο να μην μοιράζεστε το master key με τρίτους ή να το συμπεριλαμβάνετε σε εγγενείς εφαρμογές πελάτη για να αποτρέψετε μη εξουσιοδοτημένη διοικητική πρόσβαση.
Όταν ρυθμίζετε την πιστοποίηση μιας λειτουργίας σε ADMIN (και όχι ANONYMOUS ή FUNCTION), είναι απαραίτητο να χρησιμοποιήσετε αυτό το κλειδί.
System Keys: Τα συστήματα κλειδιά είναι διαχειριζόμενα από συγκεκριμένες επεκτάσεις και απαιτούνται για την πρόσβαση σε webhook endpoints που χρησιμοποιούνται από εσωτερικά συστατικά. Παραδείγματα περιλαμβάνουν τον trigger Event Grid και τις Durable Functions, οι οποίες χρησιμοποιούν συστήματα κλειδιά για να αλληλεπιδρούν με τις αντίστοιχες APIs τους με ασφάλεια. Τα συστήματα κλειδιά μπορούν να αναγεννηθούν μέσω του Azure Portal ή των key APIs για να διατηρηθεί η ασφάλεια.
Example to access a function API endpoint using a key:
https://<function_uniq_name>.azurewebsites.net/api/<endpoint_name>?code=<access_key>
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)