Mostrando entradas con la etiqueta Avanzado. Mostrar todas las entradas
Mostrando entradas con la etiqueta Avanzado. Mostrar todas las entradas

INDICE: 



En las anteriores artículos (I, II) se realizo un repaso sobre los conceptos fundamentales del funcionamiento del Sistema DNS. En esta "entrada" se analizaran los problemas de seguridad asociados al Sistema DNS actual y cuales son las medidas de protección a implementar.

Si recordamos los anteriores artículos sobre DNS, para conectarnos a un  servidor o cualquier otro recurso de una red, es necesaria alguna forma de indicar el destino, esto se consigue asignando direcciones de red (IP). La dirección de red (IP) debe de ser única para poder encaminar correctamente los paquetes de un host o router a otro, esto desde la perpestiva de los equipo informáticos. Sin embargo, ya se vio en su momento, que desde la perspectiva del usuario para acceder a los recursos de Internet se utilizan los nombres de dominio (DNS) que da lugar al Sistema de DNS actual, para cada nombre de dominio existe una o varias IP asociadas.

¿Qué pasaría si alguien consiguiera cambiar la IP asociada a un determinado dominio?

En ese caso, el acceso a los servicios a través del nombre de dominio "manipulado" conduciría al usuario hacia un servidor "malicioso" con publicidad, phishing, troyanos, malware, etc. En definitiva, llevaría al usuario hacia un servidor "falso" o incluso provocaría la caída del servicio (DoS).

Vulnerabilidades DNS

En 2008 fue descubierta una grave vulnerabilidad en el Sistema DNS por el investigador Dam Kamisky, esta permitía a un atacante realizar un "envenenamiento de la cache" (cache poisoning attacks). El ataque no era nuevo, sin embargo la forma de explotar esa vulnerabilidad fue lo que clasifico la vulnerabilidad como "muy crítica".

El ataque de "envenenamiento de la cache DNS" consiste en "explotar" una vulnerabilidad de modo que el servidor DNS acepta una información "manipulada", al no realizar una validación correcta en las respuestas DNS procedentes de una fuente (servidor) "no autoritativa". Al no validar correctamente el atacante puede "inyectar/manipular" registros siendo estos cacheados en el Servidor DNS.

La cache de los Servidores DNS es una pequeña base de datos que contiene el resultado de las peticiones de "nombres de dominio" (DNS) a consultas previas, con objeto de acelerar los tiempos de respuesta. Es decir, cuando los usuarios realizan una petición al www.google.es, realmente el sistema de cache devuelve inmediatamente la IP almacenada en la cache como consulta previa realiza por otro usuario, no llegando a consultar el registro original. 

Existen dos tipo de cache:

Local: es la base de datos ubicada en los ordenadores de los usuarios, es decir, la cache que guarda tu ordenador cada vez que realizas una consulta mediante el navegador Web.

C:\ipconfig /displaydns

Si deseamos borrar la cache local de DNS, se ejecuta el comando: ipconfig /flushdns


Remota: la base de datos ubicada en los servidores DNS, utilizada para acelerar las consultas DNS, de forma que ante las mismas consultas, resuelve utilizando el sistema de "cache" y no accediendo al registro DNS correspondiente.

El ataque de Dam Kamensky consite en "secuestrar" una sesión (hijack the authority record) procedente de un servidor autoritativo, de forma que el proceso de "envenenamiento" sea mucho más efectivo y rápido. La explicación con todo lujo de detalles sobre esta vulnerabilidad la podéis encontrar en la "An Illustrated Guide to the Kaminsky DNS Vulnerability", cuya lectura os recomiendo.

Como se puede intuir, el alcance del "problema" si se consigue envenenar la cache de un servidor DNS, y sobre todo si la cache que ha sido "envenenada" es la correspondiente a un servidor "raíz", es realmente alarmante ¿verdad?. Afortunadamente existe solución, y los servidores DNS han corregido la vulnerabilidad.

La falta de controles de integridad en las consultas recursivas realizadas por el protocolo DNS, y por consiguiente por los Servidores que lo implementan, hacen de él un protocolo (in)seguro.

Seguridad en los Sistemas

Existen algunas medidas para prevenir este tipo de ataques y vulnerabilidades:

1) Si el servidor DNS no es accesible desde Internet, no puede realizarse el ataque con éxito. Las empresas con servidores DNS propios, deberán de proteger el acceso a los servidores desde Internet, creando dos zonas (Externa / Interna). Siendo el servidor DNS interno de la red quien tenga mayor relevancia, mientras el externo sea configurado en modo Relay.

