Cognito Identity Pools
Βασικές Πληροφορίες
Οι πιστοποιητικές πισίνες εξυπηρετούν ένα κρίσιμο ρόλο επιτρέποντας στους χρήστες σας να αποκτήσουν προσωρινές διαπιστευτήρια. Αυτά τα διαπιστευτήρια είναι απαραίτητα για την πρόσβαση σε διάφορες υπηρεσίες του AWS, συμπεριλαμβανομένων, αλλά όχι περιοριστικά, των Amazon S3 και DynamoDB. Ένα χαρακτηριστικό των πιστοποιητικών πισίνων είναι η υποστήριξή τους τόσο για ανώνυμους επισκέπτες χρήστες όσο και για μια σειρά παρόχων ταυτότητας για την πιστοποίηση των χρηστών. Οι υποστηριζόμενοι πάροχοι ταυτότητας περιλαμβάνουν:
Πισίνες χρηστών Amazon Cognito
Επιλογές κοινωνικής σύνδεσης, όπως Facebook, Google, Login with Amazon και Sign in with Apple
Πάροχοι που συμμορφώνονται με το OpenID Connect (OIDC)
Πάροχοι ταυτότητας SAML (Security Assertion Markup Language)
Πιστοποιημένες ταυτότητες αναπτυσσόμενων προγραμματιστών
Cognito Sync
Για να δημιουργήσετε συνεδρίες Identity Pool, πρέπει πρώτα να δημιουργήσετε ένα Identity ID. Αυτό το Identity ID είναι η ταυτοποίηση της συνεδρίας αυτού του χρήστη. Αυτές οι ταυτοποιήσεις μπορούν να έχουν έως και 20 σύνολα δεδομένων που μπορούν να αποθηκεύσουν έως και 1MB από ζεύγη κλειδιού-τιμής.
Αυτό είναι χρήσιμο για να κρατήσετε πληροφορίες ενός χρήστη (ο οποίος θα χρησιμοποιεί πάντα το ίδιο Identity ID).
Επιπλέον, η υπηρεσία cognito-sync είναι η υπηρεσία που επιτρέπει να διαχειρίζεστε και συγχρονίζετε αυτές τις πληροφορίες (στα σύνολα δεδομένων, αποστέλλοντας πληροφορίες σε ροές και μηνύματα SNS...).
Εργαλεία για pentesting
Pacu, το πλαίσιο εκμετάλλευσης AWS, περιλαμβάνει τώρα τα αρθρώματα "cognito__enum" και "cognito__attack" που αυτοματοποιούν την απαρίθμηση όλων των πόρων Cognito σε έναν λογαριασμό και εντοπίζουν αδύναμες ρυθμίσεις, χαρακτηριστικά χρήστη που χρησιμοποιούνται για έλεγχο πρόσβασης, κ.λπ., και επίσης αυτοματοποιούν τη δημιουργία χρήστη (συμπεριλαμβανομένης της υποστήριξης MFA) και την ανέλιξη προνομιακών δικαιωμάτων βασιζόμενοι σε τροποποιήσιμα προσαρμοσμένα χαρακτηριστικά, δυνατές διαπιστευτήριες πρόσβασης στο identity pool, δυνατότητα ανάθεσης ρόλων σε αναγνωριστικά ταυτότητας, κ.λπ.
Για μια περιγραφή των λειτουργιών των αρθρωμάτων, δείτε το μέρος 2 του blog post. Για οδηγίες εγκατάστασης, δείτε την κύρια σελίδα του Pacu.
Χρήση
Παράδειγμα χρήσης του cognito__attack για να προσπαθήσετε τη δημιουργία χρήστη και όλων των διανυσματικών προνομίων εναντίον ενός συγκεκριμένου identity pool και πελάτη πισίνας χρηστών:
Δείγμα χρήσης του cognito__enum για να συγκεντρώσετε όλα τα user pools, user pool clients, identity pools, χρήστες κλπ. που είναι ορατά στον τρέχοντα λογαριασμό AWS:
Cognito Scanner είναι ένα εργαλείο γραμμής εντολών σε python που υλοποιεί διάφορες επιθέσεις στο Cognito, συμπεριλαμβανομένης της ανεπιθύμητης δημιουργίας λογαριασμού και της επέκτασης της πισίνας ταυτοτήτων.
Εγκατάσταση
Χρήση
Για περισσότερες πληροφορίες ελέγξτε το https://github.com/padok-team/cognito-scanner
Πρόσβαση σε ρόλους IAM
Μη εξουσιοδοτημένη
Το μόνο πράγμα που χρειάζεται ένας επιτιθέμενος για να αποκτήσει διαπιστευτήρια AWS σε μια εφαρμογή Cognito ως μη εξουσιοδοτημένος χρήστης είναι το Identity Pool ID, και αυτό το ID πρέπει να είναι καταχωρημένο στην ιστοσελίδα/εφαρμογή για να το χρησιμοποιήσει. Ένα ID φαίνεται κάπως έτσι: eu-west-1:098e5341-8364-038d-16de-1865e435da3b
(δεν μπορεί να ανακαλυφθεί με βίαιο τρόπο).
Ο μη εξουσιοδοτημένος ρόλος IAM Cognito που δημιουργείται μέσω αποκαλείται από προεπιλογή Cognito_<Όνομα Identity Pool>Unauth_Role
Αν βρείτε ένα Identity Pool ID που έχει καταχωρηθεί και επιτρέπει μη εξουσιοδοτημένους χρήστες, μπορείτε να αποκτήσετε διαπιστευτήρια AWS με:
Ή μπορείτε να χρησιμοποιήσετε τις παρακάτω εντολές aws cli:
Σημείωση ότι από προεπιλογή ένας μη εξουσιοδοτημένος χρήστης του Cognito ΔΕΝ μπορεί να έχει καμία άδεια, ακόμη κι αν του έχει ανατεθεί μέσω πολιτικής. Ελέγξτε την ακόλουθη ενότητα.
Βελτιωμένη έναντι Βασικής διαδικασίας πιστοποίησης
Η προηγούμενη ενότητα ακολούθησε την προεπιλεγμένη βελτιωμένη διαδικασία πιστοποίησης. Αυτή η διαδικασία ορίζει μια περιοριστική πολιτική συνεδρίας για τη συνεδρία του ρόλου IAM που δημιουργήθηκε. Αυτή η πολιτική θα επιτρέπει μόνο στη συνεδρία να χρησιμοποιεί τις υπηρεσίες από αυτήν τη λίστα (ακόμη κι αν ο ρόλος είχε πρόσβαση σε άλλες υπηρεσίες).
Ωστόσο, υπάρχει ένας τρόπος να παρακάμψετε αυτό, αν η Identity pool έχει ενεργοποιημένη τη "Βασική (Κλασική) Διαδικασία", ο χρήστης θα μπορεί να λάβει μια συνεδρία χρησιμοποιώντας αυτήν τη διαδικασία που δεν θα έχει αυτήν την περιοριστική πολιτική συνεδρίας.
Εάν λάβετε αυτό το σφάλμα, σημαίνει ότι η βασική ροή δεν είναι ενεργοποιημένη (προεπιλογή)
An error occurred (InvalidParameterException) when calling the GetOpenIdToken operation: Basic (classic) flow is not enabled, please use enhanced flow.
Έχοντας ένα σύνολο διαπιστευτηρίων IAM, θα πρέπει να ελέγξετε ποια πρόσβαση έχετε και να προσπαθήσετε να αναβαθμίσετε τα δικαιώματα.
Επαληθευμένος
Θυμηθείτε ότι οι επαληθευμένοι χρήστες πιθανόν να έχουν διαφορετικές άδειες, οπότε εάν μπορείτε να εγγραφείτε στην εφαρμογή, δοκιμάστε να το κάνετε και να λάβετε τα νέα διαπιστευτήρια.
Ενδέχεται επίσης να υπάρχουν ρόλοι διαθέσιμοι για επαληθευμένους χρήστες που έχουν πρόσβαση στο Identity Pool.
Για αυτό μπορεί να χρειαστεί να έχετε πρόσβαση στον πάροχο ταυτότητας. Εάν αυτός είναι ένας Cognito User Pool, ίσως μπορείτε να καταχραστείτε την προεπιλεγμένη συμπεριφορά και να δημιουργήσετε ένα νέο χρήστη μόνοι σας.
Ο ρόλος IAM Cognito που δημιουργείται μέσω επαλήθευσης ονομάζεται από προεπιλογή Cognito_<Identity Pool name>Auth_Role
Πάντως, το παρακάτω παράδειγμα υποθέτει ότι έχετε ήδη συνδεθεί σε ένα Cognito User Pool που χρησιμοποιείται για την πρόσβαση στο Identity Pool (μην ξεχάσετε ότι μπορεί να έχουν διαμορφωθεί και άλλοι τύποι παρόχων ταυτότητας).
Είναι δυνατόν να διαμορφώσετε διαφορετικούς ρόλους IAM ανάλογα με τον πάροχο ταυτότητας στον οποίο συνδέεται ο χρήστης ή ακόμα και απλά ανάλογα με τον χρήστη (χρησιμοποιώντας διεκδικήσεις). Επομένως, εάν έχετε πρόσβαση σε διάφορους χρήστες μέσω του ίδιου ή διαφορετικού παρόχου, μπορεί να αξίζει να συνδεθείτε και να έχετε πρόσβαση στους ρόλους IAM όλων τους.
Last updated