Τα επίπεδα του SSTP εξηγούνται: τι αποκαλύπτει ακόμη το εσωτερικό πακέτο
Το SSTP τυλίγει το PPP και ένα εσωτερικό πακέτο μέσα στο TLS, αλλά η εξωτερική σύνδεση TCP δείχνει ακόμη ποιος μίλησε με ποιον. Επισημάνετε κάθε επίπεδο πριν διαβάσετε μια καταγραφή.
Δύο γεγονότα για το SSTP συγχωνεύονται στις περισσότερες εξηγήσεις, και ακριβώς αυτή η συγχώνευση κάνει τις καταγραφές μπερδεμένες. Το πακέτο της εφαρμογής επιβιώνει μέσα στο προστατευμένο κανάλι, και η σύνδεση TCP που μεταφέρει αυτό το κανάλι διατηρεί τις δικές της διευθύνσεις σε όλη τη διαδρομή. Αυτό που ταξιδεύει στο καλώδιο είναι ένας φορέας μαζί με το φορτίο του, ποτέ υποκατάστατο για κανένα από τα δύο. Διασχίστε τη στοίβα από έξω προς τα μέσα και επισημάνετε κάθε όριο καθώς το περνάτε.
Ξεκινήστε από τον εξωτερικό φορέα
Το πρώτο πράγμα στο καλώδιο είναι μια συνηθισμένη σύνδεση TCP στη θύρα 443, με πραγματικές διευθύνσεις που οι δρομολογητές προωθούν. Αυτή η σύνδεση είναι εκείνη που επιβιώνει από τη μετάφραση διευθύνσεων δικτύου και που μπορεί να μετρήσει ένας πάροχος πρόσβασης. Η προστασία του φορτίου δεν αφαιρεί τον φορέα, και δεν κρύβει τον όγκο ούτε τον χρόνο.
Ό,τι ακολουθεί μετά από αυτό το σημείο μεταφέρεται αντί να δρομολογείται. Ο φορέας συνεχίζει να λειτουργεί ακόμη και όταν η εσωτερική ανταλλαγή αποτυγχάνει.
Ακολουθήστε την ενθυλάκωση προς τα μέσα
Μέσα στο προστατευμένο κανάλι βρίσκεται μια ανταλλαγή ελέγχου SSTP, μετά μια συνεδρία PPP, μετά το πακέτο δικτύου που θέλει ο πελάτης να παραδοθεί. Κάθε επίπεδο έχει τη δική του διαπραγμάτευση, τα δικά του μηνύματα σφάλματος και τη δική του μηχανή καταστάσεων. Επομένως ένα σφάλμα μπορεί να μοιάζει σφάλμα TLS από μια οπτική γωνία και σφάλμα PPP από μια άλλη. Διαβάζοντας τα επίπεδα με τη σειρά μαθαίνετε ποια μηχανή καταστάσεων σταμάτησε.
Μία μόνο καταγραφή σπάνια δείχνει ολόκληρη τη στοίβα. Οι εξωτερικές κεφαλίδες είναι ορατές μόνο έξω από το τελικό σημείο, και οι εσωτερικές μόνο μετά την αποενθυλάκωση. Αυτή η ασυμμετρία προέρχεται από το πού στέκεστε, όχι από το πρωτόκολλο.
Το παρακάτω διάγραμμα ομαδοποιεί τα επίπεδα ώστε να μπορεί κανείς να μιλήσει γι αυτά. Δεν είναι διάταξη byte, δεν υπόσχεται μία εγγραφή ανά πακέτο και δεν λέει τίποτα για το πόσες κρυπτογραφικές πράξεις εκτελεί μια υλοποίηση.
outer IP header
TCP to port 443
TLS record layer
SSTP control and data packets
PPP frames
inner IP packet
application transport and payload
Επισημάνετε τον παρατηρητή πριν διαβάσετε μια καταγραφή
Δύο καταγραφές της ίδιας συνεδρίας απαντούν σε διαφορετικά ερωτήματα, και η διεπαφή στην οποία ελήφθησαν καθορίζει σε ποια. Στη διαδρομή πρόσβασης βλέπετε τον φορέα και τις εγγραφές TLS, και μπορείτε να μετρήσετε μεγέθη και διαστήματα χωρίς να δείτε εσωτερική διεύθυνση. Στο τελικό σημείο, μετά την αποενθυλάκωση, το εσωτερικό πακέτο είναι συνηθισμένη κίνηση υπό την ιδιωτική πολιτική προώθησης.
Γράψτε τη διεπαφή και την κατεύθυνση σε κάθε καταγραφή πριν την ερμηνεύσετε. Ένα ίχνος από φυσικό προσαρμογέα δεν θα δείξει ποτέ τις διευθύνσεις της εσωτερικής εφαρμογής ως συνηθισμένα εξωτερικά πεδία, και το να διαβάσει κανείς αυτή την απουσία ως αποτυχία κρυπτογράφησης είναι συνηθισμένο λάθος. Ένα ίχνος από το εσωτερικό της σήραγγας δεν δείχνει καθόλου φορέα, άρα δεν μπορεί να απαντήσει σε ερώτημα για την οπτική του παρόχου. Η ίδια πειθαρχία ισχύει για τα αρχεία καταγραφής του τελικού σημείου, που καταγράφουν τη σειρά διαπραγμάτευσης και όχι τα περιεχόμενα.
Κρατήστε τους ελέγχους που το διάγραμμα δεν μπορεί να αποδείξει
Η σειρά των επιπέδων δεν αποδεικνύει ότι μια εγκατάσταση επικυρώνει το πιστοποιητικό του διακομιστή, διαπραγματεύεται υποστηριζόμενη έκδοση TLS ή εξουσιοδοτεί τον λογαριασμό. Κάθε ένα από αυτά είναι απόφαση διαμόρφωσης που αποτυγχάνει ανεξάρτητα από την ενθυλάκωση.
Επαληθεύστε τα με έναν πελάτη που αναφέρει τι διαπραγματεύτηκε αντί να συμπεραίνετε από ένα σχέδιο. Ξεκινήστε με τη χειραψία TLS, μετά την ανταλλαγή SSTP, μετά το PPP, και σταματήστε στο πρώτο στάδιο που αναφέρει σφάλμα. Η πρώτη εντολή εκτυπώνει την αλυσίδα και τη διαπραγματευμένη έκδοση, και η δεύτερη απαριθμεί τις χειραψίες που υπάρχουν σε μια καταγραφή.
openssl s_client -connect vpn.corp.internal:443 -servername vpn.corp.internal
tshark -r sstp.pcap -Y "tls.handshake.type == 1"