Assegurament DNS
  • ajuda de Incibe sobre assegurament DNS:

Amenaces a DNS #

Amenaçes locals #

  • Implementar mecanismes antispoofing, IDS , IPS, polítiques de seguretat interna

amenaçes servidor-servidor #

  • Implementar TSIG (Transaction Signature)

Amenaçes master-esclau #

  • Implementar TSIG
  • Adicionalment es pot reforçar-se mitjançant un canal SSL/TLS

Amenaçes master-client/cache/resolver #

  • DNSSEC

aaa

Vulnerabilitats i punts debils #

Capa de transport #

  • Es recomana utilitzar UDP per defecte excepte en transferències de zona i en enviament de trames més grans de 512 Bytes
  • UDP no estableix connexió ni estableix mecanismes de control de recepeció, confirmació, etc. Això facilita molt atacs de suplantació (IP Spoofing --> DNS spoofing)

Debilitat en l'identifciació i validació de missatges DNS #

  • A la capçalera DNS s'utilitza un camp ID que ha de ser igual a la pregunta i la resposta
  • Aquest camp és molt curt (16 bits) i per tant és computacionalment senzill de generar suficients respostes per encertat l' identificador original

Caché Poisoning #

  • Es basa en el tamany de la capçalera ID i en l' ús de UDP
  • Procés
    • Demanar al servidor un registre que desconeix
    • El servidor comença a fer les preguntes iteratives
    • El servidor atacant prova a utilitzar múltiples ID per a la resposta
    • A cada resposta indica que la seva IP és l'autoritat del domini
    • Si aconsegueix fer-ho arribar abans que l'original el servidor atacat enmagatzemarà a caché que el servidor atacant és el servidor autoritatiu

  • Sol·lució més eficaç: DNSSEC

DDOS #

Amplificació DNS #
  • Utilitza IP Spoofing

  • Enviar múltiples consultes a multiples resolvers falsejant la IP d'origen amb la IP del servidor/host a atacar.

  • Es demana per registres com TXT o ANY que retornen un gran volum de dades

  • Si l'atac s'origina desde múltiples origens serà un DDOS

dig dhs.gov ANY +bufsize=4096

Configuracions bind relacionades amb la seguretat #

Ocultar informació #

Per obtenir la informació de la versió

nslookup -q=txt -class=CHAOS version.bind nomdns
o
dig nomdns -c CHAOS -t TXT version.bind

Per a que BIND no la mostri afegir a named.conf

options {version “No version”; }

Deshabilitar recursió a DNS autoritatius #

Només permetre la transferència de zona als servidors autoritzats #

A la definició de la zona

allow-transfer { IP_SECUNDARI; };

Previament a options es pot deshabilitar la transferència per defecte

allow-transfer { none; };

Només permetre les notificacions de canvi a les zones desde el servidor master o desde un servidors concrets #

zone “myzone” in {
type slave;
file “etc/myzone”
masters {IP_MASTERS};
allow-notify {IP_ALTRES};
};

Gestionar qui pot preguntar per evitar spoofing #

Habilitar que no es pugui preguntar per dominis que no tens autoritat excepte per a la xarxa local i permetre que tothom pugui preguntar per a les teves zones #
options {
      allow-query { 192.168.1.0/24; localhost; };
};

zone "lamevazona.local" {
      allow-query { any; };
};

zone "1.168.192.in-addr.arpa" {
      allow-query { any; };
};
Deshabilitar les perguntes recursives que NO vinguin de la xarxa local per a evitar cache posoning #
options {
        allow-recursion { 192.168.196.0/24; localhost; };
};

També es pot definir mitjançant una ACL

