Beruflich Dokumente
Kultur Dokumente
Fecha de 2007-05-01
publicacin
por
Tesis
Maestro en Ciencias
especialidad en
Tecnologa Inform
atica
Instituto Tecnol
ogico y de Estudios Superiores de Monterrey
Campus Monterrey
Mayo de 2007
Instituto Tecnol
ogico y de Estudios Superiores de Monterrey
Campus Monterrey
Los miembros del comite de tesis recomendamos que la presente tesis de Mario Anbal Cruz
Hernandez sea aceptada como requisito parcial para obtener el grado academico de
Maestro en Ciencias, especialidad en:
Tecnologa Inform
atica
Comit
e de tesis:
Mayo de 2007
Dedicada a la familia Cruz Hern
andez
Agradecimientos
A Gustavo Lozano Ibarra y al personal de NIC Mexico por haber colaborado enorme-
mente con su experiencia y conocimientos para la realizacion de este trabajo y por haberme
facilitado la infraestructura necesaria para poder realizarlo.
A todas las personas, familiares, amigos y a mi novia por todo el apoyo moral otorgado
durante el tiempo de realizacion de este trabajo. Sin ellos, la realizacion de este trabajo no
habra sido posible.
v
Desarrollo de un Servidor Proxy de DNS para mitigar el
problema de Enumeraci
on de Zona en DNSSEC
Agradecimientos V
Resumen VI
Indice de cuadros IX
Indice de figuras X
Captulo 1. Introducci
on 1
Captulo 3. Definici
on del Problema 38
vii
Captulo 4. Soluci on Propuesta 40
4.1. Antecedentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.2. Metodologa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.3. Configuracion de Servidor de DNS Autoritativo . . . . . . . . . . . . . . . . . 46
4.4. An alisis del trafico generado y recibido por el servidor autoritativo. . . . . . . 48
4.5. Definicion de Plataforma y Lenguaje de Programaci on . . . . . . . . . . . . . 50
4.6. Seleccion de Bibliotecas de DNS . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.7. Desarrollo del Servidor Proxy . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.8. Construccion de Ambiente de Pruebas . . . . . . . . . . . . . . . . . . . . . . 63
4.8.1. Ambiente de Pruebas - Proceso Iterativo . . . . . . . . . . . . . . . . . 63
4.8.2. Ambiente de Pruebas - Proceso Recursivo . . . . . . . . . . . . . . . . 65
4.8.3. Problema con Funciones Absolutas . . . . . . . . . . . . . . . . . . . . 68
4.8.4. Ambiente de Pruebas - Rendimiento . . . . . . . . . . . . . . . . . . . 71
4.9. An alisis de Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Captulo 6. Conclusiones 83
Bibliografa 84
Ap
endice A. Archivo de Zona Utilizado en Servidor Autoritativo 86
A.1. Archivo de Zona sin Firmar zone.test . . . . . . . . . . . . . . . . . . . . . 86
A.2. Archivo de Zona Firmado zone.test.signed . . . . . . . . . . . . . . . . . . 87
Ap
endice B. Archivo de Configuraci
on de Servidor Autoritativo 91
Ap
endice C. Paquetes de Respuesta de DNS 93
C.1. Paquete de Respuesta sin DNSSEC . . . . . . . . . . . . . . . . . . . . . . . . 93
C.2. Paquete de Respuesta con DNSSEC . . . . . . . . . . . . . . . . . . . . . . . 93
Ap
endice D. Librera LDNS 95
Ap
endice E. Registros NSEC Generados por el Servidor Proxy 99
Ap
endice F. Archivos de Configuraci on para Servidor Recursivo 101
F.1. Archivo named.conf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
F.2. Archivo root.hint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Ap
endice G. Archivos de Configuraci on para Servidor Raz 103
G.1. Archivo named.conf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
G.2. Archivo root.zone.signed . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Vita 107
viii
Indice de cuadros
2.1. Estructura de un RR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2. Ejemplos de RR de tipos A, MX y NS . . . . . . . . . . . . . . . . . . . . . . 11
2.3. Estructura de un Paquete de DNS . . . . . . . . . . . . . . . . . . . . . . . . 12
2.4. Encabezado de un Paquete de DNS . . . . . . . . . . . . . . . . . . . . . . . . 12
2.5. Ejemplo de RR de tipo DNSKEY . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.6. Ejemplo de RR de tipo RRSIG . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.7. Ejemplo de RR de tipo NSEC . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.8. Ejemplo de RR de tipo DS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.9. Enumeracion de Zona . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.10. RDATA de registro NSEC3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.11. RDATA de registro NSEC3PARAM . . . . . . . . . . . . . . . . . . . . . . . 35
ix
Indice de figuras
x
Captulo 1
Introducci
on
Creada en 1984 por Paul Mockapetris, la especificacion del servicio de DNS (RFCs 882
y 883) describe al servicio como una base de datos distribuida que almacenara los nombres
de hosts (computadoras) y su correspondiente direccion IP, sustituyendo de esta manera a
los archivos de nombres de hosts (hosts.txt) locales a cada computadora y que contenan la
informacion de dicho mapeo [8].
1
(DoS), ya que el tama no de las peticiones es mucho menor comparado con el tama
no
de las respuestas que enva el servidor de DNS.
No existe forma de verificar que las entradas (relaci on nombre con direccion IP) son
legtimas ya que no existe un sistema de autenticaci
on para las mismas.
No existe autenticaci
on para servidores de DNS, por lo que un tercero podra hacerse
pasar por un servidor de DNS valido y redirigir las peticiones de los clientes a computa-
doras de su propiedad.
A raz de estos descubrimientos, los intentos de ataque contra este servicio se incremen-
taron y muchos lograron fructificar como el ataque ocurrido en 1997 realizado por Eugene
Kashpureff. En dicho ataque Kashpureff rediriga a los usuarios del sitio Web de Network
Solutions a un sitio Web de su autora [7]. En 1993, en una reunion de la IETF (Internet
Engineering Task Force) celebrada en Houston, se inicio el trabajo en una especificaci on del
servicio de DNS que involucrara a la seguridad como una caracterstica principal del mismo
[8]. Ataques como el de Kashpureff lograron acelerar el proceso de creacion de la especificaci
on
para que incluso ahora este disponible para servidores de DNS de naturaleza abierta como
BIND.
A pesar de las ventajas provistas en materia de seguridad por DNSSEC, se han detectado
diversas fallas en la especificaci
on original que han impedido la implementaci
on de DNSSEC
a gran escala [10]:
1. La especificaci
on actual permite conocer todos los registros (nombres de dominio) dentro
de una zona (conjunto de nombres) al proporcionar los registros anterior y posterior al
nombre solicitado cuando dicho nombre no existe en el servidor de DNS. Un individuo
2
podra enumerar todos los registros contenidos en el servidor de DNS (zone walking o
enumeracion de zona) y realizar ataques a ese servidor si es que contiene un registro del
nombre de dominio que quiera atacar.
4. No existe consenso en la manera que deben de proceder las aplicaciones que solicitan
informacion a servidores de DNS con DNSSEC implementado al recibir una respuesta
no valida.
La presente tesis analiza como con el uso de un servidor Proxy que implemente el pro-
cedimiento de firmado en lnea, apoyado de una tarjeta electronica equipada con su propio
procesador y que se utilice exclusivamente para firmar digitalmente la informaci on modifi-
cada por el Proxy, se puede impedir la enumeraci on de zona, eliminando al mismo tiempo
del servidor autoritativo la carga computacional que implica realizar el firmado en lnea, ya
que el Proxy le provee de ese servicio. Adem as se analiza el impacto en cuanto a peticiones
resueltas por segundo provocado por tener un servidor Proxy filtrando (y firmando) informa-
ci
on que va dirigida los clientes. Esto puede observarse en la figura 1.1, donde se explica el
funcionamiento general del servidor Proxy. En un primer punto el cliente enva su peticion
al servidor Proxy, la cual es redirigida al servidor autoritativo para que la responda como
cualquier peticion normal de DNS. El servidor autoritativo devuelve la respuesta al Proxy y
es en este momento cuando el Proxy act ua, modificando el paquete original si dicho paquete
contiene registros que permitan enumerar la zona. La computadora donde el Proxy se ejecu-
ta, tambien contiene la tarjeta electronica que permite al CPU de la computadora delegar
3
las operaciones de firmado digital al procesador de dicha tarjeta. Finalmente el paquete ya
firmado y modificado es devuelto al cliente, que asume la respuesta como proveniente de un
servidor autoritativo. Cabe aclarar que la comunicaci on entre el cliente, el Proxy y los servi-
dores autoritativos sera a traves del intercambio de datagramas (UDP), tal y como ocurre
con la mayora de las implementaciones de DNS que existen en la actualidad.
4
Captulo 2
Marco Te
orico
En esta secci
on se describe el sistema de nombres de dominio DNS para posteriormente
presentar la especificaci
on DNSSEC y los problemas asociados a la misma, haciendo enfasis
en el problema de enumeraci on de zona, finalmente se describen las soluciones existentes y en
desarrollo a dicho problema.
2.1.1. Historia
En los a
nos 70, la red que fue antesala de la Internet, ARPAnet gozo de un crecimiento
moderado que le permitio satisfacer las necesidades de los usuarios sin requerir grandes in-
versiones de esfuerzo para asegurar su escalabilidad.
5
versi
on del archivo hosts.txt para esta al da [1].
Una solucion escalable era demandada para los problemas que representaba el estar
moviendo constantemente un archivo que creca exponencialmente a medida de que ARPAnet
fue adoptando el modelo TCP/IP como esquema de direccionamiento. Problemas de consis-
tencia del archivo (diferencias entre versiones) y de colisi
on de nombres (nombres de do-
minio repetidos para diferentes direcciones IP) provocaron que las entidades de gobierno de
ARPAnet empezaran a trabajar por una solucion que permitiera una administracion local de
la informacion referente al mapeo de nombres con direcciones pero que al mismo tiempo las
actualizaciones fueran disponibles globalmente. En dichos trabajos iniciados por las autori-
dades, se describieron las cualidades que debera de tener el nuevo sistema, principalmente
la de estar basado en una estructura jerarquica para asegurar que los nombres de dominio
utilizados sean u
nicos [1].
En 1984, Paul Mockapetris del Information Sciences Institute de la USC dise no la ar-
quitectura del DNS como lo conocemos actualmente. En los documentos RFC 882 y 883,
el describe la estructura jerarquica del sistema de nombres, parte central del mismo. Pos-
teriormente se hicieron revisiones a la especificacion de DNS original y se incluyeron dichas
modificaciones en los documentos RFC 1034 y 1035, que con el transcurso del tiempo tam-
bien han sido modificados para incluir aspectos que no se tomaron en cuenta en las primeras
especificaciones como los mecanismos de actualizacion, seguridad, etc., por ejemplo el RFC
3425 que actualiza s olamente del RFC 1035 la secci on 6.4 que se refiere a las peticiones in-
versas de DNS (preguntas para obtener el nombre de dominio de la m aquina para la que ya
se conoce la direccion IP correspondiente) [1][14].
2.1.2. Descripci
on
Como se mencion o anteriormente, el sistema de nombres de dominio DNS es una base
de datos distribuida donde se almacena la informaci on de los equipos conectados a la red que
cuentan con un nombre de dominio propio para que puedan ser identificados con facilidad.
Se ha utilizado a lo largo de este escrito la palabra servicio para referirse al DNS, debido
a que este sistema funciona a traves de un esquema cliente - servidor, donde la computa-
dora que tenga asignado el rol de servidor, ejecutar a un programa denominado servidor de
nombres que sera el encargado de proporcionar a la computadora que tiene el rol de cliente,
la relaci
on direccion IP - nombre de dominio cuando la computadora cliente le enve una
peticion a traves de programas denominados resolvers. Los resolvers tambien se encargan
de recibir las respuestas del servidor y hacerlas disponibles para las aplicaciones locales de
los clientes como navegadores de Web o programas que reciban y enven correo electronico [1].
6
cada registro se localiza la direccion IP con su correspondiente nombre de dominio [9].
Los registros de DNS se encuentran organizados de manera jer arquica, de manera similar
a la estructura de datos conocida como arbol binario de b usqueda, pero los nodos existentes
en dicho arbol pueden contar con m as de 2 ramificaciones. Cada nodo cuenta con una etique-
ta de texto que identifica el nodo con respecto a su nodo padre, mientras que el nodo raz
(root) tiene el caracter . (punto) como etiqueta de texto. Cada nodo representa una particion
del conjunto de dominios y puede ser dividido en subdominios especficos para ese dominio [1].
7
solvers) como componentes principales del servicio de DNS, ahora se profundizara en los tipos
de servidores nombres, tipos de registros de nombres de dominio, estructura de las peticiones
de informacion (preguntas y respuestas) y las agrupaciones de la informacion para facilitar
la administracion de la misma (zonas). Tambien se presenta informaci
on sobre los problemas
de seguridad que aquejan al servicio en su especificaci
on original.
En la figura 2.2 [1], se observa un ejemplo de una peticion realizada por un cliente que
desea conocer la direccion IP del dominio girigiri.gbrmpa.gov.au (etapa 1). Dicha peticion
es recibida por el servidor recursivo que al no contar con la informaci on pregunta al servidor
de DNS raz (etapa 2) por la direccion IP del dominio solicitado por el cliente. El servidor
raz le responde (etapa 3) con la direccion IP del servidor que ubicado en el segundo nivel
de la jerarqua que tiene autoridad sobre el dominio au. Al recibir esa respuesta, el servidor
recursivo repite el proceso de preguntar a un servidor autoritativo, en este caso au por la
direccion IP del dominio solicitado (etapa 4). El servidor autoritativo da la mejor respues-
ta al proporcionar la direccion IP del servidor que administra el dominio gov ubicado en el
8
tercer nivel de la jerarqua (etapa 5). En las etapas posteriores se sigue el mismo esquema
de peticiones y respuestas utilizado con los servidores autoritativos, hasta que se llega con
el servidor que administra el dominio gbrmpa y que tiene autoridad para dar informaci on de
los dominios ubicados en el nivel inmediato inferior, en este caso el dominio girigiri. Final-
mente la informaci on es devuelta al servidor recursivo quien a su vez devuelve el resultado
obtenido al cliente. Como se observa, en una peticion a un servidor recursivo, se combinan
los procesos recursivo e iterativo.
9
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
NAME
TYPE
CLASS
TTL
RDLENGTH
RDATA
En el cuadro 2.1 [15], se pueden apreciar los campos que componen la estructura de un
RR. Las longitudes de dichos campos se miden en bits, que es la unidad de datos utilizada
para expresar el tama no de los campos de los RR que van includos en los paquetes de datos
que se envan y se reciben para el servicio de DNS. Dicha estructura se describe a continuaci
on
[9][15]:
NAME: Tambien conocido como Owner Name, este es el nombre del dominio al que
pertenece el RR.
TYPE: Campo de 16 bits que denota el tipo de RR. Los tipos de registros se refieren
los recursos y servicios asociados a un nombre de dominio. Los tipos de registro que
existen desde la primera especificaci
on de DNS son los siguientes y son solicitados con
mayor frecuencia por los clientes son los siguientes:
10
NAME TTL CLASS TYPE RDATA
itesm.mx. 3600 IN A 200.34.200.229
google.com. 10800 IN MX 10 smtp1.google.com.
yahoo.com. 172800 IN NS ns1.yahoo.com.
TTL: Entero de 32 bits con signo que especifica el intervalo de tiempo que el RR
sera almacenado en el cache del servidor antes de que la informaci on tenga que ser
consultada de nuevo. La utilidad de este campo radica en que los servidores de nombres
pueden almacenar en el cache informaci on de los nombres de dominio m as solicitados
y as atender de una manera m as rapida a los clientes ya que no se ejecutara ning
un
proceso iterativo y recursivo porque la informacion esta disponible.
RDLENGTH: Entero de 16 bits que indica la longitud del campo RDATA que contiene
la informaci
on relativa al nombre de dominio. Por lo general los resolvers no desplie-
gan este campo al presentar la informaci
on obtenida del servidor sino que se salta de
inmediato a presentar el campo RDATA.
RDATA: Campo que contiene una cadena de caracteres de longitud variable que des-
cribe al recurso. Los datos de este campo se formatean de diferente manera de acuerdo
al tipo y clase del RR. Para registros A y AAAA, aqu se incluira la direccion IP co-
rrespondiente al nombre de dominio ubicado en el campo de Owner Name.
11
En la especificacion original de DNS realizada por Paul Mockapetris, se definio tam-
bien la estructura de los mensajes (paquetes de informacion) que seran intercambiados entre
clientes y servidores. Se especificaron los campos que contendran los paquetes de informaci
on
y el tama no de los mismos se fijo a un m aximo de 512 bytes, que es el tamano m aximo per-
mitido para un datagrama (denominacion del paquete de informaci on del protocolo UDP) [15].
HEADER
QUESTION
ANSWER
AUTHORITY
ADDITIONAL
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
ID
QD OPCODE AA TC RD RA Z RCODE
QDCOUNT
ANCOUNT
NSCOUNT
ARCOUNT
12
Los campos de la cabecera se definen a continuaci
on [15]:
ID: Un identificador de 16 bits asignado por el programa que creo la peticion. El servidor
que genere la respuesta a esa peticion anadira el mismo valor de ID al entregar el RR
al cliente, con el fin de que el cliente pueda identificar la respuesta correspondiente a
cada pregunta que hizo al servidor.
QR: Este campo cuenta con un bit que especifica si el paquete corresponde a una
pregunta (valor del bit es 0) o de una respuesta (valor del bit es 1).
AA: Campo de un bit que indica si el servidor que responde tiene autoridad sobre el
dominio por el que se pregunto (valor del bit es 1 para servidores autoritativos).
TC: Campo de un bit que indica si el mensaje fue truncado debido a que sobrepasa el
tama
no permitido en unidades de datos para ser transmitido en la red (valor del bit es
1).
RD: Campo de un bit, que encendido indica que se desea que el servidor que recibe
la peticion realice un proceso recursivo de b usqueda a otros servidores para obtener la
informaci on solicitada por el cliente. El cliente se encarga de colocar el valor de este bit
en el paquete de pregunta y dicho valor es copiado en el paquete de respuesta.
Z: Campo reservado para uso futuro. Tiene el valor de 0 para los dos tipos de paquetes.
RCODE: Campo de 4 bits similar al campo OPCODE, pero este se utiliza para denotar
el tipo de respuesta recibida. Para esta investigacion el valor del campo sera de 0 para
denotar que no hubo error en la respuesta y la busqueda fue exitosa, o de 3 para denotar
que no hubo error en la respuesta pero no se obtuvieron resultados en la b usqueda.
QDCOUNT: Campo de 16 bits que contiene un entero sin signo que especifica el
n
umero de entradas (RRs) en la secci
on de preguntas.
ANCOUNT: Campo de 16 bits que contiene un entero sin signo que especifica el
n
umero de entradas (RRs) en la secci
on de respuestas.
NSCOUNT: Campo de 16 bits que contiene un entero sin signo que especifica el
n
umero de entradas (RRs) en la secci
on autoritativa.
13
ARCOUNT: Campo de 16 bits que contiene un entero sin signo que especifica el
n
umero de entradas (RRs) en la secci
on adicional.
2.1.6. Zonas
En la terminologa de DNS, existen las Zonas, que representan un conjunto de nombres
de dominio administrados por un servidor de DNS que tiene autoridad sobre ellos. La ventaja
de agrupar grupos de dominios en zonas radica en que el conjunto de dominios puede ser
manejado como una sola unidad que puede ser delegada a una organizacion para su mejor ad-
ministracion, por ejemplo, todos los nombres de dominio que esten ubicados debajo del nodo
itesm.mx. seran administrados por el Instituto Tecnologico de Monterrey. Dichos dominios
pueden ser mty.itesm.mx., chs.itesm.mx., etc. Para este caso, la zona sera denominada
como itesm.mx. [1].
La zona contiene los nombres de los dominios contenidos dentro del dominio utilizado
para nombrar a la zona. Inclusive si los nombres de dominio no han sido asignados a un RR,
estos nombres son agregados a la zona para tenerlos reservados para uso futuro [1]. La zona
dentro del servidor de DNS se presenta en un archivo de texto que contiene todos los RR que
la zona contiene.
En la figura 2.3, puede observarse como funciona un ataque de hombre en medio para
el caso del servicio de DNS (otros servicios tambien pueden ser afectados si no existe auten-
ticaci
on entre clientes y servidores). El atacante se hace pasar por el servidor de DNS y el
14
Figura 2.3: Ataque de Hombre en Medio
En la especificaci
on original de DNS no era posible constatar la veracidad de la informa-
ci
on intercambiada, por lo que la IETF plante o extensiones de seguridad al servicio original
que sirvieran para asegurar la veracidad de la informaci on que se recibe de los servidores y
clientes de DNS.
15
2.2.1. Conceptos B
asicos de Criptografa de Llave P
ublica
A la criptografa de llave publica se le conoce como criptografa asimetrica, donde los
individuos que deseen cifrar informaci on cuentan con dos llaves, una privada y la otra publica,
a diferencia del cifrado simetrico, donde se utiliza la misma llave para cifrar y descifrar. Con
el cifrado asimetrico, el individuo conserva su llave privada como secreta mientras que la llave
publica la pone a disposicion de los individuos que quieran enviarle mensajes cifrados a el. La
llave publica es entonces utilizada para cifrar mensajes que solo el poseedor de la llave privada
correspondiente podra descifrar. Esto puede observarse en la figura 2.4 [5], donde suponiendo
que Jane quiere enviarle un mensaje cifrado a John, har a uso de la llave p
ublica de John para
cifrar el mensaje antes de transmitirlo, dicho mensaje s olo podra ser descifrado por la llave
privada de John en cuanto este lo reciba [5].
16
ran llaves simetricas por el simple hecho de generar dos llaves en lugar de una sola. Al final, las
llaves son valores numericos generadas por los algoritmos, donde dependiendo de su longitud,
pueden ser m as faciles o m
as difciles de adivinar por parte de un individuo ajeno a estas. Por
lo general los algoritmos manejan tama nos de 1024 bits para las llaves que generan y si se
cuenta con la capacidad de procesamiento adecuada, este tama no debera de incrementarse
para dificultar los ataques contra las llaves.
1. Diffie-Hellman
2. ElGamal
4. RSA (Iniciales de los apellidos de los creadores de este algoritmo: Ron Rivest, Adi
Shamir y Leonard Adleman)
1. Hacer pasar el texto del mensaje por la funcion de hash para producir una cadena de
mnimo 128 bits que sirva como resumen de la informaci
on contenida en el mensaje. La
funcion de hash genera una cadena de bits que resumen la informaci
on contenida. Los
algoritmos a utilizar para generar dicho resumen pueden ser MD2, MD4, MD5, que son
de 128 bits o el algoritmo SHA-1 que es de 160 bits. No es posible recuperar el texto
original a partir del resumen.
17
de resumen. La cadena resultante es anexada al mensaje. Dicha cadena es la firma del
autor del mensaje.
4. Si la cadena de la funcion de hash que se obtuvo del texto del mensaje coincide en su
totalidad con la cadena del hash que se obtuvo de la firma, se confirma la identidad del
remitente. Si dichas cadenas no son iguales el mensaje puede considerarse como alterado
y a su vez como ap ocrifo.
Este esquema de firmado de mensajes, es utilizado para firmar los registros de DNS.
Dicha firma es devuelta en un RR de tipo RRSIG. La firma va includa en la secci on de
RDATA. Los demas elementos como el Owner Name, TTL, y RDATA adicionales se incluyen
en ese registro tambien para identificar cual es el texto que se esta firmando.
2.2.2. Descripci
on de DNSSEC
Las extensiones de seguridad al servicio de DNS (DNSSEC) a naden elementos impor-
tantes de la seguridad como lo son la autenticaci
on de las fuentes de la informaci
on y la inte-
gridad de los datos provistos por dichas fuentes. Dichas extensiones de seguridad ya haban
sido descritas en el RFC 2035 pero por la dificultad de escalar esas extensiones al servicio de
18
Figura 2.6: Verificacion de Mensajes Firmados
DNS existente en Internet, tuvieron que hacerse modificaciones al documento original para
que dicha escalabilidad pudiera lograrse, dichas modificaciones, se describen a detalle en los
documentos RFC 4033, RFC 4034 y RFC 4035 [2].
Cadena de Autenticaci on: Conjunto de RRs (RRsets), es decir, RRs del mismo tipo
que aparecen consecutivamente en un mensaje de DNS, en este caso de tipo DNSKEY y
DS, estos RRsets contienen tanto llaves como informaci on firmada respectivamente. En
esta cadena de autenticacion, las llaves p
ublicas contenidas en los RR de tipo DNSKEY
se utilizan para validar los registros DS (Delegation Signer ) que contienen resulta-
dos de funciones hash aplicadas sobre otros RR de tipo DNSKEY. La verificacion con
llaves p
ublicas pertenecientes a unos nombres de dominio de los registros que contienen
res
umenes de llaves p ublicas de nombres de dominio en niveles inferiores va creando
la cadena de autenticacion con lo que se obtiene certeza de que todos los nombres de
dominio contienen las llaves correctas para ser firmados con estas.
Llave para Firmado de Llaves - KSK: Llave privada utilizada para firmar las llaves
de autenticaci
on para una zona dada. Esta llave es utilizada para firmar las llaves de
19
firmado de zonas (ZSK). Tanto la KSK como ZSK pueden tener el mismo valor ya que
DNSSEC no distingue entre tipos de llave de autenticacion, sin embargo, el periodo de
validez de la KSK puede diferir del de la ZSK, siendo el de la KSK por lo regular mas
amplio.
Zona Firmada: Una zona cuyos RRsets estan firmados y contienen registros de tipo
DNSKEY, RRSIG, NSEC y DS correctamente construidos.
Inclusi
on de 4 nuevos tipos de registros, que son el registro RRSIG (Resource Record
Signature), DNSKEY (DNS Public Key), DS (Delegation Signer ) y NSEC (Next Secure
Domain).
Debido a que se incrementa el tama no de los datos a ser devueltos al cliente, el tama
no
del paquete de respuesta de DNS se amplio de los 512 bytes originales a los 4096 bytes
para poder acompa nar los registros de sus correspondientes firmas.
Con la ayuda de los mecanismos provistos por DNSSEC, se pueden asociar firmas di-
gitales a los RRsets para que los resolvers puedan validar la identidad del servidor que los
devuelve como respuesta a una peticion. Las firmas digitales son almacenadas en el regis-
tro RRSIG que acompa nan a cada RRset que se firma. Puede enviarse m as de un RRSIG
para cada RRset, en estos casos los RRSIG contienen firmas resultantes de la aplicaci on de
diferentes algoritmos matem aticos. Cabe resaltar que la llave ZSK utilizada para firmar la
zona, esta asociada a esa zona u
nicamente, no a los servidores autoritativos que administran
la zona, debido a que estos servidores pueden tener m as zonas que administrar. Las llaves
KSK y ZSK deben permanecer en su condici on de llaves privadas en lugares seguros y de
preferencia estos lugares no deben de poderse acceder desde la red [2].
20
La figura 2.7, se muestran los dos tipos de almacenamiento de llaves privadas recomenda-
dos por el RFC 4461. El tipo de almacenamiento optimo es que el se realiza en servidores que
no tienen acceso a Internet, por consiguiente el riesgo de que la KSK y la ZSK sean robadas
a traves de dicha red desaparece. Dicho modo de almacenamiento tiene como desventaja que
todas las actualizaciones a las llaves privadas y por consiguiente a los archivos de zona, deben
de ser realizadas directamente sobre la computadora que los contenga. En el caso de que se
desee contar con actualizacion din amica de las llaves, el RFC 4461 recomienda habilitar el
acceso a Internet para el servidor que contiene las llaves, permitiendose la conexi on desde el
servidor a la red pero no viceversa. Con esta configuraci on (ver figura 2.7), se logran actua-
lizar los archivos de zona que esten dispersos en la red y se protege a los archivos de llaves
privadas del acceso de terceros a la carpeta donde se almacenan, ya que su actualizacion en
el servidor principal sigue siendo manual. Para que el segundo metodo sea exitoso se debe
de contar con mecanismos de seguridad que encripten el contenido de las llaves para que un
tercero no pueda apoderarse de ellas mientras son transmitidas [12].
21
El registro DNSKEY es hasta la fecha, el u nico medio valido para distribuir llaves p
ubli-
cas a los clientes que deseen verificar la autenticidad de la informaci on del servidor. Estos
clientes pueden asegurar que las llaves que usan son las correctas al crear cadenas de auten-
ticaci
on con las llaves que les fueron proporcionadas y el resumen que se enva en el registro
DS [2].
Para proveer al cliente de una negacion de existencia de registros que pueda ser validada
por este, se utiliza el registro NSEC, que igualmente va firmado (acompa nado de un RRSIG)
y que devuelve como respuesta informaci on referente al espacio que debera de ocupar en la
zona el dominio preguntado, es decir, proporciona informaci on del sucesor y del predecesor de
dicho dominio para asegurar al cliente que el dominio por el que se pregunto no existe. Dicho
registro requiere que los nombres de dominio esten ordenados de acuerdo a forma canonica [2].
Cabe aclarar que a pesar de estas modificaciones, la estructura general del paquete de
DNSSEC, se mantiene igual a la que se muestra en el cuadro 2.3 que corresponde a la estruc-
tura original de paquetes de DNS. Los paquetes de DNSSEC siguen incluyen un campo de
encabezado, el campo de pregunta, el campo de respuesta, el campo autoritativo y el campo
adicional. Los cambios mas radicales se dan en la estructura de los registros, especficamente
en la secci
on de RDATA (ver cuadro 2.1) de los mismos, cuyo tama no debio de ser incremen-
tado para poder acomodar la informaci on que se le proporciona al cliente para su validacion.
En la figura 2.8 puede observarse como se envan los registros de datos en DNSSEC.
A pesar de que el formato se mantiene igual al original de DNS, si el usuario lo solicita, un
registro RRSIG que contiene la firma digital de toda la informaci
on contenida en el registro de
datos (Owner Name, tipo, clase, TTL y RDATA) es colocado por el servidor inmediatamente
22
despues del registro de datos antes mencionado. La inclusion de esta firma es la principal
diferencia entre los paquetes de DNS y los de DNSSEC.
Como peculiaridad, este registro es independiente del campo de clase y no tiene requeri-
mientos especiales para valores de TTL. El registro esta formado de un campo de banderas de
longitud de 2 octetos (2 bytes), 1 octeto para el campo de protocolo, 1 octeto para el campo
donde se indica el algoritmo matem atico utilizado para generar la llave y finalmente el campo
donde va incluida la llave p
ublica en s [4].
La descripci
on de los campos que componen a este registro se incluye a continuaci
on [4]:
23
siderado como invalido.
Es obligatorio firmar todos los nombres autoritativos de una zona, que generalmente
estan escritos en su forma canonica. El valor del campo de clase para este registro es el tipo
de registro que se esta firmando. Igualmente, el valor del campo de TTL debe ser igual al
valor de TTL original del registro firmado [4].
24
El registro RRSIG esta conformado por 8 campos. El primer campo consta de dos octe-
tos que indican el tipo de registro que se esta firmando, le sigue un campo de 1 octeto que
indica el algoritmo matem atico utilizado para generar la firma, a este campo le sigue uno
de 1 octeto donde se indica el numero de etiquetas (nodos del arbol de dominios) que tiene
el Owner Name del registro RRSIG. El siguiente campo abarca 4 octetos, ah se incluye el
valor de TTL que debe de coincidir con el del registro que se esta firmando. Los dos cam-
pos siguientes incluyen la fecha de expiracion y de incepci on, de 4 octetos cada una, con
dichas fechas los resolvers pueden determinar la validez de las llaves [4]. Finalmente los ulti-
mos 3 campos lo conforman el identificador de la llave, el nombre del que firma y la firma en s.
El campo del tipo de registro cubierto identifica el RRTYPE del registro que se esta fir-
mando.
El campo del algoritmo contiene un valor numerico con el que se identifica al algoritmo
matematico utilizado para crear la firma. Dicho algoritmo puede ser de tipo DSA/SHA-
1, Curva Elptica, RSA/SHA-1, etc.
Se incluye el campo del TTL original del RR firmado con el fin de que el RR firmado
pueda autenticarse aunque el servidor decremente el valor de TTL del registro original.
El campo del identificador de llave tiene un valor numerico que relaciona al RRSIG con
su DNSKEY correspondiente. En casos que existan muchas firmas y muchas llaves, el
uso de este campo es vital para poder utilizar la llave adecuada con cada firma.
El campo del nombre del que firma debe de coincidir con el Owner Name del registro
DNSKEY. Debe de contener el nombre de la zona que cubre el conjunto de registros
firmados.
El campo de la firma contiene el valor obtenido con un algoritmo matem atico, siguiendo
el esquema de firmado de la figura 2.5. Los datos que se firman incluyen el Owner Name,
la clase, el tipo de registro cubierto y demas elementos del RDATA del registro RRSIG.
25
parte de RDATA como primer elemento esta el tipo de registro firmado, un NSEC, el numero
5 que le sigue indica que el algoritmo matem atico utilizado es RSA/SHA1. Posteriormente
se indica que el n umero de etiquetas a firmar es de 1. El TTL que se incluye es igual al
TTL original del registro que se firma. En los siguientes 2 campos se encuentran las fechas
de expiracion e incepci
on respectivamente en formato YYYY:MM:DD:HH:mm:SS (a no, mes,
da, hora, minuto y segundo). Posteriormente a este campo va el campo donde se identifica
al que esta firmando el RR, en este caso, se incluye el Owner Name de la zona. Finalmente
se incluye la firma, en formato de base 64.
Al igual que el registro DNSKEY, el registro NSEC es independiente del valor que tenga
el campo de clase. El valor del campo TTL debe de coincidir con el valor de TTL mnimo
declarado para el registro SOA. La estructura del RDATA de este registro consta de s olo 2
campos, el campo del siguiente Owner Name valido y el campo donde se indica de que tipo
o tipos de registros cubre el nombre de dominio contenido en el campo que le precede [4].
El campo del siguiente dominio contiene el siguiente Owner Name valido en su forma
canonica. El u
ltimo NSEC tendr a en este campo el Owner Name de la zona, identico a como
aparece en el SOA, para indicar que se ha llegado al final de la enumeraci
on de los nombres de
la zona. En el campo de tipos de registros se incluyen todos los RRTYPE que esten relaciona-
dos directamente con el nombre de dominio del campo del siguiente dominio. En este campo
se incluyen los RRTYPE en forma de bloques que contienen los 8 bits menos significativos
de los 16 bits que componen un espacio de RRTYPE, tal como se representan los demas RR.
Los RRTYPE se ordenan de forma ascendente de acuerdo al valor numerico del octeto que
representa a cada RRTYPE [4].
26
En el cuadro 2.7 se observa un registro NSEC donde se puede notar que el campo del
siguiente dominio valido es el nombre de dominio c.test. y que corresponde a registros de
tipo A, RRSIG y el propio NSEC. Se observa que como el Owner Name incluye el nombre de
dominio a.test., que es el predecesor directo al nombre de dominio solicitado por el usuario
y que se le devuelve para comprobarle que no existe ning
un registro entre a.test. y c.test..
Es decir, si un usuario preguntara por el dominio b.test., este RR sera devuelto.
2.2.6. Registro DS
El registro DS esta relacionado directamente con un registro DNSKEY al participar en
conjunto con este tipo de registro en el proceso de autenticacion. Dentro del registro DS se
almacena un identificador de llave, el numero de algoritmo matem atico utilizado y un re-
sumen de la llave contenida en el registro DNSKEY al que se hace referencia. Al autenticar
un registro DS, el resolver puede autenticar tambien el registro DNSKEY al que el registro
DS se refiere [4].
El campo de tipo de resumen, se indica el n umero del algoritmo matem atico utilizado
para obtener el resumen de la llave que se incluye en el campo siguiente.
27
El registro DS incluye un resumen de la llave a la que se refiere y que esta contenida
en un registro DNSKEY. El resumen de dicha llave se obtiene concatenando la forma
canonica del Owner Name del registro DNSKEY con el RDATA del mismo registro.
Se aplica el algoritmo matematico para resumir dicha concatenacion y esta a su vez es
a
nadida en el campo de resumen. Generalmente el algoritmo utilizado es SHA-1 que
produce un resumen de longitud de 20 caracteres.
La peculiaridad de este registro radica en que es la base para generar la cadena de au-
tenticaci
on que permite autenticar todos los RR que esten firmados en una zona, por ello es
importante que la llave referida en el registro DS sea una llave de zona. Tambien en el registro
DNSKEY referido por el registro DS debe indicarse que la llave es de zona al prender el bit 7,
de lo contrario dicha llave no sera utilizada en el proceso de validaci
on de registros firmados [4].
En el cuadro 2.8 se muestra une ejemplo de registro DS. Como Owner Name se tiene el
nombre de dominio que identifica a la zona, as mismo, los campos del RDATA se refieren a
un registro DNSKEY que corresponde a esa misma zona y que contiene la llave de zona.
El bit de AD es encendido por los servidores de nombres s olo cuando han comproba-
do que las firmas de todos los RR contenidos en la respuesta son validas. Tambien se
verifica que las pruebas de no existencia en los registros NSEC sean validas para poder
encender dicho bit.
28
Con respecto al bit de CD, puede ser utilizado por los resolvers para acelerar el tiempo
de respuesta cuando hace peticiones a un servidor recursivo y este u ltimo ya no valida las
respuestas obtenidas de los servidores autoritativos, pero el resolver debe de tener los medios
para validar dicha informacion, si no se estara exponiendo a recibir respuestas falsas que ni
siquiera cuentan con una validacion previa por el servidor autoritativo [3].
Cabe recalcar, que el resolver no debe de confiar abiertamente en la respuesta del servi-
dor que provenga con el bit AD encendido, el resolver debe comprobar por el mismo la validez
de la informacion utilizando sus propios mecanismos de autenticaci on. El bit de AD indica
solamente que se ha comprobado la cadena de confianza cuando un servidor recursivo va
solicitando informacion a los servidores autoritativos, lo que significa que dicho servidor ha
comprobado el origen de la informaci on, pero el resolver tambien debe de hacerlo para com-
probar que el paquete no ha sido falsificado [3].
En los paquetes de pregunta, existe el bit DO que el usuario utiliza para solicitar una
respuesta autenticada (registros acompa nados de firmas digitales). Si dicho bit no se enciende
por el resolver que formulo la pregunta, el servidor de nombres debera retirar del paquete de
respuesta todos los registros autenticados que no tengan que ver con la peticion [3].
29
Figura 2.9: Respuesta de DNS con bit de AD
1. test.
2. b.test.
3. lmlmlm.b.test.
4. Z.b.test.
5. zaBC.b.test.
6. z.test.
2.3. Enumeraci
on de Zona
Como se mencion o con anterioridad, la especificaci
on de DNSSEC permite a cualquier
usuario de Internet conocer todos los nombres de dominio de una zona siguiendo la cadena
30
formada por registros NSEC que contienen al predecesor y al sucesor. A este problema se le
denomina enumeraci on de zona o Zone Walking. A continuaci on se presenta un ejemplo de
como podra realizarse la enumeracion de zona al preguntar por registros no existentes que
har
a que el servidor de nombres con DNSSEC implementado devuelva un registro NSEC para
demostrar que no existe el registro solicitado (ver cuadro 2.9):
1. Supongamos que la zona tiene como nombre el dominio test. y dentro de esa zona
se crean los dominios a.test., c.test., e.test. y ns.test., asignados cada uno a
diferente tipo de RR.
2. Un cliente que desconoce dichos registros de zona, pregunta por el registro b.test.
y por consiguiente recibe un registro NSEC donde se lista el dominio valido anterior
(predecesor) y el siguiente dominio valido (sucesor). En dicho registro NSEC el cliente
recibira el nombre de dominio a.test. como el predecesor y el dominio c.test. como
el sucesor.
3. El cliente ya conoce dos dominios validos que de acuerdo al orden canonico iran coloca-
dos uno inmediatamente despues del otro. Preguntara entonces por un dominio ubica-
do canonicamente despues del dominio valido c.test. para obtener un nuevo registro
NSEC en caso de que el dominio preguntado no exista.
4. Si el cliente pregunta por el dominio d.test., el cliente recibira como siguiente do-
minio valido el nombre de dominio e.test.. Si genera entonces una peticion por un
nombre de dominio ubicado entre e.test. y ns.test., conocer a a este u
ltimo regis-
tro. Finalmente si pregunta por un registro que se coloque despues de ns.test., se le
devolvera como siguiente dominio valido el nombre de zona test., por lo que puede
concluir que habra llegado al final de la zona recorriendo efectivamente el camino que
incluye todos los registros ah contenidos a partir del dominio a.test..
5. El cliente entonces pregunta por un dominio que se encuentre entre el nombre de zona
y el primer dominio valido que obtuvo, el dominio a.test.. Al recibir este dominio
como el siguiente dominio valido el cliente concluye que ya ha recorrido toda la zona
completando la enumeraci on.
Pregunta Respuesta
b.test. a.test. 3600 IN NSEC c.test. A RRSIG NSEC
d.test. c.test. 3600 IN NSEC e.test. A RRSIG NSEC
f.test. e.test. 3600 IN NSEC ns.test. AAAA RRSIG NSEC
o.test. ns.test. 3600 IN NSEC test. A RRSIG NSEC
0.test test. 3600 IN NSEC a.test. NS SOA RRSIG NSEC DNSKEY
31
El servicio de DNS fue concebido con un servicio donde la informaci on estara disponible
para todo p ublico, por lo que el problema de enumeraci on de zona no fue considerado un
problema como tal. Sin embargo es necesario considerar que dicha enumeraci on de zonas
puede ser un precedente de un ataque contra la integridad o disponibilidad del servicio de
DNS, ya que se le permite al probable atacante identificar su objetivo. En el contorno de
polticas de seguridad, tambien existe discrepancia entre los diferentes Network Information
Centers que administran los dominios de pases sobre si la divulgacion de esta informaci on
viola dichas polticas. Existe una diferencia cualitativa entre divulgar informacion utilizando
mecanismos de pregunta y respuesta y divulgarla como una compilaci on. Dicha diferencia ha
llevado a frenar la implementaci on de DNSSEC pues las polticas de seguridad no permiten
la divulgacion de los nombres de la zona en forma de compilaci on [16].
La posicion de DENIC con respecto a la divulgacion de los archivos de zona esta disponible
en la siguiente URL:
http://www.denic.de/en/faqs/allgemeine faqs/index.html
Nominet, el NIC que administra el dominio uk. correspondiente al Reino Unido, tambien
ha fijado una postura al respecto en la siguiente URL:
http://ops.ietf.org/lists/namedroppers/namedroppers.2004/msg00687.html
32
compilaci
on viola las normas establecidas por la Union Europea acerca de derechos sobre la
informaci
on.
El registro NSEC3 al igual que el registro NSEC, lista los tipos de registros que corres-
ponden al Owner Name del paquete. La diferencia con el registro NSEC radica en que NSEC3
incluye un resumen producto de una funcion de hash del nombre dominio que representa al
siguiente dominio valido, en lugar de que dicho nombre vaya escrito en texto plano con en
NSEC. El conjunto de registros NSEC3 una zona permite formar la cadena de Owner Names
resumidos de toda la zona. Cabe recalcar que el ordenamiento se realiza de acuerdo al texto
producido por la funcion de resumen [13].
33
El Owner Name en un registro NSEC3 va escrito en forma de resumen, en base 32. Antes
de resumir dicho campo, se le agrega a el nombre de zona. El valor para este tipo de registro
es NN, tambien es independiente del campo de clase, pero dicha clase debe ser igual a la del
Owner Name que va resumido. El valor del campo de TTL debe ser el mismo al valor que
tenga el registro SOA en este mismo campo [13].
El campo del algoritmo de resumen identifica al algoritmo matem atico utilizado para
generar el hash de la informaci
on que se va a presentar como resumida.
El campo de longitud del campo Salt define la longitud del campo referido que puede
oscilar entre 1 y 255 octetos.
El campo Salt es utilizado para agregarlo al Owner Name antes de aplicar la funcion
de hash para contrarrestar ataques de diccionario.
El campo de longitud de hash indica la longitud del campo del siguiente dominio (que
va resumido por la funcion de hash). Su valor oscila entre 1 y 255, refiriendose a la
longitud del campo del siguiente dominio valido.
El campo del siguiente dominio valido contiene el resumen del Owner Name ordenado
de acuerdo a su valor de hash. El valor va en formato binario. Dicho campo contiene el
valor de hash que sigue inmediatamente despues del Owner Name del registro NSEC3
dado. Si se trata del u
ltimo registro NSEC3 en la zona el valor corresponde al nombre de
zona. A diferencia del campo de Owner Name a este registro no se le agrega el nombre
de zona antes de calcular el resumen.
34
Hash Alg. Flags Iterations
Salt Length Salt
Hash Length Next Hashed Owner Name
Type Bit Maps
autoritativos que pueden utilizarlo para generar las respuestas de no existencia. Si dicho re-
gistro esta presente en un servidor ubicado en el nodo mas alto de la zona con el campo de
banderas en 0, entonces los registros de la zona deberan de contar un registro NSEC3 que
utilice esos parametros [13].
En el cuadro 2.11 [13], se observa la estructura del registro NSEC3PARAM, donde con-
tiene valores para par ametros de registros NSEC3. Dichos valores son los mismos a los ya
mencionados para el registro NSEC3. Actualmente la empresa Verisign termin o de de aplicar
pruebas piloto al prototipo de NSEC3 y la especificaci on fue liberada a principios de este
a
no. En el piloto, se manejan registros NSEC3 firmados para los dominios de alto nivel como
.com y .net.
35
dominio por el que se pregunto. El registro NSEC generado entonces contendr a el sucesor y
predecesor directo del dominio que se ha catalogado como no existente, sin incluir los domi-
nios validos que lo precedan y sucedan [18].
Obtenci
on del predecesor inmediato a un nombre de dominio:
Obtenci
on del sucesor inmediato a un nombre de dominio:
36
1. Si N es dos o mas octetos mas corto que la longitud m axima de un nombre de
dominio, agregar a la izquierda de N una etiqueta que contenga un u nico octeto
con el valor ASCII mas pequeno posible. Si esta condici
on no se cumple, se debe
de proceder al paso 2.
2. Si N es un octeto m as corto que la longitud maxima de un nombre de dominio
y la etiqueta menos significativa es uno o dos octetos m as corta que la longitud
maxima de una etiqueta, entonces se debe de agregar a la derecha de la etiqueta
un octeto con el valor ASCII m as peque
no posible. Si esta condici
on no se cumple
se debe de proceder al siguiente paso.
3. Se debe de incrementar el valor del octeto en la posicion menos significativa de
la etiqueta menos significativa cuyo valor sea menor al valor ASCII m as grande
posible, evitando obtener valores que correspondan a letras may usculas. Posterior-
mente se deben de remover los octetos a la izquierda del octeto que se acaba de
incrementar. Si todos los octetos de la etiqueta menos significativa tienen el valor
ASCII m as grande posible se debe de proceder al paso 4.
4. Se debe de remover la etiqueta menos significativa, y si N es ahora igual al nom-
bre de zona se termina el proceso, si no se procede a ir al paso 2 y repetir el mismo.
En caso de que los servidores de DNS no soporten el rango de caracteres ASCII, se puede
utilizar el rango LDH (Letter Digit Hyphen) que involucra el uso de caracteres alfanumericos
y del guion como u nicos caracteres validos, siendo el caracter - el del valor m
as peque
no y
el caracter z el del valor m
as grande [17].
Predecesor:
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz.
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz.
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz.
azzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz.
test.
Sucesor:
-.b.test.
El exito de este proceso se basa en la eficiencia de las funciones que obtiene el predecesor
y el sucesor del dominio no existente. Entre m as pequeno sea el rango de dominios cubiertos,
el n
umero de intentos necesarios para enumerar la zona crecer a hasta requerir un numero de
intentos igual al n umero de nombres posibles lo que disuadir a a los individuos que intentan
realizar dicho proceso.
37
Captulo 3
Definici
on del Problema
Los servidores requieren tener acceso a las llaves privadas para poder firmar los registros
generados. Si se puede acceder a esos servidores desde Internet, se deben de incrementar
las medidas de seguridad para evitar que dichas llaves puedan ser obtenidas por terceros.
Las funciones para la obtencion del sucesor y del predecesor (ver secci on 2.4.2), deno-
minadas tambien como funciones epsilon, son predecibles, por lo que el firmado en lnea
puede habilitar un ataque de texto plano sobre las llaves privadas. Los servidores deben
utilizar algoritmos criptograficos lo suficientemente resistentes a este tipo de ataques
para proteger dichas llaves.
38
El registro NSEC3 (ver seccion 2.4.1), es otra solucion al problema de la enumeracion
de zona pero presenta el problema de la falta de compatibilidad con resolvers y servidores
que no manejen dicho registro, por lo que dichas entidades no consideraran una respuesta que
contenga un registro NSEC3 como valida aunque esta lo sea. A este problema se le agrega el
hecho de que apenas este ano fue liberada la especificaci
on de NSEC3, por lo a un no existe
una base importante de servidores que lo soporten [13].
Dados los inconvenientes que tienen las soluciones al problema de enumeraci on de zona
presentadas anteriormente, se opto por trabajar con la solucion de firmado en lnea ya que
puede funcionar con los servidores que existen actualmente y que en su mayora no estan
preparados para trabajar con el registro NSEC3 (aunque versiones posteriores puedan mane-
jarlo). El problema entonces, queda acotado a solucionar uno de los inconvenientes que se
presentaron para el firmado en lnea y al mismo tiempo atacar el problema de enumeraci on
de zona. Para el alcance de esta investigacion se trabajar
a en los problemas del incremento
en la carga computacional que se genera en los servidores que utilizan firmado en lnea y a
su vez en el problema de enumeraci on de zona.
El objetivo principal de este trabajo es construir un sistema que pueda impedir la enu-
meracion de zona valiendose del procedimiento de firmado en lnea, adem as dicho sistema
debera ocuparse exclusivamente de ejecutar el procedimiento de firmando en lnea a los pa-
quetes que lo requieran, liberando al servidor autoritativo de realizar dichas funciones y por
consiguiente retirando del servidor la carga computacional relacionada a la ejecuci
on de dicho
proceso.
39
Captulo 4
Soluci
on Propuesta
4.1. Antecedentes
El uso de servidores Proxy no es nuevo en el campo de las telecomunicaciones y las
tecnologas de informaci on. En la actualidad son utilizados para limitar la cantidad de servi-
cios de Internet a los que se puede acceder dentro de la red de una organizacion, ya que son
instalados en la frontera entre la red externa (Internet) y la interna (Intranet) y es con esta
configuracion que se asemejan a los firewalls, que son dispositivos que ejecutan un conjunto
de reglas sobre la comunicaci on que pasa a traves de ellos y que de acuerdo a dichas reglas
deciden que comunicaci on es permitida y cual esta prohibida. Otra configuraci on para los
servidores Proxy consiste en utilizarlos como enlace para los servidores que proveen alg un
servicio en Internet como el correo electronico o el Web, en este caso el Proxy recibe todas
las peticiones de los clientes y las redirecciona al servidor correspondiente, para que despues
el servidor enve al Proxy los mensajes de respuesta a la peticion solicitada y este a su vez
los enve a los clientes. En esta ultima configuracion, el Proxy puede servir tambien como
un balanceador de carga al repartir las peticiones a los servidores de manera equitativa para
evitar que alguno de ellos pueda colapsarse cuando la carga computacional recibida exceda
sus capacidades.
40
Actualmente existe disponible un servidor Proxy dedicado exclusivamente al servicio de
DNS. El codigo fuente necesario para compilar y crear el programa ejecutable esta disponible
en la siguiente URL:
http://www.wolfermann.org/dnsproxy.html
Este Proxy recibe peticiones de DNS de los clientes y dependiendo el tipo de solicitud
(recursiva o iterativa) enva dichas peticiones a un servidor recursivo o al servidor autoritati-
vo que se le configuran de manera manual editando un archivo que contenga las direcciones
IP o nombres de dominio de dichos servidores. Este Proxy no modifica la informaci on que
contienen los paquetes pero sirve como base para observar el comportamiento que el Proxy
desarrollado en este trabajo debe de tener. La aplicacion DNSProxy fue escrita para sistemas
UNIX, por lo que un sistema como Linux puede compilarlo y ejecutarlo al estar basado en el
sistema UNIX. Este programa fue compilado y ejecutado en la distribucion Fedora Core en
su versi
on 5 del sistema Linux.
Para instalar ese servidor Proxy, hay que obtener el archivo dnsproxy-1.15.tar.gz que
se encuentra en la pagina de Internet antes mencionada. Posteriormente hay que descompri-
mir dicho archivo, esto puede hacerse desde la lnea de comandos tecleando la instruccion tar
-xzvf dnsproxy-1.15.tar.gz, que descomprime el contenido del archivo y lo almacena en
un folder de nombre dnsproxy-1.15. Si uno se posiciona ahora en dicha carpeta y ejecuta el
comando ./configure para crear el script de instalaci on, bastar a solo compilar los archivos
fuente para poder utilizar DNSPROXY. As al ejecutar posteriormente los comandos make y
make install, se compilar an los archivos fuente y se instalar an en el directorio principal de
comandos del sistema (la direccion fsica de ese directorio as como su nombre pueden variar
dependiendo de la distribucion de Linux utilizada).
Informaci
on relativa al servidor recursivo.
recursive 127.0.0.1
recursive-port 53002
recursive-timeout 90
Informaci
on de la direccion y puerto donde el Proxy atendera peticiones.
listen 192.168.168.1
port 53
41
Informaci
on de configuraci
on adicional.
chroot /var/empty
user nobody
internal 192.168.168.0/24
internal 127.0.0.1
statistics 3600
Las secciones 1 y 2 del archivo anterior deben de contener las direcciones IP reales de un
servidor autoritativo y uno recursivo (puede usarse la misma direccion en ambas), tambien
debe de incluir los puertos en los que dichos servidores escuchan peticiones, asi como tambien
un numero que representa la cantidad de segundos por las que el Proxy esperara por un
paquete de respuesta despues de haber transmitido una pregunta. La tercera secci on indica
la direccion IP de la m aquina local y el puerto por donde estara escuchando el Proxy las
peticiones. La comunicaci on entre el Proxy, los servidores y los clientes se realiza mediante
sockets de UDP, por lo que en ning un caso se establecera una conexi on entre el Proxy y
las demas entidades, ya que todo sera mediante el envo de datagramas. La secci on final del
archivo de configuraci on, incluye informacion sobre la posicion en el disco donde el Proxy se
ejecutar
a, la direccion IP de las redes de donde los clientes podran hacer peticiones y cada
cuantos segundos se imprimir an los resultados.
Para ejecutar el programa principal del Proxy, se teclea en la lnea de comandos dnsproxy
[-c /path/dnsproxy.conf]. En la figura 4.1 puede observarse una respuesta de DNSProxy,
la cual es identica a la de un servidor autoritativo ya que el paquete no es modificado, s olo es
transferido del servidor autoritativo al Proxy y de este al cliente. Para esta prueba, el servidor
autoritativo estuvo ejecut andose en la computadora con IP 200.34.22.15, puerto 5353, y el
Proxy se ejecut o en la computadora con IP 200.34.22.17 y atenda peticiones a traves del
puerto 53. Nota: Para utilizar puertos conocidos para el Proxy, o sea puertos que van nume-
rados del 0 al 1024 se requiere contar con privilegios de administrador para que el servidor
Proxy pueda ser ejecutado.
4.2. Metodologa
Se presenta a continuaci
on la metodologa seguida para desarrollar el servidor Proxy que
realice el procedimiento de firmado en lnea para los servidores autoritativos. La metodologa
abarca desde el proceso de b usqueda de herramientas necesarias para construirlo hasta el
proceso de pruebas de funcionalidad y rendimiento necesario para evaluar el producto final:
42
Figura 4.1: Paquete de Respuesta de DNSProxy
2. An
alisis del trafico generado y recibido por el servidor autoritativo.
Esta etapa incluye el an alisis de los paquetes de pregunta y respuesta que son
recibidos y generados por el servidor autoritativo respectivamente. Herramientas
de captura de paquetes de datos en la red son utilizadas para almacenar dicha in-
formacion en archivos que sirvan de referencia para comprobar posteriormente que
el Proxy en su primera etapa de construcci on no esta alterando el contenido de la
informacion en los paquetes y simplemente los transfiere a las partes involucradas.
43
3. Definicion de la plataforma y lenguaje de programaci
on utilizado para desarrollar el
servidor Proxy de DNS.
Selecci
on de plataforma y lenguaje que sea compatible con la mayora de las im-
plementaciones existentes para servidores de DNS. La plataforma y lenguaje selec-
cionados no deben ser un obstaculo para que el servidor Proxy pueda comunicarse
con el servidor autoritativo mencionado en puntos anteriores de la metodologa.
4. Selecci
on de bibliotecas con rutinas especficas aplicables al servicio de DNS para servir
de base en el desarrollo del servidor Proxy.
Desarrollo de las funciones de acuerdo al RFC 4471, que tomen como argumento
el dominio solicitado y devuelvan el sucesor o predecesor inmediato, tal y como se
explica en el documento mencionado.
7. Modificacion del registro NSEC de los paquetes que lo incluyen con los valores obtenidos
de las funciones epsilon.
Sustituci
on del Owner Name del registro NSEC por el predecesor inmediato del do-
minio solicitado y sustituci
on del sucesor valido contenido en la secci
on de RDATA
por el sucesor inmediato de dicho dominio.
Sustituci
on del RRSIG original en el paquete enviado por el servidor con un RRSIG
que contenga la firma sobre la informacion que se acaba de modificar del registro
NSEC. Solo el campo de firma y el Owner Name se modifican para este registro,
los demas campos mantienen los valores del registro anterior.
44
Construccion de una arquitectura similar a la de la figura 1.1, donde este presente
un servidor autoritativo en conexi on con el Proxy para verificar funcionalidad
basica referente al firmado y la sustituci
on de valores del registro NSEC.
Construccion de una arquitectura que cuente con servidores recursivos, servidores
raz y servidores autoritativos como la de la figura 2.2 para validar la cadena de
confianza, es decir que la informaci on que firme el Proxy pueda ser validada por
un servidor recursivo que har a preguntas a los servidores autoritativos (el Proxy
estara colocado al frente de uno de ellos) para obtener una respuesta validada para
los clientes (bit de AD encendido en el encabezado del paquete de respuesta).
Instalaci
on de la tarjeta electronica de firmado en la computadora que albegar a al
Proxy. Esta estapa tambien incluye la configuraci on de la misma para que las
operaciones de firmado y verificacion sean realizadas por el procesador de la tarjeta.
Realizacion de pruebas de funcionalidad y rendimiento. Para las pruebas de fun-
cionalidad se comprobara que la autenticaci
on de los mensajes produce una cadena
de confianza que llega hasta la zona en la que se encuentra el servidor Proxy y el
servidor autoritativo al que sirve. Estas pruebas incluyen la validaci
on del rango
de dominios proporcionado por las funciones epsilon y la validaci on de la firma
digital del registro NSEC modificado. Las pruebas de rendimiento abarcan el envo
de paquetes al Proxy y realizar observaciones sobre la cantidad de peticiones que
el Proxy puede atender en el lapso de tiempo que dure dicho envo, con y sin la
ayuda de la tarjeta de firmado digital.
10. An
alisis de resultados.
Las siguientes secciones en este captulo cubren los pasos mencionados en la metodologa.
45
4.3. Configuraci
on de Servidor de DNS Autoritativo
Para la primera etapa de la metodologa, se opto por utilizar el servidor BIND de DNS,
un servidor de DNS gratuito cuyo codigo fuente esta disponible, convirtiendolo en un servidor
de naturaleza abierta. La palabra BIND es la abreviaci on de Berkeley Internet Name Domain.
Este servidor ha sido uno de los mas utilizados en Internet, de hecho es el servidor de DNS
estandar de los sistemas UNIX, plataforma sobre la que fue desarrollado. Los orgenes de este
servidor datan desde la decada de los 80s, cuando fue desarrollado por una peticion de la
agencia DARPA (Defense Advanced Research Projects Agency) y posteriormente a mediados
de esa misma decada, empleados de DEC (Digital Equipment Corporation) se ocuparon del
desarrollo de este servidor. Uno de estos empleados, Paul Vixie se ocup o personalmente de
darle mantenimiento al servidor y colabor o en la fundacion de la organizacion ISC (Internet
Systems Consortium), organizacion que actualmente se encarga del mantenimiento de este
servidor.
Para la instalaci
on de BIND se conto con el apoyo de NIC Mexico en materia de equipo
computacional y un asesora sobre la instalacion y configuraci
on del mismo. El equipo fa-
cilitado por NIC Mexico consta de computadoras que tienen instalado el sistema operativo
FreeBSD 6.1 que es un sistema basado en UNIX, por lo que BIND puede correr perfectamente
sobre dicho sistema ya que fue desarrollado para la segunda plataforma.
Para la instalaci
on de BIND 9, se opto por utilizar las facilidades que ofrece FreeBSD
para instalar programas mediante el uso de puertos, lo que permite contar con una versi on
completamente funcional del servidor BIND ejecutando comandos simples de compilaci on e
instalaci
on:
make search name=bind9
cd /usr/ports/net/bind9
make install
Como siguiente paso, se generan las llaves KSK y ZSK, ya que el servidor instalado
manejara DNSSEC para que el Proxy a desarrollar pueda ser evaluado en materia de su
funcionamiento basico. La generacion de llaves se realiza de la siguiente manera:
46
dnssec-keygen -a RSASHA1 -e -f KSK -b 2048 -n ZONE test.
Este comando genera la KSK de un tama no de 2048 bytes y adem as se le especifica a
la aplicacion que utilice el algoritmo RSASHA1 para generarla, adem as de la zona a la
que corresponde dicha llave. El tama no es mayor al de la ZSK y su tiempo de expiracion
tambien es mayor. Este comando produce dos archivos que contienen los componentes
publicos y privados necesarios para la criptografa de llave p
ublica. El nombre de los
archivos esta compuesto por el nombre de la zona (precedido por la letra K), seguido del
numero que identifica al algoritmo y finalmente el identificador de la llave. Por ejemplo
para este caso, el nombre del archivo sera Ktest.+005+30291 seguido de su extensi on,
que puede ser .private en caso de referirse a la llave privada y .key para la llave
publica.
Realizado lo u
ltimo, s
olo basta firmar la zona con el archivo que contiene la llave privada,
para esto se tiene que ejecutar el comando dnssec-signzone, adem as debe de hacerse refe-
rencia a la KSK y a la ZSK. Se presenta a continuaci on un ejemplo de como se ejecut o dicho
comando:
dnssec-signzone -o test. -k Ktest.+005+30291 zone.test Ktest.+005+32402
47
A.2 se incluye el archivo de zona firmado como referencia. En dicho archivo puede observarse
que se crearon registros NSEC que van colocados entre cada par de registros validos. Tambien
puede observarse que los registros ya estan ordenados de acuerdo a su correspondiente orden
canonico, dicho orden es realizado en automatico por dnssec-signzone, lo que permite tener
registros NSEC precisos.
Como siguiente paso se debe de configurar BIND para que se encargue de administrar la
zona que se acaba de crear y tambien hay que habilitar DNSSEC. Para esto se debe de editar
el archivo named.conf (ver apendice B), donde el parametro m
as importante lo constituye la
lnea dnssec-enable yes; que indica a BIND utilizar la implementaci on de DNSSEC, por
lo que se devolvera el registro RRSIG correspondiente a cada registro solicitado cuando el
cliente as lo desee.
zone test. {
type master;
file zone.test.signed;
allow-transfer { any; };
};
Finalmente para ejecutar el servidor, pero primero hay que tener certeza de que no existe
otro proceso de BIND ejecut andose actualmente, esto se puede hacer con la instruccion ps
-lx | grep named, y si algun proceso ya existiera solo hay que ejecutar el comando kill -9
seguido del n
umero de proceso (PID) que se obtuvo con el primer comando. De no existir un
proceso en ejecuci
on se puede ejecutar el siguiente comando que de acuerdo al contenido del
archivo named.conf (ver apendice B), habilitara a BIND en el puerto 5353:
named -c named.conf
Pueden realizar pruebas con el comando dig @127.0.0.1 -p 5353 seguido del nombre
de dominio para comprobar que BIND ya esta funcionando. Con la opcion +dnssec de dig,
el servidor debe devolver registros RRSIG ademas de los registros normales de datos.
48
considero importante analizar los paquetes recibidos de un servidor autoritativo para iden-
tificar el lugar en el paquete de informaci
on que ocupaban las cabeceras, las secciones del
paquete (pregunta, autoritativa, adicional y respuesta), los datos contenidos en las mismas,
etc.
Para lograr esto, se utilizo la aplicacion conocida como Ethereal. Dicha aplicacion permite
realizar capturas de paquetes de informaci on en cada una de las interfaces que conectan a
la computadora que ejecuta Ethereal con redes de comunicaciones. Ethereal provee de un
ambiente gr afico para poder visualizar de una manera m as clara la informacion sobre los
paquetes recibidos, dicho ambiente permite visualizar las direcciones IP origen y destino
de los paquetes, as tambien el tama no en bytes de los mismos y el protocolo al que se
refiere. Tambien Ethereal permite obtener gr aficas que muestran la llegada de paquetes a la
interfaz seleccionada a traves del tiempo y tambien permite aplicar filtros sobre la informacion
para almacenar u nicamente los paquetes que tengan un destinatario en particular o que
correspondan a un tipo de protocolo seleccionado en los filtros. Ethereal puede ser obtenido
de la siguiente URL:
http://www.ethereal.com/download.html
Dicho programa fue instalado en un computadora con procesador Intel Celeron a 1.6 GHz
de velocidad con el sistema Linux instalado (distribucion Fedora Core 5). Ethereal fue instala-
do con el administrador de paquetes yum, ejecutando la instruccion yum install ethereal,
que instala el programa incluyendo el ambiente gr afico.
En la figura 4.2 puede observarse la ventana principal de Ethereal, que para ese ejemplo
fue configurado para capturar trafico de DNS que estuviera dirigido o proviniera de la interfaz
ethernet0 de la maquina que lo ejecutaba. Al estar capturando, la lista en la parte superior de
la ventana se va llenando con la informacion recabada de cada paquete. Tambien se observa
como al seleccionar uno de los paquetes, el valor de los bytes que lo componen es desplegado
en la parte inferior de la ventana. En la parte de en medio se presentan la informaci on del
paquete en lenguaje natural organizado en pesta nas. Se observa en dicha figura que se ha
seleccionado el protocolo DNS, pero tambien pueden seleccionarse otros que corresponden a
protocolos de capas inferiores del modelo TCP/IP, por ejemplo puede observa una pesta na
que contiene la informacion del paquete que corresponde unicamente al protocolo UDP, existe
otra que corresponde a la cabecera del protocolo IP y finalmente la pesta na superior contiene
informacion referente a la cabecera del marco de Ethernet que contiene el paquete.
49
Figura 4.2: Lectura de Paquete de Respuesta de DNS con Ethereal
4.5. Definici
on de Plataforma y Lenguaje de Programaci
on
Para el desarrollo del servidor Proxy se opto por permanecer con la plataforma utilizada
por el servidor autoritativo (FreeBSD 6.1) debido a que ya ofrece el ambiente de desarrollo
del lenguaje C, elegido debido a que las aplicaciones desarrolladas para este lenguaje hacen
un uso m as eficiente de los recursos computacionales y los programas entregan respuestas con
mayor rapidez que en otros lenguajes, debido a esto, BIND y otras aplicaciones de servicios
50
Figura 4.3: Paquete de Respuesta con DNSSEC en Ethereal
sys/socket.h
netinet/in.h
51
para aceptar y recibir conexiones, as como para registrar en el sistema la asociaci
on del socket
con el puerto local de la maquina donde escucha peticiones. A continuaci on se presenta una
descripci
on de los metodos utilizados de la biblioteca sys/socket.h:
int bind(int socket, const struct sockaddr *address, socklen t address len):
La funcion bind realiza la asignaci
on de la direccion y puerto a un socket creado con
la funcion socket(). El par ametro socket especifica el descriptor que se obtuvo de
la funcion socket(), el apuntador *address corresponde a la estructura en memoria
de tipo sockaddr que contiene informaci on de la direccion y el puerto donde el socket
escuchar a peticiones. Finalmente el par
ametro address len indica el tama no de la
estructura sockaddr apuntada por *address. Esta funcion regresa el valor de 0 si tuvo
exito, en caso contrario regresa un -1.
size t recvfrom(int socket, void *buffer, size t length, int flags, struct sock-
addr *address, socklen t *address len):
La funcion recvfrom() se utiliza para recibir mensajes en el socket ya sea de modo orien-
tado a conexion o mediante datagramas. Dicha funcion trabaja en modo bloqueante, es
decir, que el programa de aplicacion que la utilice se quedar a esperando hasta recibir
un mensaje en el socket y entonces procedera a ejecutar las instrucciones que siguen
despues de esta funcion. A esta funcion se le enva tambien el descriptor del socket como
parametro, pero tambien se le enva un apuntador a un buffer de datos, que consiste en
un espacio en memoria destinado a almacenar la informaci on recibida (datos enviados
en el paquete de UDP). Tambien se especifica la longitud en bytes del buffer de datos y
se proporciona a la funcion un registro de banderas donde se indica como se desea que
sea la operacion de recepcion. Para el servidor Proxy, no se especific o bandera alguna.
Los siguientes dos par ametros son el apuntador a la estructura que contiene la informa-
ci
on del socket y la longitud del espacio en memoria que dicha estructura ocupa. Esta
funcion regresa la longitud en bytes de la informaci on recibida y que es escrita en el
buffer de datos.
size t sendto(int socket, const void *message, size t length, int flags, const
struct sockaddr *dest addr, socklen t dest len):
Esta funcion se encarga de enviar el contenido del buffer de datos apuntado por message
a la direccion indicada por dest addr. Se le especifica a traves del par
ametro length
52
el tama no en bytes de la informaci on que se desea enviar. Los demas parametros son
iguales a los utilizados en la funcion recvfrom(). Esta funcion regresa el tama no en
bytes de la informaci on enviada. No existe manera de comprobar si fue recibida con
exito si se estan utilizando datagramas ya que no los receptores no envan paquetes de
reconocimiento al recibir el mensaje.
4.6. Selecci
on de Bibliotecas de DNS
Al inicio del proyecto ya se conoca sobre la existencia de bibliotecas del servidor BIND
para DNS en lenguaje C, pero tambien se conoca sobre la herramienta drill, que funciona
de una manera similar al comando dig en el sentido que permite realizar preguntas a servi-
dores de DNS por la existencia de registros correspondientes al nombre de dominio solicitado.
Los autores de la aplicacion drill, NLnet Labs, tambien crearon una serie de bibliotecas
denominadas ldns que tienen como objetivo facilitar el desarrollo de software de DNS.
53
Debido a la compatibilidad con DNSSEC y a que ldns permite abstraer muchos pro-
cedimientos del servicio de DNS utilizando los m odulos ya definidos se opto por utilizar este
paquete de bibliotecas, adem as de que funciona en conjunto con libreras estandar de C para
realizar las firmas digitales como la librera libcrypto de OpenSSL que contiene la imple-
mentacion de los algoritmos de firmado m as comunes como el RSA y el DES.
La instalacion se realiz
o tomando como base el codigo fuente de ldns, que se compil oe
instalo en la computadora que albegara al Proxy cuyo sistema operativo es FreeBSD con
kernel 6.1 como se mencion o anteriormente. Para la compilaci on e instalaci
on de dichos pa-
quetes de libreras se siguieron los siguientes pasos, que estan contenidos en el archivo README
includo dentro de la carpeta comprimida de ldns:
5. Instalar la librera en el sistema con la instruccion make install, esta instruccion re-
quiere que el usuario tenga privilegios de administrador.
54
dig -p 5353 @127.0.0.1 <NOMBRE DE DOMINIO>
Dichas peticiones no eran atendidas por la aplicacion, por lo que el programa cliente
(dig o drill) reportaba que no exista un servidor de nombres que respondiera. Sin embargo
en la aplicacion servidor se pudo leer el contenido del paquete recibido, cabe aclarar que la
funcion recvfrom(), devuelve el contenido del paquete sin cabeceras de UDP o IP, por lo que
la informaci
on leda por la aplicacion corresponda a solo los bytes que componen el paquete
de pregunta de DNS.
Para poder utilizar la estructura de datos de ldns pkt, se requiere emplear una funcion
de la biblioteca de ldns que convierte cadenas de caracteres (lo que se recibio en el buffer
a traves del socket) a la estructura mencionada anteriormente. Dicha funcion se describe a
continuacion:
ldns status ldns wire2pkt(ldns pkt **packet, const uint8 t *data, size t len):
Esta funcion se encarga de convertir una cadena de caracteres, en este caso una secuen-
cia apuntada por data y que es de len bytes de tama no. Se proporciona tambien la
referencia a la estructura de paquete en la que se desea se almacene la informaci on con-
tenida en los bytes recibidos. La funcion regresa un valor de estado reconocido por la
biblioteca ldns, donde s olo si el valor de estado es igual a LDNS STATUS OK se considera
que la operacion se realiz
o con exito.
55
ldns status ldns resolver send pkt(ldns pkt **answer, const ldns resolver *r,
const ldns pkt *query pkt):
Esta funcion realiza el proceso de enviar el paquete apuntado por query pkt y recibirlo
en una estructura de paquete de DNS apuntada por answer, para esto se utiliza el re-
solver r, que realiza las funciones de envo y recepci
on, por lo que no se requiere abrir
sockets explcitamente para comunicar la aplicacion con el servidor autoritativo ya que
la funcion lo hace de manera interna. La funcion tambien regresa un valor de estado y
solo si el estado es igual a LDNS STATUS OK se asume como exitosa la operacion. Esta
funcion realiza tres intentos para tratar de contactar al servidor, si esto no es posible,
la funcion deja de bloquear la aplicacion y permite que se realicen las operaciones que
le siguen.
Para ampliar la explicacion sobre el objeto resolver, dicho objeto debe de tener conocimien-
to de la direccion IP o del nombre de dominio del servidor al que estara dirigiendo las peti-
ciones de los clientes. Dicho valor se puede obtener de un archivo de texto que s olo contenga
la lnea nameserver <IP SERVIDOR>. Dicho archivo se nombro como server1.conf y para
acceder a el y crear el objeto resolver se puede utilizar la siguiente instruccion:
ldns status ldns resolver new frm file(ldns resolver **r, const char *filename):
Con esta funcion se le asigna al resolver apuntado por r que lea el contenido del archivo
apuntado por filename para obtener de ah el nombre de dominio o la IP del servidor
de DNS al que se conectara.
Ya con el paquete de respuesta dentro de una estructura ldns pkt, es posible emplear
otra funcion que realiza el proceso contrario a la funcion ldns wire2pkt, es decir, ahora de
una estructura de paquete de DNS, se convierte la informaci on a un paquete de bytes que
puede ser enviado a traves de un socket a la direccion del cliente por medio de la funcion
sendto de la librera de sockets descrita con anterioridad. Esto se realiza de la siguiente
manera:
ldns status ldns pkt2wire(uint8 t **dest, const ldns pkt *p, size t *size):
Esta funcion deposita el contenido de la estructura apuntada por p en el arreglo de
bytes referenciado por dest. Tambien se almacena en el espacio apuntado por size la
cantidad de bytes que contiene la cadena de caracteres dest. La funcion regresa un valor
de estado para indicar que la operacion si se realiz
o correctamente o existi
o alg
un error
en la transferencia.
Con esta ultima operacion completada con exito se procede a utilizar el metodo sendto
de la manera descrita anteriormente para enviar al cliente la respuesta a su peticion, pero al
contar el nuevo paquete con cabeceras de UDP y de IP correspondientes al Proxy y no al del
servidor autoritativo, se asegura que el Proxy cumple su cometido de servir de enrutador y a
la vez ocultar la identidad del servidor que responde. El programa fue modificado para que
56
se cicle escuchando peticiones y atendiendolas, una a la vez. Al estar en modo bloqueante, no
se realizaran otras acciones hasta que no se reciba un paquete de pregunta por el socket de
entrada.
1. Se eliminan del nombre de dominio las etiquetas menos significativas que excedan del
n
umero de etiquetas del nombre de zona m as uno. Este es el nuevo primer paso para
ambos metodos.
2. El paso 1 del metodo para la obtencion del predecesor es eliminado ya que la existencia
del nombre de la zona nunca sera negada.
4. El paso 5 del metodo absoluto para obtener el predecesor es eliminado pues los nombres
de dominio solo tendr
an una etiqueta mas que las que tiene el nombre de zona.
5. El paso 1 del metodo absoluto para obtener el sucesor (ver secci on 2.4.2) fue eliminado
y en su lugar se procede directamente al paso 2, es decir se agregara siempre que sea
posible el caracter de valor menor en la posicion menos significativa de la etiqueta menos
significativa al nombre de dominio para obtener su sucesor.
57
Predecesor:
azzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz.test.
Sucesor:
b0.test.
Pregunta Respuesta
b.test. test. 3600 IN NSEC a.test. A RRSIG NSEC
a.test. 3600 IN NSEC c.test. A RRSIG NSEC
x.a.test. a.test. 3600 IN NSEC c.test. A RRSIG NSEC
Para poder editar el contenido del registro NSEC con los nuevos valores, primero se
deba diferenciar entre los paquetes con estado NXDOMAIN y los paquetes con estado NO-
58
ERROR, ambos pueden contener registros NSEC, pero s olo para el estado NXDOMAIN se
utilizar
a la funcion para obtener el predecesor del dominio solicitado, mientras que la funcion
para la obtencion del sucesor sera utilizada en todos los casos. Tambien cabe aclarar que
los registros NSEC pueden ir contenidos en las secciones de respuesta y autoritativa de un
paquete de DNS, pero s olo si el estado es de tipo NXDOMAIN, los paquetes ir an en la secci
on
autoritativa unicamente, para el estado NOERROR pueden ir ubicados en ambas secciones.
ldns pkt rcode ldns pkt get rcode(const ldns pkt *p):
Esta funcion nos regresa el codigo de estado de un paquete de DNS, recibe como argu-
mento la estructura del propio paquete y nos devuelve un valor de estado, que si resulta
igual al valor de estado definido en la biblioteca de ldns como LDNS RCODE NXDOMAIN,
se tiene la certeza de que se esta tratando con un paquete de tipo NXDOMAIN que
tendra los registros NSEC en la seccion autoritativa u
nicamente.
ldns rr* ldns rr list rr(const ldns rr list *rr list, size t nr):
Esta funcion nos regresa el apuntador a una estructura de tipo ldns rr que representa
la estructura de un registro de DNS. La funcion requiere como argumentos un apun-
tador a la lista de registros que contiene el registro a extraer y un n
umero entero que
corresponde a la posicion de ese registro dentro de la lista.
Se puede utilizar la funcion ldns rr get type(const ldns rr *rr) pas andole como
par
ametro el registro obtenido para que nos devuelva un valor de tipo de registro reconocido
por ldns. Si dicho valor es igual al de la constante definida como LDNS RR TYPE NSEC, en-
tonces se asegura que el registro que se tiene representa un registro NSEC, cuyos valores de
59
Owner Name y primer campo de RDATA deben de ser modificados con los valores obtenidos
del predecesor y del sucesor.
Para la sustitucion de los nombres de dominio contenidos en el registro NSEC por los
nuevos valores se usaron las siguientes funciones:
ldns status ldns str2rdf dname(ldns rdf **rd, const char *str):
Esta funcion almacena una cadena de caracteres apuntada por str y que corresponde
a un nombre de dominio, en una estructura de tipo ldns rdf, y as poder utilizar esta
estructura para insertarla dentro de los paquetes.
ldns rdf* ldns rr set rdf(ldns rr *rr, const ldns rdf *f, size t position):
Esta funcion es utilizada para sustituir la estructura ldns rdf que corresponde a la sec-
ci
on de RDATA del paquete apuntado por rr y que va colocada en la posicion indicada
por el valor numerico de position.
Con estas funciones se pueden sustituir dentro del paquete de respuesta los valores de
sucesor y de predecesor por lo obtenidos con las funciones epsilon, ahora como siguiente paso,
es necesario firmar el registro modificado para que la cadena de confianza pueda llegar a vali-
darse. Esto ultimo solo en caso de que el usuario haya solicitado una respuesta validada (bit
DO encendido) y el paquete de respuesta que proviene del servidor autoritativo incluya regis-
tros RRSIG que correspondan a firmas de registros NSEC. Para determinar esto, el tipo de
registro a buscar reconocido por ldns es LDNS RR TYPE RRSIG, dicho registro siempre sucede
en la lista al registro NSEC que firma.
60
Como se mencion o en el captulo 2, en la secci
on 2.2.1, para poder realizar el firmado
digital se requiere tener acceso a la llave privada, dicha llave privada corresponde a la llave
de zona ZSK y debe estar accesible para el Proxy para poder firmar con ella. Por lo expuesto
anteriormente, la llave privada de la zona fsicamente estara en la computadora que albergue
al proceso del servidor Proxy. Para este trabajo se asumi o que no existir
a un proceso de inter-
cambio de llaves entre la computadora que albergue al Proxy y la computadora que albergue
al servidor autoritativo.
Para poder leer el archivo que contiene la llave privada con la ayuda de la biblioteca
ldns se utilizo la siguiente funcion:
ldns status ldns key new frm fp(ldns key **k, FILE *fp):
Esta funcion almacena en una estructura de tipo ldns key, la llave privada leda del
archivo apuntado por fp. Para esta investigacion, el formato de la llave contenida en el
archivo corresponde al formato 1.2 y el algoritmo es el 5 (RSASHA1).
ldns rr list* ldns sign public(ldns rr list *rrset, ldns key list *keys):
Esta funcion devuelve un apuntador a una lista que contiene registros RRSIG que co-
rresponden a las firmas de los registros contenidos en la lista apuntada por rrset (para
el caso especfico del Proxy, dicha lista s
olo contena un registro NSEC). Se proporciona
tambien como argumento un apuntador a una estructura de tipo ldns key list que
contiene las llaves a ser utilizadas para firmar el registro (para este caso particular,
solamente se contaba con una sola llave, la ZSK).
Despues de realizar esta operacion, se pueden sobrescribir los valores del RRSIG original
que vena con el paquete enviado por el servidor autoritativo y sustituir los valores de Owner
Name (para colocar ah el nombre de dominio del predecesor si es que aplica) y obviamente
el valor de la firma de la nueva informaci on que se ubica en la ultima posicion de la secci
on
de RDATA del registro RRSIG.
Para la compilaci on del programa se requiere hacer referencia a las carpetas que con-
tienen los archivos de encabezados (.h) con la opci
on -I y los archivos de libreras (.o, .so y
61
.a) con la opcion -L. Los archivos de encabezados pueden obtenerse de la carpeta de ejemplos
que viene includa con el archivo comprimido de ldns, como caso especial, para obtener el
archivo de encabezados configure.h, se debe de ejecutar el comando ./configure dentro
de la carpeta examples del folder principal que se genero al descomprimir el archivo de ldns.
Las archivos de libreras se obtuvieron al compilar ldns (ver secci
on 4.6) y se ubican dentro
del folder lib de la carpeta principal.
El comando completo para compilar la aplicacion con sus opciones es el siguiente (el
archivo fuente se denomin
o dnsproxy.c y se ubica en la carpeta examples dentro del folder
principal de ldns):
gcc -I../include -g -O2 -Wall -I. -L../lib -lpcap -lldns -o dnsproxy dnsproxy.c
Opciones:
La opci
on -I../include indica que se desea que se incluyan los archivos de en-
cabezados localizados en la carpeta ldns que se encuentra dentro de la carpeta
include que se localiza al mismo nivel que la carpeta examples.
La opcion -g indica que se desea poder realizar labores de debuggeo sobre la apli-
cacion utilizando el comando gdb ./dnsproxy. Esto u ltimo fue u
til para detectar
errores dentro del ciclo de las operaciones del programa.
La opcion -O2 indica que se desea optimizar el codigo para una mejor ejecuci
on del
mismo. El 2 que sigue a la O corresponde a un valor n umero que indica el esfuerzo
que el procesador debe de invertir para optimizar el codigo.
La opci on -Wall indica que se desean habilitar las advertencias durante la compi-
lacion. Dichas advertencias pueden indicar que no se utilizan variables declaradas
o que se esta asignado un valor incorrecto como par ametro de una funcion.
La opci
on -I. se indica que se desea incluir el archivo config.h presente dentro
de la misma carpeta donde se encuentra el archivo fuente dnsproxy.c, la carpeta
examples.
La opci
on -L../lib se encarga de incluir en la compilacion las librerias ubicadas
dentro de la carpeta lib ubicada al mismo nivel de la carpeta examples.
Lo opcion -lpcap hace referencia a la librera del mismo nombre utilizada para
extraer informaci
on dentro de los paquetes recibidos.
La opci
on -lldns hace referencia a la aplicacion principal de ldns que fue instalada
con la ejecuci
on del comando make install para la ejecuci on de los metodos
contenidos en las libreras.
La opci on -o dnsproxy indica que se desea que el nombre del ejecutable de la
aplicacion sea el nombre de dnsproxy.
Para ejecutar el servidor Proxy, basta con escribir el nombre de la aplicacion seguido
del n
umero de puerto de UDP sobre el que se desea que el Proxy escuche peticiones. Por
62
ejemplo para escuchar peticiones en el puerto 53 basta con posicionarse en el folder examples
y ejecutar la siguiente instruccion:
./dnsproxy 53
Con esta ultima operacion se finaliza con el desarrollo del Proxy, en la secci
on siguiente
que cubre la ejecuci
on de pruebas de funcionalidad y rendimiento se mencionan las modifica-
ciones realizadas de acuerdo a los problemas localizados durante las pruebas.
4.8. Construcci
on de Ambiente de Pruebas
Para la construcci
on del ambiente de pruebas, se plante
o primero la idea de realizar prue-
bas de funcionalidad para despues realizar pruebas de rendimiento para el servidor Proxy. Las
pruebas de funcionalidad constan de evaluaciones al proceso iterativo y al proceso recursivo
para comprobar que los valores correctos de predecesor y sucesor son insertados dentro del
paquete y la firma que acompa na a la informaci
on modificada es la correcta, para esto u
ltimo
el proceso recursivo nos puede confirmar que la firma ha sido verificada con la ayuda del
bit de AD de la cabecera de los paquetes de DNSSEC. Para las pruebas de rendimiento se
registrar
a el tiempo y la carga computacional que experimenta el procesador al recibir un
n
umero determinado de peticiones por dominios existentes y no existentes en la zona y se
compararan los resultados obtenidos con que se obtienen al repetir la misma prueba sobre un
servidor autoritativo. La pruebas de rendimiento solo se realizaron para el proceso iterativo
e involucran el uso de la tarjeta de firmado.
63
registros no existentes en el archivo de zona por lo que deberan de ser modificados y firma-
dos al momento de que el Proxy procese la solicitud. La figura 4.4 muestra la arquitectura
utilizada para estas pruebas, que no difiere de la utilizada en la figura 1.1.
Tambien en la figura 4.5 puede observarse que el identificador de llave del registro RRSIG
que corresponde al registro SOA y el identificador de las llaves de los registros RRSIG que fir-
man los registros NSEC son iguales, adem as de los valores de fecha de expiracion e incepci
on,
as tambien el nombre de la entidad que firma el registro se mantiene. Aunque dichos valores
no garantizan que el registro se haya firmado correctamente si sirven para identificar que se
ha aplicado la llave del servidor autoritativo sobre la informaci on contenida en los registros
NSEC. La verificacion de la informaci on se deja pendiente para efectuarse en el proceso re-
cursivo.
64
Figura 4.5: Paquete de Respuesta del Servidor Proxy
Servidor Recursivo: A este servidor se le envan los paquetes de pregunta para que
a su vez, este inicie el proceso iterativo con el servidor raz y luego con el servidor
autoritativo de la zona test. para obtener los registros solicitados que corresponden
a los de dicha zona. Este servidor adem as debe realizar la verificacion de la cadena de
confianza, es decir validar la informaci on que es recibida de los otros servidores usando
el proceso de verificacion de firmas de la criptografa de clave p
ublica, ademas, en el caso
de los registros NSEC, debe de validar que el dominio solicitado este ubicado dentro
del rango de dominios que dicho registro indica. El servidor recursivo fue instalado en
la computadora con IP 200.34.22.56 y fue configurado para enviar todas sus preguntas
65
al servidor raz.
Servidor Raz: Este servidor recibe primero las peticiones del servidor recursivo, y si
estas se refieren a un dominio de la zona test. enva al servidor recursivo la referen-
cia del servidor autoritativo de esa zona en una paquete de respuesta. Dicho paquete
puede contener firmas que el servidor recursivo verifica como primer paso para evaluar
toda la cadena de confianza. El servidor raz fue instalado en la computadora con IP
200.34.22.57 y en su configuraci
on se le indic
o que todas las peticiones por registros de
la zona test. fueran redirigidas al servidor Proxy y no al servidor autoritativo.
Servidor Autoritativo: Ese servidor administra los dominios bajo la zona test. y
al contar este con DNSSEC habilitado, puede devolver cada registro contenido acom-
panado de una firma que permita evaluar la cadena de confianza hasta esa zona. El
servidor autoritativo fue instalado en la m aquina con IP 200.34.22.59 y puerto 5353,
en la misma m aquina se ejecut
o el proceso del servidor Proxy con el puerto 53 y se le
asign
o el servidor autoritativo para poder construir el objeto resolver requerido para
poder enviar y recibir paquetes de DNS.
En la figura 4.6 puede observarse mejor la arquitectura desarrollada para este tipo de
proceso, donde lo que se buscaba era obtener una respuesta del servidor recursivo (paso
6), donde el bit de AD de la cabecera del paquete estuviera encendido confirmando que se
valid
o la cadena de confianza hasta la zona test., validando al mismo tiempo la funcionali-
dad del Proxy de modificar registros y firmarlos con la firma del servidor autoritativo.
66
Figura 4.6: Arquitectura de Proceso Recursivo
fabuloso IN NS ns.fabuloso.net
ns.fabuloso.test. IN A 200.34.22.54
Con lo anterior se indica al servidor autoritativo de la zona test. que para preguntas
relacionas al dominio fabuloso.test. pregunte directamente al servidor 200.34.22.54 y sea
este u
ltimo el que enve la respuesta. En este caso no existe una modificaci
on de los registros
NSEC que contenga el servidor delegado para ese subdominio ya que el mensaje de respuesta
es enviado por el servidor .54 directamente al servidor recursivo sin pasar por el servidor au-
toritativo test. y por consiguiente por el Proxy nunca recibe dicho paquete. Esto se observa
67
Figura 4.7: Paquete de Respuesta del Servidor Recursivo
68
Figura 4.8: Arquitectura para Delegaci
on de Zona
Se probo entonces el enviar una pregunta por el dominio b.test. al servidor recursivo
para verificar entonces el archivo de bit
acora dnssec.log que contena la informaci on de la
evaluacion de la cadena de confianza. Las lneas que nos indican que la verficaci
on de la firma
fue exitosa son las siguientes:
azzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz.test NSEC:
starting
azzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz.test NSEC:
attempting positive response validation
azzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz.test NSEC:
keyset with trust 7
azzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz.test NSEC:
verify rdataset: success
69
azzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz.test NSEC:
marking as secure
El mensaje de nonexistence proof not found confirma que para el rango provisto
desde el predecesor de b.test. hasta el dominio 0.b.test. que es el sucesor directo es in-
correcto, ya que el mismo registro NSEC esta probando la existencia en la zona del registro
test., y eso ocurre debido al valor obtenido como sucesor directo, que aunque es el valor
correcto de acuerdo a la reglas del RFC 4471 y al orden canonico, demuestra la existencia del
dominio al presentar un sucesor cuyas etiquetas m as significativas (b.test.) son identicas
a las del nombre solicitado. Por tal motivo se opto por el metodo alterno propuesto en ese
mismo RFC que implica hacer una modificaci on en la etiqueta que va despues del corte de
zona para que dichos valores ya no sean iguales y entonces el dominio pueda ser aceptado
como un sucesor valido por el servidor autoritativo.
Sucesor:
b0.test.
70
Figura 4.9: Paquete de Respuesta en Ambiente de Producci
on
71
respondidos exitosamente, la cantidad de paquetes perdidos, la cantidad de paquetes que
presentaban informaci on erronea, el porcentaje de paquetes respondidos con exito, el tiempo
que duro la prueba y el par ametro mas importante, la cantidad de peticiones por segundo
que de acuerdo al tiempo y al n umero de peticiones enviadas, el servidor autoritativo puede
atender. Esta aplicacion esta disponible en la siguiente direccion de Internet:
ftp://ftp.nominum.com/pub/nominum/dnsperf/1.0.0.1/dnsperf-1.0.0.1-1.tar.gz
72
La opcion -d se utiliza para indicar a dnsperf donde se encuentra el archivo de
texto que contiene los nombres de dominio para que pueda armar las peticiones a
enviar al servidor autoritativo.
La tarjeta elegida para firmar, es la tarjeta Niagara 2100B, la cual de acuerdo al fabri-
cante, la compana Interface Masters, cuenta con la siguientes caractersticas:
Procesador: Broadcom BCM5821
Velocidades de Transferencia:
73
4000 transacciones RSA de 1024 bits por segundo.
3000 transacciones Diffie-Hellman por segundo.
470 Mbps en operaciones de Ipsec (3DES, HMAC-SHA-1).
600 Mbps en operaciones de ARC4.
IETF IKE: Generaci on de llaves para el algoritmo Diffie-Hellman de 768, 1024, 1536
y 2048 bits de tama no para el intercambio IKE. Generaci on de numeros aleatorios para
la generacion de llaves privadas.
http://www.interfacemasters.com/productpages/2100B.html
La tarjeta (ver figura 4.9), se conecto a uno de los puertos PCI libres de la computa-
dora, y fue detectada de inmediato por el sistema operativo (FreeBSD 6.1) y tambien por
la versi
on de OpenSSL instalada en la m aquina, la versi
on 0.9.7. Esto pudo comprobarse al
ejecutar el comando openssl engine cuyo texto de salida menciona al engine cryptodev
como disponible para la realizacion de operaciones RSA y Diffie-Hellman. De hecho pudo
observarse la diferencia en velocidades de ejecuci
on de operaciones RSA de 1024 bits en dos
maquinas diferentes con la tarjeta instalada en una de ellas, esto ultimo se logro al ejecutar
el comando openssl speed rsa1024.
El cuadro 4.3 presenta los resultados encontrados para las velocidades en operaciones
RSA por segundo, ya sean de firma o verificacion. La computadora con IP 200.34.22.17 tena
instalada la tarjeta de firmado ya que fue utilizada para las pruebas del proceso iterativo.
Se observa una diferencia bastante grande entre la capacidad de dicha computadora con la
74
IP Computadora Firma Verificaci
on Firmas/s Verificaciones/s
200.34.22.17 0.0001s 0.0000s 6990.1 57803.4
200.34.22.59 0.0042s 0.0002s 240.1 4511.8
computadora con IP 200.34.22.59 que se utilizo para las pruebas del proceso recursivo, lo que
indica que la tarjeta ya estaba siendo considerada por OpenSSL en la m aquina .17 y con esto
se supuso que las aplicaciones que hicieran uso de algoritmos presentes en OpenSSL y que
fueran soportados por la tarjeta de firmado, optaran por utilizar dicha tarjeta en lugar de
hacer uso del procesador de la computadora.
static ENGINE* try load engine(BIO *err, const char *engine, int debug)
Esta funcion es utilizada para cargar un engine en especfico, cuyo nombre se propor-
ciona en el espacio de bytes apuntado por engine.
Estas funciones deben ser ejecutadas previo al ciclo infinito que realiza el Proxy para es-
cuchar peticiones. Tambien la compilaci
on resulta afectada, ya que se deben de agregar ahora
las opciones -lssl y -lcrypto para hacer referencia a las librera de OpenSSL que no se
haban utilizado con anterioridad (ldns s
olo importa las que requiere para firmar). Tambien
75
Figura 4.11: Utilizaci
on del CPU en Pruebas con dnsperf
En la siguiente secci
on se presentan los resultados obtenidos y un an
alisis del compor-
tamiento del Proxy durante el proceso iterativo.
76
Figura 4.12: Utilizaci
on del CPU en Pruebas con dnsperf y Tarjeta Niagara
4.9. An
alisis de Resultados
Previo a la ejecuci on de dnsperf se utilizo la informaci
on provista por el comando dig
para verificar cuando es el tiempo de espera agregado por el Proxy a lo que ya se tena que
esperar por una respuesta del servidor autoritativo. Las peticiones se efectuaron desde la
computadora con IP 200.34.22.16 hacia la computadora 200.34.22.17 que contiene al Proxy, y
desde la computadora .16 hacia la computadora con IP 200.34.22.15 que es la que contiene al
servidor autoritativo y en todos los casos se solicitaron peticiones firmadas (con DNSSEC).
Como se observa en el cuadro 4.4, el Proxy a nade uns 8 ms de retraso sin importar el numero
de etiquetas que el dominio contenga, ya que las etiquetas son eliminadas hasta que el do-
minio solicitad queda de un tama no que es igual al del corte de zona m as uno. Para el caso
de dominios que si existen en la zona, el tiempo de espera se reduce al mitad pues nada mas
hay que calcular un valor de sucesor ya que el predecesor no es modificado. En estas pruebas
no se utilizo la tarjeta de firmado por un problema descrito m as adelante.
77
Dominio Servidor Proxy Servidor Autoritativo
a.test. 4 ms 0 ms
c.test. 4 ms 0 ms
www.c.test. 8 ms 0 ms
b.test. 8 ms 0 ms
www.b.test. 8 ms 0 ms
noexiste.test. 8 ms 0 ms
www.noexiste.test. 8 ms 0 ms
www.noexiste.noexiste.test. 8 ms 0 ms
algunsitionoexiste.test. 8 ms 0 ms
www.algunsitionoexiste.test. 8 ms 0 ms
a.test. NSEC
b.test. A
c.test. NSEC
d.test. MX
e.test. MX
f.test. MX
g.test. MX
h.test. MX
azzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz.test. A
babbbbbzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz.test. A
nszzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz.test. A
babbbbbzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzztzzzzzzzzzzzz.test. A
nszzzzzzzzzzzzz44zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz.test. A
nstzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz.test. A
78
Se repitieron estos dominios en el archivo de prueba hasta tener 1000, 2000, 4000 y 6000
lneas de nombres de dominio para hacerle preguntas al servidor Proxy. Dichas pruebas se
efectuaron utilizando la tarjeta y sin ella a manera de comprobar la efectividad de utilizar el
Proxy en conjunto con la tarjeta, puesto que ya se haba verificado con la ayuda del comando
top que el procesador no era utilizado mientras se realizaban las firmas.
N
umero de Peticiones
Uso de Tarjeta 1000 2000 4000 6000
Si 77.831424 77.850649 77.796348 77.816101
No 142.464267 142.461659 142.483455 142.359447
Numero de Peticiones
Uso de Tarjeta 1000 2000 4000 6000
Si 1.66 % 1.83 % 2.50 % 3.08 %
No 36.85 % 46.91 % 65.09 % 79.23 %
El cuadro 4.5 presenta los resultados de las pruebas de rendimiento realizadas con
dnsperf. En dicho cuadro se observa que con el uso de la tarjeta el servidor Proxy bajo su
79
rendimiento casi a la mitad, a pesar que con el comando top se poda visualizar que la uti-
lizacion del servidor apenas y sobrepasaba el 3 %. Esto hizo deducir que la tarjeta no estaba
funcionando de la manera adecuada ya que a pesar de haber seleccionado bien el engine,
la velocidad de atencion de paquetes disminuyo a la mitad (ver figura 4.13). De acuerdo
al cuadro 4.6, las utilizaciones en el procesador se mantuvieron bajas cuando se efectu o la
prueba en el ambiente iterativo utilizando la tarjeta de firmado. Las causas de este fen omeno
pueden ser diversas, por ejemplo puede deberse a la versi on de los drivers de la tarjeta o que
el bus de datos interno no este transmitiendo la informaci on con rapidez entre el procesador
de la tarjeta y el de la m
aquina. Esto u ltimo se confirm
o al realizar una prueba simple donde
la funcion de firmando RSA sign() se repitiera un n umero de veces igual al del n umero de
peticiones utilizado en las pruebas, y que con el comando time se pudo obtener el tiempo
total que tom o en ejecutar la funcion ese numero de veces. En dicho programa tambien se
ejecutaron las funciones para que el engine cryptodev sea utilizado en lugar del procesador
para las operaciones de firmado, y a un as se obtuvo un valor bajo, 138.69 firmas por segundo
(con el procesador de la computadora resultaron ser 250 firmas por segundo), muy diferente a
lo expresado por el comando openssl speed, lo que confirm o las suposiciones de que el error
se originaba en la tarjeta y no en el software que la utiliza.
80
Captulo 5
El desarrollo del servidor Proxy ayudo a comprender las principales funciones que reali-
zan los servidores de DNS cuando habilitan DNSSEC. Durante la realizacion de este servidor
Proxy se descubrieron anomalas con respecto a los tiempos de respuesta para paquetes que
requeran firmas y que utilizaban la tarjeta, as tambien se descubri
o que las funciones que
obtenan el mejor rango (el m as peque
no) de los sucesores y predecesores no permitan que
un servidor recursivo comprobara en su totalidad la cadena de confianza puesto que tomaba
dicho rango como incorrecto. Estas dos anomalas pueden servir de base para futuras inves-
tigaciones que mejoren el rendimiento del servidor Proxy.
Este trabajo abord o el uso de sockets de UDP para comunicar procesos, pero las fun-
ciones utilizadas para dicho fin solo permitan comunicar un proceso a la vez, por lo que en
un ambiente congestionado el Proxy no sera capaz de responder a un n umero de ello, por
lo que se sugiere la utilizaci
on de tecnicas de programacion que permitan el procesamiento
simult
aneo de peticiones. Una de estas tecnicas son los threads, que constituyen segmentos
de los programas que pueden ser ejecutados de manera simult anea, por ello se sugiere la
exploraci
on de esta alternativa para observar si el rendimiento en paquetes contestados por
segundo puede incrementarse cuando se soportan m as peticiones. Tambien durante el tiem-
po de ejecucion pudo observarse un incremento en la cantidad de memoria utilizada por el
Proxy, a pesar de que se utilizaron funciones provistas por ldns para liberar de la memoria las
estructuras de datos correspondientes a dicho paquete de bibliotecas, un an alisis exhaustivo
de la memoria utilizada por el programa en tiempo de ejecuci on puede revelar la causa y
proporcionar mejoras en el rendimiento total del programa.
81
Justo antes de la finalizacion de esta investigacion, el servidor Proxy fue colocado en
un ambiente de producci on donde usuarios de este ambiente, externaran sus opiniones sobre
el funcionamiento del servidor. Sus opiniones seran de vital importancia para detectar otras
areas de oportunidad que puedan mejorar el desempe no del servidor Proxy.
82
Captulo 6
Conclusiones
Como se expuso en el marco te orico, los problemas de seguridad del servicio de DNS son
un grave riesgo para las comunicaciones que tienen lugar en Internet, de ah surge la necesi-
dad por desarrollar un producto que este orientado a mitigar uno de los tantos problemas de
seguridad que el servicio actual y las extensiones de seguridad (DNSSEC) tienen que afrontar.
En el
ambito del rendimiento, se pudo demostrar que con la ayuda de la tarjeta de firma-
do, el procesador de la computadora que contiene al Proxy queda practicamente libre de toda
carga que tenga que ver con la utilizaci
on de algoritmos de firmado (RSA en el caso particular
del Proxy) para generar registros RRSIG correspondientes a los registros NSEC, liberando al
mismo tiempo al servidor autoritativo de efectuar dicho proceso que eventualmente consumira
sus recursos si las peticiones son constantes. Es evidente que una investigacion adicional es
necesaria para solucionar el problema del tiempo de respuesta de la tarjeta, pero qued o de-
mostrado que el problema radica en el controlador del hardware, no en el software que hace
uso de ella.
Esta tesis puede servir de base para la implementacion de sistemas que permitan habili-
tar DNSSEC en regiones donde el problema de enumeraci on de zona ha hecho imposible que
las extensiones de seguridad del servicio de DNS se implementen. El producto desarrollado
en esta investigacion formara parte de los proyectos de investigacion de NIC Mexico como
parte de las alternativas al registro NSEC3 que la empresa propone para poder implementar
DNSSEC y al mismo tiempo mitigar la enumeraci on de zona.
83
Bibliografa
[1] P. Albitz and C. Liu. DNS and BIND. OReilly, Sebastopol, USA, third edition edition,
1998.
[2] R. Arends, R. Austein, M. Larson, D. Massey, and S. Rose. DNS Security Introduc-
tion and Requirements RFC 4033. tools.ietf.org/html/rfc4033, Network Working
Group, 2005.
[4] R. Arends, R. Austein, M. Larson, D. Massey, and S. Rose. Resource Records for the
DNS Security Extensions RFC 4034. tools.ietf.org/html/rfc4034, Network Working
Group, 2005.
[11] B. Kaliski and J. Staddon. PKCS #1: RSA Cryptography Specifications Version 2.1.
www.rsa.com/rsalabs/node.asp?id=2125, RSA Laboratories, 2002.
84
[12] O. Kolkman and R. Gieben. DNSSEC Operational Practices RFC 4641.
tools.ietf.org/html/rfc4641, Network Working Group, 2006.
[13] B. Laurie, G. Sisson, R. Arends, and D. Blacka. DNSSEC Hashed Authenticated Denial of
Existence. www.ietf.org/internet-drafts/draft-ietf-dnsext-nsec3-10.txt, Net-
work Working Group, 2007.
[17] G. Sisson and B. Laurie. Derivation of DNS Name Predecessor and Successor RFC 4471.
www.ietf.org/rfc/rfc4471.txt, Network Working Group, 2006.
[18] S. Weiler and J. Ihren. Minimally Covering NSEC Records and DNSSEC On-line Signing
RFC 4470. tools.ietf.org/html/draft-ietf-dnsext-dnssec-online-signing-01,
Network Working Group, 2006.
85
Ap
endice A
A continuaci
on se presenta el archivo de zona asignado al servidor autoritativa, dicha
zona corresponde al dominio test.. Se presenta el contenido del archivo previo a la realizaci
on
del firmado de zona y posteriormente se presenta el archivo de la zona ya firmada.
ns.test. A 200.34.22.15
a A 192.168.1.1
c A 192.168.1.2
g NS g.com.
h A 192.168.1.4
o AAAA 2000::1
r NS r.com.
z TXT RR de la Z
test. IN DNSKEY 256 3 5 AQPbMtIGS6XTiAEky8eltx1Hk7cJxl+EMBcwX4q9Ho/
PmRJIb+RFpBfE YNq0WXrqSGndC980/YVZcd0zjJdeOWWzWCNpAbqaky0bbeMxdbMHX
lG/ puthKAnH3qDM3z8P3KrmrhjqYfN5rSdMyEgE1BiwDLo4P7zK4qbiyeCe bPGbQQ
==
86
A.2. Archivo de Zona Firmado zone.test.signed
test. 86400 IN SOA ns.test. glozano.nic.mx. (
1 ;serial number
3600 ;refresh time
900 ;retry time
604800 ;expire time
1200 ) ;minimum time
86400 RRSIG SOA 5 1 86400 20070209163058 (
20070110163058 32402 test.
Oz7ZO9Ejg/2NOOASfOxjRP73AYG8Rr6Y/TXk
dtQfBqZfc90WWSmorbRmL+Po1vFCFyZ5lBB4
P849gMyc6xzjJxwlZdVehGbhKtYefku5kTVX
iDtd6yeCZAvitZB42JiPwylOofStPEWSngD7
XAp19+w7ItU92iWI7XEd0fKFXXg= )
86400 NS ns.test.
86400 RRSIG NS 5 1 86400 20070209163058 (
20070110163058 32402 test.
iU+Glh8Mnjuytx9vCTyL2rql070NqA2udvkI
gmfhP/IvkCXqX1/KDS248WgT5NOsLb5/P0H+
MU9jNn+puE8S8t4r5T1mH8zELpAeORJP7iqt
2fYaT9++mER3WX6cq2DJFtFaFW0G1POF/T4h
K/gcM5L46e3ahQvg9hlTc0ybW6A= )
1200 NSEC a.test. NS SOA RRSIG NSEC DNSKEY
1200 RRSIG NSEC 5 1 1200 20070209163058 (
20070110163058 32402 test.
oIwSHxaJlDtlgxSyu7xHSiIEHgdoukwMVtud
DT1TxN0WBVAWzFpSxw5U1/a2mtUXMHo352cD
0DUqOZT9mLRVqJP+IgOF0XzSn24aWGcTQux2
AHhhm4trG4X5/K4r2UytE5cmKtIw0hwFtv01
ONljCGtvORqyrk6LAs7rJHxI26E= )
86400 DNSKEY 256 3 5 (
AQPbMtIGS6XTiAEky8eltx1Hk7cJxl+EMBcw
X4q9Ho/PmRJIb+RFpBfEYNq0WXrqSGndC980
/YVZcd0zjJdeOWWzWCNpAbqaky0bbeMxdbMH
XlG/puthKAnH3qDM3z8P3KrmrhjqYfN5rSdM
yEgE1BiwDLo4P7zK4qbiyeCebPGbQQ==
) ; key id = 32402
86400 RRSIG DNSKEY 5 1 86400 20070209163058 (
20070110163058 32402 test.
AYRh22dU2E62efdh879K9jwQB5fHcref3Q+0
mmOzjC9AgECjKXeUvcXtO0pVOnQya7y7KBlM
ttRO9HsMOAYlV5zbmxzhh2iauntAHOQ5LH8n
87
Q5Q+onreh2A7wcDLw/CFGLVvgHZdlDaJE4lV
1VSzW1id2xa6STEwyKwbE2+vVXc= )
a.test. 86400 IN A 192.168.1.1
86400 RRSIG A 5 2 86400 20070209163058 (
20070110163058 32402 test.
mYwXj9Me0ri0vIW6BfgW/eo4Jk7l5YICd8ql
WRxr4jqT2B6CqcZtbLJqIzQ32qMiZX+DmTqp
fDhMqHxlJDj4ho2NY5DrdzBQpXNDtXEfdFoj
nToHkz2b5mxg3bYJepBIU2stHJh92vXmAeoy
dsnnKDSmhUmMCjkCVb1FcjwxtbA= )
1200 NSEC c.test. A RRSIG NSEC
1200 RRSIG NSEC 5 2 1200 20070209163058 (
20070110163058 32402 test.
tM5Ol+BcCCCkaH3P0intUoEove8XuyCI+8oe
6/89sdqyeR2tg6BB85XwlE/fbgJFiN1RZ9Mg
qH9k3/qHt450vyKigTEjQtDI9WRVHh+bHrI1
h6NW79d9+vQI14WS9boaCnZwa77tI+fzkv2m
n2J5DKvrHVJxAXLrljnHtfW05C8= )
c.test. 86400 IN A 192.168.1.2
86400 RRSIG A 5 2 86400 20070209163058 (
20070110163058 32402 test.
uuMKDRlZe6NpUt3pK+XRimtukqyiqlv5oiXz
Rm+1tKgnEKbRZL1VHG/zgY+uEr+ZexXoAvnX
0P1AvXV2zFkwy2KA8h2FcLu7YiXuJORYznW/
cZPt8Xyg6OqB9kFYRem3j2JzVcwCbwsPOnsH
gvZJ44ZtaoG4B8kJJK/jNzfRcLs= )
1200 NSEC g.test. A RRSIG NSEC
1200 RRSIG NSEC 5 2 1200 20070209163058 (
20070110163058 32402 test.
NELDohf5rKZmGcApVNyhqbSXt3TQtxe76Ch2
MtmZtl9t+2CBX1UzBvw2GokrtwMXLzUOytHN
iL6JW1bHm+DMOvzdCXi6gzZcxBWuzY0Z9s19
RT6hlDZXUrpco9vZYh2jZkG1RsfwLaQWO3H1
AG3r/d2o5JHorDjZyjnZTBIwchg= )
g.test. 86400 IN NS g.com.
1200 NSEC h.test. NS RRSIG NSEC
1200 RRSIG NSEC 5 2 1200 20070209163058 (
20070110163058 32402 test.
EiseuN3Py1xJfRahSPUp2VwUl45I4OMC/huK
F1uLgsUPhpyohTw2pEcbmYSym8IV0bjndcTO
QceLd/TeJ3Z7wRG7ReDAWVcBjrW8fGcQ3191
YGbuk46kW+2b6dUQSSZHXUWdiZOOQ7mvNJr7
88
iZWynr3jIUXcgIzfP+slqlrb5Tw= )
h.test. 86400 IN A 192.168.1.4
86400 RRSIG A 5 2 86400 20070209163058 (
20070110163058 32402 test.
rYS1AqqYNwIKUtGLBVRHUorjY08Vl6lFHWsX
yS3/jP7UmlOSHxQSoutmjdiHp6uHHFrL6kDR
JSWRlA8tscnX11XmJclKRiQ1WWLR98yMAcZI
G32eObKLNpmeUXCalVWgG8IPHqTnGZe0jyiX
BWPUd7oAVwZUIUJnE74sI0iYop8= )
1200 NSEC ns.test. A RRSIG NSEC
1200 RRSIG NSEC 5 2 1200 20070209163058 (
20070110163058 32402 test.
tUaurSEZofmOqkdJHumij40wehLeeM4KIisj
oVDg5+jAq0p7SQ6xpyNsKyOENP36pexf5YWD
AgYDwFJb+sDQsYAt/c4YkfLhh/VDApIEjCYL
B5xsiYZ30B5amRrMRGGLFVRIklS2ggQvN0YE
CQKxEXd/SIUrfOaefySxaH1lhew= )
ns.test. 86400 IN A 200.34.22.15
86400 RRSIG A 5 2 86400 20070209163058 (
20070110163058 32402 test.
jumnCB68WENx5MFlTiNis7Taie8EQFNew+jw
5ZfwUK2WB1ywjV9nzGLqt51BzpdhIzwzkk3W
mvkKcr8HL7/NLIksRgxAwjZRG8AwyJU9phbR
R5JNDEt3M+ZYsjncvVo/4k4ixfNwvFAcgPaC
QUJLUpkdlfesBDg2BiwnlCR9pJ4= )
1200 NSEC o.test. A RRSIG NSEC
1200 RRSIG NSEC 5 2 1200 20070209163058 (
20070110163058 32402 test.
ZTiVq3Rk4xIz4L+RM8Fkns0it+fCnJhyCwwJ
HsEi0P95Ioy2OwLu6wcgdZOKrBMuIOZgshbi
S2WyRLIoVW2QOoazGZfkGEa+1laY0gEtrG+a
XQkNVggUvdwczkw4snEeZcYZHVNRFQCttImJ
1kdNMab1CE9RcXyKHn8XAG6gI/0= )
o.test. 86400 IN AAAA 2000::1
86400 RRSIG AAAA 5 2 86400 20070209163058 (
20070110163058 32402 test.
1uRWnapCW67xbfJ3513e8IL4/80ggTnm+Q7x
6/x8tYgyqvSG1c29udtoi0zlYBhRpByzX2P9
0VhediViXp3dJGsPxLPvqMk9cCVACmBq5xy1
xmuwYkHZq+DiiqC6KlMveQpLycjLyEtl/bM2
Mwb79PeWV8WE5YtzSHocG2RqTDk= )
1200 NSEC r.test. AAAA RRSIG NSEC
89
1200 RRSIG NSEC 5 2 1200 20070209163058 (
20070110163058 32402 test.
TJPtfnqDKumaLnTCbfIlF6Pog5DCVWbAH0ty
gsJPyZRYR5JbGtwkghJGTyet9igkUTRcLfbd
pZ+h9Xj3EtJZEfjGRjU6kNPn6OlL0lfp11g9
6+06d/sspCxe/1eJlAYL+sEUhew9IEL4Ac0Y
G7KkyoeAPpdhzy9YwqLIYwWscqg= )
r.test. 86400 IN NS r.com.
1200 NSEC z.test. NS RRSIG NSEC
1200 RRSIG NSEC 5 2 1200 20070209163058 (
20070110163058 32402 test.
wQxVjljXCo4GAlELhuIZCxIT0NPZm3XXkQ80
BndOj3Yueqnn9JyPWTePvnYP/7U1VbyDLN1+
zcaCxW69+2E7hHk3t6L0130aM3h3S4lCidZH
j8YxE3VwV+o1eR739E8QkGbcDe64PmFY1vP9
PzpUuzi/iEitn5ew1Z3JqYp3K5s= )
z.test. 86400 IN TXT RR de la Z
86400 RRSIG TXT 5 2 86400 20070209163058 (
20070110163058 32402 test.
PhxiL62hhGTewQGFaZq5xYxjS5DFUhaupkVH
egPRxKaf+Ci7ILBBE1Pd5WSHSoAtCqrlCE3a
rpbivfIJfpOKK3eHpt3LGy8ZJRFXJ/yJrWhO
aC0lrl2hlDnCr9LaJSuhTW35ORd7N6t/90KF
2VPPIxdUnuczhl2gxU50G3/nbrQ= )
1200 NSEC test. TXT RRSIG NSEC
1200 RRSIG NSEC 5 2 1200 20070209163058 (
20070110163058 32402 test.
glMQdGo2Ean0hXvs8/VZblY8TSpL28QpLIOy
J9Bry50aqAi4xHldueEkEQZotMMwTqe0XDHd
SF2Pi5lbzzzF+Rgxza+qQx/VpAtk1Nz3Rejm
Wjgqxysos1ir+jmfbXil+kfW0ygg5pGuOprw
qg/mkXUmGSgoxGquFs2XQQLtlMg= )
90
Ap
endice B
Archivo de Configuraci
on de Servidor Autoritativo
options {
;Se configura el servidor como autoritativo
recursion no;
;IP y puerto donde el servidor escucha peticiones
listen-on port 5353 { 200.34.22.15; };
;Directorio donde se ubica el archivo de zona
directory /dns/dnssec;
;Se habilita DNSSEC
dnssec-enable yes;
query-source address 200.34.22.15;
notify-source 200.34.22.15;
transfer-source 200.34.22.15;
};
key rndc-key {
algorithm hmac-md5;
secret LC3Pvq5a4YHcAjgr4gqbuA==;
};
logging {
channel logs { file /dns/dnssec/logs/xfers.log; };
category xfer-in {logs;};
category xfer-out {logs;};
};
controls {
inet 200.34.22.15 port 1951
allow { 200.34.22.15; } keys { rndc-key; };
};
zone test. {
91
type master;
;Nombre del archivo de zona firmado
file zone.test.signed;
allow-transfer { any; };
};
92
Ap
endice C
93
00b0 46 be 98 fd 35 e4 76 d4 1f 06 a6 5f 73 dd 16 59 F...5.v.... s..Y
00c0 29 a8 ad b4 66 2f e3 e8 d6 f1 42 17 26 79 94 10 )...f/....B.&y..
00d0 78 3f ce 3d 80 cc 9c eb 1c e3 27 1c 25 65 d5 5e x?.=....... %e.^
00e0 84 66 e1 2a d6 1e 7e 4b b9 91 35 57 88 3b 5d eb .f.*..~K..5W.;].
00f0 27 82 64 0b e2 b5 90 78 d8 98 8f c3 29 4e a1 f4 .d....x....)N..
0100 ad 3c 45 92 9e 00 fb 5c 0a 75 f7 ec 3b 22 d5 3d .<E....\.u..;.=
0110 da 25 88 ed 71 1d d1 f2 85 5d 78 c0 6b 00 2f 00 . %..q....]x.k./.
0120 01 00 00 04 b0 00 11 01 61 04 74 65 73 74 00 00 ........a.test..
0130 07 22 00 00 00 00 03 80 c0 ff 00 2e 00 01 00 00 ...............
0140 04 b0 00 98 00 2f 05 01 00 00 04 b0 45 cc a1 c2 ...../......E...
0150 45 a5 14 c2 7e 92 04 74 65 73 74 00 a0 8c 12 1f E...~..test.....
0160 16 89 94 3b 65 83 14 b2 bb bc 47 4a 22 04 1e 07 ...;e.....GJ...
0170 68 ba 4c 0c 56 db 9d 0d 3d 53 c4 dd 16 05 50 16 h.L.V...=S....P.
0180 cc 5a 52 c7 0e 54 d7 f6 b6 9a d5 17 30 7a 37 e7 .ZR..T......0z7.
0190 67 03 d0 35 2a 39 94 fd 98 b4 55 a8 93 fe 22 03 g..5*9....U....
01a0 85 d1 7c d2 9f 6e 1a 58 67 13 42 ec 76 00 78 61 ..|..n.Xg.B.v.xa
01b0 9b 8b 6b 1b 85 f9 fc ae 2b d9 4c ad 13 97 26 2a ..k.....+.L...&*
01c0 d2 30 d2 1c 05 b6 fd 35 38 d9 63 08 6b 6f 39 1a .0.....58.c.ko9.
01d0 b2 ae 4e 8b 02 ce eb 24 7c 48 db a1 c0 fd 00 2f ..N....$|H...../
01e0 00 01 00 00 04 b0 00 10 01 63 04 74 65 73 74 00 .........c.test.
01f0 00 06 40 00 00 00 00 03 c0 fd 00 2e 00 01 00 00 ..@.............
0200 04 b0 00 98 00 2f 05 02 00 00 04 b0 45 cc a1 c2 ...../......E...
0210 45 a5 14 c2 7e 92 04 74 65 73 74 00 b4 ce 4e 97 E...~..test...N.
0220 e0 5c 08 20 a4 68 7d cf d2 29 ed 52 81 28 bd ef .\. .h}..).R.(..
0230 17 bb 20 88 fb ca 1e eb ff 3d b1 da b2 79 1d ad .. ......=...y..
0240 83 a0 41 f3 95 f0 94 4f df 6e 02 45 88 dd 51 67 ..A....O.n.E..Qg
0250 d3 20 a8 7f 64 df fa 87 b7 8e 74 bf 22 a2 81 31 . ..d.....t...1
0260 23 42 d0 c8 f5 64 55 1e 1f 9b 1e b2 35 87 a3 56 #B...dU.....5..V
0270 ef d7 7d fa f4 08 d7 85 92 f5 ba 1a 0a 76 70 6b ..}..........vpk
0280 be ed 23 e7 f3 92 fd a6 9f 62 79 0c ab eb 1d 52 ..#......by....R
0290 71 01 72 eb 96 39 c7 b5 f5 b4 e4 2f 00 00 29 10 q.r..9...../..).
02a0 00 00 00 80 00 00 00 .......
94
Ap
endice D
Librera LDNS
La documentaci
on esta disponible en lnea en la pagina del proyecto ldns:
http://www.nlnetlabs.nl/ldns/doc/globals.html
A continuaci
on se enuncian las rutinas utilizadas para este proyecto as como una breve
descripci
on de cada una de ellas:
ldns status ldns resolver new frm file(ldns resolver** r, const char* filename)
Configura un resolver utilizando un archivo de configuracion. El apuntador al nombre
del archivo puede ser nulo y en ese caso se utiliza el archivo /etc/resolv.conf.
ldns status ldns key new frm fp(ldns key** k, FILE* fp)
Crea una nueva llave privada bas
andose en el contenido del archivo apuntado por fp.
ldns status ldns wire2pkt(ldns pkt** packet, const uint8 t* data, size t len)
Convierte la informaci
on en el arreglo de bytes de tipo uint8 t al formato de paquete
de DNS.
ldns status ldns resolver send pkt(ldns pkt** answer, const ldns resolver*
r, const ldns pkt* query pkt)
Enva el paquete dado al servidor de nombres indicado por el resolver.
95
ldns rr list* ldns pkt question(const ldns pkt* p)
Devuelve la secci
on de pregunta del paquete de DNS.
ldns rr* ldns rr list rr(const ldns rr list* rr list, size t nr)
Regresa un registro especfico contenido en una estructura ldns rr list dada.
ldns pkt* ldns resolver query(const ldns resolver* r, const ldns rdf* name,
ldns rr type type, ldns rr class class, uint16 t flags)
Enva un paquete de pregunta a un servidor de nombres.
int ldns rr compare(const ldns rr* rr1, const ldns rr* rr2)
Compara el contenido de dos registros de DNS bas
andose en su orden canonico.
bool ldns rr list push rr list(ldns rr list* rr list, const ldns rr list* push list)
Concatena una lista de registros con otra.
void ldns pkt set section count(ldns pkt* p, ldns pkt section s, uint16 t x)
Modifica el n
umero de registros por secci
on ubicado en la cabecera del paquete de DNS
de acuerdo al valor de x.
int ldns dname compare(const ldns rdf* dname1, const ldns rdf* dname2)
Compara dos nombres de dominio de acuerdo a su orden canonico.
96
ldns rdf* ldns dname new frm str(const char* str)
Crea una estructura de tipo ldns rdf que representa un nombre de dominio a partir
de la cadena de caracteres proporcionada.
ldns status ldns str2rdf dname(ldns rdf** rd, const char* str)
Convierte una cadena de caracteres a una estructura de tipo ldns rdf que representa
un nombre de dominio.
ldns rdf* ldns rr set rdf(ldns rr* rr, const ldns rdf* f, size t position)
Coloca una estructura de tipo ldns rdf en la secci
on de RDATA del registro apuntado
por rr.
bool ldns key list push key(ldns key list* key list, ldns key* key)
Inserta una llave a una lista de llaves referenciada.
bool ldns rr list push rr(ldns rr list* rr list, const ldns rr* rr)
Inserta un registro de datos en una lista de registros dada.
97
ldns rr list* ldns sign public(ldns rr list* rrset, ldns key list* keys)
Firma el contenido de la lista apuntada por rrset utilizando las llaves contenidas en la
lista keys.
ldns status ldns pkt2wire(uint8 t** dest, const ldns pkt* p, size t* size)
Convierte el paquete de DNS a su representaci
on en arreglo de caracteres (bytes).
98
Ap
endice E
A continuaci
on se presentan los registros NSEC generados por el servidor Proxy durante
las pruebas del proceso iterativo. El servidor Proxy se ejecuto en la computadora con IP
200.34.22.17 y el servidor autoritativo en la computadora 200.34.22.15. Las peticiones se
realizaron desde la computadora con IP 200.34.22.16 y estaba dirigidas al servidor Proxy. La
zona del servidor autorativo es la zona test. presentada en el apendice A.
99
Pregunta: dig @200.34.22.17 a.test mx +dnssec
a.test. 1200 IN NSEC a0.test. A RRSIG NSEC
100
Ap
endice F
Archivos de Configuraci
on para Servidor Recursivo
El siguiente apendice presenta el contenido del archivo named.conf utilizado para confi-
gurar el servidor recursivo para el proceso del mismo nombre y tambien se presenta el archivo
root.hint para indicarle a dicho servidor donde se localiza el servidor raz.
logging {
channel dnssec log {
file dnssec.log size 20m;
;Se habilita la impresi
on de bit
acoras
print-time yes;
print-category yes;
print-severity yes;
severity debug 3;
};
category dnssec{dnssec log;};
};
trusted-keys {
. 257 3 5 AwEAAejnLLnjMVntHQbB23SMnN+2uoO8DpaKIZGKbzOxbYHniIx1Q1YF
wstprpcGTCkceah1MduEXUoXfd9ySPZt6h9fQiPcEQaRekTwQhZW+U88HJ20H4tp6v/Cj
101
4vguky/enADwSVeWpFepfl0hmbnhEMM5vgP/2YFHPYS+lfTUxCqP2GxDg+Y2Y6XMFYtKE
nGIRGAd4juGt9LKnn5jw5aelvRy0FfN8VR9SyU1fN775nWSzEYfsnvFRIN2Oj3Wcy9rDP
IF7nF1Jt6ckoP3kxROkTRFYpYCvWCgXcDgZe+fgm7ppSYG/3BFIP8126WZAlAicS+rwwK
jAKcnTJa1KDH8FU=; };
zone . {
type hint;
;El archivo root.hint contiene informaci
on sobre la ra
z
file root.hint;
};
102
Ap
endice G
Archivos de Configuraci
on para Servidor Raz
A continuacion se presentan los archivos utilizados para configurar el servidor raz uti-
lizado para las pruebas en el proceso recursivo El servidor raz se ubica en la computadora
con IP 200.34.22.57.
zone . {
type master;
;Nombre del archivo de zona firmado
file root.zone.signed;
};
103
900 ;retry time
3600000 ;expire time
3600 ) ;minimum time
3600 RRSIG SOA 5 0 3600 20071231235900 (
20070430151246 9975 .
QigafjQxFTzCMU4RXlu+Dg4dtXKcUZ0JpI2W
HXVAXvvwsyQEK0DvMJOgC5B5KayhPwiJJOpz
Kuv/bWNinFHy1DxKBUlZqMU8A4CqHWyGMWS/
z2Cu6BpKf0w9laSZHddWNVw9e+eqb8ErqVlP
fJ0exEV1qyuX69wzlgrovZgNTYA= )
3600 NS a.root-servers.net.
3600 RRSIG NS 5 0 3600 20071231235900 (
20070430151246 9975 .
OsAOrywM4VP2ChqTTo9rxxClmx/s1wirsAPz
HrkibqhhrBZautZB+XinMMgmKqgOEY6Utb1w
QqDVL2c+igGvvoF547xanJKsEbJFwHpQs3WS
l57b4QE7iqZSvD0wjCf1rPmRnVGKUNrWMvZ9
OuXWcfpbl8FyROQNABH6OJheoCU= )
3600 NSEC a.root-servers.net. NS SOA RRSIG NSEC DNSKEY
3600 RRSIG NSEC 5 0 3600 20071231235900 (
20070430151246 9975 .
Y7pAuDzIowoCYjL59JPP05do0crUQV3vIeQ3
cxP1tTFMDVkvgOANS75VYR+KB0sCiP4Ar2ie
blZp79kFlaSomne0BE0ajxWx/vWwmbwWJvog
2FbRn8/XoryTw26glGyE1bPj2Gx/yTWEGUMy
aB5Bspr/Zwi/BeJtp/EEny2/7Zg= )
3600 DNSKEY 256 3 5 (
AwEAAcSl6ysz9BgCOFutCagjt7ntAICWSour
Ml5gfDJ3ZdTY13AWqL7cm3UZqfabCRLYHqDL
bcWM/qWXIRjgLtwOLMnBcTVdf0Wr8bF45LHe
j24HINEDaYhSogl9JqBflbJK1ILUVC9M5u8o
aMZRwqTZlcFLR055/YzolImvd/jzlwDT
) ; key id = 9975
3600 DNSKEY 256 3 5 (
AwEAAejnLLnjMVntHQbB23SMnN+2uoO8DpaK
IZGKbzOxbYHniIx1Q1YFwstprpcGTCkceah1
MduEXUoXfd9ySPZt6h9fQiPcEQaRekTwQhZW
+U88HJ20H4tp6v/Cj4vguky/enADwSVeWpFe
pfl0hmbnhEMM5vgP/2YFHPYS+lfTUxCqP2Gx
Dg+Y2Y6XMFYtKEnGIRGAd4juGt9LKnn5jw5a
elvRy0FfN8VR9SyU1fN775nWSzEYfsnvFRIN
2Oj3Wcy9rDPIF7nF1Jt6ckoP3kxROkTRFYpY
104
CvWCgXcDgZe+fgm7ppSYG/3BFIP8126WZAlA
icS+rwwKjAKcnTJa1KDH8FU=
) ; key id = 14983
3600 RRSIG DNSKEY 5 0 3600 20071231235900 (
20070430151246 9975 .
qHXd1EOFDyN+BTvE7nqOjNK9E0+8CHIxcIWX
pAjJnP+KBTd4uoeuTd2zaLo8ewPFUbagU7qd
fEbUxUlNxUEeKCCPs6KEjqm7sunQ9YD9qAUI
4smVprYG5xOxsMbtRWB+DDwYHJfQ/rozPehu
Ci0aBHxNtqjSQjeADiLxfJT7HeQ= )
3600 RRSIG DNSKEY 5 0 3600 20071231235900 (
20070430151246 14983 .
s6pKcjL1aGIhbfpKi9UybObmMDDIsLDn6Bst
nQh8je+1f4eS8t0fStqhFEJYCriANCs9ecC5
Ixg5vMad7Xqic3hgwB/lL0kwXA0uet04ctsK
ycW3989+taZ6EDBYp793yjx4SixOquDaHY8L
gmK8vViASIgUoTs5DcQfK0lbCkJWQzZ1yhxF
3OH70cVAt3Tz0CQ7Zc+4kh6pQuiqlfxxIHw8
fAWYhbzZf4cENWlglsNDS7aB/IydDndBrxY+
niZfOV69ViTw9PnHmJb+gQnhiOGg+ZPIjecy
jpxr5ES32iLpy9zeQA== )
a.root-servers.net. 3600 IN A 200.34.22.57
3600 RRSIG A 5 3 3600 20071231235900 (
20070430151246 9975 .
WzNCNGbdClGiBtASCO9VdzF3brcdPNvEyhbs
eUggYAt4aTL+DQQQGz2tiI4CzbYdFnhqc9Aq
YCXuAkzFhmbalApnynRGnEp8RcBwNC/aA7k3
6IxNDdO+jMF1dfUbVvukQe9gAB85P8yJS3E0
5/3JlX5QDBpJ7NNFeulhpN/L1Kg= )
3600 NSEC test. A RRSIG NSEC
3600 RRSIG NSEC 5 3 3600 20071231235900 (
20070430151246 9975 .
AfwXwgt+hCSqu31Cc8Ra5uyhWmBrOEuFCbAB
UAfvPBUokV42T6DE0WvyAE0HpWVE8/lEwjDD
Wko2L4be4uGeTOvGmyU6CVDN0p5FO+t/cwjn
loP7tyL8YjILrr5gopHTReeZYvsMGDxF/VED
GuGxXiZSEw1z76olBGbIjwST6uE= )
test. 3600 IN NS ns.test.
3600 DS 6544 5 1 (
2F0F8BA97621EDCFEB5EFC7377DD72C15DA7
2692 )
3600 RRSIG DS 5 1 3600 20071231235900 (
105
20070430151246 9975 .
oDf571nxhpfjM4besf5YLe3/b+UgsLf81j49
Q3mmWKYHzgdKhQpedA1a/eeW5RTFFVyNW4kH
J1eUaKM6d3jTdcerR3Whv/qmQvddqjAPLmb5
daeJTIyHxSTJugjfHHTe0sRybIlI6AEyj2Ko
IZbixG9Zw8i4TPb8RiE1hPK6Flc= )
3600 NSEC . NS DS RRSIG NSEC
3600 RRSIG NSEC 5 1 3600 20071231235900 (
20070430151246 9975 .
M70ybZTNm0668EzDfmk1S1M9IJF1I4L7IBJ3
WgvDw5rOP6muBPfuyeW9g6e5Rjs7DiTQS/r+
b9G6syJpED6uB1rxKwxO9dVVosgLm8dsdfla
kEV8Kl/CqU6nxiESSwofK/C5oNchjQ/1jGd/
irbtXAgjp4yprlCxjnbti0prk2A= )
106