Όλα όσα θέλατε να μάθετε για την ασφαλή επαναφορά κωδικού πρόσβασης. Μέρος 1ο

Πρόσφατα είχα χρόνο να σκεφτώ ξανά πώς θα έπρεπε να λειτουργεί μια δυνατότητα ασφαλούς επαναφοράς κωδικού πρόσβασης, πρώτα όταν δημιουργούσα αυτήν τη λειτουργία ASafaWeb, και μετά όταν βοήθησε ένα άλλο άτομο να κάνει κάτι παρόμοιο. Στη δεύτερη περίπτωση, ήθελα να του δώσω έναν σύνδεσμο προς έναν κανονικό πόρο με όλες τις λεπτομέρειες σχετικά με τον τρόπο ασφαλούς εφαρμογής της λειτουργίας επαναφοράς. Ωστόσο, το πρόβλημα είναι ότι δεν υπάρχει τέτοιος πόρος, τουλάχιστον ούτε ένας που να περιγράφει όλα όσα μου φαίνονται σημαντικά. Έτσι αποφάσισα να το γράψω μόνος μου.

Βλέπετε, ο κόσμος των ξεχασμένων κωδικών πρόσβασης είναι στην πραγματικότητα πολύ μυστηριώδης. Υπάρχουν πολλές διαφορετικές, απολύτως αποδεκτές απόψεις και πολλές αρκετά επικίνδυνες. Οι πιθανότητες είναι ότι έχετε συναντήσει το καθένα από αυτά πολλές φορές ως τελικός χρήστης. Γι' αυτό θα προσπαθήσω να χρησιμοποιήσω αυτά τα παραδείγματα για να δείξω ποιος το κάνει σωστά, ποιος όχι και σε τι πρέπει να εστιάσετε για να χρησιμοποιήσετε σωστά τη δυνατότητα στην εφαρμογή σας.

Όλα όσα θέλατε να μάθετε για την ασφαλή επαναφορά κωδικού πρόσβασης. Μέρος 1ο

Αποθήκευση κωδικού πρόσβασης: κατακερματισμός, κρυπτογράφηση και απλό κείμενο

Δεν μπορούμε να συζητήσουμε τι να κάνουμε με τους ξεχασμένους κωδικούς πρόσβασης πριν συζητήσουμε πώς να τους αποθηκεύσουμε. Οι κωδικοί πρόσβασης αποθηκεύονται στη βάση δεδομένων σε έναν από τους τρεις κύριους τύπους:

  1. Απλό κείμενο. Υπάρχει μια στήλη κωδικού πρόσβασης, η οποία αποθηκεύεται σε μορφή απλού κειμένου.
  2. Κρυπτογραφημένο. Συνήθως χρησιμοποιείται συμμετρική κρυπτογράφηση (ένα κλειδί χρησιμοποιείται τόσο για κρυπτογράφηση όσο και για αποκρυπτογράφηση) και οι κρυπτογραφημένοι κωδικοί πρόσβασης αποθηκεύονται επίσης στην ίδια στήλη.
  3. Κατακερματισμένο. Μονόδρομη διαδικασία (ο κωδικός πρόσβασης μπορεί να κατακερματιστεί, αλλά δεν μπορεί να αφαιρεθεί). Κωδικός πρόσβασης, Θα ήθελα να ελπίζω, ακολουθούμενο από ένα αλάτι, και το καθένα βρίσκεται στη δική του στήλη.

Ας πάμε κατευθείαν στην πιο απλή ερώτηση: Μην αποθηκεύετε ποτέ τους κωδικούς πρόσβασης σε απλό κείμενο! Ποτέ. Μία μόνο ευπάθεια σε ενέσεις, ένα απρόσεκτο αντίγραφο ασφαλείας ή ένα από τα δεκάδες άλλα απλά λάθη - και αυτό είναι, το gameover, όλοι οι κωδικοί σας - δηλαδή, συγγνώμη, κωδικούς πρόσβασης όλων των πελατών σας θα γίνει δημόσιος τομέας. Φυσικά, αυτό θα σήμαινε μια τεράστια πιθανότητα όλους τους κωδικούς πρόσβασης τους από όλους τους λογαριασμούς τους σε άλλα συστήματα. Και θα φταις εσύ.

Η κρυπτογράφηση είναι καλύτερη, αλλά έχει τις αδυναμίες της. Το πρόβλημα με την κρυπτογράφηση είναι η αποκρυπτογράφηση. μπορούμε να πάρουμε αυτούς τους κρυπτογράφους με τρελή εμφάνιση και να τους μετατρέψουμε σε απλό κείμενο, και όταν συμβεί αυτό, επιστρέφουμε στην κατάσταση του αναγνώσιμου από τον άνθρωπο κωδικού πρόσβασης. Πώς συμβαίνει αυτό; Ένα μικρό ελάττωμα εμφανίζεται στον κώδικα που αποκρυπτογραφεί τον κωδικό πρόσβασης, καθιστώντας τον διαθέσιμο στο κοινό - αυτός είναι ένας τρόπος. Οι χάκερ αποκτούν πρόσβαση στο μηχάνημα στο οποίο αποθηκεύονται κρυπτογραφημένα δεδομένα - αυτή είναι η δεύτερη μέθοδος. Ένας άλλος τρόπος, πάλι, είναι να κλέψετε το αντίγραφο ασφαλείας της βάσης δεδομένων και κάποιος να λάβει επίσης το κλειδί κρυπτογράφησης, το οποίο συχνά αποθηκεύεται με μεγάλη ανασφάλεια.

