- 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
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 #
- crear directori chroot
- 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
-
copiar els fitxers de configuració
-
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
- Executar el procés en mode chroot
named -c configfile -u usuari -t directorichroot
- Altres copiar fitxer de zonahoraria
cp /etc/localtime /chroot/named/etc
Consideracions de xarxa #
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 #
- Creació de claus KSK
dnssec-keygen -K /etc/bind/keys/ -a RSASHA256 -b 4096 \
-n ZONE -3 -f KSK lazona
- Crear claus ZSK
dnssec-keygen -K /etc/bind/keys/ -a RSASHA256 -b 2048 \
-n ZONE lazona
- 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
- Canviar al fitxer de zones que agafi la zona firmada
zone "lazona" {
type master;
file "/etc/bind/lazona.signed";
};
- 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
- Al mateix fitxer incloure el fitxer de claus
include "/etc/bind/bind.keys";
- 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 #
- http://www.dnssec-failed.org/
- http://dnssectest.sidnlabs.nl/
- http://test.dnssec-or-not.com/
- Extensió firefox DNSSEC/TLSA Validator
- http://dnssec-analyzer.verisignlabs.com/
- http://dnsviz.net/
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”;};
};