Ιδιωτικά ονόματα VPN που αποτυγχάνουν; Η προστασία rebind του DNS είναι ο ύποπτος
Ένας resolver που απορρίπτει απαντήσεις από τον ιδιωτικό χώρο σπάει τα εσωτερικά ονόματα, όχι τη σήραγγα. Διαβάστε την απάντηση, περιορίστε την εξαίρεση και κρατήστε την προστασία αλλού.
Στο τοπικό δίκτυο του γραφείου το εσωτερικό όνομα απαντά αμέσως. Τη στιγμή που ανεβαίνει το VPN σταματά να λειτουργεί, η εφαρμογή αναφέρει λήξη χρόνου και η ίδια η σήραγγα περνά κίνηση χωρίς παράπονο. Αυτό που άλλαξε είναι ο resolver, και αυτός ο resolver έχει άποψη για τις ιδιωτικές διευθύνσεις.
Η προστασία rebind υπάρχει για να σταματήσει ένα συγκεκριμένο κόλπο. Ένα όνομα ιδιωτικού χώρου που δημοσιεύτηκε σκόπιμα μοιάζει αρκετά, ώστε η άμυνα ενεργοποιείται.
Διαβάστε την απάντηση πριν διαβάσετε την πολιτική
Ρωτήστε το όνομα στον resolver που στέλνει πραγματικά το VPN, όχι σε εκείνον που χρησιμοποιεί ο φορητός σας στο σπίτι. Συγκρίνετε την απάντηση με την εγγραφή που περιμένετε και σημειώστε αν η απάντηση είναι κενή, απορριφθείσα ή γεμάτη δημόσιες διευθύνσεις που δεν σχεδίασε κανείς.
Τα συμπτώματα επικαλύπτονται, οπότε το σχήμα της απάντησης καθορίζει τη διάγνωση. Ένα NXDOMAIN είναι εγγραφή που λείπει, ένα REFUSED είναι κανόνας πρόσβασης, μια δημόσια διεύθυνση για εσωτερικό όνομα είναι σφάλμα πολιτικής ή διαχωρισμένου DNS, και μια σωστή ιδιωτική διεύθυνση που ο πελάτης δεν μπορεί να χρησιμοποιήσει είναι εντελώς άλλο πρόβλημα. Μια απορριφθείσα σύνδεση ή ένα αίτημα που κόλλησε δεν αποδεικνύει τίποτα από μόνο του, γι’ αυτό η πρώτη εντολή σε οποιοδήποτε από αυτά τα δελτία πρέπει να είναι αναζήτηση και όχι επανεκκίνηση. Γράψτε την απάντηση πριν αλλάξετε οτιδήποτε.
Τι σταματά στην πραγματικότητα η άμυνα
Το rebinding του DNS λειτουργεί αλλάζοντας σε τι επιλύεται ένα όνομα αφού ο πελάτης το έχει ήδη εμπιστευτεί. Μια σελίδα φορτώνεται από όνομα που ελέγχει ο επιτιθέμενος, η απάντηση γυρίζει σε ιδιωτική διεύθυνση και το πρόγραμμα περιήγησης εξαπατάται ώστε να μιλήσει με κάτι στο τοπικό δίκτυο, με το οποίο δεν θα δεχόταν ποτέ απευθείας σύνδεση. Η άμυνα είναι να απορρίπτονται απαντήσεις που δείχνουν στον ιδιωτικό χώρο όταν ο resolver δεν κλήθηκε ποτέ να εξυπηρετήσει ιδιωτικό χώρο ονομάτων. Αυτή ακριβώς η ασυμμετρία είναι όλη η επίθεση.
Το dnsmasq τεκμηριώνει ακριβώς αυτή τη συμπεριφορά, μαζί με εξαιρέσεις ανά τομέα. Η σελίδα εγχειριδίου του περιγράφει το rebind-domain-ok ως τον τρόπο να ονομάζονται τομείς που μπορούν νόμιμα να επιστρέφουν τέτοιες διευθύνσεις. Διαβάστε το ως ένδειξη ότι η προβλεπόμενη διόρθωση είναι περιορισμένη άδεια, όχι γενικός διακόπτης.
Περιορίστε την εξαίρεση στον χώρο ονομάτων
Διορθώστε πρώτα τον χώρο ονομάτων και μετά την εξαίρεση. Επιβεβαιώστε ότι το όνομα που αποτυγχάνει ανήκει σε τομέα που ελέγχει ο οργανισμός και ότι η εγγραφή συντηρείται σκόπιμα. Μια απρόσμενη διεύθυνση που απλώς μοιάζει με γνωστό εύρος τοπικού δικτύου αξίζει υποψία και όχι εξαίρεση, οπότε ελέγξτε τον ιδιοκτήτη της ζώνης πριν γράψετε οποιαδήποτε άδεια.
# ask the resolver the VPN pushed, and show the full answer
dig +noall +answer db.corp.example @10.40.0.1
dig +short db.corp.example @10.40.0.1
# dnsmasq: what does the running configuration already allow?
grep -R 'rebind' /etc/dnsmasq.d /etc/dnsmasq.conf
Στη συνέχεια προσθέστε την πιο στενή άδεια που καλύπτει τα προβλεπόμενα ονόματα: έναν τομέα ή έναν εκχωρημένο υποτομέα, στη διαμόρφωση του resolver που ρωτούν οι πελάτες VPN. Το να απενεργοποιήσετε την προστασία για κάθε όνομα σε αυτόν τον resolver αφαιρεί την άμυνα για όλα μαζί, περιλαμβανομένων των ονομάτων που δεν τη χρειάστηκαν ποτέ.
Το διαχωρισμένο DNS ανήκει στην ίδια απόφαση. Αν ο ιδιωτικός χώρος ονομάτων πρέπει να απαντάται μόνο στον εσωτερικό resolver, δημοσιεύστε τον εκεί και σταματήστε να τον διαρρέετε σε δημόσιους resolver, ώστε η εξαίρεση να καλύπτει ένα μονοπάτι αντί για κάθε μονοπάτι.
Ελέγξτε ξανά τον πόρο και την άμυνα
Ρωτήστε ξανά και μετά συνδεθείτε στην υπηρεσία και δείτε τι βλέπει ο πελάτης. Μια σωστή ιδιωτική απάντηση με λειτουργική συνεδρία σημαίνει ότι η εξαίρεση πέτυχε. Μια σωστή απάντηση με κολλημένη συνεδρία σημαίνει ότι η διαδρομή ή η ταυτότητα της υπηρεσίας είναι ο επόμενος ύποπτος.
# the internal name and the public control should behave differently
dig +short db.corp.example @10.40.0.1
dig +short www.example.com @10.40.0.1
# and the service itself, with the certificate it presents
curl -sS -o /dev/null -w '%{http_code}\n' https://db.corp.example/health
Δοκιμάστε επίσης ένα δημόσιο όνομα μέσω του ίδιου resolver. Η προστασία πρέπει να συνεχίσει να λειτουργεί για ονόματα εκτός της εξαίρεσης, και αν αυτός ο έλεγχος αποτύχει, η αλλαγή ήταν ευρύτερη από το προβλεπόμενο. Κρατήστε την επικύρωση πιστοποιητικού ανέγγιχτη σε όλη τη διαδικασία, γιατί ένα όνομα που επιλύεται σωστά πρέπει ακόμη να ταιριάζει με το πιστοποιητικό που παρουσιάζει η υπηρεσία.
Καταγράψτε στο δελτίο την απορριφθείσα απάντηση, τον τομέα, τον resolver και ποιος κατέχει την πολιτική. Αυτή η καταγραφή είναι που μετατρέπει μια μυστηριώδη εσωτερική διακοπή σε αλλαγή διαμόρφωσης που μπορεί κάποιος να ελέγξει.