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

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

Ένα πακέτο ελέγχου μεταφέρει αναγνωριστικό συνεδρίας, το προαιρετικό HMAC του tls-auth, πληροφορίες επανάληψης και επιβεβαίωσης, και ένα αξιόπιστο αναγνωριστικό μηνύματος, και μετά ακολουθεί το ωφέλιμο φορτίο του τύπου μηνύματος. Όταν το μήνυμα είναι μήνυμα χειραψίας, το ωφέλιμο φορτίο τυγχάνει να είναι κρυπτοκείμενο TLS. Αυτή είναι όλη η σχέση: το υλικό TLS ταξιδεύει μέσα σε ένα μήνυμα που ο φάκελος ήδη προστατεύει. Η αναφορά πρωτοκόλλου δικτύου του OpenVPN απαριθμεί τα πεδία του καναλιού ελέγχου με αυτή τη σειρά.

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

Κρατήστε αυτή την ομαδοποίηση ως έννοια. Δεν είναι διάγραμμα σειράς byte, και δεν αρκεί για να υπολογιστεί μια ετικέτα, επειδή τα πεδία που μπαίνουν στο HMAC εξαρτώνται από την υλοποίηση, την έκδοση και τη λειτουργία.

Δείξτε ότι ο έλεγχος ενεργοποιείται πριν από τη χειραψία

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

Αυξήστε τη λεπτομέρεια του δαίμονα και παρακολουθήστε το κανάλι ελέγχου αντί για τη συσκευή tun:

openvpn --config /etc/openvpn/server.conf --verb 6

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

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

Ταιριάξτε κλειδί, κατεύθυνση και digest και στα δύο άκρα

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

grep -E 'tls-auth|tls-crypt|key-direction|auth ' /etc/openvpn/server.conf

Δημιουργήστε το κοινόχρηστο μυστικό με το εργαλείο και όχι με επεξεργαστή, και κρατήστε τα δικαιώματα αυστηρά:

openvpn --genkey secret /etc/openvpn/ta.key
chmod 600 /etc/openvpn/ta.key

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

Μην μπερδεύετε το tls-auth με το tls-crypt. Και τα δύο προστατεύουν το κανάλι ελέγχου, αλλά το tls-crypt το κρυπτογραφεί επίσης και κρύβει τη χειραψία από παρατηρητές, και αντικαθιστά τον διαχωρισμό κατεύθυνσης με τη δική του διαχείριση κλειδιών. Ένα προφίλ που χρησιμοποιεί το ένα δεν θα συνεργαστεί με ομότιμο ρυθμισμένο για το άλλο, και κανένα συντονισμό digest δεν κλείνει αυτό το χάσμα.

Αναπαράγετε μια ετικέτα μόνο από την πραγματική μορφή

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

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

Κρατήστε αυτή την άσκηση μακριά από προφίλ παραγωγής. Τίποτα στην αναπαραγωγή μιας ετικέτας δεν σας λέει αν μια εγκατάσταση πρέπει να ενεργοποιήσει την προστασία.

Επαναφέρετε μια ασυμφωνία χωρίς να αφαιρέσετε την προστασία

Ο δελεαστικός έλεγχος είναι να διαγράψετε το tls-auth, να δείτε τη σύνδεση να πετυχαίνει και να συμπεράνετε ότι το κλειδί ήταν λάθος. Αυτή η απάντηση σας κοστίζει την προστασία και δεν σας διδάσκει τίποτα για το ποια από τις τρεις τιμές διαφωνούσε. Πάρτε αντίθετα την εγκεκριμένη αντίστοιχη διαμόρφωση από την πλευρά του διακομιστή και συγκρίνετε με αυτή.

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

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

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