Και αυτό μας οδηγεί στο κατακερματισμό. Η ιδέα πίσω από τον κατακερματισμό είναι ότι είναι μονόδρομος. Ο μόνος τρόπος για να συγκρίνετε τον κωδικό πρόσβασης που έχει εισαχθεί από τον χρήστη με την κατακερματισμένη έκδοσή του είναι να κατακερματίσετε την είσοδο και να τα συγκρίνετε. Για να αποτρέψουμε επιθέσεις από εργαλεία όπως πίνακες ουράνιου τόξου, αλατίζουμε τη διαδικασία με τυχαίο τρόπο (διαβάστε το post σχετικά με την κρυπτογραφική αποθήκευση). Τελικά, εάν εφαρμοστούν σωστά, μπορούμε να είμαστε σίγουροι ότι οι κατακερματισμένοι κωδικοί πρόσβασης δεν θα γίνουν ποτέ ξανά απλό κείμενο (θα μιλήσω για τα οφέλη διαφορετικών αλγορίθμων κατακερματισμού σε άλλη ανάρτηση).

Ένα γρήγορο επιχείρημα σχετικά με τον κατακερματισμό έναντι της κρυπτογράφησης: ο μόνος λόγος που θα χρειαστεί ποτέ να κρυπτογραφήσετε αντί να κατακερματίσετε έναν κωδικό πρόσβασης είναι όταν πρέπει να δείτε τον κωδικό πρόσβασης σε απλό κείμενο και δεν πρέπει ποτέ να το θέλεις αυτό, τουλάχιστον σε μια τυπική κατάσταση ιστότοπου. Εάν το χρειάζεστε, τότε πιθανότατα κάνετε κάτι λάθος!

Προσοχή!

Παρακάτω στο κείμενο της ανάρτησης υπάρχει μέρος ενός στιγμιότυπου της πορνογραφικής ιστοσελίδας AlotPorn. Είναι όμορφα στολισμένο, οπότε δεν υπάρχει τίποτα που να μην μπορείτε να δείτε στην παραλία, αλλά αν εξακολουθεί να είναι πιθανό να προκαλέσει προβλήματα, μην κάνετε κύλιση προς τα κάτω.

Να επαναφέρετε πάντα τον κωδικό πρόσβασής σας ποτέ μην του το θυμίζεις

Σας έχει ζητηθεί ποτέ να δημιουργήσετε μια συνάρτηση υπενθυμίσεις Κωδικός πρόσβασης? Κάντε ένα βήμα πίσω και σκεφτείτε αυτό το αίτημα αντίστροφα: γιατί είναι απαραίτητη αυτή η «υπενθύμιση»; Επειδή ο χρήστης ξέχασε τον κωδικό πρόσβασης. Τι θέλουμε πραγματικά να κάνουμε; Βοηθήστε τον να συνδεθεί ξανά.

Αντιλαμβάνομαι ότι η λέξη "υπενθύμιση" χρησιμοποιείται (συχνά) με την καθομιλουμένη, αλλά αυτό που πραγματικά προσπαθούμε να κάνουμε είναι βοηθήστε με ασφάλεια τον χρήστη να είναι ξανά online. Εφόσον χρειαζόμαστε ασφάλεια, υπάρχουν δύο λόγοι για τους οποίους μια υπενθύμιση (δηλαδή η αποστολή του κωδικού πρόσβασης στον χρήστη) δεν είναι κατάλληλη:

  1. Το email είναι ένα ανασφαλές κανάλι. Ακριβώς όπως δεν θα στέλναμε τίποτα ευαίσθητο μέσω HTTP (θα χρησιμοποιούσαμε HTTPS), δεν θα πρέπει να στέλνουμε τίποτα ευαίσθητο μέσω ηλεκτρονικού ταχυδρομείου, επειδή το επίπεδο μεταφοράς του είναι ανασφαλές. Στην πραγματικότητα, αυτό είναι πολύ χειρότερο από την απλή αποστολή πληροφοριών μέσω ενός μη ασφαλούς πρωτοκόλλου μεταφοράς, επειδή η αλληλογραφία συχνά αποθηκεύεται σε μια συσκευή αποθήκευσης, προσβάσιμη στους διαχειριστές συστήματος, προωθείται και διανέμεται, προσβάσιμη σε κακόβουλο λογισμικό κ.λπ. Το μη κρυπτογραφημένο email είναι ένα εξαιρετικά ανασφαλές κανάλι.
  2. Δεν θα πρέπει να έχετε πρόσβαση στον κωδικό πρόσβασης ούτως ή άλλως. Ξαναδιαβάστε την προηγούμενη ενότητα σχετικά με την αποθήκευση - θα πρέπει να έχετε έναν κατακερματισμό του κωδικού πρόσβασης (με καλό αλάτι), που σημαίνει ότι δεν θα πρέπει με κανέναν τρόπο να εξαγάγετε τον κωδικό πρόσβασης και να τον στείλετε μέσω ταχυδρομείου.

Επιτρέψτε μου να καταδείξω το πρόβλημα με ένα παράδειγμα usoutdoor.com: Εδώ είναι μια τυπική σελίδα σύνδεσης:

Όλα όσα θέλατε να μάθετε για την ασφαλή επαναφορά κωδικού πρόσβασης. Μέρος 1ο
Προφανώς, το πρώτο πρόβλημα είναι ότι η σελίδα σύνδεσης δεν φορτώνεται μέσω HTTPS, αλλά ο ιστότοπος σας ζητά επίσης να στείλετε έναν κωδικό πρόσβασης («Αποστολή κωδικού πρόσβασης»). Αυτό μπορεί να είναι ένα παράδειγμα της καθομιλουμένης χρήσης του όρου που αναφέρθηκε παραπάνω, οπότε ας το πάμε ένα βήμα παραπέρα και ας δούμε τι συμβαίνει:

Όλα όσα θέλατε να μάθετε για την ασφαλή επαναφορά κωδικού πρόσβασης. Μέρος 1ο
Δεν φαίνεται πολύ καλύτερο, δυστυχώς. και ένα email επιβεβαιώνει ότι υπάρχει πρόβλημα:

Όλα όσα θέλατε να μάθετε για την ασφαλή επαναφορά κωδικού πρόσβασης. Μέρος 1ο
Αυτό μας λέει δύο σημαντικές πτυχές του usoutdoor.com:

  1. Ο ιστότοπος δεν κατακερματίζει κωδικούς πρόσβασης. Στην καλύτερη περίπτωση, είναι κρυπτογραφημένα, αλλά είναι πιθανό να αποθηκεύονται σε απλό κείμενο. Δεν βλέπουμε καμία απόδειξη για το αντίθετο.
  2. Ο ιστότοπος στέλνει έναν μακροπρόθεσμο κωδικό πρόσβασης (μπορούμε να επιστρέψουμε και να τον χρησιμοποιήσουμε ξανά και ξανά) μέσω ενός μη ασφαλούς καναλιού.