2) DNS-Sec: una solución parcial a los problemas existentes en DNS. DNSSEC responde a “Domain Name System Security Extensions”. DNSSEC es una extensión del protocolo DNS (RFCs 1034 y 1035) y es definido en varias especificaciones por la Internet Engineering Task Force (IETF). Proporciona control de integridad en los registros y consultas de los servidores DNS, aunque todavía existen ciertos problemas de implementación que ponen en duda su efectividad real, pero en teoría la correcta implementación de esta extensión daría con la solución al "envenenamiento de la cache". Existe un proyecto Open Source dedicado a gestionar e implementar DNSSEC en los servidores, denominado OpenDnsSec.

3) La utilización de SSL, se puede considerar una medida efectiva al validar el servidor mediante certificados. El problema real, es que no existe una forma sencilla de que el usuario sea correctamente advertido, y en la mayoría de los casos el "propio" usuario es quién ignora las advertencias de seguridad relacionadas. Es por tanto, una medida técnica efectiva, aunque parcialmente ignorada por la falta de concienciación en seguridad.

Realmente, esta vulnerabilidad es inherente al protocolo DNS, por lo que sigue existiendo y por consiguiente es explotable. Sin embargo, existen algunas medidas de mitigación que dificultan la ejecución del ataque y minimizan la probabilidad de éxito. 

En caso, de no poder aplicar algunas de las medidas de "prevención" anteriormente expuestas, se deben de tomar una serie de precauciones, antes de configurar un servidor DNS con acceso desde Internet. A este respecto los fabricantes han desarrollado un parche para los servidores DNS (software) que realiza la "randomización" de los puerto origen (source port) que se utilizan en las conexiones para reducir la superficie de exposición y la probabilidad de éxito en el ataque. 

La aplicación del parche disponible por el fabricante no es suficiente, se debe de realizar una configuración  segura de los servidores DNS, limitar el uso de consultas recursivas y controlar mediante "listas de acceso" y/o cortafuegos los servidores autorizados.

Hasta aquí el flash de formación sobre DNS, espero que os hay gustado.

Un Saludo.

Referencias:
Nivel: Avanzado

INDICE: 

En la primera parte del "flash de formación: DNS Conceptos y funcionamiento", se introdujeron los conceptos y funcionamiento básico del Sistema DNS. En esta segunda parte se va a proceder a analizar el funcionamiento del sistema DNS, desde un punto de vista práctico.

Para ello se analizará el proceso de comunicación y resolución del nombre de dominio cuando se consulta una página web. Como parte de este ejemplo, se utilizará la herramienta wireshark para analizar el tráfico de red.

Terminología

Antes de empezar, creo que es conveniente recordar algunos términos básicos (RFC1034), que han sido tratados en la primera parte, y algunos otros más complejos que serán tratados más adelante en este artículo:
  • Host Name: El nombre de un host es una sola “palabra” (formada por letras, números y guiones). Ejemplos de nombres de host son “www“, “blog” y “obelix“.
  • Fully Qualified Host Name (FQHN): Es el “nombre completo” de un host. Está formado por el hostname, seguido de un punto y su correspondiente nombre de dominio. Por ejemplo, “sxato2.blogspot.com“
  • Domain Name: El nombre de dominio es una sucesión de nombres concatenados por puntos. Algunos ejemplos son “webmail.example.com“, “example.com” y “com“.
  • Top Level Domains (TLD): Los dominios de nivel superior son aquellos que no pertenecen a otro dominio. Ejemplos de este tipo son “com“, “org“, “net” y “es“.
Funcionamiento

DNS son las iniciales de Domain Name System (sistema de nombres de dominio) y es un sistema que sirve para resolver nombres de dominio, es decir,un sistema para transformar nombres de dominio a las direcciones IP que necesitan los sistemas de comunicación para localizarse en Internet. Este sistema se encuentra soportado por un fichero (base de datos) que guarda la dirección IP asociadas a los host donde está alojado el contenido del dominio al que queremos acceder.

IP - NOMBRE DOMINIO
 209.85.169.121 - www.seguridadparatodos.es
En la parte I, se comentó la estructura jerárquica del espacio de nombre de dominios, en forma de árbol, donde un nombre de dominio completo consiste en la concatenación de todas las etiquetas de un camino a lo largo del árbol.



