DNS vulnerable

Martes, 12 Agosto 2008

Hoy en día no hay aplicación que no utilice el DNS. Este servicio, casi tan antiguo como la propia Internet, es la base por la que podemos navegar, enviar correos o tener la web 2.0: es uno de los cimientos de las redes de ordenadores. No hay ordenador con red que no necesite configurar su DNS. A pesar de su importancia, su visibilidad es reducida y apenas se sabe de él.

¿Qué es el DNS?

El origen del DNS es nuestra escasa capacidad para recordar cosas. En los orígenes de las redes de ordenadores, para acceder al ordenador de un compañero era necesario saber la dirección IP, el equivalente a saberte el teléfono de alguien para llamarlo. Evidentemente, no se tardó mucho en escribir esa información para no olvidarlo en un fichero que se denominó “hosts”: la guía telefónica.

Con el crecimiento de la red, este fichero creció considerablemente y había que actualizarlo para disponer de la última información, llegando un momento en que no era útil ni sencillo realizar el trabajo. Buscando una solución, se plantea un sistema jerárquico en el que se delegan resoluciones (las guías de teléfonos locales): Nace el DNS.

La funcionalidad más usada del DNS permite transformar un nombre lógico (ocubom.wordpress.com) en su dirección IP alias teléfono. Por ejemplo, cuando se le pide al navegador llegar a esta página (de forma muy simplificada):

  1. El navegador pide al servidor DNS configurado la IP de ocubom.wordpress.com.
  2. Como el servidor lo ignora remite la consulta a uno de los servidores raiz. Éste servidor raíz tampoco conoce a dirección completa, únicamente su última parte (el dominio .com). Es decir, este servidor sabe qué servidor conoce las cosas que están dentro de .com
  3. El servidor de DNS vuelve a enviar la consulta al servidor de .com. Éste sigue sin saber resolverlo pero sí es capaz de contestar quién es el que se encarga del dominio “wordpress.com”
  4. El servidor de DNS remite la consulta al servidor de wordpress.com quién es capaz de traducir completamente la dirección.
  5. El servidor de DNS envia al navegador cliente la IP traducida y la almacena durante un tiempo por si se vuelve a pedir.

Este trabajo se realiza de forma reiterativa cada vez que es necesario realizar cualquier acceso.

Además de esa función básica, también es capaz de indicar qué máquina gestiona la página web, el correo del dominio, quién resuelve los nombres DNS ;-)

Una grieta en los cimientos

El DNS está funcionando perfectamente y siempre oculto en las sombras para la mayor parte de los usuarios. Sin embargo, hace poco se ha detectado un fallo en su diseño e implementación que permite falsificar las direcciones.

El fallo de diseño está en la naturaleza distribuida del servicio. Al preguntar por uno de los niveles de dominio se envía una identificación de consulta y un puerto. El servidor preguntado responde indicando esa misma información que se acepta como válida y queda almacenada en la caché por un tiempo. Si llega un identificador/puerto no pendiente se ignora.

Pero ¿y si alguien envía una respuesta falsa con el mismo identificador y puerto? La primera objeción es que es muy difícil que se acierte… pero se ha demostrado que los servidores no utilizan identificadores y puertos aleatorios sino predecibles. En ese caso, se podría hacer que las IPs del banco sean las de un servidor falso. Como esa resolución queda almacenada durante un tiempo, todas las peticiones a ese servidor de DNS serían redirigidas al falso servidor: se ha producido el envenenamiento de cache.

Pero lo peor no es eso. Se podría falsificar quién gestiona el correo o incluso quién resuelve los nombres. En ese caso, cada vez que se pida quién resuelve los nombres de “mibanco.es” se utilizará un servidor de nombres falso que redirige a servidores falsos.

La solución inmediata consiste en asegurar la aleatoriedad de los identificadores de petición y puertos. Además, es necesario que el generador de identificadores y puertos sea realmente aleatorio. Existen algunos test que verifican la seguridad del DNS que comprueban la aleatoriedad del servidor utilizado.

Fuentes:
  • Kriptópolis ha realizado un seguimiento a la vulnerabilidad del DNS.
  • Tooltorials es el autor del vídeo-tutorial sobre DNS
  • Wikipedia contiene información general acerca del DNS

La abadía del crimen

Martes, 22 Julio 2008

