Ένας πελάτης πιστοποιείται με το κοινόχρηστο κλειδί και ένας άλλος το απορρίπτει, ενώ οι χαρακτήρες που επικολλήσατε φαίνονται ίδιοι και στις δύο πλευρές. Πιθανότατα είναι οι ίδιοι χαρακτήρες· η διαφορά είναι ποιος κανόνας αποκωδικοποίησης εφαρμόζεται σε αυτούς από το αρχείο. Ένα κείμενο σε εισαγωγικά λαμβάνεται κυριολεκτικά, ένα διακριτικό που αρχίζει με 0x διαβάζεται ως δεκαεξαδικό, και ένα διακριτικό που αρχίζει με 0s διαβάζεται ως Base64. Μόνο μία από τις τρεις γραφές σημαίνει αυτό που σκοπεύατε, οπότε η διόρθωση είναι συνήθως μετατροπή και όχι καλύτερος κωδικός πρόσβασης.

Το σύμπτωμα δείχνει κωδικοποίηση, όχι κρυπτογράφηση

Όταν τα δύο άκρα κρατούν διαφορετικά byte, η διαπραγμάτευση εξακολουθεί να πετυχαίνει και η απόδειξη αποτυγχάνει μετά. Το αρχείο καταγραφής τότε αναφέρει αποτυχία ακεραιότητας ή HMAC αντί για ασυμφωνία αλγορίθμου, επειδή επιλέχθηκε μια πρόταση και το βήμα πιστοποίησης δεν ταίριαξε. Εκείνη η γραμμή δεν αναφέρει ποτέ τη μορφή του μυστικού.

Το στάδιο είναι το στοιχείο. Μια αποτυχία που φτάνει μετά από επιλεγμένη πρόταση σημαίνει ότι οι δύο πλευρές συμφώνησαν σε όλα εκτός από το υλικό κλειδιού, ενώ το «καμία πρόταση δεν επιλέχθηκε» ανήκει στην πολιτική ή στα σύνολα κρυπτογράφησης. Ένας έλεγχος ακεραιότητας που αποτυγχάνει ενώ ο κωδικός φαίνεται σωστός είναι το ορατό πρόσωπο μιας ασυμφωνίας κωδικοποίησης.

Ένα μυστικό, τρεις τρόποι με τους οποίους το αρχείο μπορεί να το διαβάσει

Για την τιμή των τεσσάρων byte key1, το δεκαεξαδικό και το Base64 είναι δύο επανακωδικοποιήσεις των ίδιων byte, και μόνο οι αρχικοί χαρακτήρες λένε στον αναλυτή ποια από τις δύο κρατά. Τα διαπιστευτήρια του swanctl ακολουθούν την ίδια σύμβαση, οπότε μια τιμή που μεταφέρεται μεταξύ των δύο διεπαφών διατηρεί το νόημά της μόνο όταν το πρόθεμά της ταξιδεύει μαζί της.

10.20.0.5 %any : PSK "key1"
10.20.0.5 %any : PSK 0x6b657931
10.20.0.5 %any : PSK 0sa2V5MQ==

Δύο λεπτομέρειες σε εκείνο το μπλοκ κοστίζουν τον περισσότερο χρόνο. Τα δεκαεξαδικά ψηφία δέχονται και τις δύο γραφές, άρα τα 0x6b657931 και 0x6B657931 είναι η ίδια τιμή, αλλά ένας περιττός αριθμός χαρακτήρων διαβάζεται σιωπηλά λάθος αντί να απορριφθεί, γεγονός που μετατοπίζει κάθε byte μετά την τομή. Η συμπλήρωση του Base64 ανήκει στην τιμή, οπότε ένα κείμενο που επικολλάται χωρίς τα τελικά του σημεία = αποκωδικοποιείται σε διαφορετικά byte αντί να αποτύχει ηχηρά.

Ένα προφίλ που αποκωδικοποίησε την τιμή μία φορά την έχει ήδη μετατρέψει, οπότε η εκ νέου αποκωδικοποίηση παράγει διαφορετικά byte και μια αποτυχία πιστοποίησης που διαβάζεται σαν λάθος κωδικός. Τα εισαγωγικά είναι η ασφαλής κατεύθυνση για κάθε αμφίσημο, επειδή το περιεχόμενο είναι κυριολεκτικό ακόμη και όταν αρχίζει με δείκτη κωδικοποίησης.

Από πού προέρχεται το κείμενο Base64

