OpenConnect csd-wrapper: ελέγξτε το σκριπτ πριν από τη σύνδεση
Αντιμετωπίστε το --csd-wrapper ως όριο εκτέλεσης κώδικα: ελέγξτε το σκριπτ, επιλέξτε ξεχωριστό χρήστη csd και επαληθεύστε τι βλέπει πραγματικά η πύλη.
Η προσθήκη του --csd-wrapper σε ένα προφίλ δίνει ένα τοπικό σκριπτ σε έναν δαίμονα που το εκτελεί κατά τη σύνδεση, άρα η απόφαση μπροστά σας είναι έλεγχος κώδικα, όχι διακόπτης προτίμησης. Η επιλογή υπάρχει ώστε να μπορεί να αντικατασταθεί το στοιχείο ελέγχου υπολογιστή της πύλης, και δέχεται διαδρομή προς σκριπτ που παρέχετε εσείς. Όλα τα παρακάτω προϋποθέτουν ότι ο ιδιοκτήτης της ανάπτυξης έχει ήδη πει ποιος έλεγχος στάσης απαιτείται· αν αυτό το μέρος είναι ακόμη ανοιχτό, τακτοποιήστε το πρώτα. Το εγχειρίδιο έχει τέσσερα βήματα: εντοπίστε το στάδιο που απέτυχε, διαβάστε το σκριπτ, επιλέξτε την ταυτότητα με την οποία εκτελείται και αποδείξτε το αποτέλεσμα.
Βήμα 1: Εντοπίστε το στάδιο που απέτυχε
Το τελευταίο μήνυμα του πελάτη αφορά συνήθως ένα cookie, που είναι το τέλος μιας αλυσίδας και όχι η αρχή της. Μια σύνδεση HTTPS, ένας έλεγχος πιστοποιητικού διακομιστή, μια ανταλλαγή ταυτοποίησης και ένα στοιχείο στάσης βρίσκονται όλα μπροστά από αυτό το μήνυμα.
Καταγράψτε την έκδοση και τη διεύθυνση σύνδεσης που χρησιμοποιείται, και επαναλάβετε την προσπάθεια κρατώντας την αναλυτική έξοδο στο δικό σας τερματικό. Διαβάστε το πρώτο σφάλμα που δεν είναι επανάληψη, όχι την τελευταία γραμμή του αντιγράφου. Αν το αρχείο καταγραφής σταματήσει πριν ονομαστεί οποιοδήποτε στοιχείο αξιολόγησης, το περιτύλιγμα δεν είναι ακόμη δικό σας πρόβλημα. Η προσθήκη του σε εκείνο το σημείο διευρύνει μόνο την επιφάνεια που θα πρέπει να υπερασπιστείτε αργότερα.
openconnect --version
openconnect --verbose --user="$VPN_USER" vpn.example.com </dev/nullΚρατήστε το αντίγραφο τοπικά, γιατί τα cookies και οι απαντήσεις ταυτοποίησης είναι υλικό πρόσβασης. Ένα ίχνος που επικολλάται σε μια συζήτηση είναι διαρροή διαπιστευτηρίων ακόμη και όταν το βήμα αξιολόγησης φαίνεται ακίνδυνο. Μοιραστείτε το κείμενο του σφάλματος και το σημείο της ροής όπου εμφανίστηκε, ποτέ το ωφέλιμο φορτίο.
Βήμα 2: Διαβάστε το σκριπτ πριν μπει σε προφίλ
Ένα περιτύλιγμα είναι τόσο αξιόπιστο όσο η αναθεώρηση που ελέγξατε, γι’ αυτό καρφιτσώστε αυτή την αναθεώρηση και αποθηκεύστε το hash της δίπλα στο σημείωμα έγκρισης. Οι δύο εντολές παρακάτω σας δίνουν ένα αποτύπωμα και έναν φθηνό συντακτικό έλεγχο πριν διαβάσετε έστω μία γραμμή. Δίνουν επίσης στο επόμενο άτομο μια σταθερή αναφορά, κάτι που μετράει όταν το αρχείο ζει έξω από τη διαχείριση πακέτων. Καμία από τις εντολές δεν λέει τι κάνει το σκριπτ, γι’ αυτό εκτελέστε τις και συνεχίστε να διαβάζετε.
sha256sum ./vpn-csd-wrapper.sh
bash -n ./vpn-csd-wrapper.shΔιαβάστε ολόκληρο το αρχείο με τέσσερις ερωτήσεις στο μυαλό: κάνει εξερχόμενες κλήσεις HTTP, διαβάζει αρχεία διαπιστευτηρίων ή μεταβλητές περιβάλλοντος, γράφει έξω από έναν προσωρινό κατάλογο, και αναφέρει κάποιος κλάδος περασμένη στάση χωρίς να μετρήσει τίποτα. Το τελευταίο μοτίβο είναι παράκαμψη πολιτικής με μια γραμμή καταγραφής κολλημένη πάνω. Τα αντιγραμμένα περιτυλίγματα τείνουν να το λαθρεμπορεύουν πίσω από έναν έλεγχο που φαίνεται εύλογος. Αν το σκριπτ αποφασίσει ότι η συσκευή είναι εντάξει πριν κοιτάξει τη συσκευή, σταματήστε εκεί.
Ελέγξτε και για συσκευασμένα ωφέλιμα φορτία, γιατί μια αναγνώσιμη κεφαλίδα δεν αποδεικνύει τίποτα για το υπόλοιπο αρχείο. Η λήψη ενός σκριπτ από μια συζήτηση φόρουμ δεν το κάνει αξιόπιστο μόνο και μόνο επειδή το όνομά του αντηχεί ένα πραγματικό στοιχείο ελέγχου υπολογιστή. Καταγράψτε ποιος το εγκατέστησε, από πού ήρθε και πώς θα ενημερώνεται.
grep -nE 'base64 -d|xxd -r|eval |curl |wget ' ./vpn-csd-wrapper.shΒήμα 3: Επιλέξτε την ταυτότητα με την οποία εκτελείται το περιτύλιγμα
Το --csd-user χαμηλώνει τα προνόμια όσο εκτελείται το πρόγραμμα CSD, TNCC ή HIP. Αυτός ο λογαριασμός είναι μέρος της τοπικής ρύθμισης εκτέλεσης, όχι το όνομα χρήστη που υποβάλλεται στην πύλη.
Δώστε στο περιτύλιγμα έναν αποκλειστικό λογαριασμό χωρίς διαδραστικό κέλυφος, χωρίς δικαιώματα sudo και χωρίς συμμετοχές σε ομάδες που δεν χρειάζεται. Παραχωρήστε πρόσβαση ανάγνωσης στο σκριπτ και στα συγκεκριμένα αρχεία που επιθεωρεί, και μετά δοκιμάστε τη μείωση προνομίων πριν αγγίξετε το προφίλ VPN. Το να βρείτε το πρόβλημα εδώ είναι φθηνότερο από το να το βρείτε μέσα στον πελάτη.
sudo -u vpn-csd /usr/local/libexec/vpn-csd-wrapper.shΗ μείωση των προνομίων περιορίζει τη ζημιά που μπορεί να προκαλέσει ένα κακό σκριπτ. Δεν ελέγχει τον κώδικα, δεν κάνει την αναφορά αληθινή ούτε αποδεικνύει ότι ο διαχειριστής της πύλης δέχεται αυτή την υλοποίηση ως συμμόρφωση με την πολιτική συσκευών.
Βήμα 4: Κρατήστε την αλλαγή αναστρέψιμη
Κρατήστε αντίγραφο ασφαλείας του προφίλ πριν το επεξεργαστείτε, και κρατήστε το περιτύλιγμα υπό έλεγχο εκδόσεων ώστε μια επαναφορά να αποκαθιστά γνωστό hash αντί να κυνηγά ένα αντίγραφο. Σημειώστε τη διαδρομή του σκριπτ, το hash, τον χρήστη εκτέλεσης και τον εγκρίνοντα σε ένα σημείο.
Για επαναφορά, αφαιρέστε την επιλογή, επανεκκινήστε τον πελάτη και επιβεβαιώστε ότι επιστρέφει το αρχικό σφάλμα. Αν η πύλη εξακολουθεί να απορρίπτει τη σύνδεση μετά την επαναφορά, κάτι άλλο άλλαξε επίσης, και το να βρείτε αυτή τη διαφορά έρχεται πριν από μια νέα δοκιμή του περιτυλίγματος. Κρατήστε το προηγούμενο αντίγραφο για όλη τη διάρκεια του παραθύρου αλλαγής, που για τις περισσότερες ομάδες σημαίνει μέχρι να περάσει το επόμενο παράθυρο συντήρησης.
Μετά από επιτυχή ανάπτυξη, ελέγξτε δύο πράγματα αντί για ένα: η σήραγγα ανεβαίνει, και μια συσκευή που θα έπρεπε να αποτύχει στον έλεγχο στάσης εξακολουθεί να απορρίπτεται. Μια σύνδεση που λειτουργεί για όλους δεν είναι απόδειξη ότι η αξιολόγηση επιβίωσε από την αλλαγή σας.
Συντομεύσεις που δημιουργούν δεύτερο πρόβλημα
Μην αφήνετε τον βοηθό να αναφέρει συμμορφούμενη κατάσταση χωρίς να εκτελέσει τους απαιτούμενους ελέγχους, και μην παρακάμπτετε την ταυτότητα πλατφόρμας για να ταιριάξει με άλλο λειτουργικό σύστημα. Το να δηλώνετε διαφορετική πλατφόρμα δεν είναι απόδειξη ότι η πραγματική συσκευή συμμορφώνεται με την πολιτική. Σας αφήνει με έναν πελάτη που λέει ψέματα σε κάθε μελλοντική σύνδεση.
Η απενεργοποίηση της επαλήθευσης διακομιστή, η επανάπαιξη ενός παλιού cookie και η στοίβαξη ανέλεγκτων σκριπτ ανταλλάσσουν όλες μια ορατή αποτυχία με μια αόρατη. Αν ο εγκατεστημένος πελάτης δεν μπορεί να ολοκληρώσει τη ροή που υποστηρίζεται, ζητήστε εγκεκριμένη εναλλακτική αντί να λυγίσετε αυτή που έχετε.
Το εγχειρίδιο OpenConnect τεκμηριώνει τα --csd-wrapper και --csd-user χωριστά, και αυτό είναι το στοιχείο που μετράει: το σκριπτ και η ταυτότητα είναι δύο αποφάσεις. Εξετάστε τα χωριστά και γράψτε και τα δύο. Τότε η προτροπή σύνδεσης παύει να είναι γρίφος που λύνετε επικολλώντας κώδικα.