Uno de mis libros favoritos es El Nombre de la Rosa de Umberto Eco. Su argumento e historia es muy interesante lo que ha hecho que se adapte para cine (una película protagonizada por Sean Connery) y en un juego: La abadía del crimen.

Navegando por la red, encontré un remake de esa vieja aventura. Sigue escrita en ensamblador (usando en este caso Win32ASM) pero se ha modernizado a los tiempos que corren: versión de 32 bits, sonido… aunque sigue conservando su encanto intácto

La abadía del crimen

Captura de la abadía del crimen

En la web se recopila todo el proceso de creación de este remake. El proceso es prácticamente manual y, debido al uso de ensamblador, una pequeña tortura. Un recordatorio de cómo se programaba a finales de los años 80.


Lemmings

Jueves, 12 Junio 2008

Buceando por la red he encontrado uno de mis juegos favoritos: los lemmings.

El juego consiste en ayudar a los lemmings (unos bichitos muy simpáticos pero no muy listos) a llegar a la salida del nivel. Los lemmings van saliendo a cierta velocidad y avanzan hasta encontrar un obstáculo o hasta que tú indiques qué “oficio” deben desempeñar. Se trata de un adictivo juego en el que terminas cogiendo cariño a los bichitos.

El juego es muy viejo y por eso hay múltiples versiones. En este caso he encontrado una versión escrita en javascript llamada DHTML Lemmings. Esta versión guarda toda la gracia de la original. Dispone de los 4 niveles de dificultad con 10 niveles en cada uno basados en el juego original.

DHTML Lemmings

DHTML Lemmings

El inconveniente de la versión es que es un poco complicada de controlar porque el puntero del ratón no es muy visible.

Existen otras alternativas consistentes en salvar a tux u otros bichejos varios. Aunque son entretenidas no dejan de ser un remake del original.

Siempre es agradable recordar “viejos momentos” como las largas horas pasadas delante de la pantalla salvando a estos simpáticos bichitos. Estos recuerdos me hacen volverme viejo…


La importancia del backup

Jueves, 29 Mayo 2008

Por el mes de agosto del año pasado mi web estuvo un poco de tiempo desaparecida debido a un pequeño lapsus con el teclado. Un rm -rf * ~ es muy peligroso, sobre todo con el espacio entre el * y la ~ (revisadlo en vuestros makefiles). El resultado es un pequeño desastre y un gran susto: se ha borrado gran parte de la web, las carpetas de correo IMAP, algunos repositorios SVN personales y otras cosas.

Apagón

Tira Linux Hispano: Apagón

Tras el instante de pánico inicial, llega el momento de demostrar que somos animales racionales: esa máquina realiza copias de seguridad nocturnas usando el servicio de backup que proporciona la facultad… Abrimos el cliente, nos autenticamos, elegimos el estado del día anterior, elegimos el home y a recuperar. Tras 12 horas en las que aparecía más y más contenido suprimido del home, se ha recuperado absolutamente todo. Únicamente lamentamos la pérdida de los mensajes de spam del día :-)

Casualidades de la vida, dos días después uno de mis compañeros descubre que, por motivos desconocidos que están siendo investigados, un repositorio de SVN en el que desarrolla el trabajo y que llevaba un par de semanas sin tocarse se encuentra misteriosamente vacío. Repetimos la operación: buscamos el día del delito, elegimos el día anterior y el repositorio y en media hora todo nuevamente funcionando.

Se trata de dos ejemplos de lo importante que es tener una copia de seguridad de nuestros datos por muy fiables que sean los sistemas actuales o lo cuidadosos que seamos. Está contado con “poca seriedad” puesto que no se ha perdido nada de información pero podría haber sido catastrófico. No es necesario el maravilloso robot de cintas que se utilizó en estos casos, pero programar que se genere un fichero comprimido de los directorios importantes todas las noches o una vez a la semana puede solucionar más de un quebradero de cabeza.


Formatos de imagen

Miércoles, 28 Mayo 2008

A raíz del artículo imágenes en LaTeX me han preguntado cuales son las diferencias entre los formatos gráficos que presentaba. Las imágenes en el ordenador pueden tener dos formatos básicos: rasterizado y vectorial.

Una imagen rasterizada se compone de una cuadrícula en la que cada división tiene asociado un color diferente. Al pintar los píxeles de la pantalla (u otro medio) siguiendo dicha secuencia de colores se recreará una nueva copia de la imagen. Esta es la base de la fotografía digital: almacenar la imagen en un formato raster y “redibujarla” para generar las copias sin que se degrade su calidad puesto que cada copia es creada desde cero.