Με αυτό το πρόβλημα, πρέπει να ελέγξουμε εάν η διαδικασία επαναφοράς γίνεται με ασφαλή τρόπο. Το πρώτο βήμα για να γίνει αυτό είναι να βεβαιωθείτε ότι ο αιτών έχει το δικαίωμα να πραγματοποιήσει την επαναφορά. Με άλλα λόγια, πριν από αυτό χρειαζόμαστε έλεγχο ταυτότητας. Ας ρίξουμε μια ματιά στο τι συμβαίνει όταν μια ταυτότητα επαληθεύεται χωρίς πρώτα να επαληθεύσουμε ότι ο αιτών είναι στην πραγματικότητα ο κάτοχος του λογαριασμού.

Καταχώριση ονομάτων χρήστη και ο αντίκτυπός της στην ανωνυμία

Αυτό το πρόβλημα απεικονίζεται καλύτερα οπτικά. Πρόβλημα:

Όλα όσα θέλατε να μάθετε για την ασφαλή επαναφορά κωδικού πρόσβασης. Μέρος 1ο
Βλέπετε? Δώστε προσοχή στο μήνυμα "Δεν υπάρχει εγγεγραμμένος χρήστης με αυτήν τη διεύθυνση email." Το πρόβλημα προφανώς προκύπτει εάν ένα τέτοιο site επιβεβαιώσει διαθεσιμότητα χρήστη που έχει εγγραφεί με μια τέτοια διεύθυνση email. Μπίνγκο - μόλις ανακαλύψατε το πορνό φετίχ του συζύγου/αφεντικού/γείτονά σας!

Φυσικά, το πορνό είναι ένα αρκετά εμβληματικό παράδειγμα της σημασίας του απορρήτου, αλλά οι κίνδυνοι της συσχέτισης ενός ατόμου με έναν συγκεκριμένο ιστότοπο είναι πολύ ευρύτεροι από την δυνητικά άβολη κατάσταση που περιγράφεται παραπάνω. Ένας κίνδυνος είναι η κοινωνική μηχανική. Εάν ο εισβολέας μπορεί να ταιριάξει ένα άτομο με την υπηρεσία, τότε θα έχει πληροφορίες που μπορεί να αρχίσει να χρησιμοποιεί. Για παράδειγμα, μπορεί να επικοινωνήσει με ένα άτομο που παρουσιάζεται ως εκπρόσωπος ενός ιστότοπου και να ζητήσει πρόσθετες πληροφορίες σε μια προσπάθεια να δεσμευτεί ψάρεμα με δόρυ.

Τέτοιες πρακτικές εγείρουν επίσης τον κίνδυνο της «απαρίθμησης ονομάτων χρήστη», μέσω της οποίας μπορεί κανείς να επαληθεύσει την ύπαρξη μιας ολόκληρης συλλογής ονομάτων χρηστών ή διευθύνσεων ηλεκτρονικού ταχυδρομείου σε έναν ιστότοπο, απλώς διεκπεραιώνοντας ομαδικά ερωτήματα και εξετάζοντας τις απαντήσεις σε αυτά. Έχετε μια λίστα με διευθύνσεις email όλων των υπαλλήλων και λίγα λεπτά για να γράψετε ένα σενάριο; Τότε βλέπεις ποιο είναι το πρόβλημα!

Ποια είναι η εναλλακτική; Στην πραγματικότητα, είναι αρκετά απλό και εφαρμόζεται θαυμάσια Entropay:

Όλα όσα θέλατε να μάθετε για την ασφαλή επαναφορά κωδικού πρόσβασης. Μέρος 1ο
Εδώ η Entropay δεν αποκαλύπτει απολύτως τίποτα σχετικά με την ύπαρξη μιας διεύθυνσης email στο σύστημά της σε κάποιον που δεν είναι κάτοχος αυτής της διεύθυνσης... Αν εσύ το δικό αυτή η διεύθυνση και δεν υπάρχει στο σύστημα, τότε θα λάβετε ένα email όπως αυτό:

Όλα όσα θέλατε να μάθετε για την ασφαλή επαναφορά κωδικού πρόσβασης. Μέρος 1ο
Φυσικά, μπορεί να υπάρχουν αποδεκτές καταστάσεις στις οποίες κάποιος σκέφτεταιπου έχετε εγγραφεί στον ιστότοπο. αλλά αυτό δεν ισχύει ή το έκανα από διαφορετική διεύθυνση email. Το παράδειγμα που φαίνεται παραπάνω χειρίζεται καλά και τις δύο καταστάσεις. Προφανώς, εάν η διεύθυνση ταιριάζει, θα λάβετε ένα email που θα διευκολύνει την επαναφορά του κωδικού πρόσβασής σας.

Η λεπτότητα της λύσης που επέλεξε η Entropay είναι ότι η επαλήθευση ταυτοποίησης πραγματοποιείται σύμφωνα με ηλεκτρονικό ταχυδρομείο πριν από οποιαδήποτε ηλεκτρονική επαλήθευση. Ορισμένοι ιστότοποι ζητούν από τους χρήστες την απάντηση σε μια ερώτηση ασφαλείας (περισσότερα για αυτό παρακάτω) να πώς μπορεί να ξεκινήσει η επαναφορά? Ωστόσο, το πρόβλημα με αυτό είναι ότι πρέπει να απαντήσετε στην ερώτηση παρέχοντας ταυτόχρονα κάποια μορφή αναγνώρισης (email ή όνομα χρήστη), κάτι που στη συνέχεια καθιστά σχεδόν αδύνατο να απαντήσετε διαισθητικά χωρίς να αποκαλύψετε την ύπαρξη του λογαριασμού του ανώνυμου χρήστη.

