DNS-ul este o componenta critica a internetului inca de la inceputurile acestuia. Avand o vechime de aproape 30 de ani, a inceput cu timpul sa-si arate varsta. Nu putine au fost DDOS-urile care i-au fost adresate de-a lungul timpului, cele mai intalnite tipuri de atacuri la care a fost expus fiind:
- DNS Spoofing (cunoscut si sub numele de DNS Cache Poisoning):
- Malicious Resolvers
- Man-in-the-middle (MITM)
DNSSEC (DNS Security Extensions) e un upgrade de securitate critic pentru ‘Internet’, care ne protejeaza in cazul atacurilor amintite mai sus (in special DNS Cache Poisoning). El asigura:
- Origin authentication and data integrity: Pe scurt, cache-urile (DNS resolvers) cu DNSSEC activat verifica daca datele pe care le primesc (response queries) sunt identice cu cele de la un sever DNS autoritativ (authoritative DNS) cu DNSSEC activat, adica serverele care tin ‘zona’ cu alte cuvinte. Fara DNSSEC este aproape imposibil sa previi un atac de tip DNS Cache Poisoning desi s-au incercat cateva metode de-a lungul timpului de genul UDP SPR (source port randomization), etc.
- Authenticated denial of existence: Pe scurt, cache-urile (DNS resolvers) cu DNSSEC activat sunt capabile sa determine daca un server DNS exista cu adevarat, adaugand astfel un nivel in plus de securitate
DNSSEC are implementari diferite in functie de tipul de server DNS, recursiv sau autoritativ. Eu o sa ma refer strict la serverele autoritative si la cum putem activa DNSSEC pentru o anumita zona, un domeniu personal de exemplu. Si pentru ca e greu sa explici intr-un articol ceea ce ai putea cuprinde intr-o carte, o sa descriu un exemplu concret, pentru zona duiadns.net tinuta pe un server DNS bind 9+.
Ca sa activezi DNSSEC pentru o zona ai nevoie de 3 lucruri:
- gTLD/cTLD (gloabal/country Top-Level-Domain) sa aiba activat DNSSEC.
- Register-ul unde ai inregistrat domeniul trebuie sa accepte DS Records (Delegation Signor) si sa le trimita mai ‘sus’ la Top-Level-Domain (TLD) pentru zona ta.
- Serverul DNS autoritativ pentru zona ta trebuie sa suporte DNSSEC ca sa iti (re)semnezi fisierul de zona.
In cazul meu, zona se numeste duiadns.net iar lucrurile stau in felul urmator:
- Zona ‘.net‘ e deja semnata DNSSEC. Daca as fi vrut de exemplu sa-mi activez DNSSEC pentru domeniul techtorials.ro nu as fi trecut de acest pas 1, pentru ca zona ‘.ro‘ nu e semnata DNSSEC. Aici depindem de ICI/ROTLD care inca nu au activat DNSSEC pentru ‘.ro‘ iar eu unul astept cu mare interes sa o faca.
- Register-ul in cazul meu este Nettissimo si dupa cum vedeti imi pune la dispozitie o interfata pentru DNSSEC de unde pot adauga DS Records:
- Serverul DNS autoritativ este administrat de mine iar ca sa activez DNSSEC pe el pentru duiadns.net am facut urmatorii pasi:
- Am activat DNSSEC in /etc/named.conf:
options {
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;
} - Inainte de a crea ZSK(Zone Signing Key) si KSK(Key Signing Key) am instalat ‘haveged‘. Daca nu faceti asta, veti astepta minute bune sa se genereze cele doua key.
- Am creat un director unde sa-mi tin cele doua key:
mkdir /etc/pki/dnssec-keys/
- Am generat ZSK(Zone Signing Key) astfel:
cd /etc/pki/dnssec-keys/
dnssec-keygen -a NSEC3RSASHA1 -b 2048 -n ZONE duiadns.net - Am generat KSK(Key Signing Key) astfel:
cd /etc/pki/dnssec-keys/
dnssec-keygen -f KSK -a NSEC3RSASHA1 -b 4096 -n ZONE duiadns.net
- Avem acum in directorul /etc/pki/dnssec-keys/ 4 keys (2 perechi private/public pentru ZSK si KSK)
[xxx]# ls -la *Kduiadns.net*
07:30 Kduiadns.net.+007+16940.key
07:30 Kduiadns.net.+007+16940.private
07:30 Kduiadns.net.+007+50703.key
07:30 Kduiadns.net.+007+50703.private - Am adaugat key-le publice in fisierul cu zona ‘duiadns.net.db‘
cd /etc/pki/dnssec-keys/
for key in `ls Kduiadns.net*.key`
do
echo "\$INCLUDE /etc/pki/dnssec-keys/$key">> /var/name/master/duiadns.net.db
done - Am semnat zona duiadns.net
cd /var/name/master/
dnssec-signzone -S -K /etc/pki/dnssec-keys -e +3024000 -o duiadns.net -N INCREMENT duiadns.net.dbse va genera fisierul duiadns.net.db.signed pe care ar trebui sa-l adaugam in /etc/named.conf in locul lui duiadns.net.db:
zone "duiadns.net" in {
type master;
file "/var/named/master/duiadns.net.db.signed";
..............
}Eu personal prefer ca modificarile ulterioare pe care le voi face sa nu le fac in zona semnata duiadns.net.db.signed (ca sa nu ma incurc in keys) ci in duiadns.net.db si apoi sa o ‘re-semnez’ cu un script pe care mi l-am facut si care se ruleaza cu zona ‘duiadns.net’ ca argument:
./dnssec-sign-zone.sh duiadns.net # evident, e valabil pentru orice alta zona
[xxx]# cat dnssec-sign-zone.sh
#!/bin/sh
PDIR=`pwd`
SIGNZONE="/sbin/dnssec-signzone"
DNSSEC_KEYS="/etc/pki/dnssec-keys"
ZONEDIR="/var/named/master"
ZONE=$1cd $ZONEDIR
SERIAL=`/usr/sbin/named-checkzone $ZONE $ZONE.db | egrep -ho '[0-9]{10}'`
sed -i 's/'$SERIAL'/'$(($SERIAL+1))'/' $ZONE.db
$SIGNZONE -S -K $DNSSEC_KEYS -e +3024000 -o $ZONE -N INCREMENT $ZONE.db
systemctl restart named
- Am revenit la pasul 2, pentru ca abia acum s-a generat in directorul cu zona, un fisier dsset-duiadns.net. in care gasesc informatiile necesare pentru a face inregistrarile DS Record de care vorbeam.
[xxx]# cat dsset-duiadns.net.
duiadns.net. IN DS 50703 7 1 AD819997BE5847844F55B70987F9BA1630DCD682
duiadns.net. IN DS 50703 7 2 8535A8C0EC3638F72DA84C87C65D4AF2F2624D8184159E516E3C3FBA D3018065Ma intorc la Register pe pagina cu DNSSEC si completez formularul de mai jos cu datele din fisierul meu:
- Am restartat daemonul DNS (bind / named)
- Am activat DNSSEC in /etc/named.conf:
Acum zona mea duiadns.net este semnata DNSSEC. Am vazut de curand intr-o prezentare de la RIPE68 ca ~16% din utilizatorii de internet folosesc DNS-urile (cache-urile) de la Google. Cum acestea au activat deja DNSSEC inseamna ca pentru cel putin 16% din internet domeniul duiadns.net NU mai poate fi ‘spoofat’ la nivel de DNS.
Va recomand si sa va instalati add-on-urile de Firefox sau Chrome care iti arata daca site-ul pe care ai intrat face parte dintr-o zona semnata DNSSEC sau nu (search pe google dupa ‘DNSSEC Validator firefox’ sau ‘DNSSEC Validator chrome’). Diferentele intre un domeniu semnat si unul nesemnat arata cam asa:
Pentru domeniile ‘.ro’ mai asteptam un pic. Cei de la ICI/ROTLD au promis ca vor activa pana in toamna 2014. Le tin pumnii!
Mulțumesc, Liviu+!
L-am citit mult mai târziu, într-adevăr, dar mi-a fost de folos.