Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Claramente la analogía con una guía telefónica se queda corta muy pronto, pero es
un punto de partida.
Hay teorías que dicen que los 2 más grandes problemas de la Ciencia de la
Computación son invalidar un caché, nombrar a las cosas, y los errores de 1 bit. Es
una broma, porque esas son 3 cosas y no dos. A eso se refiere los errores de 1 bit.
Pero el DNS se ocupa de otro de los grandes problemas: nombrar las cosas.
Otra teoría más seria y académica dice que un sistema de nombres ideal debería
tener 3 características fundamentales: entendible por humanos, descentralizado y
seguro. Pero que lamentablemente no es posible tener las 3. Hay que escoger dos.
En el caso de nuestro DNS, los vértices son "entendible por humanos" y "seguro",
utilizando DNSSEC. Pero no es descentralizado en el sentido original del paper, sino
jerárquico, una característica que aunque no cumpla con lo indicado en el paper, ha
sido vital en la práctica para mantener un orden y cumplir con requisitos legales,
comerciales y de uso.
Acá vemos algunos de los memes y bromas que se le hacen al DNS por esto mismo.
El muro rayado fue parte de las protestas y desórdenes de la "primavera árabe". Una
de las técnicas que usaron los gobiernos para censurar la red fue modificar el DNS
de los grandes proveedores de Internet. Es por eso que aparecieron rayados con la
dirección IP de uno de los proveedores de DNS globales, que permitía saltarse esas
restricciones. Esto fue una de las primeras y quizás únicas veces en que el DNS fue
así de público, pero demuestra lo fundamental que es para una Internet que funcione.
Pero también cuando hablamos de DNS nos podemos referir a la base de datos
distribuida que representa los nombres y ciertas propiedades de los objetos en
Internet.
Es así como Paul Mockapetris en conjunto con Jon Postel inventan el DNS actual, el
año 1983. Podríamos decir que el DNS fue la primera base de datos distribuida que
existió, y su éxito ha sido tal que 40 años después lo seguimos usando, y se podría
decir que prácticamente tal como fue inventado. ¡Eso es escalar a niveles
impensados! Se estima que hoy existen más de mil millones de máquinas en el
mundo, repartidas en 365 millones de nombres de dominio bajo el primer nivel.
Podríamos decir que luego de su invención, el primer cambio importante fue la del
estándar EDNS de 1998: el “Extended DNS”, que permitió ampliar el tamaño de un
paquete DNS de los 512 bytes originales, a una cantidad teórica máxima de 64KB
(pero que en la práctica se limita a un poco más de 1KB, que es suficiente para la
cantidad de información actual). Lo más importante es que además de aumentar el
tamaño, permitió definir nuevas formas de extender los códigos de respuesta del
DNS, permitiendo el surgimiento de nuevas tecnologías como DNSSEC.
Luego el 2013 vimos el lanzamiento de los "nuevos TLDs genéricos" (ngTLDs), que
significó pasar de la cantidad estable histórica de alrededor de 300 TLDs a los más
de 1.500 actuales.
Finalmente, el año 2019 se realizó la primera campaña llamada "DNS flag day",
coordinada por los grandes operadores y fabricantes de software DNS, que busca
realizar una "limpieza" ordenada de los dominios y servidores anticuados existentes
en la red. Estos "DNS flag days" se seguirán repitiendo anualmente, con el objetivo
siempre de ir mejorando la estabilidad del DNS.
Pero no se asusten. No es necesario que lleguen a este nivel de detalle, salvo que
quieran implementar un servidor DNS desde cero. En este curso queremos darles una
visión completa para operar un servicio DNS moderno, y les dejamos invitados a leer
todos los detalles a quienes le interese, consultando estos RFCs que son de acceso
público desde el sitio ietf.org.
Hace un par de años hubo algún movimiento dentro de IETF que pedía simplificar un
poco las cosas, o más bien un llamado a tener cuidado con la sobre-extensión. El
DNS es víctima de su propio éxito, y no son pocas las ideas de implementar web
sobre DNS, VPN sobre DNS, control de malware sobre DNS, etcétera. Se hablaba
del "DNS Camel", que es el gran riesgo de "romper la espalda" de un protocolo
muchas veces abusado. En ese momento se calculó que son 217 RFCs los
necesarios para tener un DNS moderno, totalizando 3.650 páginas de estándares que
sería necesario leer.
Por otro lado existe una asociación de organizaciones y empresas que trabajan en la
arquitectura y operación del DNS, llamada DNS-OARC. Esta asociación funciona con
membresías pagadas, lo que da derecho a asistir a conferencias, participar de
discusiones, definir el desarrollo de software relacionado al DNS, y diversos estudios.
Acá tenemos a muchos administradores de TLDs pero también gente del lado de los
resolvers, como Cloudflare, Google, PCH; agentes registradores como GoDaddy,
Neustar; e incluso empresas que consideran necesario aportar y reunirse en torno al
DNS como Facebook, Oracle, Cisco, Microsoft, Amazon, etc.
Y aunque el contenido de la raíz es definido por ICANN, los servidores raíz son
administrados por 12 organismos independientes, que totalizan 13 servidores raíz (1
organismo tiene dos). La mayor parte son de Estados Unidos, y vemos diversas
organizaciones del gobierno, universidades, etc. En Europa tenemos a RIPE (el RIR
de esa región) y a Netnod de Países Bajos. Por último, el organismo académico WIDE
maneja también un servidor raíz en Japón.
No podemos dejar de mencionar también los ccTLDs, los TLDs de los países, que
son independientes y autónomos. Acá hay bastante diversidad en los organismos,
generalmente los mantienen los propios gobiernos, o instituciones comunitarias sin
fines de lucro, o también universidades.
El árbol completo DNS es mantenido por distintos servidores DNS autoritativos, cada
uno siendo responsable de una o más zonas. Estos servidores autoritativos son los
responsables de uno o varios nodos del árbol, contienen los "registros de recurso"
(resource records (RRs)) de cada uno de ellos, y delegan los subdominios a otros
servidores autoritativos.
Por temas de redundancia, siempre existe más de 1 servidor autoritativo por cada
zona. El mínimo es dos, pero actualmente es común tener cuatro, en promedio. Todos
los autoritativos que se encuentran en los NS de una zona deben responder en todo
momento, y un resolver puede utilizar cualquiera de ellos indistintamente. Sin
embargo, es bastante común que desde el punto de vista de la administración de la
zona, uno de ellos sea el "primario" de la zona, y el resto sea "secundario". El primario
es donde se origina la información de la zona, y los secundarios la transfieren desde
este primario, utilizando un protocolo dentro del mismo DNS. Sin embargo, esta
Por otro lado, los servidores encargados de recorrer el árbol DNS para llegar a un
nodo en particular, se les llama recursivos, porque recorren recursivamente el árbol
DNS, o resolutores (resolvers). Se puede hacer un paralelo diciendo que los DNS
autoritativos serían algo así como los servidores web, y los recursivos los "spiders"
que recorren el árbol buscando información.
Siguiendo en este mismo tema, lo que la "gente de la calle" entiende por "DNS" es
generalmente "el servidor DNS recursivo que utilizo para navegar". La gente de la
calle no se topa con DNS autoritativos generalmente, salvo cuando quiere registrar
un nombre de dominio propio, en cuyo caso necesita tener DNS autoritativos para su
nombre.
Recuerden siempre que los DNS autoritativos son quienes mantienen la estructura de
árbol, y los DNS recursivos son quienes recorren este árbol para encontrar los
registros de recurso de un nombre.
Otra cosa importante en esta estructura de árbol es que acá no vemos las divisiones
administrativas del DNS. Una institución puede manejar un nodo del árbol, y es
responsable de lo que pase en su propio subárbol, pero no es evidente mirando el
árbol ni tampoco recorriéndolo con un recursivo, de dónde está el "corte" o "cambio"
de administración. Por ejemplo, en el caso de la raíz, la responsable de su contenido
es ICANN, una organización internacional sin fines de lucro. El primer nivel, llamado
Han existido intentos de reconocer estas divisiones administrativas del DNS. La más
conocida se llama "Public Suffix List", administrada por un grupo de voluntarios y
mantenida por Mozilla, que publica las divisiones "internas" de cada TLD. Por ejemplo,
ahí vemos que com.br es un sub-registro dentro de br, pero com.cl no lo es.
Las divisiones administrativas son muy útiles para que los navegadores limiten
adecuadamente las cookies, certificados digitales, etc.; y no permitan compartir
elementos entre dominios que no están relacionados.
Este formato es el que debe respetar cualquier nombre que quiera ser interoperable
en el DNS Global, y es el que exigen los TLDs para la inscripción de dominios.
Cada una de las etiquetas tiene asociada cero o más Registros de Recurso (RRs), y
cada RR tiene un tipo propio, además de un contenido que es dependiente de cada
tipo.
Acá vemos que la etiqueta "lacnic" tiene los RRs NS y MX. El NS es obligatorio para
una etiqueta que es el ápex de una zona, y el MX es común verlas cuando se quiere
que el nombre de dominio sea receptor de correos electrónicos. La etiqueta "campus"
tiene los RRs de tipo AAAA (también llamada quad-A) y A, que representan el uso
clásico de direcciones IPv6 e IPv4, respectivamente.
Acá vemos que .net es una zona que tiene solo 1 nodo, pero lacnic.net tiene dos
niveles. La delegación entre .net y lacnic.net divide las zonas.
Por ejemplo, acá tenemos la zona "lacnic.net", que tiene los nombres www.lacnic.net
y campus.lacnic.net. El "ápex" de la zona es "lacnic.net", a secas. En el ápex es donde
Tal como hemos mencionado, el registro NS, que es el que define los servidores de
nombre que son autoritativos de una zona, se define en el ápex de dicha zona.
Sin embargo, es necesario también que el padre conozca estos NS, para poder hacer
la delegación y que los resolvers encuentren los NS cuando están recorriendo el árbol
DNS desde arriba hacia abajo.
Partiendo por la izquierda, al nivel del usuario, tenemos las Aplicaciones que son las
que necesitan hacer uso del DNS para funcionar. Estas aplicaciones se ejecutan
dentro del dispositivo que utiliza el usuario.
Acá ya llegamos a un DNS recursivo real, que es parte de la infraestructura del ISP y
es compartido entre muchos usuarios. Este resolver tiene también un caché de
respuestas, de tal forma de responder rápidamente ante consultas comunes y
repetitivas, pero en caso de no tener la respuesta, su labor es recorrer recursivamente
el árbol DNS buscando la respuesta final, siguiendo las delegaciones de los DNS
Autoritativos del árbol DNS.
Esta arquitectura es sólo una de las muchas formas de organizar el servicio DNS,
pero es la más comúnmente utilizada.
Luego tenemos distintos "flags". El primero, QR, se enciende cuando se trata de una
respuesta, y se pone en 0 en las preguntas. Esto permite distinguir entre una y otra.
RA lo utiliza el servidor para indicar si él puede hacer recursión o no. Esto es útil si
uno envía una pregunta con el bit RD anterior encendido, indicando que solicita
recursión, pero el servidor no quiere o no puede hacerlo (puede que sea autoritativo
solamente, o bien que sea recursivo para otros clientes y no para mí) y entonces
responderá con este bit RA en cero.
Luego tenemos el campo Z que está reservado e inutilizado y debe ser cero.
Siguiendo con los flags de encabezado ya vienen los RRs de la respuesta. Primero
vienen contadores de cuántos registros hay para la pregunta (QUESTION). Aunque
teóricamente uno podría poner más de 1 pregunta en un paquete, esto no está
especificado y no funciona.
En este caso vemos una pregunta, por el bit QR en cero, y 1 solo registro en la sección
query, compuesto de las etiquetas www, ietf, org y la raíz, el tipo AAAA (código 28), y
clase internet (IN), código 1. Esta pregunta está pidiendo los registros IPv6 para
www.ietf.org.
Ahora veremos cómo se realiza una pregunta y se analiza una respuesta usando una
de las herramientas más poderosas que podemos utilizar para analizar el DNS: el
comando "dig", parte del software "Bind" de la empresa ISC.
Primero veamos cómo se arma una pregunta. El identificador de una pregunta es una
tri-tupla formada por el nombre de dominio, o "qname", el tipo del RR, o "qtype", y la
"clase", qclass. La clase es una forma de tener distintos "árboles en paralelo", pero
nunca se ha desarrollado. En la práctica, la única clase que se utiliza es la "clase
Internet", o IN. Entonces, con qname, qtype y qclass tenemos identificada una
pregunta.
Acá vemos cómo realizamos la misma pregunta indicada en la estructura del paquete
DNS. El qname es "www.ietf.org", el qtype "AAAA" (una dirección IPv6), y la clase se
puede indicar, aunque es opcional, y se asume IN. Finalmente, podemos indicar
Las respuestas van en el campo ANSWER. Acá es importante indicar que puede
haber más de un RR por cada respuesta, por lo que se habla de "RR set", para indicar
que pueden ser múltiples. Por ejemplo, www.ietf.org puede tener 2 direcciones IPv6,
y entonces el contador de ANSWER sería 2, y venir en la sección ANSWER, 2 RRs
de tipo IPv6.
Las otras secciones se utilizan para otro tipo de respuestas. En AUTHORITY van las
delegaciones (los registros NS), junto a otros.
Y acá tenemos la respuesta al comando dig anterior. Iremos viendo los datos
importantes uno por uno.
Otros códigos de error comunes son SERVFAIL, que entregan los servidores que no
pueden responder por cualquier problema interno; NXDOMAIN que indica que el
nombre consultado no existe; REFUSED que responden los servidores que no son
autoritativos para esa pregunta.
Luego miramos cuántas respuestas vienen. Si vienen cero hay que fijarse en el
AUTHORITY, porque si es una consulta de tipo NS es esperable que vengan ahí.
Otro caso importante de destacar es cuando hay una pregunta por un tipo distinto a
NS, también se pueden tener respuestas con RCODE "NOERROR" y cero ANSWER.
Esto indica que sí existe el nombre consultado, pero es el tipo consultado que no
existe. Por ejemplo, si pregunto por www.lacnic.net pero tipo MX, se obtendrá
NOERROR y ANSWER igual a 0.
Acá vemos los flags. Uno de los importantes cuando uno consulta a un recursivo es
que debe venir el "ra", indicando que la respuesta fue resuelta exitosamente.
Luego ya tenemos los registros en sí mismos. Acá nos fijamos que el nombre
www.ietf.org tiene primero un TTL de 131 segundos, que indica el tiempo de caché
que le resta a ese registro. Esto se indica porque el cliente podría querer también a
su vez hacer caché de esta respuesta, y tiene derecho a hacerlo por 131 segundos.
Pasado ese tiempo, debe volver a preguntar al recursivo, por si hubiera algún cambio.
El tipo consultado fue AAAA, el que viene en este otro RR. Acá vemos que
www.ietf.org no tiene registro AAAA pero sí tiene un registro CNAME, que representa
un "alias", indicando que se debe consultar otro nombre canónico,
www.ietf.org.cdn.cloudflare.net. Esta es una técnica muy utilizada por sitios web que
utilizan el servicio de CDN, redes de distribución de contenido. Nuestro recursivo
9.9.9.9 es tan amable que, al solicitarle recursión, no se contenta con solo responder
con el CNAME, sino que se preocupa de seguir ese CNAME y llegar finalmente al
registro AAAA solicitado.
Otro dato importante para efectos de rendimiento es el "query time", que indica el
"round trip time" o tiempo de ida y vuelta que tomó la consulta, en milisegundos.
Y finalmente, el dato del tamaño del paquete de respuesta podría ser importante para
detectar posibles problemas con paquetes demasiado grandes. Hasta 512 es un
tamaño que debiera funcionar en cualquier tipo de red, pero en casos modernos uno
puede esperar que 1232 es una cantidad segura dentro de UDP sin fragmentar.
Partimos por los mínimos que debe tener una zona de forma obligatoria, que se puede
decir que son registros "de infraestructura", en el sentido que no son normalmente
consultados por los clientes finales, sino que sirven para que los resolvers puedan
recorrer el árbol DNS.
MNAME: indica el nombre del servidor primario para la zona, pero actualmente se
utiliza para definir el nombre hacia dónde se dirigen las actualizaciones automáticas
de registros, si se utiliza la técnica de "dynamic updates".
SERIAL: número que indica la "serie" de la zona. Cada vez que hay un cambio en el
contenido de la zona, el serial debe aumentarse. Lo utilizan los secundarios para
saber si hay cambios en el momento que deban refrescar la zona.
Ahora vemos el otro RR que es requisito para cualquier zona, el NS, "name server".
Este se ubica en el ápex de la zona, e indica los nombres de los servidores de nombre
que son autoritativos para la zona. Como se contó en una sección anterior, este
registro también se encuentra repetido en la zona padre, y debe ser igual en ambos
lados. Lamentablemente eso no es así, y ocasiona diversos problemas de resolución.
Es importante siempre preocuparse de mantenerse sincronizados, y ante cualquier
modificación en el ápex, acudir al padre y cambiarlo además ahí.
En el ejemplo vemos que la zona lacnic.net tiene como NS a ns.lacnic.net, entre otros.
Un resolver no puede averiguar la dirección IP de ns.lacnic.net por sí sola, porque no
sabe dónde ir a buscar esa delegación. Es por esto que el padre de lacnic.net, la zona
.net, al momento de responder con los NS de lacnic.net, debe incluir los glues de
Ahora pasamos a los registros que ya son útiles para los clientes finales. Partimos
con los AAAA y A, que representan las direcciones IP versión 6 y versión 4,
respectivamente.
Una cosa importante que podemos mencionar acá, es que los registros individuales
que vienen dentro de un RRset, no tienen un orden predeterminado. Es decir, el orden
no significa nada, y de hecho es normal que un autoritativo responda con los registros
en distinto orden ante consultas repetidas. Una aplicación no puede asumir que el
orden de los registros signifique prioridad.
El registro TXT es uno de los más abusados dentro del DNS. Esto porque en su
definición original, acá se podía poner "cualquier texto libre sin formato".
Lamentablemente, hoy el uso considera que una definición tan libre es un lugar ideal
para poner cualquier tipo de dato que se me ocurra. Es así como se ponen en registros
TXT claves para verificar la titularidad de un dominio, se ponen registros de
autenticación SPF para correos, llaves DKIM de autenticidad de dominio, etcétera.
El qname del registro PTR se arma reversando los octetos de la dirección IPv4, o los
doble-bytes en la dirección IPv6, agregándole el sufijo in-addr.arpa en el caso de IPv4,
e ip6.arpa en IPv6. Esto lo veremos en detalle en un módulo siguiente.
Además, hay otras reglas especiales como que no se permite que un nombre de host
use CNAME si está en los registros NS ni MX.
En este módulo veremos algunos registros más nuevos y complejos, pero que se
espera que cada vez sean más utilizados.
Partimos con el registro SRV, que permite ubicar "servicios". Aunque es bastante
antiguo nunca fue demasiado utilizado, solo unos pocos servicios se animaron a
usarlo. Incluso la gente de los navegadores web decidió crearse otro distinto, por
temas de formato.
La prioridad es una forma de ordenar los distintos RRs dentro de un set, similar al
registro MX, y un cliente debe siempre utilizar primero el que tiene el menor número
de prioridad.
Weight indica el peso que tienen distintos servidores con la misma prioridad, y se
debe utilizar al revés de la prioridad, el número más grande primero.
El formato es: “CAA”, “flags”, “tags” y “value”, por ejemplo "CAA 0 issue
‘letsencrypt.org’", que indica que el dominio acepta certificados emitidos por
Let’sEncrypt.
Este es uno de los más recientes registros, recién saliendo de IETF. Todavía no es
RFC, pero en estos meses ya debería estar listo. El registro HTTPS es como el
sucesor del anterior SRV, pero exclusivamente para web.
Finalmente, indicamos los registros que se asocian con DNSSEC, que se verán con
mayor profundidad en un capítulo posterior. Pero solo como mención acá tenemos
los RRSIG que mantienen las firmas criptográficas, DNSKEY con las llaves de la zona,
y NSEC/NSEC3 con las cadenas que cubren los nombres "no existentes". Estos son
algunos de los más comunes y que se encuentran en todas las zonas firmadas con
DNSSEC.
Para cumplir con estos objetivos, se agregó criptografía asimétrica a la estructura del
árbol DNS. Cada RR ahora tiene una firma criptográfica asimétrica, y mediante el uso
de llaves privadas y públicas se pueden crear estas firmas, y verificar que son
correctas.
Es el mismo esquema que se utiliza para los certificados digitales web. La gran
diferencia eso sí es que para distribuir las llaves no se utilizan Autoridades
Certificadoras, como es en el web, sino que se utiliza el mismo árbol jerárquico del
DNS.
Como vimos antes, lo único que protege a un cliente que hace una consulta es el
identificador del paquete, un número de 16 bits del encabezado, que es creado al azar
por el cliente y debe venir en la respuesta. Así, un cliente podría saber que la
respuesta viene del servidor que él consultó.
Sin embargo, este mecanismo pronto quedó obsoleto con redes y procesadores cada
vez más rápidos. Pronto se tuvo ataques reales donde un atacante podía "adivinar"
un ID, o bien enviar miles de combinaciones en pocos segundos, hasta adivinar el
correcto e insertar mensajes falsos, que el cliente no tiene forma de verificar.
Un punto importante acá es que pese a que hay integridad y autenticidad, no hay
privacidad. Los mensajes que se intercambian en DNSSEC, al igual que en DNS, no
Como vemos toda la seguridad del sistema depende de dos cosas muy importantes:
que Alicia guarde y proteja su llave privada; y que Borja reciba de una manera segura
la llave pública. Luego de eso, ya pueden intercambiarse mensajes sin problemas.
De esta forma se va armando una "cadena de confianza" desde la raíz hacia abajo,
desde padres a hijos.
Primero tenemos las firmas que son parte de todos los RRs. Estas se mantienen en
los registros RRSIG, y son enviados por los autoritativos en la misma sección
ANSWER de la respuesta.
Una cosa importante es que los RRSIG acompañan a los registros autoritativos de la
zona. Esta distinción es importante porque en el caso de las delegaciones de padres
a hijos, los registros NS no llevan firmas, porque el autoritativo es el hijo, donde sí se
encuentran firmas. Lo mismo pasa con los registros glues.
Los campos del RRSIG incluyen el tipo de están cubriendo, algoritmo, la llave con que
fue firmada identificada por su "tag", y la firma finalmente codificada en Base64; entre
otros campos.
Finalmente, la cadena de delegación del padre se forma mediante el registro DS, que
el padre debe mantener junto a los NS con los que delega la subzona.
Con esto, ya cualquiera puede verificar los RRs de la zona hija, porque puede pedir
las llaves al hijo con sus registros DNSKEY, y verificarlas con el registro DS del padre
que ya viene verificado.
Por último, hay una cosa que no hemos mencionado. ¿Cómo verificamos que un
nombre que no existe es una respuesta verdadera?
Para que esta técnica funcione hubo que definir un orden canónico de la zona, y los
autoritativos ahora al firmar sus registros, además de poner los DNSKEY y RRSIG,
deben ordenar la zona, armar la cadena de NSEC con todos los espacios, y firmarlos.
El registro NSEC3 es otra versión de NSEC que permite no firmar la cadena completa
de nombres, además que los oculta mediante una técnica de cifrado. No es
recomendable usarlo porque agrega complejidad al procesamiento criptográfico en el
firmado y validación, además que no es completamente seguro porque esos espacios
sin firmar permitirían insertar registros falsos. Se inventó pensando en TLDs gigantes
como .com, que tiene cientos de millones de registros, y era muy caro firmar todo
.com desde un comienzo, mientras hubiera muy pocos hijos de .com firmados. En la
actualidad se recomienda que todas las zonas normales utilicen NSEC.
Hay otras decisiones que cada administrador de zona debe tener. En criptografía hay
varios algoritmos que se pueden utilizar para firmas. Por ejemplo, tenemos RSA,
curvas elípticas, GOST, Edwards-curve. Además, las llaves pueden tener distinto
"largo", que representa el tamaño de bits e influye en el grado de protección, pero que
Por último, los resúmenes de los DS también tienen distintas alternativas, como
SHA256, SHA384, etc.
Uno de los cambios más grandes al usar DNSSEC es que se le agrega la variable
temporal absoluta al DNS. Anteriormente en el DNS en plano, uno podía definir una
zona, publicarla en el DNS, y dejarla ahí funcionando por años. Los únicos valores
temporales son relativos, los TTL. Ahora con DNSSEC, ya no es posible tener una
zona estática por años. Las firmas tienen una validez temporal absoluta, un día y hora
precisa al segundo, y antes que expiren es necesario refirmarlas. Las llaves también
se recomienda tenerlas publicadas solo por un tiempo, y es importante irlas
cambiando por unas nuevas, proceso llamado rotación de llaves.
Acá vemos el formato del registro RRSIG, que mantiene las firmas. Tiene dos campos
de tiempo absoluto: la fecha de incepción y la fecha de expiración. Ambas definen
desde cuándo y hasta cuándo se pueden utilizar estas firmas. Uno de los errores más
típicos al comienzo de usar DNSSEC es dejar expirar las firmas. Una vez que las
firmas están expiradas, ya ningún resolver podrá validar los registros, por lo que la
zona deja de funcionar.
Por esto, debe existir un proceso que regularmente vaya refirmando la zona,
actualizando las firmas. Todos los software de DNS tienen esta característica de
forma interna.
Por otro lado, también es importante ir rotando las llaves de forma regular. Esto es
porque las llaves criptográficas pueden ser objetivo de ataques de fuerza bruta, donde
un atacante intenta quebrarlas. Este proceso toma un tiempo, por eso es importante
que una zona vaya cambiando sus llaves y hacer inefectivo este ataque. Para hacer
la rotación correctamente sin quebrar la cadena de confianza, hay que ser cuidadoso.
El proceso es como se indica acá, partiendo de una zona originalmente firmada con
una llave:
De nuevo todo este proceso es manejado automáticamente por los softwares de DNS.
Solo es necesario que el operador defina algunos parámetros, como el tiempo que
desea que se mantengan las llaves vivas antes de rotarlas.
Acá aprovechamos de contar de otra técnica de DNSSEC que hace más fácil la
rotación.
La KSK firma el DNSKEY set, donde está la ZSK. De esta forma, uno puede ir rotando
las ZSK en forma independiente, sin molestar al padre; y solo pasados unos años,
cuando sea necesario rotar la KSK, hay que comunicarla al padre.
3. Hace más delicado al DNS, en el sentido que ahora es posible quedar fuera de
Internet por problemas de validez de firmas, o de rotaciones mal hechas. Pero es el
compromiso que hay que tomar al darle seguridad al DNS. Y actualmente todos los
software modernos tienen automatizado todos estos procesos, sin mayor intervención
humana.
4. De vez en cuando hay que actualizar los algoritmos, a medida que van quedando
obsoletos. Desde que se lanzó DNSSEC en forma global, ya se declaró obsoleto SHA-
1 para los DS, y las llaves de largo menor a 1024 en RSA. Es importante estar atentos
a estos cambios e ir actuando. De nuevo, son los mismos desarrolladores de software