Cognito User Pools
Βασικές Πληροφορίες
Ένα user pool είναι ένας κατάλογος χρηστών στο Amazon Cognito. Με ένα user pool, οι χρήστες σας μπορούν να συνδεθούν στην ιστοσελίδα ή την εφαρμογή σας μέσω του Amazon Cognito, ή να συνδεθούν μέσω ενός τρίτου παρόχου ταυτότητας (IdP). Είτε οι χρήστες σας συνδέονται απευθείας είτε μέσω τρίτου παρόχου, όλα τα μέλη του user pool έχουν ένα προφίλ καταλόγου στο οποίο μπορείτε να έχετε πρόσβαση μέσω ενός SDK.
Οι user pools παρέχουν:
Υπηρεσίες εγγραφής και σύνδεσης.
Έναν ενσωματωμένο, προσαρμόσιμο web UI για τη σύνδεση των χρηστών.
Κοινωνική σύνδεση με Facebook, Google, Login with Amazon και Sign in with Apple, καθώς και μέσω SAML και OIDC παρόχων ταυτότητας από τον user pool σας.
Διαχείριση καταλόγου χρηστών και προφίλ χρηστών.
Χαρακτηριστικά ασφαλείας, όπως πολυπαραγοντική πιστοποίηση (MFA), έλεγχοι για παραβιασμένα διαπιστευτήρια, προστασία από κατάληψη λογαριασμού και επαλήθευση τηλεφώνου και ηλεκτρονικού ταχυδρομείου.
Προσαρμοσμένες ροές εργασίας και μετάβαση χρηστών μέσω των AWS Lambda triggers.
Ο πηγαίος κώδικας των εφαρμογών συνήθως περιέχει επίσης το ID του user pool και το ID της εφαρμογής πελάτη, (και μερικές φορές το μυστικό της εφαρμογής?) τα οποία απαιτούνται για την σύνδεση ενός χρήστη σε ένα Cognito User Pool.
Δυνητικές επιθέσεις
Εγγραφή: Από προεπιλογή ένας χρήστης μπορεί να εγγραφεί μόνος του, οπότε μπορεί να δημιουργήσει έναν χρήστη για τον εαυτό του.
Απαρίθμηση χρηστών: Η λειτουργία εγγραφής μπορεί να χρησιμοποιηθεί για την εύρεση ονομάτων χρηστών που υπάρχουν ήδη. Αυτή η πληροφορία μπορεί να είναι χρήσιμη για επίθεση με βίαιη δοκιμή.
Βίαιη δοκιμή σύνδεσης: Στην ενότητα Πιστοποίηση έχετε όλες τις μεθόδους που ένας χρήστης πρέπει να συνδεθεί, μπορείτε να προσπαθήσετε να τις επιτεθείτε με βίαιη δοκιμή για να βρείτε έγκυρα διαπιστευτήρια.
Εργαλεία για το pentesting
Pacu, το πλαίσιο εκμετάλλευσης του AWS, περιλαμβάνει τώρα τα αρθρώματα "cognito__enum" και "cognito__attack" που αυτοματοποιούν την απαρίθμηση όλων των πόρων Cognito σε έναν λογαριασμό και εντοπίζουν αδύναμες διαμορφώσεις, χαρακτηριστικά χρηστών που χρησιμοποιούνται για έλεγχο πρόσβασης κ.λπ., και επίσης αυτοματοποιούν τη δημιουργία χρήστη (συμπεριλαμβανομένης της υποστήριξης MFA) και την ανέλιξη προνομιακών δικαιωμάτων με βάση τα προσαρμόσιμα προσαρμόσιμα χαρακτηριστικά, τα διαπιστευτήρια του identity pool που μπορούν να χρησιμοποιηθούν, τους ρόλους που μπορούν να υποθέσουν στα id tokens κ.λπ.
Για μια περιγραφή των λειτουργιών των αρθρωμάτων, δείτε το μέρος 2 της ανάρτησης στο blog. Για οδηγίες εγκατάστασης, δείτε την κύρια σελίδα του Pacu.
Χρήση
Δείγμα χρήσης του cognito__attack για να προσπαθήσετε τη δημιουργία χρήστη και όλων των διανυσμάτων προνομιακής ανέλιξης εναντίον ενός συγκεκριμένου identity pool και user pool client:
Δείγμα χρήσης του cognito__enum για να συγκεντρώσετε όλα τα user pools, user pool clients, identity pools, χρήστες κλπ. που είναι ορατά στον τρέχοντα λογαριασμό AWS:
Cognito Scanner είναι ένα εργαλείο γραμμής εντολών σε python που υλοποιεί διάφορες επιθέσεις στο Cognito, συμπεριλαμβανομένης της ανεπιθύμητης δημιουργίας λογαριασμού και του λογαριασμού oracle.
Εγκατάσταση
Χρήση
Για περισσότερες πληροφορίες ελέγξτε το https://github.com/padok-team/cognito-scanner
Εγγραφή
Τα User Pools επιτρέπουν από προεπιλογή την εγγραφή νέων χρηστών.
Εάν οποιοσδήποτε μπορεί να εγγραφεί
Μπορεί να συναντήσετε ένα σφάλμα που σας υποδεικνύει ότι χρειάζεται να παρέχετε περισσότερες λεπτομέρειες για τον χρήστη:
Μπορείτε να παρέχετε τις απαιτούμενες λεπτομέρειες με ένα JSON όπως:
Μπορείτε επίσης να χρησιμοποιήσετε αυτή τη λειτουργία για να απαριθμήσετε τους υπάρχοντες χρήστες. Αυτό είναι το μήνυμα σφάλματος όταν υπάρχει ήδη ένας χρήστης με αυτό το όνομα:
Σημείωση στην προηγούμενη εντολή πώς τα προσαρμοσμένα χαρακτηριστικά ξεκινούν με "custom:". Επίσης, να γνωρίζετε ότι κατά την εγγραφή δεν μπορείτε να δημιουργήσετε νέα προσαρμοσμένα χαρακτηριστικά για τον χρήστη. Μπορείτε μόνο να δώσετε τιμή σε προεπιλεγμένα χαρακτηριστικά (ακόμα κι αν δεν είναι υποχρεωτικά) και προσδιορισμένα προσαρμοσμένα χαρακτηριστικά.
Ή απλά για να ελέγξετε αν υπάρχει ένας αναγνωριστικός πελάτης. Αυτό είναι το σφάλμα αν ο αναγνωριστικός πελάτης δεν υπάρχει:
Εάν μόνο ο διαχειριστής μπορεί να εγγράψει χρήστες
Θα συναντήσετε αυτό το σφάλμα και δεν θα μπορείτε να εγγραφείτε ή να απαριθμήσετε χρήστες:
Επαλήθευση Εγγραφής
Το Cognito επιτρέπει την επαλήθευση ενός νέου χρήστη μέσω της επαλήθευσης του ηλεκτρονικού του ταχυδρομείου ή του αριθμού τηλεφώνου. Επομένως, κατά τη δημιουργία ενός χρήστη, συνήθως θα χρειαστείτε τουλάχιστον το όνομα χρήστη και τον κωδικό πρόσβασης και το ηλεκτρονικό ταχυδρομείο και/ή τον αριθμό τηλεφώνου. Απλά ορίστε έναν που ελέγχετε έτσι ώστε να λάβετε τον κωδικό για να επαληθεύσετε τον νεοδημιουργημένο χρήστη λογαριασμό σας όπως εδώ:
Ακόμα κι αν φαίνεται ότι μπορείτε να χρησιμοποιήσετε το ίδιο email και τον ίδιο αριθμό τηλεφώνου, όταν χρειαστεί να επαληθεύσετε τον δημιουργημένο χρήστη, το Cognito θα παραπονεθεί για τη χρήση των ίδιων πληροφοριών και δεν θα σας επιτρέψει να επαληθεύσετε τον λογαριασμό.
Ανόδος Προνομίων / Ενημέρωση Χαρακτηριστικών
Από προεπιλογή, ένας χρήστης μπορεί να τροποποιήσει την τιμή των χαρακτηριστικών του με κάτι όπως:
Προώθηση δικαιωμάτων με προσαρμοσμένα χαρακτηριστικά
Μπορεί να βρείτε προσαρμοσμένα χαρακτηριστικά που χρησιμοποιούνται (όπως isAdmin
), καθώς από προεπιλογή μπορείτε να αλλάξετε τις τιμές των δικών σας χαρακτηριστικών και μπορείτε να αναβαθμίσετε τα δικαιώματά σας αλλάζοντας την τιμή μόνοι σας!
Προώθηση δικαιωμάτων με τροποποίηση email/username
Μπορείτε να χρησιμοποιήσετε αυτό για να τροποποιήσετε το email και τον αριθμό τηλεφώνου ενός χρήστη, αλλά τότε, ακόμα κι αν ο λογαριασμός παραμένει επαληθευμένος, αυτά τα χαρακτηριστικά θα είναι ορισμένα σε μη επαληθευμένη κατάσταση (θα πρέπει να τα επαληθεύσετε ξανά).
Δεν θα μπορείτε να συνδεθείτε με το email ή τον αριθμό τηλεφώνου μέχρι να τα επαληθεύσετε, αλλά θα μπορείτε να συνδεθείτε με το όνομα χρήστη.
Σημειώστε ότι ακόμα κι αν το email τροποποιήθηκε και δεν επαληθεύτηκε, θα εμφανίζεται στο διακριτικό ταυτότητας (ID Token) μέσα στο πεδίο email
και το πεδίο email_verified
θα είναι ψευδές, αλλά αν η εφαρμογή δεν ελέγχει αυτό μπορείτε να προσποιηθείτε ως άλλοι χρήστες.
Επιπλέον, σημειώστε ότι μπορείτε να βάλετε οτιδήποτε μέσα στο πεδίο name
απλά τροποποιώντας το χαρακτηριστικό όνομα. Αν μια εφαρμογή ελέγχει αυτό το πεδίο για κάποιο λόγο αντί για το email
(ή οποιοδήποτε άλλο χαρακτηριστικό), μπορείτε να προσποιηθείτε ως άλλοι χρήστες.
Πάντως, αν για κάποιο λόγο άλλαξε το email σας για παράδειγμα σε ένα νέο, μπορείτε να επιβεβαιώσετε το email με τον κωδικό που λάβατε σε αυτήν τη διεύθυνση email:
Χρησιμοποιήστε το phone_number
αντί για το email
για να αλλάξετε/επαληθεύσετε ένα νέο αριθμό τηλεφώνου.
Ο διαχειριστής μπορεί επίσης να ενεργοποιήσει την επιλογή για σύνδεση με προτιμώμενο όνομα χρήστη. Σημειώστε ότι δεν θα μπορείτε να αλλάξετε αυτήν την τιμή σε οποιοδήποτε όνομα χρήστη ή προτιμώμενο_όνομα που ήδη χρησιμοποιείται για να προσποιηθείτε ως διαφορετικός χρήστης.
Ανάκτηση/Αλλαγή Κωδικού Πρόσβασης
Είναι δυνατή η ανάκτηση ενός κωδικού πρόσβασης απλά γνωρίζοντας το όνομα χρήστη (ή το email ή το τηλέφωνο γίνεται αποδεκτό) και έχοντας πρόσβαση σε αυτό, καθώς θα αποσταλεί ένας κωδικός εκεί:
Η απάντηση του διακομιστή θα είναι πάντα θετική, σαν να υπάρχει το όνομα χρήστη. Δεν μπορείτε να χρησιμοποιήσετε αυτήν τη μέθοδο για να απαριθμήσετε τους χρήστες.
Με τον παρακάτω κώδικα μπορείτε να αλλάξετε τον κωδικό πρόσβασης:
Για να αλλάξετε τον κωδικό πρόσβασης, χρειάζεστε να γνωρίζετε τον προηγούμενο κωδικό πρόσβασης:
Ταυτοποίηση
Ένα user pool υποστηρίζει διάφορους τρόπους ταυτοποίησης. Αν έχετε ένα όνομα χρήστη και κωδικό πρόσβασης, υπάρχουν επίσης διάφορες μέθοδοι που υποστηρίζονται για την σύνδεση. Επιπλέον, όταν ένας χρήστης ταυτοποιείται στο Pool, δίνονται 3 είδη διακριτικών: Το ID Token, το Access token και το Refresh token.
ID Token: Περιέχει δηλώσεις σχετικά με την ταυτότητα του ταυτοποιημένου χρήστη, όπως το
όνομα
, τοemail
και τοphone_number
. Το ID token μπορεί επίσης να χρησιμοποιηθεί για να ταυτοποιήσει τους χρήστες στους διακομιστές πόρων ή στις εφαρμογές διακομιστή. Πρέπει να επαληθεύσετε την υπογραφή του ID token πριν μπορέσετε να εμπιστευτείτε οποιαδήποτε δήλωση μέσα στο ID token αν το χρησιμοποιείτε σε εξωτερικές εφαρμογές.Το ID Token είναι το διακριτικό που περιέχει τις τιμές των χαρακτηριστικών του χρήστη, ακόμα και τα προσαρμοσμένα.
Access Token: Περιέχει δηλώσεις σχετικά με τον ταυτοποιημένο χρήστη, μια λίστα με τις ομάδες του χρήστη και μια λίστα με τις εμβέλειες. Ο σκοπός του access token είναι να εξουσιοδοτεί λειτουργίες API στο πλαίσιο του χρήστη στο user pool. Για παράδειγμα, μπορείτε να χρησιμοποιήσετε το access token για να επιτρέψετε στον χρήστη σας να προσθέσει, να αλλάξει ή να διαγράψει χαρακτηριστικά χρήστη.
Refresh Token: Με τα refresh tokens μπορείτε να λάβετε νέα ID Tokens και Access Tokens για τον χρήστη μέχρι το refresh token να γίνει άκυρο. Από προεπιλογή, το refresh token λήγει 30 ημέρες μετά την είσοδο του χρήστη στο user pool της εφαρμογής σας. Όταν δημιουργείτε μια εφαρμογή για το user pool σας, μπορείτε να ορίσετε την περίοδο ισχύος του refresh token της εφαρμογής σε οποιαδήποτε τιμή από 60 λεπτά έως 10 χρόνια.
ADMIN_NO_SRP_AUTH & ADMIN_USER_PASSWORD_AUTH
Αυτή είναι η ροή ταυτοποίησης στην πλευρά του διακομιστή:
Η εφαρμογή στην πλευρά του διακομιστή καλεί την λειτουργία API
AdminInitiateAuth
(αντί για τηνInitiateAuth
). Αυτή η λειτουργία απαιτεί διαπιστευτήρια AWS με δικαιώματα που περιλαμβάνουν ταcognito-idp:AdminInitiateAuth
καιcognito-idp:AdminRespondToAuthChallenge
. Η λειτουργία επιστρέφει τις απαιτούμενες παραμέτρους ταυτοποίησης.Αφού η εφαρμογή στην πλευρά του διακομιστή έχει τις παραμέτρους ταυτοποίησης, καλεί την λειτουργία API
AdminRespondToAuthChallenge
. Η λειτουργία APIAdminRespondToAuthChallenge
επιτυγχάνει μόνο όταν παρέχετε διαπιστευτήρια AWS.
Αυτή η μέθοδος ΔΕΝ είναι ενεργοποιημένη από προεπιλογή.
Για να συνδεθείτε χρειάζεστε να γνωρίζετε:
το αναγνωριστικό του user pool
το αναγνωριστικό του πελάτη
το όνομα χρήστη
τον κωδικό πρόσβασης
το μυστικό του πελάτη (μόνο αν η εφαρμογή έχει ρυθμιστεί να χρησιμοποιεί ένα μυστικό)
Για να είστε σε θέση να συνδεθείτε με αυτήν τη μέθοδο, η εφαρμογή πρέπει να επιτρέπει τη σύνδεση με ALLOW_ADMIN_USER_PASSWORD_AUTH
.
Επιπλέον, για να εκτελέσετε αυτήν την ενέργεια, χρειάζεστε διαπιστευτήρια με τα δικαιώματα cognito-idp:AdminInitiateAuth
και cognito-idp:AdminRespondToAuthChallenge
.
Last updated