Επίπεδα script-security του OpenVPN από 0 έως 3 και τι ξεκλειδώνει το καθένα
Κάθε επίπεδο script-security διευρύνει τι μπορεί να εκτελέσει ένα προφίλ: πρώτα βοηθοί διαχείρισης, μετά σενάρια χρήστη, μετά κωδικοί στο περιβάλλον. Διαβάστε τις οδηγίες.
Εισαγάγετε ένα προφίλ σε έναν πελάτη επιφάνειας εργασίας και η πρώτη αποτυχία είναι συχνά μια γραμμή που ο πελάτης αρνείται να σεβαστεί: ένα άγκιστρο σεναρίου που δεν θα εκτελέσει, ή μια τιμή script-security που θεωρεί υπερβολικά επιτρεπτική. Το να ανεβάσετε τον αριθμό κάνει το παράθυρο να εξαφανιστεί. Διευρύνει όμως και το τι επιτρέπεται να εκτελεί αυτό το προφίλ στον υπολογιστή σας, κάτι περίεργο να παραχωρεί κανείς μόνο για να κλείσει μια προειδοποίηση. Ακολουθήστε την εισαγωγή μέχρι την οδηγία και η απόφαση γίνεται συγκεκριμένη.
Από το παράθυρο εισαγωγής στην οδηγία
Το προφίλ είναι ένα αρχείο κειμένου με οδηγίες και ο πελάτης τις διαβάζει πριν υπάρξει οποιαδήποτε σήραγγα. Μια οδηγία όπως up, down ή tls-verify ονομάζει ένα εξωτερικό πρόγραμμα που OpenVPN πρέπει να εκτελέσει σε καθορισμένη στιγμή. Το αν το OpenVPN είναι πρόθυμο να το εκτελέσει είναι ξεχωριστή ρύθμιση που ονομάζεται script-security, και το προφίλ συνήθως την ορίζει κι αυτή.
Έτσι η προειδοποίηση δεν αφορά κρυπτογραφία ή πιστοποιητικά. Αφορά ένα αρχείο διαμόρφωσης που ζητά από τον πελάτη να εκτελέσει κάτι στον κεντρικό υπολογιστή, και τον πελάτη που ελέγχει αν το τρέχον επίπεδο άδειάς του επιτρέπει αυτό το αίτημα.
Δύο διαφορετικές αποτυχίες μοιάζουν ίδιες σε αυτό το στάδιο. Ένα προφίλ που ζητά επίπεδο που ο πελάτης δεν θα παραχωρήσει παράγει άρνηση. Ένα προφίλ που ζητά επίπεδο που ο πελάτης παραχωρεί αλλά λείπει το σενάριο παράγει αποτυχία κατά την εκτέλεση, και τα δύο συγχέονται σε νήματα υποστήριξης. Το ένα είναι ζήτημα αδειών και το άλλο ζήτημα συσκευασίας.
Τι ανοίγει πραγματικά κάθε επίπεδο
Το επίπεδο 0 απαγορεύει εντελώς τις κλήσεις εξωτερικών προγραμμάτων, κάτι συνεπές για πελάτη που διαμορφώνει μόνος του τη διεπαφή του χωρίς βοήθεια και ασυνεπές για έναν που καταφεύγει στο λειτουργικό σύστημα. Το επίπεδο 1, το προεπιλεγμένο, επιτρέπει τα ενσωματωμένα εκτελέσιμα που χρειάζονται η διαμόρφωση διεπαφής και διαδρομών. Κανένα από τα δύο δεν εκτελεί κάτι που έδωσε ο χρήστης.
| Level | What OpenVPN may execute | What it exposes |
|---|---|---|
| 0 | No external programs at all | Interface and route setup must not depend on helpers |
| 1 (default) | Built-in helpers such as ip, ifconfig, route or netsh | Privileged commands the platform already ships |
| 2 | Built-in helpers plus user-defined scripts | Whatever the named script does with the client's privileges |
| 3 | Everything above, plus passwords in environment variables | Credentials visible to child processes and their logs |
Το επίπεδο 2 είναι το ενδιαφέρον όριο, γιατί δέχεται σενάρια ορισμένα από τον χρήστη. Από εκείνο το σημείο τα προνόμια του πελάτη εφαρμόζονται σε κώδικα που ίσως να μην διαβάσατε ποτέ, που καλείται σε στιγμές που δεν επιλέξατε, με περιβάλλον που περιλαμβάνει στοιχεία σύνδεσης. Το επίπεδο 3 πάει παραπέρα και επιτρέπει τη μεταβίβαση κωδικών μέσω μεταβλητών περιβάλλοντος, γι' αυτό το εγχειρίδιο το περιγράφει ως δυνητικά ανασφαλές.
Κανένας από αυτούς τους αριθμούς δεν είναι ρύθμιση ισχύος. Ένα προφίλ στο επίπεδο 3 δεν έχει καλύτερη κρυπτογράφηση από ένα στο επίπεδο 1· απλώς έχει μεγαλύτερη επιφάνεια εκτέλεσης, και η σήραγγα είναι ίδια.
Αποφασίστε τι αξίζει το προφίλ
Ρωτήστε σε τι χρησιμεύει το σενάριο πριν ρωτήσετε ποιο επίπεδο χρειάζεται. Ένα άγκιστρο που σπρώχνει ρυθμίσεις DNS ή διορθώνει μια διαδρομή μετά τη σύνδεση είναι νόμιμος λόγος να εκτελέσετε κάτι. Ένα άγκιστρο που καλεί ένα άγνωστο δυαδικό αρχείο σε προσωρινό κατάλογο είναι λόγος να σταματήσετε.
Η διαδρομή του σεναρίου μετράει όσο και το σενάριο. Μια σχετική διαδρομή επιλύεται με βάση όποιον κατάλογο χρησιμοποιεί ο πελάτης, και ένας κατάλογος με δικαίωμα εγγραφής μετατρέπει μια εφάπαξ εισαγωγή σε μόνιμη υποδοχή εκτέλεσης. Οι απόλυτες διαδρομές σε κατάλογο που ο χρήστης δεν μπορεί να αλλάξει είναι η μορφή που προτιμάται.
Τα σενάρια κληρονομούν επίσης το περιβάλλον του πελάτη, όπου ζουν τα διαπιστευτήρια και τα μεταδεδομένα σύνδεσης. Ακριβώς αυτή η κληρονομιά κάνει το επίπεδο 3 επικίνδυνο σε συνδυασμό με σενάριο που καταγράφει το περιβάλλον του, και γι' αυτό μια διαγνωστική απόρριψη από πελάτη με ενεργά σενάρια αξίζει δεύτερη ματιά πριν κολληθεί σε ένα δελτίο. Αφαιρέστε το περιβάλλον πριν το μοιραστείτε.
grep -nE 'script-security|^up |^down |tls-verify' client.ovpnΑλλάξτε ένα πράγμα και μετά παρακολουθήστε και την αποσυναρμολόγηση
Αν το προφίλ χρειάζεται πραγματικά σενάριο, αλλάξτε μόνο το επίπεδο και μόνο για αυτό το προφίλ. Εκτελέστε τον πελάτη στο προσκήνιο με αναλυτική έξοδο ώστε τα σφάλματα του ίδιου του σεναρίου να είναι ορατά αντί να τα καταπίνει ένας διαχειριστής υπηρεσιών.
openvpn --config client.ovpn --script-security 2 --verb 3
ip route show default
Δοκιμάστε ολόκληρο τον κύκλο ζωής, όχι μόνο τη σύνδεση. Ένα άγκιστρο αποσύνδεσης που αποτυγχάνει αφήνει διαδρομές να δείχνουν σε νεκρή σήραγγα, κάτι που παράγει μηχάνημα που φαίνεται συνδεδεμένο και δεν φτάνει πουθενά. Επανασυνδεθείτε μία φορά και αποσυνδεθείτε μία φορά πριν δηλώσετε την αλλαγή ολοκληρωμένη, και ελέγξτε τον πίνακα δρομολόγησης μετά από καθεμία.
Κρατήστε αντίγραφο του αρχικού προφίλ. Αν ένας πελάτης πλατφόρμας δεν υλοποιεί το ίδιο μοντέλο σεναρίων, η διαγραφή οδηγιών μέχρι να πετύχει η εισαγωγή μπορεί να αφαιρέσει την ενσωμάτωση DNS ή διαδρομών που χρειαζόταν η σήραγγα, και η σύνδεση που προκύπτει θα ταυτοποιείται άψογα ενώ δεν θα επιλύει τίποτα.
Η απόφαση που αξίζει καταγραφή είναι στενή: ποιο σενάριο, σε ποια διαδρομή, σε ποιο επίπεδο παραχωρήθηκε, για ποιο προφίλ. Όλα τα άλλα στο προφίλ μένουν αμετάβλητα, και αυτή είναι μια πρόταση που μπορεί να ελέγξει ένας κριτής.