Με αυτή την προσέγγιση υπάρχει μικρό μειωμένη χρηστικότητα γιατί αν προσπαθήσετε να επαναφέρετε έναν ανύπαρκτο λογαριασμό, δεν υπάρχει άμεση ανατροφοδότηση. Φυσικά, αυτό είναι το νόημα της αποστολής ενός email, αλλά από την οπτική γωνία ενός πραγματικού τελικού χρήστη, εάν εισάγουν λάθος διεύθυνση, θα το γνωρίζουν μόνο για πρώτη φορά όταν λάβουν το email. Αυτό μπορεί να προκαλέσει κάποια ένταση από την πλευρά του, αλλά αυτό είναι ένα μικρό τίμημα για μια τόσο σπάνια διαδικασία.

Μια άλλη σημείωση, ελαφρώς εκτός θέματος: οι λειτουργίες βοήθειας σύνδεσης που αποκαλύπτουν εάν ένα όνομα χρήστη ή μια διεύθυνση email είναι σωστά έχουν το ίδιο πρόβλημα. Να απαντάτε πάντα στον χρήστη με ένα μήνυμα "Ο συνδυασμός ονόματος χρήστη και κωδικού πρόσβασης δεν είναι έγκυρος" αντί να επιβεβαιώνει ρητά την ύπαρξη των διαπιστευτηρίων (για παράδειγμα, "το όνομα χρήστη είναι σωστό, αλλά ο κωδικός πρόσβασης είναι λάθος").

Αποστολή επαναφοράς κωδικού πρόσβασης έναντι αποστολής διεύθυνσης URL επαναφοράς

Η επόμενη ιδέα που πρέπει να συζητήσουμε είναι πώς να επαναφέρετε τον κωδικό πρόσβασής σας. Υπάρχουν δύο δημοφιλείς λύσεις:

  1. Δημιουργία νέου κωδικού πρόσβασης στο διακομιστή και αποστολή του μέσω email
  2. Στείλτε ένα email με μια μοναδική διεύθυνση URL για να διευκολύνετε τη διαδικασία επαναφοράς

Παρά πολλούς οδηγούς, το πρώτο σημείο δεν πρέπει ποτέ να χρησιμοποιείται. Το πρόβλημα με αυτό είναι ότι σημαίνει ότι υπάρχει αποθηκευμένο κωδικό πρόσβασης, στο οποίο μπορείτε να επιστρέψετε και να χρησιμοποιήσετε ξανά ανά πάσα στιγμή. στάλθηκε μέσω ενός μη ασφαλούς καναλιού και παραμένει στα εισερχόμενά σας. Οι πιθανότητες είναι ότι τα εισερχόμενα συγχρονίζονται μεταξύ των φορητών συσκευών και του προγράμματος-πελάτη ηλεκτρονικού ταχυδρομείου, καθώς και ενδέχεται να αποθηκευτούν στο διαδίκτυο στην υπηρεσία ηλεκτρονικού ταχυδρομείου Ιστού για πολύ μεγάλο χρονικό διάστημα. Το θέμα είναι ότι ένα γραμματοκιβώτιο δεν μπορεί να θεωρηθεί αξιόπιστο μέσο μακροπρόθεσμης αποθήκευσης.

Αλλά εκτός από αυτό, το πρώτο σημείο έχει ένα άλλο σοβαρό πρόβλημα - αυτό απλοποιεί όσο το δυνατόν περισσότερο αποκλεισμός λογαριασμού με κακόβουλη πρόθεση. Εάν γνωρίζω τη διεύθυνση email κάποιου που έχει λογαριασμό σε έναν ιστότοπο, τότε μπορώ να τον αποκλείσω ανά πάσα στιγμή επαναφέροντας απλώς τον κωδικό πρόσβασής του. Αυτή είναι μια επίθεση άρνησης υπηρεσίας που σερβίρεται σε ασημένια πιατέλα! Αυτός είναι ο λόγος για τον οποίο η επαναφορά θα πρέπει να εκτελείται μόνο μετά από επιτυχή επαλήθευση των δικαιωμάτων του αιτούντος σε αυτήν.

Όταν μιλάμε για επαναφορά URL, εννοούμε τη διεύθυνση ενός ιστότοπου που είναι μοναδικό σε αυτή τη συγκεκριμένη περίπτωση της διαδικασίας επαναφοράς. Φυσικά, θα πρέπει να είναι τυχαίο, να μην είναι εύκολο να μαντέψει κανείς και να μην περιέχει εξωτερικούς συνδέσμους προς τον λογαριασμό που διευκολύνουν την επαναφορά του. Για παράδειγμα, η διεύθυνση URL επαναφοράς δεν πρέπει να είναι απλώς μια διαδρομή όπως "Επαναφορά/?username=JohnSmith".

Θέλουμε να δημιουργήσουμε ένα μοναδικό διακριτικό που μπορεί να αποσταλεί ως διεύθυνση URL επαναφοράς και στη συνέχεια να αντιστοιχιστεί με την εγγραφή διακομιστή του λογαριασμού του χρήστη, επιβεβαιώνοντας έτσι ότι ο κάτοχος του λογαριασμού είναι στην πραγματικότητα το ίδιο άτομο που προσπαθεί να επαναφέρει τον κωδικό πρόσβασης . Για παράδειγμα, ένα διακριτικό θα μπορούσε να είναι "3ce7854015cd38c862cb9e14a1ae552b" και να αποθηκευτεί σε έναν πίνακα μαζί με το αναγνωριστικό του χρήστη που εκτελεί την επαναφορά και τη στιγμή που δημιουργήθηκε το διακριτικό (περισσότερα για αυτό παρακάτω). Όταν το email αποστέλλεται, περιέχει μια διεύθυνση URL όπως "Reset/?id=3ce7854015cd38c862cb9e14a1ae552b", και όταν ο χρήστης το κατεβάσει, η σελίδα ζητά την ύπαρξη του διακριτικού, μετά από το οποίο επιβεβαιώνει τις πληροφορίες του χρήστη και του επιτρέπει να αλλάξει το Κωδικός πρόσβασης.