El sistema DNS esta soportado por una aplicación servidor, que responde a las peticiones de información sobre el nombre de dominio. La arquitectura del funcionamiento de DNS, esta compuesto por un sistema estructurado en forma de “árbol“. Cada nodo del árbol está compuesto por un grupo de servidores que se encargan de resolver un conjunto de dominios (zona de autoridad). Un servidor puede delegar en otro (u otros) la autoridad sobre alguna de sus sub-zonas (esto es, algún subdominio de la zona sobre la que él tiene autoridad). Un subdominio puede verse como una especialización de un dominio de nivel anterior. Por ejemplo, “mail.example.com” es un subdominio de “example.com“, que a su vez lo es del TLD “com“.

Los servidores con autoridad sobre los TLD son los llamados “root servers” (o “servidores raíz“) del sistema. Actualmente ha 13 servidores raíz, que controlan la gestión de la resolución de nombre en todo Internet, es decir, un ataque [1][2] a los servidores raíces, provocaría la caída "aparente" de Internet, puesto que no podrían resolverse los nombres de dominio, y la mayoría de las aplicaciones en la actualidad no serían capaces de funcionar.


Ejemplo: Capturar una petición DNS a www.seguridadparatodos.es

1. Eliminar la cache DNS de nuestro equipo, en equipos windows el comando es el siguiente:

 C:>  ipconfig /flushdns

2. Establecer el filtro para capturar solo tráfico UDP, en el puerto 53, en la aplicación de análisis de tráfico de red (wireshark), el valor del filtro es:

" udp.port == 53"

3. Debido a que normalmente nuestro router, se encarga de resolver los nombres de dominio, es por ello que solamente capturamos una parte de la comunicación:

1-> petición de resolucion (Query) www.seguridadparatodos.es
2-> el router recibe la petición, y reenvia al servidor DNS del ISP (proveedor de servicios): www.seguridadparatodos.es
3-> el ISP examina la www.seguridadparatodos.es, extrae: seguridadparatodos.es y envia una pregunta a un servidor DNS Raiz (root) "."
4-> el DNS Raiz comprueba la consulta (query): seguridadparatodos.es, y deriva su respuesta al ".es".
5-> El ".es" localiza el host,  y devuelve (awnser) www.seguridadparatodos.es -> IP
6-> todos los paquetes vuelven hasta el router, quien se lo comunica a nuestro equipo.
7-> El navegador muestra la página web. Proceso se realiza en cuestión de microsegundos.


Una vez que sabemos como funcionan el sistema DNS, creo que es muy interesante saber, con más detalle que tipo de información puede registrarse y almacenarse en los servidores DNS. Para ello, en cada zona de autoridad se dispondrá de registros de distintos tipos. Entre los más importantes se encuentran:
  • A (Address): Este registro se utiliza para traducir nombres de hosts del dominio en cuestión a direcciones IP.
  • CNAME (Canonical Name): El nombre canónico es un alias para un host determinado. (No define una dirección IP, sino un nuevo nombre.)
  • NS (Name Server): Especifica el servidor (o servidores) de nombres para un dominio.
  • MX (Mail Exchange): Define el servidor encargado de recibir el correo electrónico para el dominio.
  • PTR (Pointer): Especifica un “registro inverso“, a la inversa del registro A, permitiendo la traducción de direcciones IP a nombres.
  • TXT (Text): Permite asociar información adicional a un dominio. Esto se utiliza para otros fines, como el almacenamiento de claves de cifrado, “DomainKeys” o “Sender Policy Framework“, trataremos este tema en artículos posteriores.

 Los mas utilizados son CNAME, para configurar por ejemplo:
  • www.seguridadparatodos.es -> TIPO A: registro de la dirección IP a la que apunta.
  • seguridadparatodos.es -> TIPO CNAME alias del registro anterior.
Si quiere utilizar un servidor de correo electrónico con tu propio dominio (DNS), el ajuste que se tendrá que realizar en el servidor es incluir un nuevo registro DNS, TIPO MX, que apunte a la dirección IP del servidor de correo y se le asignarán una prioridad.

Por ejemplo, puedes utilizar Google Apps, para configurar de forma gratuita, hasta un máximo de 10 usuarios, un servicio de correo electrónico con tu propio nombre de dominio. Aquí os dejo un enlace al tutorial de Google.


En la próxima entrega, os contaremos los "problemas de seguridad" y las medidas de protección existentes.