Πώς μετατρέπει το OpenConnect ένα cookie σύνδεσης σε τούνελ;
Το OpenConnect ανταλλάσσει ένα cookie σύνδεσης ιστού με ένα τούνελ VPN. Το cookie είναι φορέας της συνεδρίας, οπότε προστατέψτε την παράδοση, όχι μόνο τη σελίδα σύνδεσης.
Το OpenConnect συνδέει δύο ξεχωριστές ανταλλαγές με μία βραχύβια τιμή: τη σύνδεση ιστού και το τούνελ VPN. Η πρώτη ανταλλαγή είναι συνηθισμένο HTTPS: τα διαπιστευτήρια, μια διαδρομή SAML ή ένα διακριτικό πηγαίνουν στην πύλη, και η απάντηση φέρει ένα cookie ελέγχου ταυτότητας. Η δεύτερη ανταλλαγή παρουσιάζει αυτό το cookie στην ίδια πύλη ως απόδειξη ότι η φάση ιστού έχει ήδη συμβεί, και μόνο τότε σηκώνεται το τούνελ.
Τίποτα σχετικό με το τούνελ δεν διαπραγματεύεται κατά τη σύνδεση. Αυτό είναι το σημείο που αξίζει να κατανοηθεί, γιατί τα περισσότερα λάθη σε σενάρια υποθέτουν ότι το cookie είναι κωδικός προς αποθήκευση ή κλειδί που προστατεύει την κίνηση, ενώ στην πραγματικότητα είναι εισιτήριο κομιστή για μια συγκεκριμένη συνεδρία πύλης.
Τι ανταλλάσσουν ο πελάτης και η πύλη, με τη σειρά
Η φάση ελέγχου ταυτότητας μοιάζει με ένα συνηθισμένο προστατευμένο website. Το OpenConnect στέλνει τα διαπιστευτήρια του χρήστη ή ακολουθεί την ανακατεύθυνση της πύλης σε πάροχο ταυτότητας, και η πύλη απαντά με έγγραφο που ενσωματώνει το cookie ελέγχου ταυτότητας. Στο πρωτόκολλο AnyConnect αυτή η τιμή ταξιδεύει σε κεφαλίδα cookie στα επόμενα αιτήματα, συνήθως με όνομα όπως webvpn, και το εγχειρίδιο τη θεωρεί το διαπιστευτήριο που μεταφέρει τη συνεδρία προς τα εμπρός.
Η δεύτερη φάση είναι ένα αίτημα CONNECT στο τελικό σημείο VPN της πύλης με το cookie προσαρτημένο. Η πύλη το ελέγχει, εκχωρεί μια διεύθυνση, και ο πελάτης ξεκινά CSTP πάνω από TLS, με το DTLS ως προαιρετική ταχύτερη διαδρομή δεδομένων μόλις υπάρξει η συνεδρία. Μόνο σε αυτό το σημείο καθορίζονται οι παράμετροι του τούνελ, οι διαδρομές, οι ρυθμίσεις DNS και τα κλειδιά κίνησης της συνεδρίας. Το cookie πέρασε τον πελάτη από την πόρτα· δεν κρυπτογράφησε τίποτα.
Αυτή η αλληλουχία εξηγεί γιατί υπάρχει το openconnect --authenticate. Εκτελέστε το και εκτελεί τη φάση ιστού, τυπώνει ένα μικρό μπλοκ μεταβλητών κελύφους όπως COOKIE, HOST, CONNECT_URL και FINGERPRINT, και μετά τερματίζει πριν χτιστεί οποιοδήποτε τούνελ. Ένα σενάριο περιτυλίγματος μπορεί τότε να ξεκινήσει την πραγματική σύνδεση με αυτές τις τιμές, που είναι ακριβώς ο διαχωρισμός που χρειάζεται μια εγκατάσταση χωρίς οθόνη ή με δύο κοντέινερ.
Το cookie είναι φορέας συνεδρίας, όχι κλειδί
Αντιμετωπίστε την τιμή όπως θα αντιμετωπίζατε ένα αναγνωριστικό συνεδρίας σε μια διαδικτυακή εφαρμογή. Όποιος την κρατά κατά τη διάρκεια ζωής της μπορεί να ζητήσει από την πύλη το τούνελ στο οποίο δικαιούται αυτή η συνεδρία, γι' αυτό η μυστικότητά της έχει σημασία. Η αντιγραφή όμως δεν αποκαλύπτει κίνηση, γιατί η εμπιστευτικότητα του τούνελ προέρχεται από τη χειραψία TLS και τα παράγωγα κλειδιά, όχι από τη συμβολοσειρά του cookie.
Δεν είναι επίσης μόνιμη παραχώρηση. Η πύλη και ο πάροχος ταυτότητας αποφασίζουν πόσο ζει η συνεδρία, και ένας περιηγητής που ακόμη δείχνει σελίδα συνδεδεμένου χρήστη δεν λέει τίποτα για το αν η συνεδρία του τούνελ είναι ακόμη έγκυρη. Η επανασύνδεση μετά τη λήξη σημαίνει επανάληψη της φάσης ιστού και παραγωγή νέου cookie, και αυτό είναι το νόημα της επαναπιστοποίησης, όχι ενόχληση προς παράκαμψη με μηχανικά μέσα.
Μην αντιμετωπίζετε ένα cookie ως καθολικό υποκατάστατο άλλων διαπιστευτηρίων. Μια δήλωση SAML, ένας κωδικός περιηγητή και ένα cookie που εξέδωσε άλλη υπηρεσία είναι διαφορετικά αντικείμενα με διαφορετικό κοινό, και η επικόλληση του ενός στο πεδίο του άλλου συνήθως αποτυγχάνει στην πύλη ή, χειρότερα, πετυχαίνει απέναντι σε λάθος όριο εμπιστοσύνης.
Παράδοση του cookie χωρίς αντίγραφα
Η ασφαλέστερη μηχανική παράδοση στο Linux είναι η τυπική είσοδος. Το --cookie-on-stdin διαβάζει την τιμή από το stdin, ώστε το cookie να μην εμφανίζεται ποτέ στη λίστα ορισμάτων της διεργασίας, όπου κάθε τοπικός χρήστης μπορεί να το διαβάσει με ps. Ένας αγωγός που πιστοποιεί σε μια διεργασία και τροφοδοτεί το τούνελ σε άλλη κρατά την τιμή σε σωλήνα και όχι σε αρχείο ή μεταβλητή περιβάλλοντος.
Τα ορίσματα και οι μεταβλητές περιβάλλοντος είναι ασθενέστερα για διαφορετικούς λόγους. Ένα όρισμα είναι ορατό στον πίνακα διεργασιών για όλη τη ζωή του πελάτη και συχνά καταλήγει στο ιστορικό του κελύφους. Μια μεταβλητή περιβάλλοντος κληροδοτείται σε θυγατρικές διεργασίες, και μια μονάδα systemd που την ορίζει στο αρχείο μονάδας αποθηκεύει το μυστικό σε αναγνώσιμη διαμόρφωση. Αν πρέπει οπωσδήποτε να χρησιμοποιήσετε αρχείο, περιορίστε το στον λογαριασμό υπηρεσίας και αφαιρέστε το όταν τελειώσει η συνεδρία.
Κρατήστε και το όριο προνομίων σκόπιμο. Η διεργασία που μιλά με τον πάροχο ταυτότητας και ίσως ανοίγει περιηγητή θα πρέπει να τρέχει ως ο χρήστης στον οποίο ανήκει αυτή η σύνδεση. Η διεργασία που διαμορφώνει διαδρομές, DNS και τη συσκευή του τούνελ μπορεί να χρειάζεται περισσότερα προνόμια. Το να τρέχει όλος ο περιηγητής ως root για να είναι το cookie του διαθέσιμο σε τούνελ που ανήκει στο root είναι λάθος ανταλλαγή, και οι σύγχρονες εγκαταστάσεις OpenConnect μπορούν να παραδώσουν την τιμή ρητά πέρα από αυτό το όριο.
Η καταγραφή αξίζει την ίδια καχυποψία. Η αναλυτική έξοδος του πελάτη, τα βοηθητικά σενάρια και τα διαγνωστικά της πύλης μπορούν όλα να επαναλάβουν υλικό αιτήματος, και όχι κάθε επίπεδο καταγραφής αποκρύπτει το cookie. Καταγράψτε το μικρότερο αρχείο σφάλματος που χρειάζεστε, κρατήστε το έξω από κοινόχρηστα κανάλια και ελέγξτε ένα αποκρυμμένο δείγμα πριν το επισυνάψετε σε αναφορά.
Επαλήθευση και λήξη στη δεύτερη φάση
Η δεύτερη φάση πρέπει να επαληθεύει ακόμη τον διακομιστή. Το FINGERPRINT που τυπώνει το --authenticate είναι καρφίτσωμα πιστοποιητικού σε μορφή pin-sha256:, και η μεταβίβασή του στην κλήση του τούνελ με --servercert κρατά τον έλεγχο αγκυρωμένο στην πύλη απέναντι στην οποία πιστοποιηθήκατε. Η απενεργοποίηση του ελέγχου πιστοποιητικών για να απλοποιηθεί ένα σενάριο αφαιρεί τη μόνη απόδειξη ότι το cookie παραδίδεται στον προοριζόμενο κεντρικό υπολογιστή.
Όταν η πύλη απορρίψει το cookie, η λύση είναι νέος γύρος πιστοποίησης, όχι μεγαλύτερη προσωρινή μνήμη. Αποθηκεύστε το cookie μόνο για τη διάρκεια της σύνδεσης, διαγράψτε τα προσωρινά αρχεία κατά την έξοδο και χρησιμοποιήστε τη διαδικασία αφαίρεσης συνεδρίας του παρόχου ταυτότητας ή της πύλης όταν μια συνεδρία εκτεθεί ή χαθεί μια συσκευή. Ένα αποθηκευμένο cookie δεν είναι απαλλαγή από το MFA.
Πριν το αυτοματοποιήσετε, επαληθεύστε τέσσερα πράγματα: το τούνελ τρέχει με τον σωστό λογαριασμό, το cookie φτάνει μέσω stdin, το αποτύπωμα του πιστοποιητικού είναι καρφιτσωμένο και η συνεδρία απορρίπτεται όταν κλείνει το τούνελ. Αν λείπει κάποιο από αυτά, η αυτοματοποίηση διεύρυνε την εμπιστοσύνη στο cookie αντί να αναπαράγει τη χειροκίνητη ροή.