acl "trusted" {
        10.128.10.11;    # ns1 - can be set to localhost
        10.128.20.12;    # ns2
        10.128.100.101;  # host1
        10.128.200.102;  # host2
};
options {
        directory "/var/cache/bind";

        recursion yes;                 # enables resursive queries
        allow-recursion { trusted; };  # allows recursive queries from "trusted" clients
        listen-on { 10.128.10.11; };   # ns1 private IP address - listen on private network
        (...)

CHROOT bind #

-A LPIC2 es recomana fer un CHROOT de manera que l'usauri només pugui accedir a allò que necessita

Segons UBUNTU #

Font :https://help.ubuntu.com/community/BIND9ServerHowto#Chrooting_BIND9

Crear estrucutra de directoris

$ sudo mkdir -p /chroot/named
$ cd /chroot/named
$ sudo mkdir -p dev etc/namedb/slave var/run

Configurar permisos per a l'entorn CHROOT

$ sudo chown root:root /chroot
$ sudo chmod 700 /chroot
$ sudo chown bind:bind /chroot/named
$ sudo chmod 700 /chroot/named

Crear o moure named.conf

$ sudo touch /chroot/named/etc/named.conf
o
$ sudo cp /etc/bind/named.conf /chroot/named/etc

Donar permisos d'escritura a l'usuari bind al directori esclau

$ sudo chown bind:bind /chroot/named/etc/namedb/slave

Exemple de zona on es redefineix l'esclau.

zone "my.zone.com." {
        type slave;
        file "slaves/my.zone.com.dns";
        masters {
                10.1.1.10;
        };
};

Crear els dispositius que necessita bind

$ sudo mknod /chroot/named/dev/null c 1 3
$ sudo mknod /chroot/named/dev/random c 1 8

Afegir permis d'accés a l'usuari bind access al directori /chroot/named/var/run que s'utilitzarà per enmagatzemar el PID i dades estadístiques

$ sudo chown bind:bind /chroot/named/var/run

BIND9's Configuration

canvia les configuracions d'arrencada A /etc/default/bind9 les OPTIONS ha de ser

OPTIONS="-u bind -t /chroot/named -c /etc/named.conf"

-t directori d'operació -c fitxer de configuració (un cop engabiat)

A /chroot/named/etc/named.conf:

options {
    directory "/etc/namedb";
    pid-file "/var/run/named.pid";
    statistics-file "/var/run/named.stats";
};

Segons LPIC2 #

  1. crear directori chroot
  2. crear tota l'estructura de directoris que utilitza bind
mkdir
-
p /chroot/named
cd /chroot/named
mkdir -p dev etc/namedb/slave var/run log
  1. copiar els fitxers de configuració

  2. Permisos

chown root /chroot
chmod 700 /chroot
chown named:named /chroot/named
chmod 700 /chroot/named
cd /chroot/named
chattr +i etc etc/localtime var
  1. Executar el procés en mode chroot
named -c configfile -u usuari -t directorichroot
  1. Altres copiar fitxer de zonahoraria
cp /etc/localtime /chroot/named/etc

Consideracions de xarxa #

Proposta Incibe

Utilitzar un servidor autoritatiu master ocult (Hidden Máster/ Stealth) #

  • No es publica, manté la BD, només accessible pels altres servidors DNS

Servidors Autoritatiu Públic #

  • DMZ. Accessible desde Internet

Servidors Autoritatiu Privat #

  • DMZ. Només accessible desde la xarxa interna

Servidors caché recursius #

  • No permeten consultes desde fora
  • Només accessibles desde forwarders

DNSSEC #

Que és DNSSEC #

  • Extensions de seguretat DNS
  • Intenta proporcionar protecció als clients de dades DNS falses (DNS cache poisoning)
  • Proporciona una firma digital de les dades per a verificar la seva validesa certificant la validesa del lloc que es visita
  • Autenticació i integritat però no confidencialitat (no hi ha xifrat)
  • Utilitza criptografia de clau pública
  • S'ha d'implementar en tots els passos del procés de busqueda

Recorda que existeixen les Cerques iteratives...

  • Al firma safegeix una clau i una firma d'aquesta de manera que cada nivell ha de firmar l'inmediatament inferior. De manera que es validen les firmes a tota la cadena de confiança fins a l'arrel

Registres RRSIG, DNSKEY i DS #

  • A cada resposta de cerca DNS s'afegeix un registre RRSIG
  • RRSIG és una firma digital de la resposta de DNS. Conté els registres DNS i la firma.
  • DNSEK conté la clau pública per verificar RRSIG
  • DS (Delegation signer) . Conté un hash de la clau pública d'un fill. Registre de firmant delegat d'un domini s'utilitza per verificar un registre DNSKEY en un subdomini. Aquest conté aquest hash firmat amb la clau privade del node superior.
  • NSEC. (Next Secure) . Torna el segúent registre segur per a demostrar que el que s'ha demanat no ho existeix. Firma les respostes negatives DEPRECATED
  • NSEC3. similar a NSEC però s'ordena per un hash per evitar la enumeració

Claus #

  • KSK = Key Signature Key= s'utilitza per a firmar els registres d'un altre DNSEKY. (llarga) L'objectiu és connectar la zona pare amb la popia zona -ZSK = Zone Signature Key = s'utilitzen per a firmar els registres d'una zona per a que puguin ser autenticats/validats(curta)

Trust Anchor #

  • Els root son trust anchor
  • Pots crear una illa de seguretat posant un trust anchor local

Procés #

  • En una consulta iterativa començarem verificant els DNS i DNSKEY d'arrel i anirem verificant cada node a mesura que baixem en l'arbre de confiança utilitzant el registre DS del pare
  • Si la DNSKEY no es trust anchor es pregunta a la zona pare pel DS del domini resolent que inclourà:
    • DS amb el hash de la clau pública a validar
    • El registre firma RRSIG corresponent al DS
    • Clau pública DNSKEy del pare per a verificar la firma
  • El client genera un hash amb la resposta (RRSET) i utilitzanr el DNSKEY obtingut valida la resposta RRSIG

Configuració DNSSEC a bind #

  1. Creació de claus KSK
 dnssec-keygen -K /etc/bind/keys/ -a RSASHA256 -b 4096 \
 -n ZONE -3 -f KSK lazona
  1. Crear claus ZSK
dnssec-keygen -K /etc/bind/keys/ -a RSASHA256 -b 2048 \
-n ZONE lazona
  1. Firmar zona
dnssec-signzone -d /etc/bind/ -K /etc/bind/keys/ -e now+30D -N "increment" -S
	   -3 $( dd if=/dev/random bs=16 count=1 2>/dev/null | hexdump -e \"%08x\" ) \
	     o lazona fitxerdelazona
-e now+30D validesa
-d directori de bind
-k directori de claus
-increment incrementa el serial
-o origen
  1. Canviar al fitxer de zones que agafi la zona firmada
	zone "lazona" {
	 type master;
	 file "/etc/bind/lazona.signed";
	};
  1. Habilitar DNSSEC a named.conf.options dintre del blo option{}
dnssec-enable yes;
dnssec-validation yes;

dnssec-enable indica que dona suport a DNSSEC com a servidor autoritatiu dnssec-validation que indica que validarà les repostes com a servidor recursiu

  1. Al mateix fitxer incloure el fitxer de claus
include "/etc/bind/bind.keys";
  1. Informar al nivell superior de la KSK Està en un fitxer dsset-lazona si no està es pot regenerar amb
ddnssec-dsfromkey Kinittab.net.+008+51772.key

el format és

lazona. IN DS keytag algorisme digesttype digest

on cada linea tindrà un dels digest type que hem definit al crear les claus

Verificacions #

#####Verificació per consola

  • Descarregar les claus KSK i ZSK de la zona arrel
dig . DNSKEY | grep -Ev '^($|;)' > root.keys
  • Fer validació completa
dig +sigchase +trusted-key=./root.keys nomdns. SOA
o
dig +sigchase +trusted-key=./root.keys nomdns A +multiline

Consultar dades DDNSEC( RRSIG...)

 dig +dnssec www.isc.or

keep it simple

dig @192.168.1.7 www.isc.org. A +dnssec +multiline

Hauriem de tenir el header ad, el flag do i el registre RRSIG

$ dig @192.168.1.7 www.isc.org. A +dnssec +multiline

; <<>> DiG 9.10.0-P2 <<>> @192.168.1.7 www.isc.org. A +dnssec +multiline
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32472
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;www.isc.org.		IN A

;; ANSWER SECTION:
www.isc.org.		4 IN A	149.20.64.69
www.isc.org.		4 IN RRSIG A 5 3 60
  • També es pot utilitzar devl
delv @192.168.1.7 www.isc.org. A
delv @192.168.1.7 www.isc.org. A +rtrace
delv @192.168.1.7 www.isc.org. A +multiline
delv @192.168.1.7 www.isc.org +rtrace +multiline
Webs per verificar #

Fer que no caduquin constantment #

auto-dnssec maintain; inline-signing yes;

Registre SOA amb DNSSEC #

  • refresh sempre ha de ser menor que la validesa de RRSIG

DLV : DNS Lookaside Validation / Island of trust #

A named.conf.options dels servidors cahche/recursius

dnssec-lookaside auto;

o especificar

options {
     dnssec-lookaside . trust-anchor dlv.isc.org.;
};

A bind.keys afegir el que vols tenir confiança

trusted-keys {
    gov. 257 3 8 "AQO8daaz7B+yshOfL60rytKd9aOSujgponEw3fwBMEC3
    /+e9XzHw2k+VKnbJTZ+QaVtpfUd1q9HKZIv/ck83Gl5T
    jYKE5jtUZ2kpEDZfVNGv6yx0smtWAXv1nCJS9ohnyOTd
    397eMojGDHqkEC+uojEScZheEkMxzgCZwDAs+/CSU7mS
    uHtCRZn19xlZUd5Gv7yDQ3mbOUwuy30oSk0z1Q5UUPpo
    ihOugIZHFX6Jk7NLiW2wlqfq9qhV4zj7TiBiJY0mCc4z
    HN8/aq2VKDHp2Na7mWzvKyTy+SYQkBQ/08LbPwj9YMc+
    uCzKL6sU/ObHv17EFhD8aPDftTHZvV9L+OZr";
};

Transferència de zona TSIG #

  • Autenticar la transferència entre servidors amb TSIG (Transaction Signature)
  • Utilitza MAC (Message Authentication code)

Procés #

Generació i especificació de claus #
dnssec-keygen -a HMAC_MD5 -b tamany(1-512) -n HOST nomclau

-Això haurà generat 2 claus - Knomclau.+157.xxxxx.key - Knomclau.+157.xxxxx.private

  • El camp key d'aquests 2 fitxers és la clau.

Podem utilitzar-la a named.conf directament

key nomclau {
	algorithm hmac-md5;
	secret "elvalordekey"
};

o deixar-ho en un fitxer amb el mateix format i fer un include

include "nomdelfitxer.key"
Ús en transferència #
zone “myzone.cat”
{
Type master;
file “etc/myzone.cat”
allow-transfer { key “nomclau”;};
}
utilitzar-lo en les notificacions #
server IP  {keys { nomclau; };};
En actualitzacions dinàmiques #
zone “myzone.cat”
Type master;
file “etc/myzone.cat”
allow-update
{ key “nomclau”;};
};