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

Ο μηχανισμός είναι μικρός, και οι τρόποι αποτυχίας του συγχέονται εύκολα με απώλεια πακέτων.

Το έγκυρο κρυπτοκείμενο δεν είναι φρέσκο κρυπτοκείμενο

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

Ο κανόνας είναι φθηνός στην υλοποίηση και φθηνός στη διατύπωση: δέξου ένα δεδομένο προστατευμένο πακέτο μία φορά, κάτω από ένα δεδομένο κλειδί. Όλα τα άλλα σε αυτό το πεδίο προκύπτουν από το πώς η υλοποίηση παρακολουθεί αυτό το μία φορά.

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

Ένας αριθμός ακολουθίας και ένα παράθυρο

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

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

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

nstat -az | grep -i XfrmIn
ip -s xfrm state | head -n 30
wg show wg0 transfer

Η κατάσταση ανήκει στο κλειδί, όχι στον υπολογιστή

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

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

Διάγνωσε την αιτία πριν απενεργοποιήσεις οτιδήποτε

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

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

Τι δεν υπόσχεται ο έλεγχος

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

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

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