Serverless.com Security
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)
Μια Οργάνωση είναι η υψηλότερη οντότητα μέσα στο οικοσύστημα του Serverless Framework. Αντιπροσωπεύει μια συλλογική ομάδα, όπως μια εταιρεία, τμήμα ή οποιαδήποτε μεγάλη οντότητα, που περιλαμβάνει πολλά έργα, ομάδες και εφαρμογές.
Η Ομάδα είναι οι χρήστες με πρόσβαση μέσα στην οργάνωση. Οι ομάδες βοηθούν στην οργάνωση των μελών με βάση τους ρόλους. Οι Συνεργάτες
μπορούν να δουν και να αναπτύξουν υπάρχουσες εφαρμογές, ενώ οι Διαχειριστές
μπορούν να δημιουργήσουν νέες εφαρμογές και να διαχειριστούν τις ρυθμίσεις της οργάνωσης.
Μια Εφαρμογή είναι μια λογική ομαδοποίηση σχετικών υπηρεσιών μέσα σε μια Οργάνωση. Αντιπροσωπεύει μια ολοκληρωμένη εφαρμογή που αποτελείται από πολλές serverless υπηρεσίες που συνεργάζονται για να παρέχουν μια συνεκτική λειτουργικότητα.
Μια Υπηρεσία είναι το βασικό συστατικό μιας serverless εφαρμογής. Αντιπροσωπεύει ολόκληρο το serverless έργο σας, περιλαμβάνοντας όλες τις λειτουργίες, ρυθμίσεις και πόρους που απαιτούνται. Συνήθως ορίζεται σε ένα αρχείο serverless.yml
, μια υπηρεσία περιλαμβάνει μεταδεδομένα όπως το όνομα της υπηρεσίας, ρυθμίσεις παρόχου, λειτουργίες, γεγονότα, πόρους, πρόσθετα και προσαρμοσμένες μεταβλητές.
Αυτή είναι μια περίληψη του επίσημου tutorial από τα docs:
Δημιουργήστε έναν λογαριασμό AWS (Serverless.com ξεκινά στην υποδομή AWS)
Δημιουργήστε έναν λογαριασμό στο serverless.com
Δημιουργήστε μια εφαρμογή:
Αυτό θα έπρεπε να έχει δημιουργήσει μια app που ονομάζεται tutorialapp
την οποία μπορείτε να ελέγξετε στο serverless.com και έναν φάκελο που ονομάζεται Tutorial
με το αρχείο handler.js
που περιέχει κάποιο JS κώδικα με έναν κώδικα helloworld
και το αρχείο serverless.yml
που δηλώνει αυτή τη λειτουργία:
Δημιουργήστε έναν πάροχο AWS, πηγαίνοντας στον πίνακα ελέγχου στο https://app.serverless.com/<org name>/settings/providers?providerId=new&provider=aws
.
Για να δώσετε πρόσβαση στο serverless.com
στο AWS, θα ζητήσει να εκτελέσετε ένα cloudformation stack χρησιμοποιώντας αυτό το αρχείο ρυθμίσεων (τη στιγμή που γράφεται αυτό): https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml
Αυτό το πρότυπο δημιουργεί έναν ρόλο που ονομάζεται SFRole-<ID>
με arn:aws:iam::aws:policy/AdministratorAccess
πάνω από τον λογαριασμό με μια Ταυτότητα Εμπιστοσύνης που επιτρέπει στον λογαριασμό AWS του Serverless.com
να έχει πρόσβαση στον ρόλο.
Το tutorial ζητά να δημιουργηθεί το αρχείο createCustomer.js
, το οποίο θα δημιουργήσει βασικά ένα νέο API endpoint που θα διαχειρίζεται το νέο αρχείο JS και ζητά να τροποποιηθεί το αρχείο serverless.yml
για να δημιουργήσει ένα νέο πίνακα DynamoDB, να ορίσει μια μεταβλητή περιβάλλοντος, τον ρόλο που θα χρησιμοποιεί τις παραγόμενες lambdas.
Αναπτύξτε το εκτελώντας serverless deploy
Η ανάπτυξη θα πραγματοποιηθεί μέσω ενός CloudFormation Stack
Σημειώστε ότι οι lambdas είναι εκτεθειμένες μέσω API gateway και όχι μέσω άμεσων URLs
Δοκιμάστε το
Το προηγούμενο βήμα θα εκτυπώσει τις URLs όπου οι λειτουργίες lambda των API endpoints σας έχουν αναπτυχθεί
Πολύ επιτρεπτικοί ρόλοι IAM μπορούν να παραχωρήσουν μη εξουσιοδοτημένη πρόσβαση σε πόρους του cloud, οδηγώντας σε παραβιάσεις δεδομένων ή χειρισμό πόρων.
Αρχή της Ελάχιστης Εξουσίας: Αναθέστε μόνο τις απαραίτητες άδειες σε κάθε λειτουργία.
Χρησιμοποιήστε Ξεχωριστούς Ρόλους: Διαχωρίστε τους ρόλους με βάση τις απαιτήσεις της λειτουργίας.
Η αποθήκευση ευαίσθητων πληροφοριών (π.χ., API keys, διαπιστευτήρια βάσης δεδομένων) απευθείας στο serverless.yml
ή στον κώδικα μπορεί να οδηγήσει σε έκθεση αν οι αποθήκες κωδικών παραβιαστούν ή αν η πρόσβαση στο AWS παραβιαστεί, καθώς θα είναι αναγνώσιμες από τις ρυθμίσεις των lambdas.
Μεταβλητές Περιβάλλοντος: Εισάγετε μυστικά κατά την εκτέλεση χωρίς σκληρή κωδικοποίηση.
Ενσωμάτωση Διαχειριστή Μυστικών: Χρησιμοποιήστε υπηρεσίες όπως AWS Secrets Manager, Azure Key Vault, ή HashiCorp Vault.
Κρυπτογραφημένες Μεταβλητές: Εκμεταλλευτείτε τις δυνατότητες κρυπτογράφησης του Serverless Framework για ευαίσθητα δεδομένα.
Έλεγχοι Πρόσβασης: Περιορίστε την πρόσβαση στα μυστικά με βάση τους ρόλους.
Αποφύγετε την Καταγραφή Μυστικών: Διασφαλίστε ότι τα μυστικά δεν εκτίθενται σε καταγραφές ή μηνύματα σφάλματος.
Οι παρωχημένες ή ανασφαλείς εξαρτήσεις μπορούν να εισάγουν ευπάθειες, ενώ η ακατάλληλη διαχείριση εισόδου μπορεί να οδηγήσει σε επιθέσεις κώδικα.
Διαχείριση Εξαρτήσεων: Ενημερώνετε τακτικά τις εξαρτήσεις και ελέγχετε για ευπάθειες.
Επικύρωση Εισόδου: Εφαρμόστε αυστηρή επικύρωση και απολύμανση όλων των εισόδων.
Ανασκοπήσεις Κώδικα: Διεξάγετε λεπτομερείς ανασκοπήσεις για να εντοπίσετε αδυναμίες ασφαλείας.
Στατική Ανάλυση: Χρησιμοποιήστε εργαλεία για να ανιχνεύσετε ευπάθειες στη βάση κώδικα.
Χωρίς κατάλληλη καταγραφή και παρακολούθηση, οι κακόβουλες δραστηριότητες μπορεί να παραμείνουν απαρατήρητες, καθυστερώντας την αντίδραση σε περιστατικά.
Κεντρική Καταγραφή: Συγκεντρώστε καταγραφές χρησιμοποιώντας υπηρεσίες όπως AWS CloudWatch ή Datadog.
Ενεργοποιήστε Λεπτομερή Καταγραφή: Συλλέξτε βασικές πληροφορίες χωρίς να εκθέσετε ευαίσθητα δεδομένα.
Ρυθμίστε Ειδοποιήσεις: Διαμορφώστε ειδοποιήσεις για ύποπτες δραστηριότητες ή ανωμαλίες.
Τακτική Παρακολούθηση: Παρακολουθείτε συνεχώς τις καταγραφές και τις μετρήσεις για πιθανά περιστατικά ασφαλείας.
Ανοιχτές ή κακώς ασφαλισμένες APIs μπορούν να εκμεταλλευτούν για μη εξουσιοδοτημένη πρόσβαση, επιθέσεις Άρνησης Υπηρεσίας (DoS) ή επιθέσεις διασταυρούμενης τοποθεσίας.
Αυθεντικοποίηση και Εξουσιοδότηση: Εφαρμόστε ισχυρούς μηχανισμούς όπως OAuth, API keys, ή JWT.
Περιορισμός Ρυθμού και Θρόισμα: Αποτρέψτε την κακή χρήση περιορίζοντας τους ρυθμούς αιτημάτων.
Ασφαλής Ρύθμιση CORS: Περιορίστε τις επιτρεπόμενες προελεύσεις, μεθόδους και κεφαλίδες.
Χρησιμοποιήστε Τείχη Προστασίας Εφαρμογών Ιστού (WAF): Φιλτράρετε και παρακολουθήστε τα HTTP αιτήματα για κακόβουλα μοτίβα.
Κοινά πόροι και ανεπαρκής απομόνωση μπορούν να οδηγήσουν σε κλιμάκωση προνομίων ή μη επιθυμητές αλληλεπιδράσεις μεταξύ λειτουργιών.
Απομονώστε Λειτουργίες: Αναθέστε διακριτούς πόρους και ρόλους IAM για να διασφαλίσετε ανεξάρτητη λειτουργία.
Κατανομή Πόρων: Χρησιμοποιήστε ξεχωριστές βάσεις δεδομένων ή αποθηκευτικούς κάδους για διαφορετικές λειτουργίες.
Χρησιμοποιήστε VPCs: Αναπτύξτε λειτουργίες εντός Εικονικών Ιδιωτικών Νεφών για βελτιωμένη απομόνωση δικτύου.
Περιορίστε τις Άδειες Λειτουργιών: Διασφαλίστε ότι οι λειτουργίες δεν μπορούν να έχουν πρόσβαση ή να παρεμβαίνουν στους πόρους άλλων λειτουργιών εκτός αν απαιτείται ρητά.
Τα μη κρυπτογραφημένα δεδομένα σε κατάσταση ηρεμίας ή σε μετάδοση μπορεί να εκτεθούν, οδηγώντας σε παραβιάσεις δεδομένων ή αλλοίωση.
Κρυπτογραφήστε Δεδομένα σε Κατάσταση Ηρεμίας: Χρησιμοποιήστε τις δυνατότητες κρυπτογράφησης υπηρεσιών cloud.
Κρυπτογραφήστε Δεδομένα σε Μετάδοση: Χρησιμοποιήστε HTTPS/TLS για όλες τις μεταδόσεις δεδομένων.
Ασφαλής Επικοινωνία API: Επιβάλετε πρωτόκολλα κρυπτογράφησης και επικυρώστε τα πιστοποιητικά.
Διαχειριστείτε Ασφαλώς τα Κλειδιά Κρυπτογράφησης: Χρησιμοποιήστε υπηρεσίες διαχείρισης κλειδιών και περιστρέψτε τα κλειδιά τακτικά.
Λεπτομερή μηνύματα σφάλματος μπορούν να εκθέσουν ευαίσθητες πληροφορίες σχετικά με την υποδομή ή τη βάση κώδικα, ενώ οι μη διαχειριζόμενες εξαιρέσεις μπορεί να οδηγήσουν σε καταρρεύσεις εφαρμογών.
Γενικά Μηνύματα Σφάλματος: Αποφύγετε την έκθεση εσωτερικών λεπτομερειών στις απαντήσεις σφάλματος.
Κεντρική Διαχείριση Σφαλμάτων: Διαχειριστείτε και απολυμάνετε τα σφάλματα με συνέπεια σε όλες τις λειτουργίες.
Παρακολουθήστε και Καταγράψτε Σφάλματα: Παρακολουθήστε και αναλύστε τα σφάλματα εσωτερικά χωρίς να εκθέτετε λεπτομέρειες στους τελικούς χρήστες.
Εκτεθειμένες ρυθμίσεις ανάπτυξης ή μη εξουσιοδοτημένη πρόσβαση σε CI/CD pipelines μπορεί να οδηγήσουν σε κακόβουλες αναπτύξεις κώδικα ή κακώς ρυθμισμένες ρυθμίσεις.
Ασφαλείς CI/CD Pipelines: Εφαρμόστε αυστηρούς ελέγχους πρόσβασης, πολυπαραγοντική αυθεντικοποίηση (MFA) και τακτικούς ελέγχους.
Αποθηκεύστε τις Ρυθμίσεις με Ασφάλεια: Διατηρήστε τα αρχεία ανάπτυξης χωρίς σκληρά κωδικοποιημένα μυστικά και ευαίσθητα δεδομένα.
Χρησιμοποιήστε Εργαλεία Ασφαλείας Υποδομής ως Κώδικα (IaC): Χρησιμοποιήστε εργαλεία όπως Checkov ή Terraform Sentinel για να επιβάλετε πολιτικές ασφαλείας.
Αμετάβλητες Αναπτύξεις: Αποτρέψτε τις μη εξουσιοδοτημένες αλλαγές μετά την ανάπτυξη υιοθετώντας πρακτικές αμετάβλητης υποδομής.
Η χρήση μη ελεγμένων ή κακόβουλων τρίτων πρόσθετων μπορεί να εισάγει ευπάθειες στις serverless εφαρμογές σας.
Ελέγξτε τα Πρόσθετα Λεπτομερώς: Αξιολογήστε την ασφάλεια των πρόσθετων πριν από την ενσωμάτωσή τους, προτιμώντας αυτά από αξιόπιστες πηγές.
Περιορίστε τη Χρήση Πρόσθετων: Χρησιμοποιήστε μόνο τα απαραίτητα πρόσθετα για να ελαχιστοποιήσετε την επιφάνεια επίθεσης.
Παρακολουθήστε τις Ενημερώσεις Πρόσθετων: Διατηρήστε τα πρόσθετα ενημερωμένα για να επωφεληθείτε από τις διορθώσεις ασφαλείας.
Απομονώστε τα Περιβάλλοντα Πρόσθετων: Εκτελέστε τα πρόσθετα σε απομονωμένα περιβάλλοντα για να περιορίσετε πιθανές παραβιάσεις.
Δημόσια προσβάσιμες λειτουργίες ή μη περιορισμένες APIs μπορούν να εκμεταλλευτούν για μη εξουσιοδοτημένες λειτουργίες.
Περιορίστε την Πρόσβαση σε Λειτουργίες: Χρησιμοποιήστε VPCs, ομάδες ασφαλείας και κανόνες τείχους προστασίας για να περιορίσετε την πρόσβαση σε αξιόπιστες πηγές.
Εφαρμόστε Ισχυρή Αυθεντικοποίηση: Διασφαλίστε ότι όλα τα εκτεθειμένα endpoints απαιτούν κατάλληλη αυθεντικοποίηση και εξουσιοδότηση.
Χρησιμοποιήστε API Gateways με Ασφάλεια: Διαμορφώστε τα API Gateways για να επιβάλετε πολιτικές ασφαλείας, συμπεριλαμβανομένης της επικύρωσης εισόδου και του περιορισμού ρυθμού.
Απενεργοποιήστε Μη Χρησιμοποιούμενα Endpoints: Ελέγξτε τακτικά και απενεργοποιήστε οποιαδήποτε endpoints δεν χρησιμοποιούνται πλέον.
Η παραχώρηση υπερβολικών αδειών σε μέλη της ομάδας και εξωτερικούς συνεργάτες μπορεί να οδηγήσει σε μη εξουσιοδοτημένη πρόσβαση, παραβιάσεις δεδομένων και κακή χρήση πόρων. Αυτός ο κίνδυνος αυξάνεται σε περιβάλλοντα όπου πολλά άτομα έχουν διαφορετικά επίπεδα πρόσβασης, αυξάνοντας την επιφάνεια επίθεσης και την πιθανότητα εσωτερικών απειλών.
Αρχή της Ελάχιστης Εξουσίας: Διασφαλίστε ότι τα μέλη της ομάδας και οι συνεργάτες έχουν μόνο τις άδειες που είναι απαραίτητες για να εκτελούν τα καθήκοντά τους.
Κλειδιά Πρόσβασης και Κλειδιά Άδειας είναι κρίσιμα διαπιστευτήρια που χρησιμοποιούνται για την αυθεντικοποίηση και την εξουσιοδότηση αλληλεπιδράσεων με το CLI του Serverless Framework.
Κλειδιά Άδειας: Είναι μοναδικοί αναγνωριστικοί αριθμοί που απαιτούνται για την αυθεντικοποίηση πρόσβασης στην Έκδοση 4 του Serverless Framework που επιτρέπει την είσοδο μέσω CLI.
Κλειδιά Πρόσβασης: Διαπιστευτήρια που επιτρέπουν στο CLI του Serverless Framework να αυθεντικοποιείται με τον Πίνακα Ελέγχου του Serverless Framework. Όταν συνδέεστε με το serverless
cli, ένα κλειδί πρόσβασης θα δημιουργηθεί και θα αποθηκευτεί στον υπολογιστή. Μπορείτε επίσης να το ορίσετε ως μεταβλητή περιβάλλοντος με το όνομα SERVERLESS_ACCESS_KEY
.
Έκθεση μέσω Αποθετηρίων Κώδικα:
Η σκληρή κωδικοποίηση ή η τυχαία δέσμευση Κλειδιών Πρόσβασης και Κλειδιών Άδειας σε συστήματα ελέγχου έκδοσης μπορεί να οδηγήσει σε μη εξουσιοδοτημένη πρόσβαση.
Ανασφαλής Αποθήκευση:
Η αποθήκευση κλειδιών σε απλό κείμενο εντός μεταβλητών περιβάλλοντος ή αρχείων ρυθμίσεων χωρίς κατάλληλη κρυπτογράφηση αυξάνει την πιθανότητα διαρροής.
Ακατάλληλη Διανομή:
Η κοινή χρήση κλειδιών μέσω ανασφαλών καναλιών (π.χ., email, chat) μπορεί να οδηγήσει σε παρεμβολές από κακόβουλους παράγοντες.
Έλλειψη Περιστροφής:
Η μη τακτική περιστροφή κλειδιών παρατείνει την περίοδο έκθεσης αν τα κλειδιά παραβιαστούν.
Υπερβολικές Άδειες:
Κλειδιά με ευρείες άδειες μπορούν να εκμεταλλευτούν για να εκτελούν μη εξουσιοδοτημένες ενέργειες σε πολλαπλούς πόρους.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)