Γιατί λίγο αλάτι μπορεί να είναι υπέροχο για τους κωδικούς πρόσβασης (αλλά όχι πιπέρι!)

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

Ωστόσο, η απόπειρα παραβίασης ενός συστήματος που δεν σας ανήκει είναι πιθανό παράνομο στη δικαιοδοσία σας (καθώς και η παραβίαση των δικών σας συστημάτων ενδέχεται [και συχνά] παραβιάζει οποιαδήποτε εγγύηση για αυτό το προϊόν).

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

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

Περίμενε, νόμιζα ότι οι λειτουργίες κατακερματισμού ήταν μονόδρομες! Πώς σπάτε τις λειτουργίες κατακερματισμού;

Δυστυχώς, οι λειτουργίες κατακερματισμού που χρησιμοποιούνται για κωδικούς κατακερματισμού δεν είναι πάντα τόσο ασφαλείς όσο οι εγκεκριμένες λειτουργίες κατακερματισμού. Για παράδειγμα, η λειτουργία κατακερματισμού που χρησιμοποιείται για παλιές συσκευές Windows είναι γνωστή ως LM Hash, η οποία είναι τόσο αδύναμη που μπορεί να σπάσει σε λίγα δευτερόλεπτα.

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

Με αυτό θα ξέρετε ποια τιμή απλού κειμένου παράγει το hash που ψάχνετε. Όταν εισαγάγετε έναν κωδικό πρόσβασης, ο υπολογιστής θα κατακερματιστεί αυτήν την τιμή και θα τη συγκρίνει με την αποθηκευμένη τιμή (όπου θα ταιριάζει) και θα μπορείτε να πραγματοποιήσετε έλεγχο ταυτότητας. Έτσι, δεν χρειάζεται να μαντέψετε τον κωδικό πρόσβασης κάποιου ατόμου, απλά μια τιμή που θα δημιουργήσει τον ίδιο κατακερματισμό.

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

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

Τελικά, δύο διαφορετικά σύνολα δεδομένων θα αποφέρουν την ίδια τιμή κατακερματισμού.

Οι προεπιλεγμένοι πίνακες είναι πολύ χρήσιμοι για την επίτευξη αυτού, καθώς εξοικονομούν σημαντικό χρόνο και υπολογιστική ισχύ. Η χρήση ενός προ-υπολογισμένου συνόλου κατακερματισμού για την αναζήτηση ενός κατακερματισμού κωδικού πρόσβασης ονομάζεται «επιθετική αναζήτηση επιτραπέζιων» Αυτοί οι πίνακες χρησιμοποιούνται από τους διαχειριστές συστήματος για να ελέγξουν την ισχύ των κωδικών πρόσβασης των χρηστών τους και είναι συχνά διαθέσιμοι στο διαδίκτυο ή για αγορά. Ωστόσο, μπορούν επίσης να χρησιμοποιηθούν από κακόβουλους χάκερ

Εάν ένας κωδικός πρόσβασης δεν είναι ασφαλής (ας πούμε ότι κάποιος χρησιμοποιεί κωδικό πρόσβασης μήκους 5 χαρακτήρων), μπορεί να σπάσει σχετικά εύκολα. Για παράδειγμα, ένας κωδικός πρόσβασης 5 πεζών χαρακτήρων μπορεί να χρησιμοποιηθεί μόνο για τη δημιουργία 11.881.376 διαφορετικών κωδικών πρόσβασης (26 ^ 5).

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

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

Για παράδειγμα, εάν ο κωδικός πρόσβασης που προσπαθείτε να σπάσετε έχει μήκος 8 χαρακτήρων, αλλά χρησιμοποιεί αριθμούς (10 ψηφία), πεζά γράμματα (26), κεφαλαία γράμματα (26) και ορισμένους ειδικούς χαρακτήρες (10), ο αριθμός των πιθανών κωδικών πρόσβασης μεταβαίνει σε 722,204,136,308,736 - που είναι πολύς αποθηκευτικός χώρος, όταν συνειδητοποιείτε ότι κάθε ένα έχει κατακερματιστεί με μια λειτουργία κατακερματισμού όπως το SHA-256

Οι πίνακες Rainbow αντιμετωπίζουν αυτό το ζήτημα προσφέροντας μειωμένες ανάγκες αποθήκευσης, αλλά χρειάζονται περισσότερο χρόνο για να υπολογίσουν τους πιθανούς κωδικούς πρόσβασης. Στο πιο βασικό επίπεδο, αυτοί είναι ουσιαστικά προ-υπολογισμένοι πίνακες αναζήτησης που σας επιτρέπουν να βρείτε γρήγορα το απλό κείμενο που ταιριάζει με το hash που έχετε. Εάν ο κατακερματισμός και το απλό κείμενο περιέχονται στον πίνακα που έχετε - παρόμοια με επιθέσεις στο λεξικό - ψάχνετε μόνο για να δείτε εάν ο κωδικός πρόσβασης περιέχεται στον πίνακα που έχετε. Εάν δεν είναι, δεν θα μπορείτε να σπάσετε τον κωδικό πρόσβασης. Μπορείτε να τα βρείτε online δωρεάν ή για αγορά.

