DNSSEC (DNS Security Extensions) aggiunge firme digitali ai record DNS, così i resolver possono verificare che una risposta provenga davvero dal proprietario del dominio e non sia stata alterata lungo il percorso. Non cifra nulla: dimostra l'autenticità attraverso una catena di fiducia che parte dalla root del DNS.
Il DNS ordinario non ha modo di distinguere una risposta autentica da una falsificata. DNSSEC, standardizzato nelle RFC 4033, 4034 e 4035, colma questa lacuna. Questa guida spiega i tipi di record coinvolti, come funziona la validazione e gli errori che più spesso mandano offline i domini firmati.
Il problema che DNSSEC risolve
Un resolver ricorsivo accetta la prima risposta che corrisponde alla sua domanda. Un attaccante che riesce a inserire una risposta falsificata, trovandosi sul percorso di rete o vincendo una gara contro il server vero in un attacco di cache poisoning, può reindirizzare gli utenti di quel resolver verso un indirizzo IP a sua scelta. Tutti quelli che condividono quel resolver ricevono poi la risposta falsa finché la voce in cache non scade.
DNSSEC rende la falsificazione rilevabile. Ogni insieme di record è firmato con la chiave privata della zona, e la corrispondente chiave pubblica è pubblicata nel DNS. Un resolver che effettua la validazione controlla la firma e scarta tutto ciò che non risulta valido. Se prima ti serve un ripasso su resolver e server autoritativi, leggi cos'è il DNS e come funziona.
Tipi di record DNSSEC
| Record | Si trova in | Scopo |
|---|---|---|
DNSKEY | La zona firmata | Chiavi pubbliche usate per verificare le firme della zona |
RRSIG | La zona firmata | Una firma su un insieme di record (ad esempio tutti i record A di un nome), con data di inizio e di fine validità |
DS | La zona padre | Delegation Signer: un hash della key-signing key della zona figlia, che collega padre e figlia |
NSEC | La zona firmata | Dimostra che un nome o un tipo di record non esiste indicando il nome esistente successivo in ordine alfabetico |
NSEC3 | La zona firmata | Come NSEC ma con nomi sottoposti a hash (RFC 5155), il che rende più difficile elencare tutti i nomi della zona |
CDS / CDNSKEY | La zona firmata | Segnalano alla zona padre quale record DS pubblicare, consentendo aggiornamenti automatici (RFC 7344) |
La nostra guida ai tipi di record DNS tratta i record ordinari, come A, MX e TXT, che queste firme proteggono.
Perché serve dimostrare la non esistenza
Senza NSEC o NSEC3, un attaccante potrebbe falsificare una risposta NXDOMAIN ("questo nome non esiste"), che non può portare una firma propria perché non c'è alcun record da firmare. I record NSEC danno al resolver una dichiarazione firmata che non esiste nulla tra due nomi, così anche una negazione può essere verificata.
Key-signing key e zone-signing key
La maggior parte delle zone usa due tipi di chiave, entrambe pubblicate come record DNSKEY:
- Zone-signing key (ZSK), flag DNSKEY
256: firma i normali insiemi di record della zona. Può essere sostituita spesso senza coinvolgere nessun altro. - Key-signing key (KSK), flag DNSKEY
257: firma solo l'insieme di record DNSKEY. Il suo hash è ciò che finisce nel record DS presso la zona padre, quindi cambiarla richiede di aggiornare il registrar.
Separare i ruoli significa che i cambi di chiave di routine restano all'interno del tuo provider DNS, mentre il cambio più raro della KSK è l'unico che tocca la zona padre. Alcune configurazioni usano invece una sola chiave di firma combinata, più semplice e comune con i moderni algoritmi a curva ellittica come l'algoritmo 13 (ECDSA P-256 con SHA-256).
La catena di fiducia
Una firma serve solo se il resolver si fida della chiave che l'ha creata. DNSSEC costruisce questa fiducia passo dopo passo a partire dalla root, che è stata firmata nel 2010. I resolver con validazione includono la KSK della zona root come trust anchor integrato. Per validare www.example.com, un resolver:
- Usa il trust anchor della root per verificare l'insieme DNSKEY della root.
- Verifica il record DS firmato per
comnella zona root, poi controlla che corrisponda alla KSK nell'insieme DNSKEY dicom. - Verifica il record DS firmato per
example.comnella zonacom, poi controlla che corrisponda alla KSK pubblicata daexample.com. - Usa l'insieme DNSKEY di
example.comper verificare l'RRSIG sui record A diwww.example.com.
Se ogni anello risulta valido, la risposta è secure (sicura). Se la zona padre non ha un record DS per una zona, la zona è insecure (non firmata) e la risposta viene restituita normalmente. Se esiste un DS ma le firme non risultano valide, la risposta è bogus (non valida).
Come appare la validazione: AD e SERVFAIL
Quando un resolver con validazione verifica con successo una risposta, imposta il flag AD (Authenticated Data) nella risposta. Lo puoi vedere con dig:
$ dig +dnssec www.example.com A @1.1.1.1
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; ANSWER SECTION:
www.example.com. 300 IN A 192.0.2.10
www.example.com. 300 IN RRSIG A 13 3 300 20261101000000 20261011000000 12345 example.com. (signature data)
Quando la validazione fallisce, il resolver non restituisce i dati forse falsificati. Restituisce SERVFAIL, che agli utenti appare uguale a un sito inesistente o a un guasto del DNS. Per confermare che la causa è DNSSEC, ripeti la query con i controlli disattivati:
dig www.example.com A # status: SERVFAIL
dig +cd www.example.com A # status: NOERROR, answer returned
Se la query con +cd (checking disabled) riesce e quella normale fallisce, il DNSSEC della zona è guasto. La nostra verifica DNSSEC esegue questi controlli per te e mostra lo stato di DS, DNSKEY e firme.
I modi più comuni in cui DNSSEC si rompe
Cambiare provider DNS senza rimuovere il record DS
È il guasto classico. Il record DS presso il registry punta ancora alla KSK del vecchio provider. Dopo il cambio dei name server, il nuovo provider serve la zona senza firma oppure la firma con chiavi diverse. I resolver con validazione trovano un DS senza chiave corrispondente, segnano la zona come bogus e ogni ricerca restituisce SERVFAIL.
Una migrazione sicura si svolge così:
- Presso il registrar, elimina il record DS.
- Aspetta che il vecchio DS sia scaduto dalle cache: almeno il TTL del record DS nella zona padre, che puoi vedere con
dig example.com DS. Aspettare un giorno o due è un margine di sicurezza comune. - Cambia i name server impostando il nuovo provider e aspetta che i vecchi record NS scadano.
- Attiva DNSSEC presso il nuovo provider e pubblica il suo nuovo record DS presso il registrar.
Alcuni provider supportano una configurazione multi-signer che evita il periodo senza firma, ma richiede la collaborazione tra i due provider.
Firme scadute
Ogni RRSIG ha una data di scadenza. Se il processo di firma si ferma, ad esempio su un server self-hosted in cui il job di nuova firma è fallito, prima o poi le firme scadono e la zona diventa bogus.
Rollover delle chiavi troppo rapidi
Rimuovere una vecchia chiave prima che le cache abbiano recepito la nuova causa errori per i resolver che hanno ancora in cache il vecchio insieme DNSKEY o il vecchio record DS. I rollover devono rispettare i TTL coinvolti.
Come attivare DNSSEC per il tuo dominio
- Verifica che il tuo TLD supporti DNSSEC; la maggior parte dei TLD generici e molti TLD nazionali lo fanno.
- Attiva la firma DNSSEC presso il tuo provider di hosting DNS. Genererà le chiavi e firmerà la zona.
- Copia i dettagli del record DS (key tag, algoritmo, tipo di digest e digest) nelle impostazioni DNSSEC del tuo registrar. Se provider e registrar sono la stessa azienda, spesso è automatico, e alcuni registry recepiscono automaticamente i record CDS.
- Verifica il risultato con la nostra verifica DNSSEC e controlla che le ricerche ordinarie funzionino ancora con lo strumento di ricerca DNS.
Domande frequenti
DNSSEC cifra le mie query DNS?
No. DNSSEC garantisce autenticità e integrità, non riservatezza. Query e risposte restano visibili in rete. La cifratura arriva da DNS over TLS o DNS over HTTPS, che completano DNSSEC.
Mi serve DNSSEC se il mio sito usa HTTPS?
I certificati HTTPS impediscono già che una risposta DNS falsificata si spacci in silenzio per il tuo sito, ma DNSSEC protegge anche l'instradamento della posta, i record TXT usati per la verifica e altri record. È inoltre richiesto per DANE, che pubblica nel DNS le informazioni sui certificati TLS.
Perché il mio dominio funziona su alcune reti ma non su altre?
Se DNSSEC è guasto, solo i resolver con validazione restituiscono SERVFAIL; quelli senza validazione rispondono comunque. Per questo il problema sembra dipendere dalla rete.
Come disattivo DNSSEC in sicurezza?
Rimuovi prima il record DS presso il registrar, aspetta che scada dalle cache e solo dopo smetti di firmare la zona. Farlo nell'ordine inverso causa un'interruzione del servizio.