Ο κωδικός πρόσβασης είναι σωστός, η σύνδεση VPN αποτυγχάνει παρ’ όλα αυτά, και ο διακομιστής RADIUS μπορεί να έκανε ακριβώς ό,τι του ζητήθηκε. Η πύλη πιθανότατα έλαβε ένα Access-Challenge, δεν έδειξε τίποτα χρήσιμο και μετά έληξε το χρονικό όριο ή αντιμετώπισε αυτή την απάντηση ως απόρριψη. Από την πλευρά του πελάτη μοιάζει με λάθος διαπιστευτήρια ή σπασμένο τούνελ. Η αιτία συνήθως βρίσκεται στη μέση μιας συνομιλίας που κανείς δεν κατέγραψε.

Μία σύνδεση, δύο ανταλλαγές με το RADIUS

Όταν το backend θέλει δεύτερο παράγοντα, δεν απαντά στο πρώτο αίτημα με αποδοχή ή απόρριψη. Απαντά με κωδικό 11 και περιμένει την επόμενη απάντηση του χρήστη, την οποία η πύλη πρέπει να στείλει πίσω σε αίτημα συνέχειας. Αυτό το αίτημα ανήκει στην ίδια συνομιλία ταυτοποίησης, όχι σε νέα απόπειρα σύνδεσης.

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

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

Τι κουβαλά στην πραγματικότητα η πρόκληση

Η προδιαγραφή RADIUS περιγράφει τον κωδικό 11 στην ενότητα 4.4 και επιτρέπει δύο χαρακτηριστικά που έχουν σημασία εδώ. Το Reply-Message κρατά κείμενο για τον χρήστη, και το State κρατά μια αδιαφανή τιμή που ο διακομιστής θέλει να του επιστραφεί. Το NAS δεν πρέπει να ερμηνεύει το State, μόνο να το επιστρέφει αμετάβλητο.

Το αίτημα συνέχειας χρησιμοποιεί νέο Identifier και νέο Request Authenticator και πρέπει να φέρει την ίδια τιμή State μαζί με την απάντηση του χρήστη. Ο διακομιστής το αντιστοιχίζει με την εκκρεμή πρόκληση μέσω αυτού του State, γι’ αυτό μια πύλη που αναπαράγει ή απορρίπτει το χαρακτηριστικό δεν μπορεί να ολοκληρώσει την τελετή. Το response authenticator σε κάθε απάντηση πρέπει επίσης να επικυρώνεται, αλλιώς το NAS πρέπει να πετάει το πακέτο.

Η ενότητα 4.4 προσθέτει τη λεπτομέρεια που εξηγεί τις περισσότερες σιωπηλές αποτυχίες: ένα NAS που δεν υποστηρίζει προκλήσεις αντιμετωπίζει το Access-Challenge ως απόρριψη. Αν η υπηρεσία VPN της πύλης σας προηγείται αυτής της υποστήριξης ή την παραλείπει, το αίτημα του backend για δεύτερο παράγοντα γίνεται άμεσο «η ταυτοποίηση απέτυχε» χωρίς καμία προτροπή.

Πού χάνεται το αλυσιδωτό αίτημα

Ο πρώτος ύποπτος είναι η διαδρομή της προτροπής και όχι τα διαπιστευτήρια. Μια πύλη web που εμφανίζει πεδίο OTP για συνδέσεις ιστού δεν το κάνει αυτόματα και για την υπηρεσία VPN, και μερικές πύλες περνούν πρόκληση μόνο σε πελάτες που διαφημίζουν τη δυνατότητα. Δοκιμάστε τον ίδιο λογαριασμό και στα δύο σημεία εισόδου· αν η πύλη λειτουργεί και το VPN όχι, κοιτάτε τη μεταβίβαση, όχι το token.

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

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

Ιχνηλατήστε μία μόνο απόπειρα από άκρη σε άκρη

Αναπαράγετε το μία φορά, με ενεργή την αποσφαλμάτωση στην πλευρά του διακομιστή, και κρατήστε κάθε άλλη συνεδρία έξω από το παράθυρο καταγραφής:

$ sudo radsniff -i eth0 -x -f 'udp port 1812'
$ sudo freeradius -X
$ radtest alice 'password' 127.0.0.1 0 testing123

Στην έξοδο αναζητήστε το σχήμα της συνομιλίας και όχι μία μόνο γραμμή. Ένα πρώτο Access-Request με Identifier 3, ένα Access-Challenge που φέρει State, μετά ένα δεύτερο Access-Request με Identifier 4 που επαναλαμβάνει αυτό το State και περιλαμβάνει την απάντηση του χρήστη. Αν λείπει το δεύτερο αίτημα, η πύλη δεν συνέχισε ποτέ. Αν φτάσει χωρίς State, ο διακομιστής δεν μπορεί να το αντιστοιχίσει με την εκκρεμή πρόκληση και συνήθως θα το απορρίψει.

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

Η τελική κατάσταση που θέλετε είναι μια ολοκληρωμένη, εξουσιοδοτημένη συνομιλία που ακολουθείται από την προβλεπόμενη πρόσβαση στην υπηρεσία. Μια απάντηση που φτάνει από τον διακομιστή RADIUS αποδεικνύει πολύ λιγότερα.

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