Windows Server 2016 Highlights: DNSSEC

Le Domain Name System Security Extensions (DNSSEC) sono una serie di specifiche studiate per garantire la sicurezza e affidabilità delle informazioni fornite dai server DNS. Queste estensioni permettono ai client DNS (resolver) di autenticare l’effettiva origine dei dati DNS e l’integrità dei dati ricevuti.

DNSSEC permette ad una zona DNS e a tutti i record contenuti nella zona di essere firmati digitalmente, in modo tale che i computer client possano validare la risposta ottenuta dal server DNS. I server DNS sono spesso soggetti a diversi attacchi come ad esempio lo spoofing ed il cache-tampering. DNSSEC permette di proteggersi contro questi attacchi e rende l’infrastruttura DNS più sicura.

Per utilizzare DNSSEC dovete avere computer client con Windows 7 o successivi o Windows Server 2008 R2 e successivi.

Quando un server DNS è configurato per essere DNSSEC-aware e riceve una query da un client per una zona firmata digitalmente con DNSSEC, esso risponderà alla query inviando ANCHE i record DNSSEC sotto forma di Resource Record Signature (RRSIG).

Figura 1: DNS Resource records prima e dopo il Zone Signing con DNSSEC

Come funziona DNSSEC

Uno degli attacchi più diffusi nei confronti dei DNS sono l’intercettazione (intercepting) e la manomissione (tampering).

Infatti se un malintenzionato può modificare la risposta che proviene da un server DNS, l’attaccante può inviare una risposta modificata al computer client e quindi è possibile reindirizzare le comunicazioni verso i server dell’attaccante. Immaginate infatti di volervi connettere ad un sito web e-commerce oppure ad un mail server e invece di essere indirizzati verso il server corretto venite reindirizzati verso un altro server in grado di rubare le vostre informazioni.

Figura 2: Attacco di tipo DNS Spoofing

Quando un server DNS che ospita una zona firmata digitalmente riceve una query, il server risponde inviando i record che gli sono stati richiesti e aggiungendo la firma digitale per i record. Un client DNS o un altro server DNS possono ottenere la chiave pubblica da un Trust Anchor e poi verificare che la risposta ottenuta sia autentica e non sia stata manomessa. Per fare questo dovete configurare il client o il server con un Trust Anchor per la zona firmata con DNSSEC.

Cosa sono i Trust Anchors

Una Trust Anchor è un’entità autoritativa che è rappresentata da una chiave pubblica. La zona delle Trust Anchors conserva delle chiavi pubbliche preconfigurate che sono associate ad una zona specifica.
Un server DNS che deve effettuare la validazione deve essere configurato con una o più Trust Anchors. Nel caso in cui il server DNS sia un domain controller le Trust Anchors sono contenute all’interno della Forest Partition del database di Active Directory e vengono replicate a tutti i Domain Controller. Se invece il server DNS è in workgroup allora le Trust Anchors sono conservate in un file chiamato TrustAnchors.dns.

Nel DNS, il Trust Anchor è il record DNSKEY che pubblica la chiave pubblica per la zona oppure il record DS (Delegation Signer) che contiene l’HASH della chiave pubblica di una zona figlio e deve essere distribuito a tutti DNS Server non autoritativi che effettueranno la DNSSEC validation, nello momento in cui rispondono ad una query per una zona DNS firmata.
I computer client utilizzano questi record per poter creare la Trust Chain.

A cosa serve la Name Resolution Policy Table

La Name Resolution Policy Table (NRPT) contiene le regole che settano il comportamento dei client per l’invio delle query DNS e processano le risposte ottenute per queste query. Ad esempio una regola DNSSEC può richiedere che per un particolare suffisso DNS venga richiesta la validazione dei record. Per configurare la NRPT è opportuno utilizzare una Group Policy. Se non è presente una NRPT i computer client accettano le risposte dai server DNS senza eseguire la validazione dei record.

Come implementare DNSSEC – Configurazione del Server

In Windows Server 2016, ma anche in Windows 2008 R2, 2012 e 2012 R2, è possibile implementare facilmente DNSSEC per una zona DNS. Nel nostro laboratorio utilizzeremo la zona ictpower.lab, che rappresenta anche la zona di dominio. Dalla console del DNS clicchiamo col tasto destro sul nome della zona e facciamo partire il wizard.

Figura 3: Wizard per l’abilitazione di DNSSEC per la zona ictpower.lab

Volendo nel wizard è possibile scegliere di utilizzare i valori di default. In questo caso il wizard si conclude subito e la zona è firmata. Semplice! Se invece volete modificare qualche parametro scegliete Customize zone signing parameters, come mostrato in figura:

Figura 4: Scelta della personalizzazione dei parametri del DNSSEC

