Hoy vamos a tratar un tema más técnico, es algo que cualquier administrador de un servidor DNS debería tener presente a la hora de configurar cualquier dominio, pues utilizar este protocolo nos puede permitir evitar varios tipos de ataques y así proporcionar mayor seguridad a los usuarios que acceden a nuestros servicios a través de nuestros nombres de dominio en DNS.
Es importante que configuremos DNSSEC en nuestros servidores y contribuyamos a generar una Internet más segura, es una tarea de todos y en este caso no es una tarea difícil.
Pero empecemos por el principio …
¿Qué es DNSSEC?
El DNSSEC (Domain Name System Security Extensions) como su nombre indica es una extensión para el sistema de nombres de dominio tradicional, ese sin el cual usar Internet sería algo tedioso, tener que recordar un montón de direcciones IP para acceder a los servicios, en lugar de los acostumbrados nombres de dominio.
Haciendo un poco de historia, el primer RFC (documento de especificación) que hablaba de esta mejora de seguridad en DNS es de 1997 y como suele suceder siempre, fue a raíz de la publicación de un artículo en 1995 donde un investigador daba luz a fallos que había encontrado años atrás en un servicio tan crítico como es el DNS. A posteriori, se han ido generando sucesivos RFCs
actualizados porque se fueron encontrando fallos, ha habido bastantes hasta llegar al último que es el que hay vigente actualmente el RFC-4033-4035, de enero de 2020.
Aunque se hacen algunas aclaraciones y referencias al DNS, asumo que todo el mundo sabe como funciona el protocolo DNS, dado que sino este documento se alargaría y no estaría hablando del uso de criptografía. También se habla de firma, que este si es un tema de criptografía, pero también
daría para mucho explicar la firma, así que he ido a la versión resumida, se firma con una clave privada y se verifica con una pública, aunque los procesos de firma suelen ser más complejos, ya que suelen intervenir algoritmos de hash, etc.
Caso de Uso
DNSSEC se utiliza para proteger la integridad y autenticidad de las respuestas DNS, evitando ataques como el envenenamiento de caché y la suplantación de DNS. Al asegurar que las respuestas DNS provienen de una fuente verificada y no han sido alteradas, DNSSEC añade una capa crítica de seguridad a la infraestructura de Internet. En este tipo de ataques no hace falta estudiar mucho para saber sus consecuencias, el caso más simple que te redirijan por ej. a una página web que no es la que quieres visitar, porque has recibido una traducción de nombre a IP
errónea, alterada maliciosamente para este fin. DNSSEC se crea justamente para prevenir que suceda este tipo de comportamientos anómalos.
Algoritmos criptográficos utilizados
Hablamos del uso de algoritmos de clave asimétrica (clave pública/clave privada) y como veremos más delante de las capacidades de firma y verificación de dicha firma que aportan los algoritmos de este tipo.
Algoritmos de Firma Digital:
- RSA (Rivest–Shamir–Adleman): Uno de los algoritmos más comunes para firmas digitales en DNSSEC.
- DSA (Digital Signature Algorithm): Utilizado principalmente en implementaciones más antiguas.
- ECDSA (Elliptic Curve Digital Signature Algorithm): Ofrece mayor seguridad con claves más pequeñas, aumentando la eficiencia.
- EdDSA (Edwards-curve Digital Signature Algorithm): Proporciona una mayor eficiencia y seguridad, utilizando curvas de Edwards.
Hay que pensar que el tema del tamaño de las claves y la eficiencia de los algoritmos usados es importante sobre todo cuando hablamos de dispositivos que tengan que realizar verificaciones y no tengan una gran capacidad de proceso. No hay que olvidar que las consultas DNS se deben resolver de forma muy rápida para no afectar al rendimiento de cualquier petición de servicio.
Algoritmos de Hash:
- SHA-1 (Secure Hash Algorithm 1): Aunque es ampliamente utilizado, está siendo reemplazado debido a sus vulnerabilidades (ya no se considera seguro)
- SHA-256 (Secure Hash Algorithm 256): Ofrece mayor seguridad y es el algoritmo de hash más recomendado actualmente.
- SHA-384 (Secure Hash Algorithm 384): Utilizado en algunos casos para mayor seguridad.
- SHA-512 (Secure Hash Algorithm 512): Muy robusto pero menos común debido a la sobrecarga de procesamiento.
- GOST R 34.11-94: Utilizado en entornos específicos, especialmente en Rusia.
Funcionamiento y su aplicación
Para que DNSSEC funcione se han tenido que crear una serie de nuevos registros de DNS que se unen a los ya tradicionales A, CNAME, SOA, NS, TXT, etc. para que se pueda verificar la información de estos y que están recogidos en la especificación RFC correspondiente y ya mencionadas anteriormente.
- Firmas digitales:
- Los registros DNS se firman digitalmente con una clave privada asociada a una zona DNS (una zona DNS simplificando vendría a ser un dominio, ej. campusciberseguridad.com, pero también podría ser un subdominio si este estuviera delegado a otro servidor de DNS).
- Esta firma digital se almacena en un registro RRSIG junto con los datos DNS.
2. Validación de Firmas:
- Los “resolvers” DNS que soportan DNSSEC reciben la respuesta DNS junto con el registro RRSIG.
- Utilizan la clave pública almacenada en el registro DNSKEY para verificar la firma digital.
- Si la firma es válida, se confirma que la respuesta no ha sido alterada y es auténtica, en caso contrario se debería desechar porque podría haber sido manipulada.
Detalles Técnicos
Es un proceso sencillo de validación de firmas, pero a la vez es complejo, porqué el DNS es un servicio jerárquico (como un arbol, desde el dominio raíz hasta los subdominios finales) y eso tiene implicaciones a la hora de validar toda la cadena de dominios y subdominios hasta llegar al registro final que estemos consultando. Intentaré hacer una explicación técnica pero resumida que creo que será fácil de seguir.
- ZSK (Zone Signing Key): Clave que firma los registros de recursos (RR) de una zona. Este incluye registros como A, AAAA, MX, CNAME y otros (los que se permiten en un servicio DNS habitual).
– Cada registro DNS dentro de una zona se firma digitalmente utilizando el ZSK.
– La firma generada por el ZSK asegura que los datos no han sido modificados desde que fueron firmados.
– El ZSK se rota con mayor frecuencia que el KSK debido a su uso intensivo. La rotación periódica del ZSK ayuda a mantener la seguridad, minimizando el riesgo de comprometer la clave (esto se hace para evitar que con técnicas de criptoanálisis se pueda llegar a determinar esta clave privada teniendo suficientes muestras de datos firmados). - KSK (Key Signing Key): Clave que firma el registro DNSKEY, asegurando la integridad de la ZSK.
– La firma generada por el KSK asegura que las claves públicas del ZSK y del KSK son auténticas y no han sido modificadas.
– Los resolvers DNS que soportan DNSSEC utilizan el KSK para validar la autenticidad del registro DNSKEY, asegurando que las firmas del ZSK son confiables.
– Las claves KSK también se rotan, pero con menor frecuencia, dado que pueden provocar interrupciones de servicio. - DS Record (Delegation Signer Record): Vincula una zona DNS con su clave pública DNSKEY, permitiendo la delegación de la autoridad de firma a subdominios.
– El DS Record permite la validación de la cadena de confianza desde la zona padre hasta la zona hija.
– Cuando un resolver DNS valida una respuesta DNSSEC, puede verificar la firma del DS Record en la zona padre y luego usar este registro para validar la clave pública del DNSKEY en la zona hija. - Proceso de Validación: Ya se ha hablado de esto un poco antes en el punto de funcionamiento de la aplicación, pero aquí se detalla un poco más técnicamente como funciona el proceso completo en un resolver que soporta DNSSEC.
- Recibe Respuesta: El resolver recibe una respuesta DNS junto con los
registros RRSIG. - Recupera DNSKEY: El resolver recupera el registro DNSKEY asociado
para obtener la clave pública. - Verifica la Firma: Usa la clave pública del DNSKEY para verificar la firma
en el registro RRSIG. - Validación de DS Record: Verifica el DS Record en la zona padre para
confirmar la autenticidad de la clave pública del DNSKEY. - Cadena Completa: Repite el proceso para cada nivel de la cadena de
confianza (esto es lo que comentaba que si hay muchas delegaciones
puede llegar a ser compleja, debido a la verificación de muchas firmas) - Fallo en la Validación: Si en cualquier punto no se puede validar una
firma, la respuesta completa se considera no válida, esto es lo que da la
seguridad a DNSSEC (si hay fallo, se asume que la respuesta DNS puede
estar comprometida).
Conclusión
Como ya se ha comentado, todo este proceso es transparente para el usuario final, como usuarios seguimos usando en nuestros navegadores y nuestras aplicaciones los nombres DNS como siempre y toda esta parte de firma y verificación criptográfica es transparente (como también lo es el uso del SSL/TLS) y no es necesario que sea comprendida por el usuario, aunque siempre es bueno algo de conocimiento al respecto, aunque sea mínimo, basta que solo sea a nivel de concienciación, sino luego pasa que nos pensamos que es seguro navegar por una página solo por qué tiene el “candadito” de SSL/TLS en él navegador (recordatorio: eso solo garantiza que la comunicación entre ambos puntos, el cliente y el servidor es segura, pero no implica nada más, el contenido puede ser fraudulento o malicioso).
DNSSEC es una capa de seguridad que nos tiene que proteger de los defectos del protocolo DNS original en esta materia. Aunque el uso de DNSSEC ha aumentado, no todos los “resolvers” utilizan DNSSEC y su uso no es mandatorio, si bien es recomendable por la mejora de seguridad que aporta. Un ejemplo, la verificación por parte de Let’s Encrypt (entidad registradora y certificadora), uno de sus métodos de validación es DNS y si se utiliza este método requiere que los registros del dominio estén protegidos por DNSSEC.
Esto no implica que DNSSEC no tenga también sus fallos, en enero de 2024, se anunció un ataque de denegación de servicio “KeyTrap” para todos los solucionadores (resolvers) DNSSEC que respetan las especificaciones. Básicamente, sin entrar en muchos detalles, se trata de sobrecarga de
verificaciones de firmas con todo lo que conlleva, teniendo en cuenta que un servicio DNS debe dar una respuesta rápida. Esto ha generado que se tengan que imponer restricciones al estándar RFC para no caer en ese DoS.
Utiliza DNSSEC mejorando tú posición a nivel de seguridad y contribuye a una Internet más segura para todos.