Ρίξτε μια ματιά σε αυτό το άρθρο για ένα σεμινάριο για τη δημιουργία των δικών σας πινάκων ουράνιου τόξου.

Ενδιαφέρομαι ακόμα. Πώς λειτουργούν τα τραπέζια του ουράνιου τόξου;

Αν θέλετε να παραλείψετε τη λεπτομερή εξήγηση για το πώς λειτουργούν, μη διστάσετε να μετακινηθείτε προς τα κάτω στην ενότητα «Πώς να προστατέψετε από αυτές τις επιθέσεις».

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

Για να δημιουργήσετε τον πίνακα, δημιουργείτε «αλυσίδες» κατακερματισμού και απλού κειμένου χρησιμοποιώντας μια συνάρτηση κατακερματισμού και μια λειτουργία μείωσης. Μια συνάρτηση μείωσης δημιουργεί απλό κείμενο από ένα κατακερματισμό (δεν αναστρέφει τη δημιουργία κατακερματισμού, αλλά δημιουργεί διαφορετικό απλό κείμενο από το κατακερματισμό). Είναι επίσης μονόδρομη λειτουργία.

Έτσι, για να υπολογίσετε τον πίνακα, χρησιμοποιείτε έναν από τους κατακερματισμούς σας, h1, στη λειτουργία μείωσης, R (), για να δημιουργήσετε το απλό κείμενο p1.

R (h1) = p1.

Στη συνέχεια, χρησιμοποιείτε τη συνάρτηση κατακερματισμού H () με το p1 για να δημιουργήσετε ένα νέο κατακερματισμό.

H (p1) = h2.

Χρησιμοποιώντας το παράδειγμά μας από πριν:

Εάν το σύνολο απλού κειμένου είναι [abcdefghijklmnopqrstuvwxyz] {5} (ψάχνουμε έναν πίνακα ουράνιου τόξου με όλους τους κωδικούς πρόσβασης που αποτελείται από πεζά γράμματα μήκους 5) και χρησιμοποιούμε MD5 (αλγόριθμος κατακερματισμού):

Ένα κατακερματισμό μπορεί να είναι ab56b4d92b40713acc5af89985d4b786 (h1). Τώρα, εφαρμόζουμε τη λειτουργία μείωσης, η οποία θα μπορούσε να είναι τόσο απλή, λαμβάνοντας τα τελευταία 5 γράμματα στο κατακερματισμό.

R (ab56b4d92b40713acc5af89985d4b786) = cafdb

H (cafdb) = 81a516edabf924cd0f727d329e855b1f

Γιατί ονομάζονται πίνακες ουράνιου τόξου;

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

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

Τέλεια, πώς δημιουργείτε μια αλυσίδα;

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

Έτσι, μια αλυσίδα δειγμάτων μοιάζει με αυτό:

p1 -> h1 = H (p1) -> R1 (h1) = p2 -> H (p2) = h2 -> R2 (h2) = p3 -> H (p3) = h3

Κάθε συνάρτηση μείωσης είναι διαφορετική (αντιπροσωπεύεται από τα R1, R2, R3, κ.λπ.) Ένα δείγμα πίνακα αλυσίδων (κάθε σειρά είναι μια αλυσίδα μήκους 5) μοιάζει με το ακόλουθο. Σημειώστε ότι αυτό συμπληρώνεται με ψεύτικα δεδομένα για να σας δώσει ένα παράδειγμα - η συνάρτηση κατακερματισμού δεν είναι συνάρτηση κατακερματισμού που θα βρείτε συνηθισμένη κωδικούς πρόσβασης κατακερματισμού.

Οι συναρτήσεις μείωσης, R1 και R2 ορίζονται ως εξής - το R1 παίρνει τα πρώτα 3 ψηφία του κατακερματισμού και το R2 παίρνει τα τελευταία 2 γράμματα του κατακερματισμού:

p1 -> h1 = H (p1) -> R1 (h1) = p2 -> H (p2) = h2 -> R2 (h2) = p3 -> H (p3) = h3

2 -—> abdu2934 -—> 293 -—> 83kdnif8 -—> if -—> ike83jd3

15 -—> dks2ne94 -—> 294 -—> ld932nd9 -—> ld -—> ldie938d

