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

Ο φάκελος έρχεται πρώτος

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

outer transport (UDP datagram or TCP stream)
  -> OpenVPN header (opcode, key id, length where needed)
    -> control message (reliability wrapper, TLS exchange)
    -> data message (protected inner packet)

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

Το επίπεδο αξιοπιστίας ανήκει στο πρωτόκολλο

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

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

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

Τα πακέτα δεδομένων χρησιμοποιούν διαφορετική μορφή

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

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

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

Γιατί ένας διαμεσολαβητής HTTPS δεν μπορεί να βοηθήσει

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

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

Πώς να διαβάζεις σωστά ένα ίχνος

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

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

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