Cos'è DNSSEC e come funziona

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

RecordSi trova inScopo
DNSKEYLa zona firmataChiavi pubbliche usate per verificare le firme della zona
RRSIGLa zona firmataUna firma su un insieme di record (ad esempio tutti i record A di un nome), con data di inizio e di fine validità
DSLa zona padreDelegation Signer: un hash della key-signing key della zona figlia, che collega padre e figlia
NSECLa zona firmataDimostra che un nome o un tipo di record non esiste indicando il nome esistente successivo in ordine alfabetico
NSEC3La zona firmataCome NSEC ma con nomi sottoposti a hash (RFC 5155), il che rende più difficile elencare tutti i nomi della zona
CDS / CDNSKEYLa zona firmataSegnalano 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:

  1. Usa il trust anchor della root per verificare l'insieme DNSKEY della root.
  2. Verifica il record DS firmato per com nella zona root, poi controlla che corrisponda alla KSK nell'insieme DNSKEY di com.
  3. Verifica il record DS firmato per example.com nella zona com, poi controlla che corrisponda alla KSK pubblicata da example.com.
  4. Usa l'insieme DNSKEY di example.com per verificare l'RRSIG sui record A di www.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ì:

  1. Presso il registrar, elimina il record DS.
  2. 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.
  3. Cambia i name server impostando il nuovo provider e aspetta che i vecchi record NS scadano.
  4. 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

  1. Verifica che il tuo TLD supporti DNSSEC; la maggior parte dei TLD generici e molti TLD nazionali lo fanno.
  2. Attiva la firma DNSSEC presso il tuo provider di hosting DNS. Genererà le chiavi e firmerà la zona.
  3. 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.
  4. 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.

Provalo tu stesso

Metti in pratica questa guida con i nostri strumenti gratuiti.

Continua a leggere

Copiato negli appunti