Συγκρίνετε δύο προφίλ OpenVPN χωρίς διαρροή κλειδιών
Ένα diff κειμένου μπορεί να εκθέσει τα ενσωματωμένα κλειδιά εξίσου εύκολα όπως δείχνει μια αλλαγμένη οδηγία. Συγκρίνετε ανά ρόλο σε προστατευμένα αντίγραφα και μετά φτιάξτε ένα ξεχωριστό επεξεργασμένο αρχείο διάγνωσης.
Δύο προφίλ, το ένα συνδέεται και το άλλο όχι, και ο γρήγορος τρόπος να δείτε γιατί είναι ένα diff. Το πρόβλημα είναι ότι το ίδιο diff εκτυπώνει το ενσωματωμένο ιδιωτικό κλειδί, το στατικό κλειδί και κάθε μπλοκ διαπιστευτηρίων που κουβαλά το αρχείο, και οι άνθρωποι επικολλούν την έξοδο σε μια συνομιλία πριν το προσέξουν. Η απόφαση για το τι συγκρίνετε έρχεται πριν την εκτέλεση της εντολής. Συγκρίνετε δομή και ρόλους σε προστατευμένα αντίγραφα, και φτιάξτε ξεχωριστό επεξεργασμένο αρχείο όταν κάποιος άλλος πρέπει να το δει.
Τι κουβαλά στην πραγματικότητα ένα αρχείο .ovpn
Ένα αρχείο .ovpn είναι μια διαμόρφωση με προαιρετικά ενσωματωμένα blobs. Μπορεί να περιέχει πιστοποιητικό CA, πιστοποιητικό πελάτη, ιδιωτικό κλειδί, κλειδί tls-auth ή tls-crypt, και οδηγίες που δείχνουν σε εξωτερικά αρχεία ή ζητούν διαπιστευτήρια. Δύο αρχεία μπορεί να φαίνονται σχεδόν ίδια και να διαφέρουν μόνο μέσα σε ένα blob, ή σε μία οδηγία που αλλάζει εντελώς τη μεταφορά. Ο αριθμός γραμμών δεν σας λέει τίποτα για το ποιο από αυτά συνέβη.
Μια διαφορά μέσα σε μπλοκ κλειδιού δεν είναι δημόσια απόδειξη τίποτα. Ένα επανεκδοθέν πιστοποιητικό και ένα με νέο κλειδί μπορούν να παράγουν την ίδια μορφή αλλαγής, οπότε η αναντιστοιχία του blob λέει ότι το υλικό είναι διαφορετικό, όχι ποια απόφαση το δημιούργησε. Αντιμετωπίστε το ως ένδειξη για σύγκριση πεδίων, όχι ως εύρημα.
Συγκρίνετε ανά ρόλο, όχι ανά γραμμή
Ακολουθήστε τη δική του σειρά της σύνδεσης: πρώτα τελικό σημείο και μεταφορά, μετά εμπιστοσύνη και αναμενόμενη ταυτότητα, μετά έλεγχος ταυτότητας χρήστη, μετά διαδρομές, DNS και άγκιστρα σεναρίων. Αυτή η σειρά ταιριάζει με το τι κάνει ο πελάτης, άρα η πρώτη διαφορά που συναντάτε είναι το πρώτο πράγμα που θα μπορούσε να έχει σπάσει τη σύνδεση. Η αλφαβητική σύγκριση αντίθετα σκορπίζει σχετικές ρυθμίσεις σε όλη την έξοδο.
Ένα πέρασμα με επίγνωση πεδίων κοιτά αυτά τα στοιχεία, με αυτή τη σειρά. Ό,τι ζητά ο πελάτης διαδραστικά ανήκει στη σειρά ελέγχου ταυτότητας και όχι στις σειρές εμπιστοσύνης.
remote,protoκαι θύρα, συμπεριλαμβανομένου κάθε μπλοκ σύνδεσης.caκαιcert: εκδότης, θέμα και ημερομηνία λήξης.- Αν υπάρχει καθόλου ιδιωτικό κλειδί, ποτέ τι περιέχει.
tls-authήtls-cryptπαρουσία και κατεύθυνση κλειδιού.- Οδηγίες ελέγχου ταυτότητας, συμπεριλαμβανομένης κάθε αναφοράς σε αρχείο διαπιστευτηρίων.
- Διαδρομές, επιλογές DNS και άγκιστρα σεναρίων που εκτελούνται κατά τη σύνδεση.
Όταν ένα αρχείο περιέχει πολλά μπλοκ σύνδεσης, κρατήστε κάθε επιλογή με το τελικό της σημείο. Η σύγκριση μόνο της πρώτης γραμμής remote μπορεί να χάσει την εναλλακτική που επιλέγει πραγματικά ο πελάτης σε αυτό το δίκτυο.
Γιατί ένα απλό diff είναι το λάθος εργαλείο
Ένα απλό diff είναι φτιαγμένο για κείμενο, όχι για μυστικά. Θα τυπώσει με ευχαρίστηση ένα ιδιωτικό κλειδί στο ιστορικό της οθόνης και δεν θα σας πει ότι η οδηγία που κοιτάτε είναι άσχετη με την αποτυχία. Οι εξαγωγές πεδίων είναι ταυτόχρονα ασφαλέστερες και πιο αναγνώσιμες, γιατί το υλικό πιστοποιητικού μπορεί να συγκριθεί ως μεταδεδομένα αντί για bytes.
openssl x509 -in ca.crt -noout -subject -issuer -enddate
openssl x509 -in client.crt -noout -subject -issuer -enddate
grep -E '^(remote|proto|port|tls-auth|tls-crypt|route|dhcp-option)' profile.ovpn
Οι δύο πρώτες εντολές τυπώνουν ταυτότητα και εγκυρότητα χωρίς να αγγίξουν το κλειδί, άρα η έξοδός τους είναι ασφαλής για επικόλληση. Το grep τυπώνει ονόματα και τιμές οδηγιών αλλά ποτέ τα σώματα των blobs, που το κάνει το σωστό πρώτο πέρασμα όταν υποψιάζεστε διαφορά μεταφοράς ή δρομολόγησης. Αν πρέπει να συγκριθεί το ίδιο το blob, συγκρίνετε το hash του αντί για το περιεχόμενο.
Φτιάξτε ένα επεξεργασμένο αντίγραφο για το αίτημα
Αφαιρέστε πραγματικά μυστικά και περιττά αναγνωριστικά κρατώντας ονόματα πεδίων και αρκετή δομή για να εξηγήσετε τη διαφορά. Ένας δείκτης ίδιας μορφής αποκαλύπτει ακόμα πού βρίσκεται το υλικό και πόσο μακρύ ήταν, οπότε αποφασίστε αν ακόμα και αυτό είναι αποδεκτό. Ελέγξτε το ίδιο το τελικό συνημμένο αντί να εμπιστευτείτε την εντολή που θυμάστε ότι εκτελέσατε. Μην επεξεργάζεστε το λειτουργικό πρωτότυπο μόνο για να παραγάγετε παράδειγμα, γιατί ένα επεξεργασμένο προφίλ δεν είναι απαραίτητα εκτελέσιμο και δεν πρέπει ποτέ να εισαχθεί ξανά.
Κρατήστε τα πρωτότυπα αναγνωρίσιμα με όνομα αρχείου και hash αντί να τα αντιγράψετε σε τρεις καταλόγους με παρόμοια ονόματα. Ένα string hash αρκεί για να αποδείξει ποιο αρχείο εξετάστηκε και δεν κοστίζει τίποτα αν διαρρεύσει. Κόψτε τα αντίγραφα αφού κλείσει η αλλαγή, ώστε ο επόμενος να κληρονομήσει ένα έγκυρο αρχείο.
Κρατήστε τη σύγκριση δεμένη με μια αποτυχία
Μια σύγκριση αξίζει το κόστος της όταν απαντά σε ερώτηση για μία εισαγωγή ή μία αποτυχία σύνδεσης. Ονομάστε πρώτα το βήμα που αποτυγχάνει και μετά συγκρίνετε μόνο τα πεδία από τα οποία εξαρτάται αυτό το βήμα· το να μαζέψετε όλα τα διαπιστευτήρια του πελάτη σε έναν κατάλογο κάνει την επόμενη διαρροή πιθανότερη και την επόμενη διάγνωση πιο αργή. Όσο πιο στενή η ερώτηση, τόσο πιο σύντομη η λίστα πεδίων που μπορούν να την απαντήσουν.
Αν ένα νέο αρχείο ήρθε από τον διαχειριστή, επιβεβαιώστε τη διαδρομή διανομής του πριν αντικαταστήσετε υλικό εμπιστοσύνης. Μετά την αλλαγή, επιθεωρήστε το εισαγμένο αντίγραφο που επέλεξε πραγματικά ο πελάτης και το διαπραγματευμένο αποτέλεσμα, γιατί μια οδηγία μπορεί να αγνοηθεί ή να διαβαστεί διαφορετικά από άλλη έκδοση πελάτη. Το αρχείο στον δίσκο δεν είναι απόδειξη της σύνδεσης που έτρεξε. Η σημασιολογία των οδηγιών βρίσκεται στο εγχειρίδιο του OpenVPN 2.6.