Ασφάλεια Διαδικτυακών Εφαρμογών Ασφαλής αποθήκευση κωδικών Γιώργος Χατζησωφρονίου 12/11/2012 Πανεπιστήμιο Πειραιώς Τμήμα Πληροφορικής Στόχοι παρουσίασης ● ● Εξερεύνηση των προβλήματων στην αποθήκευση κωδικών. Παρουσίαση γνωστών τεχνικών επίθεσης κωδικών. ● ● ● ● ● Brute Force Dictionary attacks Lookup tables Όλα μέσα από παραδείγματα Παρουσίαση και κατανόηση των βασικών πρακτικών ασφαλείας κωδικών. ● ● ● Κρυπτογραφικές συναρτήσεις κατακερματισμού (hash functions) Αλατισμένοι κωδικοί HMAC Ασφάλεια Web Εφαρμογών - Ασφαλής αποθήκευση κωδικών ● ● Θα θεωρήσουμε ότι έχουμε να κάνουμε με διαδικτυακές εφαρμογές που έχουν χρήστες και κατά συνέπεια κωδικούς. Παράδειγμα βάσης δεδομένων χρηστών: Username RigasTK twin3 psilos stathis Password 1481991 fosb44 l0v3m1x gunsnroses Birth 14/8/1991 13/7/1988 18/2/1990 25/7/1991 Ασφάλεια Web Εφαρμογών - Ασφαλής αποθήκευση κωδικών .... ... ... ... ... Η εφαρμογή μου είναι απαραβίαστη! Κανείς δεν έχει πρόσβαση στη βάση δεδομένων για να διαρεύσουν οι κωδικοί των χρηστών μου. Οι κωδικοί των χρηστών σου είναι... σε απλό κείμενο; Ασφάλεια Web Εφαρμογών - Ασφαλής αποθήκευση κωδικών Κρυπτογραφικές Συναρτήσεις Κατακερματισμού ● ● ● Συναρτήσεις που μετατρέπουν ένα αλφαριθμητικό (plain text) σε ένα σταθερού μεγέθους “αποτύπωμα” (hash) που δεν μπορεί να αντιστραφεί εύκολα. Αν η είσοδος αλλάξει έστω και λίγο, το hash που θα παραχθεί θα είναι τελείως διαφορετικό. Μας επιτρέπουν να αποθηκεύουμε με ασφάλεια κωδικούς αλλά ταυτόχρονα μπορούμε να εξακριβώσουμε ότι ο κωδικός που εισάγει ένας χρήστης είναι αληθής. pass1234 Κρυπτογραφική Συνάρτηση Κατατεμαχισμού Ασφάλεια Web Εφαρμογών - Ασφαλής αποθήκευση κωδικών b4af804009cb036a4ccdc33431ef9ac9 Υλοποίηση ενός hash-based συστήματος ● Την ώρα της εγγραφής (registration): hash(password) και αποθήκευση στη password σε απλό κείμενο Server ● Database Την ώρα της αυθεντικοποίησης (login): hash(password) και σύγκριση με αυτό στη password σε απλό κείμενο Server Ασφάλεια Web Εφαρμογών - Ασφαλής αποθήκευση κωδικών Database Υλοποίηση ενός hash-based συστήματος ● Στη βάση δεδομένων δεν υπάρχουν οι κωδικοί. ● Υπάρχουν μόνο τα hashes. Username RigasTK twin3 psilos stathis Password 1481991 fosb44 l0v3m1x gunsnroses Username RigasTK twin3 psilos stathis Ασφάλεια Web Εφαρμογών - Ασφαλής αποθήκευση κωδικών Password 4fe420822903f560cd81d 1b0431848ad2dbcb0f 943a99bb5743912e95b4 123a943312f95c9 Ωραία. Πλέον δεν έχω κωδικούς σε καθαρό κείμενο στο σύστημά μου. Ακόμη και αν ο επιτιθέμενος αποκτήσει πρόσβαση, θα ανακτήσει τα hashes και όχι τους κωδικούς. Είσαι σίγουρος; Χρησιμοποίησες md5... Ασφάλεια Web Εφαρμογών - Ασφαλής αποθήκευση κωδικών MD5 ● ● Ευρείως διαδεδομένη συνάρτηση κατακερματισμού. Πρέπει να αποφεύγεται. ● ● Υπάρχουν πολύ καλύτερες που προτείνονται να χρησιμοποιηθούν. Σπάσιμο md5 ● ● Έστω το hash 21232f297a57a5a743894a0e4a801fc3 Από ποιο αλφαριθμητικό προέκυψε; Ασφάλεια Web Εφαρμογών - Ασφαλής αποθήκευση κωδικών Επίθεση Brute Force ● Έλεγχος όλων των πιθανών αλφαριθμητικών: Md5('a') = 0cc175b9c0f1b6a831c399e269772661 Md5('b') = 92eb5ffee6ae2fec3ad71c777531578f … Md5('aa') = 4124bc0a9335c27f086f24ba207a4912 Md5('ab') = 187ef4436122d1cc2f40dc2b92f0eba0 … ● Εύκολο να σπάσουν κωδικοί με λίγους χαρακτήρες. Για μεγαλύτερα αλφαριθμητικά χρειάζεται μεγάλη εώς τεράστια υπολογιστική ισχύ. ● ● Έχει σίγουρο αποτέλεσμα. ● ● Σίγουρα κάποια στιγμή θα βρεθεί ο ζητούμενος κωδικός. (Παράδειγμα) Ασφάλεια Web Εφαρμογών - Ασφαλής αποθήκευση κωδικών Επίθεση Λεξικού Εξετάζουμε συστηματικά τα hashes από ένα αρχείο (λεξικό) που περιέχει λέξεις, φράσεις, κοινούς κωδικούς, συνδυασμούς και άλλα αλφαριθμητικά. ● Md5('accent') = 727b79a9a430ccddcf9260a381d5ab10 Md5('apple') = 1f3870be274f6c49b3e31a0c6728957f … Md5('apple1234') = 903010ac03abcc015f3f5227a392bd91 ... ● To λεξικό ανακτεί αλφαριθμητικά από πολλές πηγές: ● ● ● ● ● Εξάγοντας λέξεις από τεράστια κειμένα Από κωδικούς που έχουν διαρρεύσει Αντικατάσταση λέξεων σε leet speak (hello σε h3110) Ευκολό να σπάσουν απλές λέξεις και συνδυασμοί. (Παράδειγμα) Ασφάλεια Web Εφαρμογών - Ασφαλής αποθήκευση κωδικών Αργές Συναρτήσεις Κατακερματισμού H brute force και η dictionary attack έχουν νόημα μόνο επειδή η md5 παράγει γρήγορα hashes. ● ● ● Ένα αλφαριθμητικό 6 χαρακτήρων σπάει σε περίπου 40 δευτερόλεπτα. Τί θα γίνει εάν χρησιμοποιήσω μια πιο αργή συνάρτηση; ● ● Η ταυτοποίηση του χρήστη θα καθυστερεί λίγο παραπάνω. Η brute force και η dictionary attack θα παίρνουν πολύ περισσότερη ώρα. Ασφάλεια Web Εφαρμογών - Ασφαλής αποθήκευση κωδικών Αργές Συναρτήσεις Κατακερματισμού Κάνουν την παραγωγή του hash πολύ αργή έτσι ώστε η επίθεση Brute Force και η επίθεση λεξικού να είναι πολύ αργές για να αξίζουν τον κόπο. ● ● Η bcrypt και η PBKDF2 είναι εξαιρετικές επιλογές. ● ● Περιέχουν έναν παράγοντα εργασίας που μπορεί να αυξηθεί και να μεγαλώσει το χρόνο παραγωγής του hash. Έλεγχος σε ένα μήχανημα με GPU 625 MHz: ● ● ● ● Κρυπτογραφούμε το αλφαριθμητικό “hello” Ορίζοντας τον work factor στο 12, η bcrypt κάνει 0,3 δευτερόλεπτα Η md5 κάνει λιγότερο από ένα μικροδευτερόλεπτο Αντί να σπάσω με brute force ένα εξαψήφιο αλφαριθμητικό σε 40 δευτερόλεπτα, θα χρειαστώ τουλάχιστον... 12 χρόνια! Ασφάλεια Web Εφαρμογών - Ασφαλής αποθήκευση κωδικών Αντικατέστησα την md5 με την bcrypt για να υπολογίζω τα hashes στην εφαρμογή μου. Τώρα τα hashes μου ανατρέπονται δύσκολα και οι κωδικοί είναι ασφαλής. Εεεεεμμμ... Τα hashes σου είναι ανάλατα; Ασφάλεια Web Εφαρμογών - Ασφαλής αποθήκευση κωδικών Πίνακες Αναζήτησης Αναζήτηση σε διαδικτυακές βάσεις δεδομένων στις οποίες έχουν αποθηκεύτει τεράστιες λίστες πιθανών κωδικών μαζί με τα αντίστοιχα md5 hashes τους. ● ● ● ● ● Ο λιγότερο βάναυσος τρόπος. ● ● Lookup tables: Προυπολογισμένα hashes με τους αντίστοιχους κωδικούς Reverse Lookup tables: Αντιστοιχίες hashes με ονόματα χρηστών. Rainbow tables: Σαν τα lookup tables με τη διαφορά ότι θυσιάζουν ταχύτητα για κάνουν τα tables μικρότερα. Δεν υπολογίζουμε κανένα hash. (Παράδειγμα) Ασφάλεια Web Εφαρμογών - Ασφαλής αποθήκευση κωδικών Password Hash mypass91 4fe420822903f560cd81 fos1234 1b0431848ad2dbcb0f c0n4nn 123a943312f95c9 …. …. Salted Passwords Οι πίνακες αναζήτησης δουλεύουν επειδή κάθε κωδικός αντιστοιχεί στο ίδιο hash ● ● ● Δύο χρήστες με ίδιο κωδικό, έχουν το ίδιο hash. Ιδέα ● Μπορούμε να τυχαιοποιήσουμε τα hashes προσθέτοντας ένα string (salt) στον κωδικό πριν καλέσω την Κρυπτογραφική Συνάρτηση Κατατεμαχισμού. Ασφάλεια Web Εφαρμογών - Ασφαλής αποθήκευση κωδικών Salted Passwords ● Παράδειγμα αλατισμένων κωδικών hash("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 hash("hello" + "QxLUF1bgIAdeQX") = 9e209040c863f84a31e719795b2577523954739fe5ed3b58a75cff2127075ed1 hash("hello" + "bv5PehSMfV11Cd") = d1d3ec2e6f20fd420d50e2642992841d8338a314b8ea157c9e18477aaef226ab ● Δημιουργείτε ένα τελείως διαφορετικό hash κάθε φορά ● Ο επιτιθέμενος δεν γνωρίζει ποιο είναι το αλάτι και θα μπορεί να δημιουργηθεί lookup ή rainbow table γι' αυτό το σκοπό. Username Password RigasTK 4fe420822903f560cd81d twin3 1b0431848ad2dbcb0f zyloGR 943a99bb5743912e95b4 Username RigasTK twin3 zyloGR Ασφάλεια Web Εφαρμογών - Ασφαλής αποθήκευση κωδικών Salt Password xLUF1 f560cd8104318 bgIAde 3312f90431848a SMfV11 e42082248ad2db HMAC ● Το τελευταίο βήμα για να ασφαλίσουμε τους κωδικούς μας. ● Προσθέτουμε ένα μυστικό κλειδί στο hash ● ● ● Το κλειδί πρέπει να κρατείτε ασφαλές. ● ● ● Μόνο κάποιος που ξέρει το κλειδί μπορεί να εξακριβώσει έναν κωδικό. Ο επιτιθέμενος θα χρειαστεί και το κλειδί για να σπάσει τον κωδικό. Σε κάποιον εξωτερικό server Να έχει ημερομηνία λήξης Ανατρέπουμε ολοκληρωτικά brute force και dictionary attacks. Ασφάλεια Web Εφαρμογών - Ασφαλής αποθήκευση κωδικών HMAC ● ● H HMAC είναι το αποτέλεσμα μίας κρυπτογραφικής συνάρτησης κατακερματισμού με ένα μυστικό κλειδί. Οποιαδήποτε hash function μπορεί να χρησιμοποιηθεί για τον υπολογισμό ενός HMAC. Key pass1234 HMAC-MD5 Ασφάλεια Web Εφαρμογών - Ασφαλής αποθήκευση κωδικών b4af804009cb036a4ccdc33431ef9ac9 Συνοψίζοντας... ✔ ✔ ✔ ✔ Αποφεύγουμε την MD5. Αποφεύγουμε γρήγορες συναρτήσεις. Αντί για αυτές χρησιμοποιούμε την bcrypt ή την PBKDF2 Αλατίζουμε τους κωδικούς πριν τους αποθηκεύσουμε. Χρησιμοποιούμε το HMAC με κλειδιά έξω από τη βάση δεδομένων. Ασφάλεια Web Εφαρμογών - Ασφαλής αποθήκευση κωδικών Τώρα οι κωδικοί μου είναι επιτέλους καλά προστατευμένοι! Ερωτήσεις; Ασφάλεια Web Εφαρμογών - Ασφαλής αποθήκευση κωδικών
© Copyright 2024 Paperzz