Ενότητα 8 · 8.1
DNSSEC in απλή γλώσσα
Ενότητα 8: Ασφάλεια και επίλυση προβλημάτων · Χρόνος ανάγνωσης: 11 λεπτά
Στόχος μαθήματος: Μετά από αυτό το μάθημα θα μπορείτε να εξηγήσετε με απλά λόγια τι προστατεύει το DNSSEC, πώς λειτουργεί η αλυσίδα εμπιστοσύνης και γιατί μπορεί να πάει στραβά μετά από μια μεταφορά.
Βασικές έννοιες: DNSSEC, υπογραφή (RRSIG), κλειδί (DNSKEY), εγγραφή DS, αλυσίδα εμπιστοσύνης, resolver επικύρωσης, SERVFAIL
Το πρόβλημα: πώς ξέρετε ότι μια απάντηση είναι αληθινή;
Στην ενότητα 1 είδατε ότι ένας resolver θέτει μια σειρά ερωτημάτων: στο root, στον διακομιστή TLD και στον εξουσιοδοτημένο nameserver. Η απάντηση που επιστρέφει γίνεται πιστευτή και αποθηκεύεται στην cache. Όμως το απλό DNS δεν ελέγχει αν αυτή η απάντηση προέρχεται πράγματι από τον σωστό nameserver. Ένας επιτιθέμενος που καταφέρνει να στείλει μια ψεύτικη απάντηση πριν φτάσει η πραγματική, μπορεί να κάνει έναν resolver να πιστέψει ότι το example.com βρίσκεται στο 203.0.113.66 αντί στο 192.0.2.10. Αυτό ονομάζεται cache poisoning: η cache είναι "δηλητηριασμένη" και όποιος χρησιμοποιεί αυτόν τον resolver καταλήγει στον λάθος διακομιστή.
Το DNSSEC (DNS Security Extensions) λύνει αυτό το πρόβλημα υπογράφοντας τις απαντήσεις. Ο resolver μπορεί τότε να ελέγξει αν μια απάντηση είναι πράγματι αυθεντική και δεν έχει αλλάξει στη διαδρομή.
Τι κάνει και τι δεν κάνει το DNSSEC
Αυτό είναι το σημαντικότερο που πρέπει να θυμάστε:
| Το DNSSEC κάνει | Το DNSSEC δεν κάνει |
|---|---|
| Αποδεικνύει ότι μια απάντηση προέρχεται από τον πραγματικό διαχειριστή της ζώνης | Δεν κρυπτογραφεί την κίνηση DNS σας (ο καθένας μπορεί ακόμα να δει τι αναζητάτε) |
| Αποδεικνύει ότι η απάντηση δεν άλλαξε στη διαδρομή | Δεν ασφαλίζει τον ιστότοπο ή το email σας (γι' αυτό υπάρχουν το https και τα SPF/DKIM/DMARC) |
| Αποδεικνύει ότι ένα όνομα πράγματι δεν υπάρχει | Δεν αποτρέπει λάθη στις δικές σας εγγραφές: μια λανθασμένα υπογεγραμμένη εγγραφή παραμένει λανθασμένη |
Μια υπογραφή λειτουργεί σαν σφραγίδα σε έναν φάκελο: ο καθένας μπορεί να διαβάσει το γράμμα, αλλά βλέπετε αμέσως αν κάποιος το άνοιξε.
Τα τρία στοιχεία
Το DNSSEC προσθέτει μερικούς τύπους εγγραφών. Δεν χρειάζεται να τις δημιουργήσετε εσείς οι ίδιοι (αυτό το κάνει ο διαχειριστής DNS σας ή το πάνελ), αλλά θα τις συναντήσετε:
- DNSKEY: το δημόσιο κλειδί της ζώνης. Με αυτό μπορεί ο καθένας να ελέγξει τις υπογραφές.
- RRSIG: η υπογραφή για μια ομάδα εγγραφών. Κάθε απάντηση A, MX ή TXT συνοδεύεται από ένα RRSIG. Μια υπογραφή έχει ημερομηνία έναρξης και λήξης: η ζώνη πρέπει λοιπόν να υπογράφεται εκ νέου τακτικά.
- DS (Delegation Signer): ένα σύντομο "δακτυλικό αποτύπωμα" του κλειδιού της ζώνης σας. Αυτό βρίσκεται όχι στη δική σας ζώνη, αλλά στη γονική ζώνη: για το
example.comδηλαδή στο μητρώο του .com (Verisign), για ένα.nldomain στο SIDN (τον φορέα μητρώου του .nl στην Ολλανδία).
Έτσι μοιάζει μια υπογεγραμμένη απάντηση (συντομευμένη):
$ dig example.com A +dnssec +noall +answer
example.com. 3600 IN A 192.0.2.10
example.com. 3600 IN RRSIG A 13 2 3600 20261119000000 20261029000000 30794 example.com. s7yJ5o...Στο RRSIG βλέπετε μεταξύ άλλων τον αλγόριθμο (13 = ECDSA P-256 με SHA-256), την ημερομηνία λήξης (19 Νοεμβρίου 2026), την ημερομηνία έναρξης και τον αριθμό του κλειδιού (30794).
Η αλυσίδα εμπιστοσύνης
Γιατί το DS βρίσκεται στη γονική ζώνη; Επειδή ένα κλειδί στη δική σας ζώνη δεν αποδεικνύει τίποτα: ένας επιτιθέμενος θα μπορούσε επίσης να στείλει το δικό του κλειδί. Γι' αυτό ο έλεγχος γίνεται από πάνω προς τα κάτω:
- Ο resolver εμπιστεύεται το κλειδί του root. Αυτό είναι ενσωματωμένο σε κάθε resolver επικύρωσης (το trust anchor).
- Το root έχει ένα DS για το .com, υπογεγραμμένο με το κλειδί του root. Έτσι ο resolver γνωρίζει ποιο κλειδί πρέπει να έχει το .com.
- Η ζώνη .com έχει ένα DS για το example.com, υπογεγραμμένο με το κλειδί του .com.
- Η ζώνη example.com έχει ένα DNSKEY που ταιριάζει με αυτό το DS, και έτσι μπορούν να ελεγχθούν όλα τα RRSIG.
Κάθε κρίκος αποδεικνύει τον επόμενο. Αν σπάσει ένας κρίκος, όλη η αλυσίδα γίνεται αναξιόπιστη.
Ένας resolver επικύρωσης (οι περισσότεροι μεγάλοι δημόσιοι resolvers, και όλο και περισσότεροι πάροχοι) ελέγχει αυτή την αλυσίδα. Αν είναι σωστή, λαμβάνετε την απάντηση. Αν δεν είναι σωστή, ο resolver δεν δίνει καμία απάντηση, αλλά την κατάσταση σφάλματος SERVFAIL. Για τον επισκέπτη ο ιστότοπος φαίνεται τότε απλώς ότι "δεν υπάρχει", ενώ οι εγγραφές σας μπορεί να είναι τέλεια εντάξει.
Μπορείτε να το δείτε και εσείς οι ίδιοι με ένα domain που έχει χαλάσει επίτηδες:
$ dig dnssec-failed.org A @1.1.1.1
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL
; EDE: 9 (DNSKEY Missing): (no SEP matching the DS found for dnssec-failed.org.)Με το +cd ("checking disabled") ζητάτε από τον resolver να παραλείψει τον έλεγχο. Αν τότε λάβετε απάντηση, ξέρετε με βεβαιότητα ότι το πρόβλημα οφείλεται στο DNSSEC:
$ dig +cd dnssec-failed.org A @1.1.1.1 +short
96.99.227.255Ένα domain χωρίς DNSSEC (χωρίς DS στη γονική ζώνη) δεν δίνει SERVFAIL: απλώς δεν είναι υπογεγραμμένο και περνάει ως "μη ασφαλές".
Πού πάει στραβά: μεταφορές και αλλαγές κλειδιών
Το ίδιο το DNSSEC σχεδόν ποτέ δεν χαλάει. Το πρόβλημα προκύπτει όταν το DS στο μητρώο δεν ταιριάζει πλέον με το κλειδί στη ζώνη. Αυτό συμβαίνει κυρίως:
- Σε μια μεταφορά nameservers ή πάροχου DNS. Ο νέος πάροχος υπογράφει με δικό του κλειδί, αλλά στο μητρώο παραμένει ακόμα το DS του παλιού πάροχου. Αποτέλεσμα: SERVFAIL για όποιον χρησιμοποιεί resolver επικύρωσης. Αυτό είναι το κλασικό λάθος μετά από μια μεταφορά.
- Σε μια αλλαγή κλειδιού όπου το νέο DS δεν στάλθηκε (εγκαίρως) στο μητρώο.
- Όταν λήγουν οι υπογραφές, επειδή η ζώνη δεν υπογράφεται πλέον εκ νέου.
Η ασφαλής σειρά κατά τη μεταφορά είναι συνεπώς:
- Αφαιρέστε το DS από το μητρώο (ή ζητήστε από τον νέο πάροχο να σας δώσει ένα DS που θα προσθέσετε).
- Περιμένετε να περάσει το TTL του παλιού DS.
- Αλλάξτε τους nameservers.
- Ενεργοποιήστε το DNSSEC στον νέο πάροχο και φροντίστε να τοποθετηθεί το νέο DS στο μητρώο.
Πολλοί καταχωρητές (registrars) και πάνελ το κανονίζουν πλέον αυτόματα, εφόσον το domain και το DNS βρίσκονται στον ίδιο πάροχο. Αν βρίσκονται σε διαφορετικούς παρόχους, πρέπει να μεταφέρετε το DS εσείς οι ίδιοι.
Έλεγχος μόνοι σας: DNSViz, Zonemaster και internet.nl
Δεν χρειάζεται να ελέγξετε την αλυσίδα με το dig. Υπάρχουν δωρεάν εργαλεία που το κάνουν για εσάς και εμφανίζουν το αποτέλεσμα.
Το DNSViz (https://dnsviz.net/) σχεδιάζει όλη την αλυσίδα σε εικόνα. Έτσι το χρησιμοποιείτε:
- Πληκτρολογήστε στην αρχική σελίδα το domain στο πεδίο αναζήτησης (μόνο το όνομα, χωρίς
https://και χωρίςwww) και κάντε κλικ στο Go. - Το DNSViz εμφανίζει την τελευταία ανάλυση. Αν είναι παλιά, ή αν μόλις κάνατε κάποια αλλαγή, κάντε κλικ στο Update now. Μετά από λίγα δευτερόλεπτα θα δείτε την εικόνα.
- Διαβάστε την εικόνα από πάνω προς τα κάτω: στην κορυφή το root (
.), από κάτω το TLD (για παράδειγμαnl), στο κάτω μέρος το domain σας. Κάθε ζώνη είναι ένα πλαίσιο.
Τι βλέπετε στην εικόνα:
| Στην εικόνα | Σημασία |
|---|---|
| Οβάλ με DNSKEY | Ένα κλειδί της ζώνης. Ένα γκρι γεμισμένο οβάλ είναι το κλειδί που υπογράφει τα άλλα κλειδιά (το KSK, με τη σημαία SEP)· ένα λευκό οβάλ είναι συνήθως το κλειδί για τις κανονικές εγγραφές (το ZSK) |
| Τετραγωνάκι με DS στη ζώνη από πάνω | Το δακτυλικό αποτύπωμα στη γονική ζώνη. Το βέλος από το DS οδηγεί στο DNSKEY στο οποίο αντιστοιχεί |
Στρογγυλεμένο ορθογώνιο, για παράδειγμα example.com/A | Ένα κανονικό σύνολο εγγραφών. Το βέλος προς αυτό προέρχεται από το κλειδί που έθεσε την υπογραφή (RRSIG) |
| Γραμμή μεταξύ δύο ζωνών | Η ανάθεση από τη γονική ζώνη προς το παιδί |
Η αλυσίδα παρακολουθείται ως εξής: το DS (στη γονική ζώνη) δείχνει προς το DNSKEY (στη δική σας ζώνη), και αυτό το DNSKEY θέτει με ένα RRSIG την υπογραφή του κάτω από τις εγγραφές. Αυτή είναι ακριβώς η αλυσίδα από αυτό το μάθημα, αλλά σχεδιασμένη.
Τα χρώματα δείχνουν αν είναι σωστό:
- Μπλε: ασφαλές (secure). Η αλυσίδα εκτείνεται αδιάκοπα από το root έως αυτό το στοιχείο.
- Μαύρο: μη υπογεγραμμένο (insecure). Δεν υπάρχει DS, οπότε δεν υπάρχει τίποτα να ελεγχθεί. Αυτό δεν είναι σφάλμα, το domain απλώς δεν χρησιμοποιεί DNSSEC.
- Κόκκινο: χαλασμένο (bogus). Ένα DS δεν ταιριάζει με ένα κλειδί, ή μια υπογραφή δεν είναι σωστή. Ένας resolver επικύρωσης δίνει τότε SERVFAIL.
- Μωβ (σε μια υπογραφή): η υπογραφή έχει λήξει ή δεν είναι ακόμα έγκυρη. Η ζώνη δεν υπογράφεται πλέον εκ νέου.
- Κίτρινο: μια προειδοποίηση, για παράδειγμα ένας nameserver που δεν απαντά σωστά, ή ένας αλγόριθμος που δεν αναγνωρίζει το εργαλείο.
- Γκρι και διάστικτο: γίνεται αναφορά σε ένα κλειδί που δεν υπάρχει. Αν βλέπετε ένα διάστικτο DNSKEY κάτω από ένα DS, τότε στη γονική ζώνη υπάρχει ακόμα ένα DS από παλιό κλειδί: το κλασικό λάθος μετά από μια μεταφορά.
Δίπλα σε ένα στοιχείο μπορεί να εμφανίζεται ένα τριγωνάκι (προειδοποίηση) ή ένα κυκλικό σύμβολο σφάλματος. Τοποθετήστε το ποντίκι σας πάνω του, ή κοιτάξτε στη λίστα κάτω από την εικόνα: εκεί αναγράφεται με λόγια τι πάει στραβά.
Δοκιμάστε το με το sidn.nl (όλα μπλε) και με το dnssec-failed.org (κόκκινο, με ένα διάστικτο κλειδί κάτω από το DS).
Άλλα εργαλεία που εξετάζουν το ίδιο πράγμα από διαφορετική οπτική γωνία:
- Zonemaster (
https://zonemaster.net/): ελέγχει ολόκληρη τη ζώνη σας όπως το κάνει ένα μητρώο, συμπεριλαμβανομένου του DNSSEC. Το αποτέλεσμα είναι μια λίστα με πράσινο (καλό), πορτοκαλί (προειδοποίηση) και κόκκινο (σφάλμα). - internet.nl (
https://internet.nl/): το τεστ ιστότοπου και email δείχνει μεταξύ άλλων αν το DNSSEC για το domain σας και τους διακομιστές email σας είναι εντάξει, με πράσινα σημαδάκια ή κόκκινους σταυρούς. - Verisign DNSSEC Debugger (
https://dnssec-debugger.verisignlabs.com/): ελέγχει την αλυσίδα βήμα προς βήμα και τοποθετεί σε κάθε βήμα ένα πράσινο σημαδάκι ή κόκκινο σταυρό. Χρήσιμο όταν ψάχνετε ένα συγκεκριμένο σφάλμα.
Χρησιμοποιήστε τα μετά από κάθε αλλαγή στο DNSSEC, και σίγουρα πριν και μετά από μια μεταφορά. Αφήστε το εργαλείο να αναλύσει ξανά με ηρεμία: και αυτά τα εργαλεία λειτουργούν με caches και TTL.
Στην πράξη: έτσι μοιάζει σε ένα πάνελ
Στο Το WebOké μου ενεργοποιείτε το DNSSEC για ένα domain στην ενότητα DNSSEC/DANE· το πάνελ δημιουργεί τα κλειδιά και στέλνει το DS στο μητρώο. Στο DirectAdmin και σε εξωτερικούς παρόχους όπως το Cloudflare ονομάζεται συνήθως "Ενεργοποίηση DNSSEC"· το Cloudflare σας εμφανίζει τότε μια εγγραφή DS που πρέπει να συμπληρώσετε εσείς οι ίδιοι στον καταχωρητή σας. Άλλα πάνελ λειτουργούν παρόμοια: υπάρχει πάντα ένα βήμα "δημιουργία κλειδιών" (στον πάροχο DNS) και ένα βήμα "DS στο μητρώο" (στον καταχωρητή).
Σύνοψη
- Το DNSSEC υπογράφει τις απαντήσεις DNS ώστε ένας resolver να μπορεί να ελέγξει ότι είναι αυθεντικές. Δεν κρυπτογραφεί τίποτα.
- Το DNSKEY είναι το κλειδί, το RRSIG η υπογραφή, το DS το δακτυλικό αποτύπωμα στη γονική ζώνη.
- Ο έλεγχος λειτουργεί σαν αλυσίδα από το root έως το domain σας. Αν σπάσει ένας κρίκος, ένας resolver επικύρωσης δίνει SERVFAIL.
- Σχεδόν όλα τα προβλήματα προκύπτουν επειδή το DS στο μητρώο δεν ταιριάζει πλέον, συχνά μετά από μια μεταφορά.
- Με το
dig +cdβλέπετε αν ένα πρόβλημα οφείλεται στο DNSSEC. - Το DNSViz σχεδιάζει την αλυσίδα: μπλε σημαίνει ασφαλές, μαύρο σημαίνει μη υπογεγραμμένο, κόκκινο σημαίνει χαλασμένο. Τα Zonemaster, internet.nl και ο Verisign DNSSEC Debugger αποτελούν καλές δεύτερες γνώμες.
Κουίζ
Άσκηση
Άσκηση Z8.1: Να δείτε το DNSSEC. Βρείτε ποιο από τα δύο domain έχει σωστό DNSSEC και ποιο έχει χαλάσει επίτηδες: sidn.nl και dnssec-failed.org. Ζητήστε και για τα δύο την εγγραφή DS και την εγγραφή A μέσω ενός resolver επικύρωσης (για παράδειγμα 1.1.1.1 ή 9.9.9.9), με dig ή με ένα online εργαλείο. Συμπληρώστε: τον αριθμό κλειδιού (key tag, ο πρώτος αριθμός) του DS του sidn.nl, και την κατάσταση που λαμβάνετε για το dnssec-failed.org.
Άσκηση Z8.1b: Ανάγνωση του DNSViz. Αναλύστε το nlnetlabs.nl στο DNSViz (https://dnsviz.net/, πληκτρολογήστε το όνομα και κάντε κλικ στο Go· κάντε κλικ στο Update now αν η ανάλυση είναι παλιά). Διαβάστε την εικόνα και συμπληρώστε: (1) την κατάσταση του nlnetlabs.nl (ασφαλές, μη υπογεγραμμένο ή χαλασμένο), (2) τον αριθμό αλγορίθμου των εγγραφών DNSKEY (αναγράφεται σε κάθε οβάλ ως alg=), (3) πόσα οβάλ DNSKEY υπάρχουν στη ζώνη του nlnetlabs.nl, (4) τον αριθμό κλειδιού (id=) του γκρι γεμισμένου DNSKEY προς το οποίο δείχνει το DS, και (5) την κατάσταση που δίνει το DNSViz για το dnssec-failed.org. Ο έλεγχος αναζητά τα ίδια στοιχεία ζωντανά.
Άσκηση O8.1: Αξιολόγηση τριών ζωνών επίδειξης DNSSEC. Έχουμε ετοιμάσει τρεις ζώνες επίδειξης: signed-demo.dnspractice.com (σωστή αλυσίδα), broken-demo.dnspractice.com (χαλασμένη επίτηδες) και unsigned-demo.dnspractice.com (μη υπογεγραμμένη). Βρείτε για κάθε ζώνη αν είναι ασφαλής, χαλασμένη ή μη υπογεγραμμένη, για παράδειγμα με το DNSViz ή με το dig +dnssec (προσέξτε τη σημαία AD, και δοκιμάστε σε περίπτωση SERVFAIL και το +cd). Επιλέξτε παρακάτω για κάθε ζώνη την απάντησή σας.
Περαιτέρω ανάγνωση
Αυτά τα άρθρα περιγράφουν τα βήματα στα πάνελ του WebOké· σε άλλους παρόχους τα κουμπιά ονομάζονται διαφορετικά.