Nel passaggio successivo del wizard dovete stabilire chi sia il Key Master, ossia il server DNS che genera e gestisce le chiavi di crittografia per la zone protette da DNSSEC.

Figura 5: Scelta del Key Master per la zona

Nel passaggio successivo vi verrà chiesto di generare la Key Signing Key (KSK), cioè la chiave privata utilizzata per firmare una o più signin keys che si occuperanno a loro volta di firmare la zona. Il concetto è lo stesso delle Certification Authorities, in cui c’è una Root CA con una durata di validità lunga e poi ci sono le Subordinate CA che si occupano fattivamente di rilasciare i certificati digitali. La chiave pubblica della Key Signing Key (KSK) è di fatto il Trust Anchor utilizzato per validare le risposte DNS.

Figura 6: Generazione della chiave privata della Key Signing Key (KSK)

Figura 7: Parametri per la nuova Key Signing Key (KSK)

Proseguendo con il wizard vi verrà chiesto di generare la Zone Signing Key (ZSK), la chiave di autenticazione privata che verrà utilizzata per firmare i dati della zona DNS.

Figura 8: Creazione della chiave privata della Zone Signing Key (ZSK)

Figura 9: Paramenti utilizzati per la creazione della Zone Signing Key (ZSK)

A questo punto vi verrà chiesto se volete utilizzare record NSEC o NSEC3 per provare la non-esistenza di un nome DNS. I record NSEC servono a prevenire gli attacchi di spoofing. NSEC3 è la versione più aggiornata, che ha come vantaggio quello di impedire il “zone walking”, cioè il processo di richiesta di query NSEC in modo tale da ottenere tutti i record di una zona. Nel mio caso ho scelto ovviamente NSEC3.

Figura 10: Scelta del tipo di record NSEC

Per distribuire i Trust Anchors avete la possibilità di usare i domain controller se la zona è integrata in Active Directory, altrimenti i TA verranno aggiunti solo al server DNS che state configurando.

Figura 11: Distribuzione dei Trust Anchors

Il wizard a questo punto termina con un ultimo passaggio che vi chiede di configurare i valori per la durata dei record (TTL) per il DNSSEC signing e il polling.

Figura 12: Configurazione dei valori per la durata dei record (TTL) per il DNSSEC signing e il polling

Confermate tutte le scelte fatte e poi cliccate su Next e Finish.

Figura 13: Conferma delle scelte del wizard

Se cliccate sul nome della zona e scegliete DNSSEC avrete la possibilità di fare l’Unsign della zona o di guardarne le proprietà.

Figura 14: Proprietà del DNSSEC

Dalla console del DNS è anche possibile guardare quali sono i Trust Anchors (Trust Points) gestiti dal vostro server, come mostrato in figura:

Figura 15: Trust Anchors (Trust Points) gestiti dal server DNS

Figura 16: Popolamento della zona con i record RRSIG

Configurazione dei client

Per fare in modo che i vostri client utilizzino DNSSEC per validare i record DNS di una particolare zona è possibile utilizzare una GPO, da distribuire magari a livello di dominio, che vada a modificare la Name Resolution Policy Table (NRPT).

Dalla Group Policy Management Console create una GPO per abilitare la verifica DNSSEC per i vostri client. Io ne ho creata una vuota collegata al dominio e nel Group Policy Management Editor, in Computer Configurationà PoliciesàWindows SettingsàName Resolution Policy inserite il nome della zona in Suffix e selezionate sia Enable DNSSEC in this rule che Require DNS clients to check that the name and address data has been validated by the DNS server.

Cliccate su Create per creare la regola, come mostrato in figura:

Figura 17: Creazione della GPO per abilitare la DNSSEC resolution

In questo modo tutti client del dominio saranno soggetti all’utilizzo del DNSSEC quando richiedono record per la zona ictpower.lab

Per testare il funzionamento di DNSSEC non è possibile utilizzare il tool nslookup, ma bisogna usare la cmdlet di PowerShell Resolve-DNSName. In questo caso oltre all’indirizzo richiesto riceveremo anche il record RRSIG associato.

Figura 18: Verifica del funzionamento di DNSSEC

Per la verifica delle regole della Name Resolution Policy Table (NRPT) è possibile utilizzare la cmdlet Get-DnsClientNrptPolicy

Figura 19: Regole NRPT applicate al client

Conclusioni

Implementare DNSSEC in Windows Server è veramente molto facile. Una zona DNS che viene firmata con DNSSEC è più sicura, ma bisogna considerare che necessita di alcune attività amministrative. Prima di firmare una zona con DNSSEC, prendete in considerazione sia i potenziali vantaggi che gli svantaggi. Convalidando le risposte DNS, sia i server che i client sono protetti contro la vulnerabilità più grande del DNS: gli attacchi di spoofing.

Per maggiori informazioni potete leggere l’articolo Overview of DNSSEC