Φυσικά, δεδομένου ότι η παραπάνω διαδικασία (ελπίζουμε) επιτρέπει στον χρήστη να δημιουργήσει έναν νέο κωδικό πρόσβασης, πρέπει να διασφαλίσουμε ότι η διεύθυνση URL φορτώνεται μέσω HTTPS. Οχι, η αποστολή του με αίτημα POST μέσω HTTPS δεν αρκεί, αυτή η διεύθυνση URL διακριτικού πρέπει να χρησιμοποιεί ασφάλεια επιπέδου μεταφοράς, έτσι ώστε να μην είναι δυνατή η επίθεση στη νέα φόρμα κωδικού πρόσβασης MITM και ο κωδικός πρόσβασης που δημιούργησε ο χρήστης μεταδόθηκε μέσω ασφαλούς σύνδεσης.

Επίσης, για τη διεύθυνση URL επαναφοράς πρέπει να προσθέσετε ένα χρονικό όριο διακριτικού, ώστε η διαδικασία επαναφοράς να μπορεί να ολοκληρωθεί μέσα σε ένα συγκεκριμένο διάστημα, ας πούμε μέσα σε μία ώρα. Αυτό διασφαλίζει ότι το παράθυρο χρόνου επαναφοράς διατηρείται στο ελάχιστο, έτσι ώστε ο παραλήπτης της διεύθυνσης URL επαναφοράς να μπορεί να ενεργεί μόνο μέσα σε αυτό το πολύ μικρό παράθυρο. Φυσικά, ο εισβολέας μπορεί να ξεκινήσει ξανά τη διαδικασία επαναφοράς, αλλά θα χρειαστεί να αποκτήσει μια άλλη μοναδική διεύθυνση URL επαναφοράς.

Τέλος, πρέπει να διασφαλίσουμε ότι αυτή η διαδικασία είναι μιας χρήσης. Μόλις ολοκληρωθεί η διαδικασία επαναφοράς, το διακριτικό πρέπει να αφαιρεθεί έτσι ώστε η διεύθυνση URL επαναφοράς να μην είναι πλέον λειτουργική. Το προηγούμενο σημείο είναι απαραίτητο για να διασφαλιστεί ότι ο εισβολέας έχει ένα πολύ μικρό παράθυρο κατά το οποίο μπορεί να χειριστεί τη διεύθυνση URL επαναφοράς. Επιπλέον, φυσικά, όταν η επαναφορά είναι επιτυχής, το διακριτικό δεν χρειάζεται πλέον.

Ορισμένα από αυτά τα βήματα μπορεί να φαίνονται υπερβολικά περιττά, αλλά δεν επηρεάζουν τη χρηστικότητα και στην πραγματικότητα βελτιώστε την ασφάλεια, αν και σε καταστάσεις που ελπίζουμε ότι θα είναι σπάνιες. Στο 99% των περιπτώσεων, ο χρήστης θα ενεργοποιήσει την επαναφορά σε πολύ σύντομο χρονικό διάστημα και δεν θα επαναφέρει τον κωδικό πρόσβασης στο εγγύς μέλλον.

Ο ρόλος του CAPTCHA

Ω, CAPTCHA, το χαρακτηριστικό ασφαλείας που όλοι αγαπάμε να μισούμε! Στην πραγματικότητα, το CAPTCHA δεν είναι τόσο ένα εργαλείο προστασίας όσο ένα εργαλείο αναγνώρισης - είτε είστε άτομο είτε ρομπότ (ή ένα αυτοματοποιημένο σενάριο). Σκοπός του είναι να αποφευχθεί η αυτόματη υποβολή εντύπων, η οποία, φυσικά, κουτί να χρησιμοποιηθεί ως προσπάθεια διάρρηξης της ασφάλειας. Στο πλαίσιο της επαναφοράς κωδικού πρόσβασης, το CAPTCHA σημαίνει ότι η συνάρτηση επαναφοράς δεν μπορεί να εξαναγκαστεί να στείλει ανεπιθύμητο μήνυμα στον χρήστη ή να προσπαθήσει να προσδιορίσει την ύπαρξη λογαριασμών (κάτι που φυσικά δεν θα είναι δυνατό αν ακολουθήσετε τις συμβουλές στην ενότητα για επαλήθευση ταυτοτήτων).

Φυσικά, το ίδιο το CAPTCHA δεν είναι τέλειο. Υπάρχουν πολλά προηγούμενα για το λογισμικό του «hacking» και την επίτευξη επαρκών ποσοστών επιτυχίας (60-70%). Επιπλέον, υπάρχει μια λύση που εμφανίζεται στην ανάρτησή μου σχετικά Παραβίαση CAPTCHA από αυτοματοποιημένα άτομα, όπου μπορείτε να πληρώσετε τα άτομα κλάσματα του σεντ για να λύσουν κάθε CAPTCHA και να επιτύχετε ποσοστό επιτυχίας 94%. Δηλαδή είναι ευάλωτο, αλλά (ελαφρώς) σηκώνει το φράγμα εισόδου.

Ας ρίξουμε μια ματιά στο παράδειγμα του PayPal:

Όλα όσα θέλατε να μάθετε για την ασφαλή επαναφορά κωδικού πρόσβασης. Μέρος 1ο
Σε αυτήν την περίπτωση, η διαδικασία επαναφοράς απλά δεν μπορεί να ξεκινήσει μέχρι να λυθεί το CAPTCHA, επομένως θεωρητικά είναι αδύνατο να αυτοματοποιηθεί η διαδικασία. Θεωρητικά.

