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

Τι αλλάζει πραγματικά μια επίθεση υποβάθμισης

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

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

Γιατί η ίδια η διαπραγμάτευση πρέπει να αυθεντικοποιείται

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

Οι παλαιότερες εκδόσεις πρωτοκόλλου είχαν ασθενέστερες ιστορίες, και γι' αυτό ακριβώς μετράνε οι κανόνες υποχώρησης. Ένα άκρο TLS 1.0 στην ίδια ρύθμιση δεν είναι επίθεση υποβάθμισης· είναι ένα επιτρεπτό αποτέλεσμα που επιλέξατε να επιτρέψετε. Η διάκριση είναι αν το ασθενέστερο αποτέλεσμα προήλθε από προστατευμένη απόφαση ή από μη προστατευμένη διαδρομή που μπορούσε να επηρεάσει ένας μεσάζων. Μόλις το διατυπώσετε έτσι, τα περισσότερα περιστατικά καταλήγουν σε ερώτημα ρύθμισης.

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

Η ρυθμισμένη συμβατότητα δεν είναι επίθεση

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

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

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

Διαβάστε την αποτυχία πριν ονομάσετε αιτία

Διατηρήστε την ακριβή συμβολοσειρά σφάλματος, τις εκδόσεις πελάτη και διακομιστή και την ώρα πριν από οποιαδήποτε αλλαγή. Μετά ταξινομήστε: διαφώνησαν οι κόμβοι για μια πρόταση, απέτυχε η διαδρομή πακέτων ή μια πλευρά απέρριψε παράμετρο που κάποτε δεχόταν;

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

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

Επιβεβαιώστε τι επιλέχθηκε πραγματικά

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

openssl s_client -connect 198.51.100.30:443 -servername vpn.example.net -brief </dev/null
grep -iE 'Control Channel|Data Channel' /var/log/openvpn.log | tail -5

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

Σχετικά άρθρα