Esquema de imagen rasterizada

En el caso de los gráficos vectoriales lo que se almacenan son las formas básicas que lo componen: círculos, rectas… De igual forma que en el caso previo, el ordenador analiza estas formas y las reproduce para volver a crear el gráfico original.

La principal diferencia es el escalado de la imagen. Al ampliar una imagen fotográfica llega un punto en el que aparece el efecto pixelado (menos en CSI que todo es ampliable hasta el infinito y más allá ;) ). Esto se debe a que se ha superado el número de puntos que almacena la imagen y el ordenador empieza a duplicar colores para rellenar los puntos que faltan (imagen de la izquierda).

Comparativa entre imágenes fotográficas y vectoriales

Sin embargo, esto no sucede cuando se utiliza un formato vectorial. Todas las formas pueden ser escaladas mediante operaciones matemáticas y al repintarlas se mantiene la calidad (imagen de la derecha).

Resulta irónico que la fotografía tradicional carezca de ese problema y es posible dimensionar hasta el infinito la imagen proyectando el negativo desde una mayor distancia. Sin embargo, siempre se publicitan diciendo tienen mejor calidad las digitales… si no las intentas ampliar :P


Errores de cálculo

Martes, 20 Mayo 2008

En estos días en los que muchos procesos dependen de ordenadores, no deja de resultar curioso la poca preocupación despertada ante los posibles fallos en los cálculos que la máquina utiliza. Y para muestra tres botones.

Error de división en el Intel Pentium
Descubierto hace unos años, ocasionó un gran revuelo en su momento. Se trataba de un error de precisión en las operaciones de coma flotante (en un lenguaje más sencillo, con decimales) realizadas por el procesador.
Error de división en Office Excel 2007
Mucho más reciente, este error se manifiesta cuando se realiza la multiplicación 85*77’1 el resultado que aparece es 100000 en lugar de 65.535. Posiblemente se deba a un desbordamiento en el formato numérico (65.535 es el máximo valor para un entero representado con 16 bits) que no se convierte a otro formato que lo soporte correctamente.
Error en la resta de los navegadores
Es el más reciente. En este caso basta con la sencilla resta 5’2-0’1 en javascript (ejecutada en un script o escribiendo en la barra de direcciones javascript:5.2-0.1) para que todos los navegadores, exceptuando IE7, devuelvan un resultado erróneo.

La explicación en casi todos estos casos es la misma: la representación numérica de los ordenadores. Un ordenador utiliza formatos binarios para representar los números. Estos formatos pueden tener problemas para representar ciertos valores de forma exacta, sobre todo cuando implican el uso de decimales. Estas pequeñas variaciones hacen que se propaguen errores a partir de la decena de decimales (que no influye notablemente al no requerirse normalmente tanta precisión).

En otros casos el problema es el rango de representación. Si tenemos un entero de 16 bits, se puede alcanzar el valor 216-1=65.535. El número 65.536 supondrá “dar la vuelta al cuenta-kilómetros” y volver a 0 salvo que se pase a otro formato con mayor rango como puede ser un entero de 32 bits o un valor en coma flotante (introduciendo el problema de la exactitud).

Para subsanar estos problemas, las aplicaciones más críticas utilizan bibliotecas especiales capaces de proporcionar una gigantesca precisión sin error, a costa de un mayor tiempo para hacer los cálculos. Pero las aplicaciones más generales no las utilizan por lo que hay que revisar un poco los cálculos ;-)


Instalación y configuración de LaTeX en Windows

Martes, 8 Abril 2008

LaTeX es un potente sistema de preparación de documentos ampliamente utilizado en ambientes científicos. A pesar de su fama de ser complicado de aprender y utilizar, tras una pequeña fase de aprendizaje se convierte en una herramienta muy sencilla y potente.

Está incorporado en todas las distribuciones de Linux por lo que no es necesario realizar ninguna labor especial para poder utilizarlo. Lo que parece difícil es poder utilizarlo en plataformas Windows debido a lo acoplado que está con Linux. De nuevo es una idea equivocada: se puede disponer de un entorno completo instalando un par de programas.

Para utilizarlo se necesitan, por este orden, el núcleo de LaTeX y un editor.

Leer el resto de esta entrada »