Αν έχεις ασχοληθεί έστω και λίγο με το ethical hacking, πιθανότατα έχεις ακούσει για το John the Ripper. Πρόκειται για ένα από τα γνωστά εργαλεία password auditing, το οποίο χρησιμοποιείται για να ελέγχει πόσο ανθεκτικοί είναι οι κωδικοί πρόσβασης, δοκιμάζοντας πιθανούς συνδυασμούς απέναντι σε διαθέσιμα password hashes. Είναι ιδιαίτερα χρήσιμο σε ελέγχους ασφάλειας, αλλά υπάρχει μια λεπτομέρεια που συχνά ξεχνάμε: το ότι έχεις ένα εργαλείο για password cracking δεν σημαίνει ότι θα καταφέρεις να ανακτήσεις κάθε κωδικό. Μερικές φορές η διαδικασία διαρκεί λίγα δευτερόλεπτα, άλλες μπορεί να χρειαστεί ώρες ή ημέρες και κάποιες φορές δεν θα βρεις ποτέ το σωστό αποτέλεσμα.
Πώς λειτουργεί;
Το John the Ripper λειτουργεί κυρίως δοκιμάζοντας πιθανούς κωδικούς και συγκρίνοντας τα αποτελέσματα με τα διαθέσιμα hashes. Μπορεί να χρησιμοποιήσει wordlists, δηλαδή λίστες με πιθανούς κωδικούς, καθώς και κανόνες που τροποποιούν λέξεις και συνδυασμούς για να δοκιμάσουν περισσότερες πιθανότητες. Η αποτελεσματικότητα εξαρτάται από τον τύπο του hash, την ποιότητα των υποψήφιων κωδικών, τις ρυθμίσεις και την υπολογιστική ισχύ που διαθέτουμε.
Η υπομονή δεν αρκεί πάντα
Εδώ είναι που τα πράγματα γίνονται ενδιαφέροντα. Ένα αδύναμο password μπορεί να εντοπιστεί γρήγορα, ενώ ένας ισχυρός και τυχαίος κωδικός μπορεί να απαιτεί ασύγκριτα περισσότερη προσπάθεια. Επιπλέον, οι σύγχρονοι αλγόριθμοι αποθήκευσης κωδικών, όταν έχουν ρυθμιστεί σωστά, κάνουν κάθε δοκιμή πιο απαιτητική υπολογιστικά. Επομένως, δεν υπάρχει εγγύηση ότι ένα password θα σπάσει, ακόμη κι αν αφήσουμε το εργαλείο να λειτουργεί για ημέρες. Μερικές φορές, η πιο ρεαλιστική απάντηση είναι ότι ο διαθέσιμος χρόνος και οι πόροι δεν επαρκούν.
Πρακτικό παράδειγμα:
Το John μπορεί να εκτελέσει έλεγχο σε ένα αρχείο hashes που έχουμε δημιουργήσει.
john --wordlist=passwords.txt hashes.txt
Εδώ, το passwords.txt είναι η λίστα με τους πιθανούς κωδικούς και το hashes.txt περιέχει τα hashes που θέλουμε να ελέγξουμε. Το εργαλείο συγκρίνει τις υποψήφιες τιμές και εμφανίζει όσες καταφέρει να ανακτήσει. Για να δούμε τα αποτελέσματα μιας προηγούμενης εκτέλεσης, μπορούμε να χρησιμοποιήσουμε:
john --show hashes.txt
Οι εντολές προϋποθέτουν ότι το αρχείο εισόδου περιέχει hashes σε μορφή που υποστηρίζει η εγκατεστημένη έκδοση του John.
Πόσο χρόνο χρειάζεται για να σπάσει ένας κωδικός;
Εδώ είναι που τα πράγματα γίνονται ενδιαφέροντα. Ένας απλός κωδικός που περιλαμβάνεται σε μια συνηθισμένη wordlist μπορεί να εντοπιστεί γρήγορα. Ένας μεγάλος, μοναδικός και τυχαίος κωδικός, όμως, μπορεί να απαιτεί τεράστιο αριθμό δοκιμών. Παράλληλα, ορισμένοι σύγχρονοι αλγόριθμοι αποθήκευσης κωδικών έχουν σχεδιαστεί ώστε κάθε δοκιμή να απαιτεί περισσότερους υπολογιστικούς πόρους.
Ο χρόνος εξαρτάται από τον τύπο του hash, το μήκος και την πολυπλοκότητα του κωδικού, τις διαθέσιμες λέξεις και τους κανόνες της δοκιμής, καθώς και το hardware. Δεν υπάρχει ένας συγκεκριμένος χρόνος που να ισχύει για όλους τους κωδικούς. Σε ορισμένες περιπτώσεις, η διαδικασία μπορεί να ολοκληρωθεί γρήγορα. Σε άλλες, μπορεί να διαρκέσει ημέρες ή και πολύ περισσότερο, χωρίς εγγύηση επιτυχίας.
Γιατί δεν σπάνε όλοι οι κωδικοί;
Το John the Ripper δεν γνωρίζει εξαρχής τον σωστό κωδικό. Δοκιμάζει υποψήφιες τιμές με βάση τη μέθοδο που έχουμε επιλέξει. Αν ο κωδικός είναι ισχυρός και δεν βρίσκεται στις πιθανές τιμές που δοκιμάζονται, μπορεί να μην ανακτηθεί ποτέ μέσα στον διαθέσιμο χρόνο.
Επιπλέον, δεν είναι όλα τα hashes ίδια. Ένας γρήγορος αλγόριθμος hash επιτρέπει πολύ περισσότερες δοκιμές ανά δευτερόλεπτο από έναν αλγόριθμο που έχει σχεδιαστεί ειδικά για την ασφαλή αποθήκευση passwords, όπως το Argon2id ή το bcrypt. Γι’ αυτό η ασφάλεια δεν εξαρτάται μόνο από τον κωδικό, αλλά και από τον τρόπο με τον οποίο αποθηκεύεται.
Πώς προστατευόμαστε;
Για να μειώσουμε τις πιθανότητες επιτυχούς password cracking, χρησιμοποιούμε μεγάλους και μοναδικούς κωδικούς για κάθε υπηρεσία, έναν password manager για την ασφαλή αποθήκευσή τους και πολυπαραγοντικό έλεγχο ταυτότητας όπου είναι διαθέσιμος. Από την πλευρά των συστημάτων, η χρήση κατάλληλων αλγορίθμων password hashing και μοναδικών salts αυξάνει σημαντικά τη δυσκολία μαζικών δοκιμών.
Με λίγα λόγια:
Το John the Ripper είναι ένα χρήσιμο εργαλείο για την αξιολόγηση της αντοχής των κωδικών, αλλά δεν αποτελεί μαγική λύση που μπορεί να σπάσει τα πάντα. Η επιτυχία εξαρτάται από τα δεδομένα, τη μέθοδο, τον χρόνο και τους διαθέσιμους πόρους. Το σημαντικότερο μάθημα είναι ότι ένας αδύναμος κωδικός μπορεί να αποκαλυφθεί γρήγορα, ενώ ένας σωστά επιλεγμένος και σωστά αποθηκευμένος κωδικός μπορεί να κάνει την ανάκτησή του πρακτικά ανέφικτη.
Στο password cracking, λοιπόν, η υπομονή μετράει. Αλλά η σωστή ασφάλεια μπορεί να κάνει τη διαφορά ανάμεσα σε μια εύκολη επιτυχία και σε μια προσπάθεια που δεν ολοκληρώνεται ποτέ.