20 -—> ld93md8d -—> 938 -—> lxked93k -—> lx -—> 93mdkg8d

Σε έναν πίνακα ουράνιου τόξου, αποθηκεύονται μόνο το πρώτο σημείο εκκίνησης και το τελικό σημείο για αποθήκευση στην αποθήκευση, όπως αυτό:

σημείο εκκίνησης (απλό κείμενο), μετά από βήματα k μέσω της αλυσίδας (κατακερματισμός)

p1 -—> h1k

p2 -—> h2k

p3 -—> h3k

Στη συνέχεια, όταν έχετε ένα hash (h) όπου δεν γνωρίζετε το απλό κείμενο (?), Θα το συγκρίνετε με τις αλυσίδες.

  1. Αρχικά, θα ελέγξετε εάν το hash βρίσκεται στη λίστα των τελικών κατακερματισμών (h1k, h2k, κ.λπ.). Εάν ναι, μπορείτε να μεταβείτε στο βήμα 3.
  2. Εάν όχι, μπορείτε να μειώσετε τον κατακερματισμό σε διαφορετικό απλό κείμενο (R1) και στη συνέχεια να κατακερματίσετε αυτό το απλό κείμενο (χρησιμοποιώντας τη συνάρτηση κατακερματισμού και την επόμενη συνάρτηση μείωσης παραπάνω) και να το συγκρίνετε με τη λίστα των τελικών κατακερματισμών (h1k, h2k, h3k κ.λπ.). Όταν ταιριάζει με έναν από τους τελικούς κατακερματισμούς, αυτή η αλυσίδα πιθανότατα θα περιέχει τον αρχικό κατακερματισμό.
  3. Για να βρείτε το αρχικό κατακερματισμό στην αλυσίδα, πάρτε το αρχικό απλό κείμενο αυτής της αλυσίδας (οπότε αν ταιριάζει με το h1k, ξεκινήστε με το p1) και εφαρμόστε τις λειτουργίες κατακερματισμού και μείωσης για να μετακινηθείτε κατά μήκος της αλυσίδας μέχρι να φτάσετε στο γνωστό κατακερματισμό και το αντίστοιχο απλό κείμενο. Με αυτόν τον τρόπο, μπορείτε να μετακινηθείτε μέσω των κατακερματισμών της αλυσίδας χωρίς να χρειάζεται να καταλάβουν χώρο αποθήκευσης στο μηχάνημά σας.

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

Πώς υπερασπίζεστε ενάντια σε αυτούς τους τύπους επιθέσεων;

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

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

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

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

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

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

Το πιπέρι πρέπει να είναι διαφορετικό για κάθε εφαρμογή στην οποία χρησιμοποιείται και πρέπει να είναι αρκετά μακρύ για να είναι ασφαλές. Συνιστάται τουλάχιστον 112 bits από το Εθνικό Ινστιτούτο Προτύπων και Τεχνολογίας.

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

Για μεγαλύτερο άρθρο σχετικά με τα προβλήματα με τις πιπεριές, ρίξτε μια ματιά σε αυτό το νήμα.

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

Μπερδεμένος με το τι κάνει έναν ισχυρό κωδικό πρόσβασης;

Φαίνεται πολύ εύκολο να χακαριστεί. Πρέπει να με ανησυχεί;

Το πιο σημαντικό πράγμα που πρέπει να θυμάστε για το hacking είναι ότι κανείς δεν θέλει να κάνει περισσότερη δουλειά από ό, τι πρέπει να κάνει. Για παράδειγμα, ο υπολογισμός των πινάκων ουράνιων τόξων είναι πολλή δουλειά. Εάν υπάρχει ένας ευκολότερος τρόπος για να λάβετε τον κωδικό πρόσβασής σας, αυτό πιθανότατα θα δοκιμάσει πρώτα ένας άθλιος ηθοποιός (όπως το ηλεκτρονικό ψάρεμα!).

Αυτό σημαίνει ότι η ενεργοποίηση των βασικών βέλτιστων πρακτικών για την ασφάλεια στον κυβερνοχώρο είναι ίσως ο ευκολότερος τρόπος για την αποφυγή παραβίασης. Στην πραγματικότητα, η Microsoft ανέφερε πρόσφατα ότι μόνο η ενεργοποίηση του 2FA θα καταλήξει να αποκλείει το 99,9% των αυτοματοποιημένων επιθέσεων.

Καλό χάκερ!

Πρόσθετη ανάγνωση:

Περισσότερες λεπτομέρειες σχετικά με τις αλυσίδες κατακερματισμού

Μια άλλη εξήγηση των τραπεζιών του ουράνιου τόξου

Μια λίστα με πίνακες ουράνιων τόξων στο διαδίκτυο