Οι εξαγωγές προφίλ και οι πύλες προμηθευτών συχνά παραδίδουν το κλειδί ήδη κωδικοποιημένο, συνήθως σε ένα πεδίο δεδομένων που δεν προοριζόταν ποτέ για πληκτρολόγηση με το χέρι. Είτε αποσυναρμολογήστε αυτή την τιμή και αποθηκεύστε το αποκωδικοποιημένο κείμενο σε εισαγωγικά, είτε αφήστε το κωδικοποιημένο με τον δείκτη μπροστά. Το να κάνετε το μισό από το καθένα είναι αυτό που το χαλάει. Και οι δύο δρόμοι λειτουργούν μόνο αν ολόκληρη η τιμή επιβιώσει από την αντιγραφή.

Και οι δύο κατευθύνσεις είναι μία εντολή η καθεμία, και αξίζει να μείνουν στο δελτίο ως η ακριβής πράξη που παρήγαγε την αποθηκευμένη τιμή. Εκτελέστε τις με αυτή τη σειρά:

printf '%s' 'a2V5MQ==' | base64 -d
printf '%s' 'key1' | base64

Το να επικολλήσετε κωδικοποιημένο κείμενο σαν να ήταν απλό είναι το ακριβό λάθος. Το αρχείο κατακερματίζει τους χαρακτήρες ακριβώς όπως γράφτηκαν, το παράγωγο κλειδί βγαίνει περίπου ένα τρίτο μακρύτερο από αυτό που υπολόγισε ο ομότιμος, και κάθε προσπάθεια αποτυγχάνει με τον ίδιο τρόπο χωρίς προειδοποίηση, επειδή ο αναλυτής ακολούθησε τον κανόνα που του δόθηκε.

Επιβεβαιώστε ποια byte χρησιμοποιεί στην πραγματικότητα κάθε ομότιμος

Διαβάστε πρώτα την εικόνα του δαίμονα για τη σύνδεση και μετά το αποτέλεσμα της πιστοποίησης, αντί να μαντέψετε αιτία από το κείμενο του σφάλματος. Η σύγκριση του αποθηκευμένου μήκους είναι ένας γρήγορος έλεγχος ευλογοφάνειας, επειδή το κωδικοποιημένο κείμενο είναι μακρύτερο από τα byte που αντιπροσωπεύει. Έπειτα επιβεβαιώστε ποια γραμμή ταυτότητας ταίριαξε, επειδή ένα σωστό μυστικό κάτω από λάθος ομότιμο αποτυγχάνει ακριβώς όπως ένα λάθος. Η σειρά των γραμμών το κρίνει: η πρώτη αντιστοίχιση κερδίζει, οπότε μια ευρεία γραμμή %any κοντά στην κορυφή αντικαθιστά σιωπηλά τη συγκεκριμένη γραμμή που μόλις επεξεργαστήκατε.

Επαναφορτώστε αντί να επανεκκινήσετε μόλις το αρχείο είναι σωστό. ipsec rereadsecrets ανανεώνει το αντίγραφο του δαίμονα IKE, και μια εγκατάσταση swanctl φορτώνει τα διαπιστευτήρια με τη δική της εντολή. Η επανεκκίνηση ρίχνει κάθε εδραιωμένη συσχέτιση και καταστρέφει τη σύγκριση που προσπαθούσατε να κάνετε.

Κανένας από αυτούς τους ελέγχους δεν απαιτεί την αποκάλυψη του μυστικού. Ένα μήκος, ένας επιλογέας ταυτότητας και μια θέση γραμμής εξηγούν τις περισσότερες τέτοιες αποτυχίες πριν χρειαστεί κανείς δεκαεξαδική εκτύπωση.

Αλλάξτε το αρχείο χωρίς να κρύψετε το αποτέλεσμα

Περιορίστε το αρχείο στον λογαριασμό του δαίμονα και κρατήστε τα ζωντανά μυστικά έξω από δελτία, συνομιλίες και στιγμιότυπα οθόνης, επειδή ένα επικολλημένο κλειδί είναι διαρροή και όχι διάγνωση. Επίσης επιβιώνει περισσότερο από το περιστατικό που το δημιούργησε.

Δοκιμάστε από έναν πελάτη του οποίου τη διαμόρφωση ελέγχετε, επιβεβαιώστε ότι η πιστοποίηση πετυχαίνει, και στη συνέχεια επιβεβαιώστε ότι η σήραγγα μεταφέρει κίνηση. Μια επαναφόρτωση που διορθώνει τη χειραψία ενώ η δρομολόγηση παραμένει σπασμένη είναι άλλο πρόβλημα, και γίνεται ορατή μόλις το μυστικό πάψει να κινείται.

Σχετικά άρθρα