Ωστόσο, για τις περισσότερες εφαρμογές Ιστού αυτό θα είναι υπερβολικό και απόλυτο δίκιο αντιπροσωπεύει μείωση της χρηστικότητας - στους ανθρώπους απλά δεν αρέσει το CAPTCHA! Επιπλέον, το CAPTCHA είναι κάτι στο οποίο μπορείτε εύκολα να επιστρέψετε εάν χρειαστεί. Εάν η υπηρεσία αρχίσει να δέχεται επίθεση (εδώ είναι χρήσιμη η καταγραφή, αλλά αργότερα, η προσθήκη ενός CAPTCHA δεν θα μπορούσε να είναι ευκολότερη.

Μυστικές ερωτήσεις και απαντήσεις

Με όλες τις μεθόδους που εξετάσαμε, μπορέσαμε να επαναφέρουμε τον κωδικό πρόσβασης απλώς έχοντας πρόσβαση στον λογαριασμό email. Λέω «απλώς», αλλά, φυσικά, είναι παράνομο να αποκτήσεις πρόσβαση στον λογαριασμό email κάποιου άλλου. θα έπρεπε είναι μια πολύπλοκη διαδικασία. Ωστόσο δεν είναι πάντα έτσι.

Μάλιστα, ο παραπάνω σύνδεσμος για το χακάρισμα του Yahoo! εξυπηρετεί δύο σκοπούς. πρώτον, δείχνει πόσο εύκολο είναι να χακάρεις (ορισμένους) λογαριασμούς email και, δεύτερον, δείχνει πόσο κακές ερωτήσεις ασφαλείας μπορούν να χρησιμοποιηθούν με κακόβουλη πρόθεση. Αλλά θα επανέλθουμε σε αυτό αργότερα.

Το πρόβλημα με τις XNUMX% επαναφορές κωδικού πρόσβασης που βασίζονται σε email είναι ότι η ακεραιότητα του λογαριασμού για τον ιστότοπο που προσπαθείτε να επαναφέρετε εξαρτάται XNUMX% από την ακεραιότητα του λογαριασμού email. Όποιος έχει πρόσβαση στο email σας έχει πρόσβαση σε οποιονδήποτε λογαριασμό που μπορεί να επαναφερθεί με απλή λήψη ενός email. Για τέτοιους λογαριασμούς, το email είναι το «κλειδί σε όλες τις πόρτες» της διαδικτυακής σας ζωής.

Ένας τρόπος για να μειώσετε αυτόν τον κίνδυνο είναι να εφαρμόσετε ένα μοτίβο ερωτήσεων και απαντήσεων ασφαλείας. Αναμφίβολα τα έχετε ήδη δει: επιλέξτε μια ερώτηση που μόνο εσείς μπορείτε να απαντήσετε έχω γνωρίζετε την απάντηση και, στη συνέχεια, όταν επαναφέρετε τον κωδικό πρόσβασής σας, θα σας ζητηθεί. Αυτό προσθέτει τη σιγουριά ότι το άτομο που επιχειρεί την επαναφορά είναι πράγματι ο κάτοχος του λογαριασμού.

Επιστροφή στη Σάρα Πέιλιν: το λάθος ήταν ότι μπορούσαν να βρεθούν εύκολα οι απαντήσεις στην ερώτηση/ερωτήσεις ασφαλείας της. Ιδιαίτερα όταν είστε τόσο σημαντικό δημόσιο πρόσωπο, οι πληροφορίες σχετικά με το πατρικό όνομα της μητέρας σας, το εκπαιδευτικό ιστορικό ή το πού μπορεί να ζούσε κάποιος στο παρελθόν δεν είναι και τόσο μυστικό. Στην πραγματικότητα, το μεγαλύτερο μέρος του μπορεί να το βρει σχεδόν οποιοσδήποτε. Αυτό συνέβη στη Σάρα:

Ο χάκερ Ντέιβιντ Κέρνελ απέκτησε πρόσβαση στον λογαριασμό της Πέιλιν βρίσκοντας λεπτομέρειες για το ιστορικό της, όπως το πανεπιστήμιο και την ημερομηνία γέννησής της, και στη συνέχεια χρησιμοποιώντας τη δυνατότητα ανάκτησης ξεχασμένου κωδικού πρόσβασης του Yahoo!.

Πρώτα απ 'όλα, πρόκειται για σφάλμα σχεδιασμού εκ μέρους της Yahoo! — καθορίζοντας τόσο απλές ερωτήσεις, η εταιρεία ουσιαστικά σαμποτάρει την αξία της ερώτησης ασφαλείας και συνεπώς την προστασία του συστήματός της. Φυσικά, η επαναφορά κωδικών πρόσβασης για έναν λογαριασμό email είναι πάντα πιο δύσκολη, καθώς δεν μπορείτε να αποδείξετε την ιδιοκτησία στέλνοντας ένα email στον κάτοχο (χωρίς να έχετε δεύτερη διεύθυνση), αλλά ευτυχώς δεν υπάρχουν πολλές χρήσεις για τη δημιουργία ενός τέτοιου συστήματος σήμερα.

Ας επιστρέψουμε στις ερωτήσεις ασφαλείας - υπάρχει μια επιλογή που επιτρέπει στον χρήστη να δημιουργήσει τις δικές του ερωτήσεις. Το πρόβλημα είναι ότι αυτό θα οδηγήσει σε τρομερά προφανή ερωτήματα:

Τι χρώμα είναι ο ουρανός;

Ερωτήσεις που κάνουν τους ανθρώπους να νιώθουν άβολα όταν χρησιμοποιείται μια ερώτηση ασφαλείας για αναγνώριση πρόσωπο (για παράδειγμα, σε τηλεφωνικό κέντρο):

Με ποιον κοιμήθηκα τα Χριστούγεννα;

Ή ειλικρινά ηλίθιες ερωτήσεις:

Πώς γράφεται ο "κωδικός πρόσβασης";

Όταν πρόκειται για ερωτήσεις ασφαλείας, οι χρήστες πρέπει να σωθούν από τον εαυτό τους! Με άλλα λόγια, η ερώτηση ασφαλείας θα πρέπει να καθορίζεται από τον ίδιο τον ιστότοπο ή καλύτερα να τίθεται σειρά ερωτήσεις ασφαλείας από τις οποίες ο χρήστης μπορεί να επιλέξει. Και δεν είναι εύκολο να το επιλέξεις ένας; Στην ιδανική περίπτωση, ο χρήστης θα πρέπει να επιλέξει δύο ή περισσότερες ερωτήσεις ασφαλείας κατά την εγγραφή του λογαριασμού, το οποίο στη συνέχεια θα χρησιμοποιηθεί ως δεύτερο κανάλι αναγνώρισης. Η ύπαρξη πολλών ερωτήσεων αυξάνει την εμπιστοσύνη στη διαδικασία επαλήθευσης και παρέχει επίσης τη δυνατότητα προσθήκης τυχαίας (δεν εμφανίζεται πάντα η ίδια ερώτηση), ενώ παρέχει και έναν πλεονασμό σε περίπτωση που ο πραγματικός χρήστης έχει ξεχάσει τον κωδικό πρόσβασης.

Τι είναι μια καλή ερώτηση ασφαλείας; Αυτό επηρεάζεται από διάφορους παράγοντες:

  1. Αυτός πρέπει να είναι σύντομος — η ερώτηση πρέπει να είναι σαφής και ξεκάθαρη.
  2. Η απάντηση πρέπει να είναι ειδικός — δεν χρειαζόμαστε μια ερώτηση στην οποία ένα άτομο μπορεί να απαντήσει διαφορετικά
  3. Πιθανές απαντήσεις θα πρέπει να είναι ποικίλος - ρωτώντας το αγαπημένο χρώμα κάποιου, προκύπτει ένα πολύ μικρό υποσύνολο πιθανών απαντήσεων
  4. Αναζήτηση η απάντηση πρέπει να είναι σύνθετη - εάν η απάντηση μπορεί να βρεθεί εύκολα κάθε (θυμηθείτε άτομα σε υψηλές θέσεις), τότε είναι κακός
  5. Η απάντηση πρέπει να είναι μόνιμος εν καιρώ - αν ρωτήσετε την αγαπημένη ταινία κάποιου, τότε ένα χρόνο αργότερα η απάντηση μπορεί να είναι διαφορετική

Όπως συμβαίνει, υπάρχει ένας ιστότοπος αφιερωμένος στο να κάνει καλές ερωτήσεις που ονομάζεται GoodSecurityQuestions.com. Μερικές από τις ερωτήσεις φαίνονται αρκετά καλές, άλλες δεν περνούν κάποιες από τις δοκιμές που περιγράφονται παραπάνω, ειδικά το τεστ «ευκολίας αναζήτησης».

Επιτρέψτε μου να δείξω πώς το PayPal εφαρμόζει ερωτήσεις ασφαλείας και, ειδικότερα, την προσπάθεια που καταβάλλει ο ιστότοπος για τον έλεγχο ταυτότητας. Παραπάνω είδαμε τη σελίδα για την έναρξη της διαδικασίας (με CAPTCHA) και εδώ θα δείξουμε τι συμβαίνει αφού εισαγάγετε τη διεύθυνση email σας και λύσετε το CAPTCHA:

Όλα όσα θέλατε να μάθετε για την ασφαλή επαναφορά κωδικού πρόσβασης. Μέρος 1ο
Ως αποτέλεσμα, ο χρήστης λαμβάνει το ακόλουθο γράμμα:

Όλα όσα θέλατε να μάθετε για την ασφαλή επαναφορά κωδικού πρόσβασης. Μέρος 1ο
Μέχρι στιγμής όλα είναι αρκετά φυσιολογικά, αλλά εδώ είναι τι κρύβεται πίσω από αυτήν τη διεύθυνση URL επαναφοράς:

Όλα όσα θέλατε να μάθετε για την ασφαλή επαναφορά κωδικού πρόσβασης. Μέρος 1ο
Έτσι, τα ερωτήματα ασφαλείας μπαίνουν στο παιχνίδι. Στην πραγματικότητα, το PayPal σάς επιτρέπει επίσης να επαναφέρετε τον κωδικό πρόσβασής σας επαληθεύοντας τον αριθμό της πιστωτικής σας κάρτας, επομένως υπάρχει ένα επιπλέον κανάλι στο οποίο πολλοί ιστότοποι δεν έχουν πρόσβαση. Απλώς δεν μπορώ να αλλάξω τον κωδικό πρόσβασής μου χωρίς να απαντήσω και τα δύο ερώτηση ασφαλείας (ή μη γνώση του αριθμού της κάρτας). Ακόμα κι αν κάποιος παραβίαζε το email μου, δεν θα μπορούσε να επαναφέρει τον κωδικό πρόσβασης του λογαριασμού μου στο PayPal εκτός και αν γνώριζε λίγο περισσότερες προσωπικές πληροφορίες για εμένα. Τι πληροφορίες; Ακολουθούν οι επιλογές ερωτήσεων ασφαλείας που προσφέρει το PayPal:

Όλα όσα θέλατε να μάθετε για την ασφαλή επαναφορά κωδικού πρόσβασης. Μέρος 1ο
Η ερώτηση για το σχολείο και το νοσοκομείο μπορεί να είναι λίγο μπερδεμένη όσον αφορά την ευκολία αναζήτησης, αλλά οι άλλες δεν είναι και πολύ κακές. Ωστόσο, για να ενισχυθεί η ασφάλεια, το PayPal απαιτεί πρόσθετη ταυτοποίηση για αλλαγές απαντήσεις σε ερωτήσεις ασφαλείας:

Όλα όσα θέλατε να μάθετε για την ασφαλή επαναφορά κωδικού πρόσβασης. Μέρος 1ο
Το PayPal είναι ένα αρκετά ουτοπικό παράδειγμα ασφαλούς επαναφοράς κωδικού πρόσβασης: εφαρμόζει ένα CAPTCHA για να μειώσει τον κίνδυνο επιθέσεων ωμής βίας, απαιτεί δύο ερωτήσεις ασφαλείας και, στη συνέχεια, απαιτεί ένα άλλο είδος εντελώς διαφορετικής αναγνώρισης μόνο για να αλλάξει τις απαντήσεις - και αυτό μετά τον χρήστη έχει ήδη συνδεθεί. Φυσικά, αυτό ακριβώς είναι και εμείς αναμενόμενος από PayPal? είναι ένα χρηματοπιστωτικό ίδρυμα που ασχολείται με μεγάλα χρηματικά ποσά. Αυτό δεν σημαίνει ότι κάθε επαναφορά κωδικού πρόσβασης πρέπει να ακολουθεί αυτά τα βήματα—τις περισσότερες φορές είναι υπερβολική—αλλά είναι ένα καλό παράδειγμα για περιπτώσεις όπου η ασφάλεια είναι σοβαρή υπόθεση.

Η ευκολία του συστήματος ερωτήσεων ασφαλείας είναι ότι εάν δεν το έχετε εφαρμόσει αμέσως, μπορείτε να το προσθέσετε αργότερα, εάν το απαιτεί το επίπεδο προστασίας των πόρων. Ένα καλό παράδειγμα αυτού είναι η Apple, η οποία μόλις πρόσφατα εφάρμοσε αυτόν τον μηχανισμό [άρθρο που γράφτηκε το 2012]. Μόλις άρχισα να ενημερώνω την εφαρμογή στο iPad μου, είδα το ακόλουθο αίτημα:

Όλα όσα θέλατε να μάθετε για την ασφαλή επαναφορά κωδικού πρόσβασης. Μέρος 1ο
Στη συνέχεια είδα μια οθόνη όπου μπορούσα να επιλέξω πολλά ζεύγη ερωτήσεων και απαντήσεων ασφαλείας, καθώς και μια διεύθυνση email διάσωσης:

Όλα όσα θέλατε να μάθετε για την ασφαλή επαναφορά κωδικού πρόσβασης. Μέρος 1ο
Όσο για το PayPal, οι ερωτήσεις είναι προεπιλεγμένες και μερικές από αυτές είναι πραγματικά πολύ καλές:

Όλα όσα θέλατε να μάθετε για την ασφαλή επαναφορά κωδικού πρόσβασης. Μέρος 1ο
Κάθε ένα από τα τρία ζεύγη ερωτήσεων/απαντήσεων αντιπροσωπεύει ένα διαφορετικό σύνολο πιθανών ερωτήσεων, επομένως υπάρχουν πολλοί τρόποι για να διαμορφώσετε έναν λογαριασμό.

Μια άλλη πτυχή που πρέπει να εξετάσετε σχετικά με την απάντηση στην ερώτηση ασφαλείας σας είναι η αποθήκευση. Η ύπαρξη μιας βάσης δεδομένων απλού κειμένου στη βάση δεδομένων ενέχει σχεδόν τις ίδιες απειλές με τον κωδικό πρόσβασης, δηλαδή ότι η αποκάλυψη της βάσης δεδομένων αποκαλύπτει αμέσως την αξία και θέτει σε κίνδυνο όχι μόνο την εφαρμογή, αλλά δυνητικά εντελώς διαφορετικές εφαρμογές που χρησιμοποιούν τις ίδιες ερωτήσεις ασφαλείας (αυτό είναι πάλι ερώτηση acai berry). Μια επιλογή είναι ο ασφαλής κατακερματισμός (ένας ισχυρός αλγόριθμος και ένα κρυπτογραφικά τυχαίο αλάτι), αλλά σε αντίθεση με τις περισσότερες περιπτώσεις αποθήκευσης κωδικού πρόσβασης, μπορεί να υπάρχει ένας καλός λόγος για την απόκριση να είναι ορατή ως απλό κείμενο. Ένα τυπικό σενάριο είναι η επαλήθευση ταυτότητας από ζωντανό τηλεφωνητή. Φυσικά, ο κατακερματισμός ισχύει και σε αυτήν την περίπτωση (ο χειριστής μπορεί απλώς να εισαγάγει την απάντηση που ονομάζει ο πελάτης), αλλά στη χειρότερη περίπτωση, η μυστική απόκριση πρέπει να βρίσκεται σε κάποιο επίπεδο κρυπτογραφικής αποθήκευσης, ακόμα κι αν είναι απλώς συμμετρική κρυπτογράφηση . Συνοψίζω: Αντιμετωπίστε τα μυστικά σαν μυστικά!

Μια τελευταία πτυχή των ερωτήσεων και των απαντήσεων ασφαλείας είναι ότι είναι πιο ευάλωτα στην κοινωνική μηχανική. Το να προσπαθείτε να εξαγάγετε απευθείας τον κωδικό πρόσβασης στον λογαριασμό κάποιου άλλου είναι ένα πράγμα, αλλά το να ξεκινήσετε μια συζήτηση για το σχηματισμό του (μια δημοφιλής ερώτηση ασφαλείας) είναι εντελώς διαφορετικό. Στην πραγματικότητα, μπορείτε κάλλιστα να επικοινωνήσετε με κάποιον για πολλές πτυχές της ζωής του που μπορεί να θέσουν ένα μυστικό ερώτημα χωρίς να κινήσετε υποψίες. Φυσικά, το ίδιο το νόημα μιας ερώτησης ασφαλείας είναι ότι σχετίζεται με την εμπειρία της ζωής κάποιου, επομένως είναι αξιομνημόνευτη και εκεί βρίσκεται το πρόβλημα - στους ανθρώπους αρέσει να μιλούν για τις εμπειρίες της ζωής τους! Υπάρχουν λίγα που μπορείτε να κάνετε για αυτό, μόνο εάν επιλέξετε τέτοιες επιλογές ερωτήσεων ασφαλείας έτσι ώστε να είναι μικρότερος θα μπορούσε πιθανώς να αποσυρθεί από την κοινωνική μηχανική.

[Συνεχίζεται.]

Σχετικά με τα Δικαιώματα Διαφήμισης

VDSina προσφέρει αξιόπιστη διακομιστές με καθημερινή πληρωμή, κάθε διακομιστής είναι συνδεδεμένος σε κανάλι Διαδικτύου 500 Megabit και προστατεύεται από επιθέσεις DDoS δωρεάν!

Όλα όσα θέλατε να μάθετε για την ασφαλή επαναφορά κωδικού πρόσβασης. Μέρος 1ο

Πηγή: www.habr.com