Τρίτη, 6 Νοεμβρίου 2007

ΚΩΔΙΚΟΙ ΠΡΟΣΒΑΣΗΣ & ΑΣΦΑΛΕΙΑ

Bruce Schneier
http://www.cryptogram.gr

Επιλέγοντας ασφαλείς κωδικούς πρόσβασης

Από τότε που έγραψα ότι ανέλυσα τους 34,000 κωδικούς πρόσβασης του MySpace, ο κόσμος με ρωτάει πώς να επιλέξει ασφαλείς κωδικούς πρόσβασης. Έχουν γραφτεί πολλά για το θέμα τα τελευταία χρόνια, αλλά τα περισσότερα φαίνεται ότι βασίζονται σε αμφισβητούμενες προτάσεις αντί για πραγματικά αναλυτικά στοιχεία. Όσα ακολουθούν είναι σοβαρές συμβουλές. Η επίθεση που αξιολογώ είναι μια επίθεση μαντέματος κωδικών εκτός σύνδεσης. Αυτή η επίθεση υποθέτει ότι ο επιτιθέμενος είτε έχει αντίγραφο του κρυπτογραφημένου αρχείου σας ή κρυπτογραφημένο αρχείο κωδικών του διακομιστή και μπορεί να δοκιμάζει κωδικούς όσο πιο γρήγορα μπορεί. Υπάρχουν περιπτώσεις όπου αυτή η επίθεση δεν έχει νόημα. Για παράδειγμα, οι κάρτες ATM είναι ασφαλείς ακόμη κι αν έχουν μόνο ένα τετραψήφιο αριθμό PIN, επειδή δεν μαντεύεις κωδικούς εκτός σύνδεσης. Και είναι πιο πιθανό η αστυνομία να λάβει ένταλμα για το λογαριασμό Hotmail σου αντί να μπει στον κόπο να σπάσει τον κωδικό πρόσβασης. Το σύστημα κλειδί-εγγύηση (key-escrow) του προγράμματος κρυπτογράφησης είναι σίγουρα πιο ευάλωτο από τον κωδικό πρόσβασης, όπως και κάθε ‘μυστική ερώτηση’ που έχετε βάλει σε περίπτωση που ξεχάσετε τον κωδικό σας. Οι μάντεις κωδικών εκτός σύνδεσης έχουν γίνει γρήγοροι και έξυπνοι. Η εταιρεία AccessData πουλάει το Password Recovery Toolkit, ή PRTK. Ανάλογα με το λογισμικό που επιτίθεται, το PRTK μπορεί να δοκιμάσει μέχρι και εκατοντάδες χιλιάδες κωδικούς ανά δευτερόλεπτο και δοκιμάζει λιγότερο κοινούς κωδικούς πιο γρήγορα από τους πιο σύνθετους. Επομένως, η ασφάλεια του κωδικού σας εξαρτάται από δύο πράγματα: οι λεπτομέρειες του λογισμικού που καθυστερούν το μάντεμα του κωδικού και με ποια σειρά τα προγράμματα όπως το PRTK μαντεύουν διαφορετικούς κωδικούς. Ορισμένα λογισμικά περιλαμβάνουν ρουτίνες που είναι σκοπίμως σχεδιασμένες για να καθυστερούν το μάντεμα του κωδικού. Τα καλά λογισμικά κρυπτογράφησης δεν χρησιμοποιούν τον κωδικό σου ως κλειδί κρυπτογράφησης. Υπάρχει μια διαδικασία που μετατρέπει τον κωδικό σου σε κλειδί κρυπτογράφησης. Και το λογισμικό μπορεί να καθυστερήσει αυτή τη διαδικασία όσο θέλει. Τα αποτελέσματα βρίσκονται παντού. Για παράδειγμα το Microsoft Office έχει μια απλή μετατροπή από κωδικό σε κλειδί, οπότε το PRTK μπορεί να δοκιμάσει 350,000 κωδικούς του Microsoft Word ανά δευτερόλεπτο σε υπολογιστή 3-GHz Pentium 4, που είναι ένας σχετικά χαρακτηριστικός υπολογιστής της εποχής. Το WinZip παλαιότερα ήταν χειρότερο – πάνω από ένα εκατομμύριο μαντέματα ανά δευτερόλεπτο για την έκδοση 7.0 – αλλά με την έκδοση 9.0, η λειτουργία επαύξησης του κρυπτοσυστήματος έχει βελτιώσει τα πράγματα σημαντικά: το PRTK μπορεί να δοκιμάσει μόνο 900 κωδικούς ανά δευτερόλεπτο. Και το PGP δυσκολεύει σκοπίμως προγράμματα όπως το PRTK, επιτρέποντας 900 μαντέματα το δευτερόλεπτο. Όταν γίνεται επίθεση σε προγράμματα με σκοπίμως αργές αυξήσεις, είναι σημαντικό να υπολογίζεις το κάθε μάντεμα. Μια επίθεση έξι απλών μικρών χαρακτήρων, από ‘αααααα’ μέχρι ‘ωωωωωω’ έχει πάνω από 308 συνδυασμούς. Και γενικά δεν είναι παραγωγική, επειδή το πρόγραμμα περνάει τον περισσότερο χρόνο του δοκιμάζοντας απίθανους κωδικούς όπως ‘πςζρςξ’. Σύμφωνα με τον Eric Thompson της AccessData, ένας τυπικός κωδικός περιλαμβάνει μια ρίζα συν ένα παράρτημα. Η ρίζα δεν είναι απαραίτητα μια λέξη στο λεξικό, αλλά είναι κάτι που προφέρεται. Το παράρτημα είναι είτε πρόθεμα (90%) ή επίθημα (10%). Επομένως, η πρώτη επίθεση που κάνει το PRTK είναι να δοκιμάσει ένα λεξικό με 1,000 περίπου κοινούς κωδικούς, όπως ‘letmein’, ‘password’, ‘123456’ και ούτω καθεξής. Στη συνέχεια τους δοκιμάζει με 100 περίπου κοινά επιθήματα ‘1’, ‘4u’, ‘69’, ‘abc’ και τα λοιπά. Αν θέλετε το πιστεύετε, ανακτά περίπου το 24% όλων των κωδικών με αυτούς τους 100,000 συνδυασμούς. Στη συνέχεια, το PRTK ξεφυλλίζει μια σειρά όλο και πιο σύνθετων λεξικών με ρίζες και παραρτήματα. Τα λεξικά με ρίζες περιλαμβάνουν: * Κοινές λέξεις λεξικού: 5,000 λήμματα
* Λεξικό κυρίων ονομάτων: 10,000 λήμματα
* Αναλυτικό λεξικό: 100,000 λήμματα
* Λεξικό φωνητικής μορφής: 1/10,000 από εξαντλητική έρευνα χαρακτήρων Το λεξικό φωνητικής μορφής είναι ενδιαφέρον. Δεν πρόκειται ακριβώς για λεξικό ∙ είναι μια ρουτίνα τύπου αλυσίδας Markov που παράγει προφερόμενες σειρές στην αγγλική γλώσσα ενός δεδομένου μήκους. Για παράδειγμα το PRTK μπορεί να παράγει και να δοκιμάζει ένα λεξικό για κάθε ευπρόφερτη σειρά έξι χαρακτήρων, ή μια σειρά εφτά χαρακτήρων σχεδόν ευκολοπρόφερτων. Ασχολούνται με ρουτίνες παραγωγής και για άλλες γλώσσες. Επίσης, το PRTK διεξάγει μια εξαντλητική έρευνα μιας σειράς τεσσάρων χαρακτήρων. Ξεφυλλίζει τα λεξικά με μικρά γράμματα (το πιο κοινό), με κεφαλαίο το αρχικό (το δεύτερο πιο κοινό), όλα κεφαλαία και τελικό κεφαλαίο. Ξεφυλλίζει τα λεξικά με κοινές αντικαταστάσεις: ‘$’ για ‘s’, ‘@’ για ‘a’, ‘1’ για ‘l’ και τα λοιπά. Οτιδήποτε ανήκει στη φρασεολογία του Διαδικτύου (γνωστή ως ‘leet speak’) περιλαμβάνεται εδώ, όπως ‘3’ για ‘e’. Τα λεξικά με τα παραρτήματα περιλαμβάνουν: * Όλους τους διψήφιους συνδυασμούς
* Όλες τις ημερομηνίες από 1900 μέχρι 2006
* Όλους τους τριψήφιους συνδυασμούς
* Όλα τα μονά σύμβολα
* Όλα τα μονά ψηφία, συν μονά σύμβολα
* Όλους τους συνδυασμούς με δύο σύμβολα Η μυστική συνταγή της AccessData είναι η σειρά με την οποία τρέχει τους διάφορους συνδυασμούς λεξικών με ρίζες και παραρτήματα. Η έρευνα της εταιρείας δείχνει ότι το «κλειδί» των κωδικών είναι μια ρίζα από επτά ως εννέα χαρακτήρες συν ένα κοινό παράρτημα και είναι πιο πιθανό να επιλέξει κανείς μια ρίζα δύσκολη από ένα μη κοινό παράρτημα. Κανονικά, το PRTK τρέχει σε δίκτυο υπολογιστών. Το μάντεμα κωδικών είναι μια εργασία που μπορεί να διανεμηθεί και μπορεί να τρέχει στο παρασκήνιο. Ένας μεγάλος οργανισμός όπως η Μυστική Υπηρεσία μπορεί εύκολα να έχει εκατοντάδες υπολογιστές να ψάχνουν μανιωδώς για τον κωδικό κάποιου. Μια εταιρεία που λέγεται Tableau κατασκευάζει ειδικό πρόσθετο υλικό (H/W) FPGA για να επιταχύνει το PRTK για αργά προγράμματα, όπως PGP και WinZip, με αύξηση της επίδοσης περίπου 150-300 φορές. Πόσο καλά είναι όλα αυτά; Ο Eric Thompson υπολογίζει ότι μέσα σε 2 βδομάδες με ένα μήνα, το λογισμικό του σπάει 55-65% όλων των κωδικών. (Εξαρτάται, βέβαια, πολύ από την εφαρμογή.) Αυτά τα αποτελέσματα είναι καλά, αλλά όχι τέλεια. Αλλά αυτό δεν προϋποθέτει βιογραφικά στοιχεία. Όποτε μπορεί, η AccessData συγκεντρώνει οποιεσδήποτε προσωπικές πληροφορίες για το υποκείμενο προτού ξεκινήσει. Αν δει άλλους κωδικούς μπορεί να μαντέψει τι είδους κωδικούς χρησιμοποιεί το υποκείμενο. Πόσο μεγάλη ρίζα χρησιμοποίησε; Τι είδους ρίζα; Βάζει παραρτήματα στην αρχή ή το τέλος; Χρησιμοποιεί αντικαταστάσεις; Οι ταχυδρομικοί κώδικες είναι κοινά παραρτήματα, οπότε μπαίνουν στο αρχείο. Όπως και διευθύνσεις, ονόματα από ατζέντα, άλλοι κωδικοί και άλλες προσωπικές πληροφορίες. Τα δεδομένα αυτά κάπως ανεβάζουν το ποσοστό επιτυχίας του PRTK, αλλά αυτό που έχει μεγαλύτερη σημασία είναι ότι μειώνει το χρόνο από βδομάδες σε μέρες ή και σε ώρες. Οπότε αν θέλετε έναν κωδικό δύσκολο στο μάντεμα, θα πρέπει να επιλέξετε κάτι που να μην είναι σε καμία λίστα με ρίζες ή παραρτήματα. Να μπερδέψετε κεφαλαία με μικρά στη μέση της ρίζας σας. Να βάλετε αριθμούς και σύμβολα στη ρίζα που δεν είναι κοινές αντικαταστάσεις. Ή να βάλετε το παράρτημα στη μέση της ρίζας σας. Ή να χρησιμοποιήσετε δύο ρίζες με ένα παράρτημα στη μέση. Ακόμη και κάτι πιο χαμηλά στη λίστα λεξικών του PRTK – το λεξικό φωνητικών μορφών επτά χαρακτήρων – μαζί με ένα μη κοινό παράρτημα, δεν πρόκειται να το μαντέψουν. Ούτε έναν κωδικό με τα πρώτα γράμματα μιας πρότασης, ειδικά αν βάλετε αριθμούς και σύμβολα στο σύνολο. Και ναι, αυτοί οι κωδικοί θα είναι δύσκολοι στην απομνημόνευση, γι’ αυτό και θα πρέπει να χρησιμοποιήσετε ένα πρόγραμμα σαν το Password Safe που είναι δωρεάν και ανοιχτού κώδικα για να τα αποθηκεύσετε. (Το PRTK μπορεί να δοκιμάσει μόνο 900 κωδικούς του Password Safe 3.0 το δευτερόλεπτο) Ακόμη κι έτσι τίποτα από όλα αυτά μπορεί να μην έχει σημασία. Η AccessData πουλάει ένα άλλο πρόγραμμα το Forensic Toolkit, το οποίο, μεταξύ άλλων, σαρώνει ένα σκληρό δίσκο για κάθε εκτυπώσιμη σειρά χαρακτήρων. Ψάχνει σε έγγραφα, στο Μητρώο, σε η-ταχυδρομείο, σε ανταλλαγμένα αρχεία, σε διαγραμμένο χώρο στο σκληρό δίσκο… παντού. Και δημιουργεί ένα λεξικό από αυτά και το ενσωματώνει στο PRTK. Αυτό που συμβαίνει είναι ότι η διαχείριση μνήμης του λειτουργικού συστήματος των Windows αφήνει δεδομένα παντού κατά την κανονική ροή των λειτουργιών. Θα πληκτρολογήσεις τον κωδικό σου σε ένα πρόγραμμα και θα αποθηκευτεί σε μια μνήμη κάπου αλλού. Τα Windows ανταλλάσουν τη σελίδα εκτός του δίσκου και γίνεται το πίσω μέρος κάποιου αρχείου. Μεταφέρεται σε κάποιο μακρινό μέρος του σκληρού δίσκου και κάθεται εκεί για πάντα. Ούτε τα Linux και Mac OS είναι καλύτερα στο θέμα αυτό. Θα πρέπει να τονίσω ότι τίποτα από αυτά δεν σχετίζεται με τον αλγόριθμο κρυπτογράφησης ή το μήκος κλειδιού. Ένας αδύναμος αλγόριθμος των 40-bit δεν καθιστά πιο εύκολη την επίθεση, ούτε ένας ισχυρός αλγόριθμος των 256-bit την καθιστά πιο δύσκολη. Αυτές οι επιθέσεις προσομοιώνουν τη διαδικασία του χρήστη που εισάγει τον κωδικό του στον υπολογιστή, οπότε το μέγεθος του τελικού κλειδιού δεν αποτελεί πρόβλημα ποτέ. Εδώ και χρόνια λέω ότι ο πιο εύκολος τρόπος για να σπάσεις ένα κρυπτογραφικό προϊόν είναι να μην σπάσεις σχεδόν ποτέ τον αλγόριθμο, και σχεδόν πάντα υπάρχει σφάλμα στον προγραμματισμό που σου επιτρέπει να παρακάμψεις τα μαθηματικά και να σπάσεις το προϊόν. Κάτι παρόμοιο συμβαίνει εδώ. Ο πιο εύκολος τρόπος για να μαντέψεις έναν κωδικό είναι να μην τον μαντέψεις καθόλου και να εκμεταλλευτείς την εσωτερική ανασφάλεια στο υποκείμενο λειτουργικό σύστημα.


Δεν υπάρχουν σχόλια: