BIND - Vulnerabilidades

 

La idea principal de este "Tutorial" es hacer posible la comprensión de ciertos problemas descubiertos y vulnerabilidades detectadas en Bind, a fin de colaborar con los encargados del funcionamiento de los sistemas a determinar el grado de vulnerabilidad de los mismos y a encontrar una solución al problema.

Se debe tener presente que algunas soluciones se consiguen mejorando la configuración del sistema, no permitiendo sistemas de tipo abierto en UNIX. Por otro lado se pueden encontrar sitios en Internet que brindan ayuda de tipo transitoria y lugares donde adquirir "patches".

 

Introducción.

Configuración y Vulnerabilidades.

Últimas vulnerabilidades detectadas.

Consejos.

Fuentes.

 

 

INTRODUCCIÓN SOBRE BIND:

 

Para los usuarios de Internet es más cómodo trabajar con nombres o alias de host que recordar las direcciones IP asignadas a los mismos. La solución inicial consistió en mantener archivos ASCII locales para hacer la correspondencia "mapeo" entre direcciones y nombres. Dado el crecimiento explosivo de Internet este mecanismo resultó inmanejable y se debió recurrir a otro tipo de sistema basado en una base de datos distribuida a nivel de red, conocida como Bind (Berkeley Internet Name Daemon). La misma es una implementación del DNS (Domain Name Server), escrita en sus inicios para los sistemas UNIX.

 

Bind está compuesto de las siguientes partes:

 

Espacio de nombres de dominio:

Es una estructura de árbol que identifica grupos particulares de anfitriones con información sobre ellos. Cada "nodo" mantiene una base de datos con los anfitriones que están bajo su "autoridad". Dicha base de datos debe ser resguardada de posibles intrusos.

La información adecuada es extraída de la misma mediante procesos de consultas. Más adelante describiremos estrategias de ataque a un servidor usando consultas recursivas.

La información contenida en la base de datos distribuida es muy importante dado que contiene direcciones IP, nombres, dominios, alias de correo, etc. Esta es información de suma utilidad para un atacante.

 

Cliente:

La parte del Cliente contiene las librerías usadas por los programas que solicitan servicios de DNS (por ejemplo Telnet, Xwindows, ssh), archivos de cabecera y páginas de manual.

 

Servidor:

El servidor de nombres contiene un daemon llamado "named" y el programa que lo soporta "named-xfer". Estos proveen una fuente de información usada para mapear entre nombres de host y direcciones IP. Cuando están configurados en forma apropiada, los daemon pueden interoperar a través de una red para proveer los sistemas de mapeo de la misma. De esta forma cuando a un servidor le llega una petición de otra zona se ocupa de hacer el contacto con la autoridad de dicha zona.

La parte del servidor está compuesta por: el demonio, programas soporte, scripts y páginas de manual.

Estos programas guardan y conservan la información completa de un subconjunto del espacio de nombres de dominio e información sobre otras zonas almacenadas en "cache" y toda la información de su área de autoridad. La memoria "cache" debe ser resguardada pues como veremos más adelante es una de las vulnerabilidades del sistema Bind.

 

Herramientas:

Conocidas como "resolver" o resolvedores. Son programas o rutinas que extraen la información de los servidores de nombres ante una petición de un anfitrión. Utilizan la parte cliente para extraer información de esos servidores.

Pensemos que sucedería si un Caballo de Troya ingresara a nuestro sistema simulando ser el resolvedor. Al efectuarse una consulta se estaría realizando una acción oculta y determinada por un intruso. El administrador del sistema debería determinar una estrategia para evitar este tipo de vulnerabilidades.

 

 

 

 

 

 

CONFIGURACIÓN Y VULNERABILIDADES:

 

Para poder utilizar el DNS cada host debe configurar su "resolvedor" local.

 

Archivos a ser configurados y cuidados especiales a ser tenidos en cuenta:

 

  • /etc/host.conf

Es un archivo de configuración que le dice al resolvedor cuales servicios usar y en que orden, además de ciertas "opciones" que deben ser tenidas en cuenta por el administrador del sistema ya que pueden provocar que el mismo quede vulnerable a intrusos.

Opciones a ser incluidas:

 

ALERT ON

Es una herramienta de seguridad que permite que un intento de engaño de una dirección IP sea registrado en el sistema por la facilidad SYSLOG

 

NOSPOOF ON

Utilizada para prevenir el engaño "spoofing". Se utiliza la resolución inversa para hacer concordar un nombre de anfitrión con una dirección IP especificada. Este mecanismo si bien afecta el rendimiento nos asegura que nadie está pretendiendo ser un anfitrión diferente al que dice ser.

Se recomienda resguardar el archivo /etc/host.conf. No sólo porque un intruso podría modificarlo, sino también localizar el archivo /etc/hosts que contiene información de los host de una red con sus nombres, alias y direcciones IP.

 

Este archivo controla la forma como el resolvedor usa el DNS para la resolución de nombres de anfitrión. Contiene una lista de servidores de nombres de DNS con los que hará contacto y en un orden determinado, información del dominio local y hasta tres servidores de nombres con sus respectivas direcciones IP.

Como notará si un atacante accede a este archivo podrá redirigir las consultas a otra máquina controlada por él. Si modificara la dirección IP de los servidores y colocara un nombre, el DNS no sabría con quién establecer contacto y por lo tanto no se podría trabajar. Además al tener acceso a dicho archivo conseguiría las direcciones de los servidores y podría luego aplicar alguna técnica para dejar a un servidor fuera de operación.

El administrador deberá implementar alguna técnica de protección del archivo de configuración.

 

Es el demonio que proporciona el DNS bajo LINUX. Se inicia al momento del arranque, lee la información de configuración, escribe él ID de proceso en el archivo /etc/named.pid y comienza a escuchar peticiones en el puerto de red especificado en /etc/services. Corre hasta apagar el host.

Para evitar vulnerabilidades el administrador deberá implementar alguna técnica de protección de la información contenida dentro de /etc/.

 

Archivos leídos por el demonio:

  • /etc/named.boot

Es la clave de todos los demás archivos de configuración que usa "named". Contiene apuntadores a diversos archivos de configuración, servidores de nombres y "opciones" descriptas posteriormente.

De no ser configuradas, éstas últimas, en forma adecuada dejarán vulnerabilidades en el sistema.

 

DIRECTORY "directorio"

Especifica el "directorio" donde están localizados los archivos de zona, por lo general es /var/named.

Accediendo un intruso a named.boot sabrá entonces donde localizar los archivos de zona, los cuales intentará alterar o utilizar su información con otro propósito, si es que los mismos no han sido protegidos.

 

PRIMARY "dominio" "named.hosts"

Declara que el demonio es confiable para el "dominio" especificado en la opción y le hace cargar la información de zona desde el archivo indicado (named.hosts).

El archivo named.hosts contiene información del dominio local y debe ser protegido. No sólo alcanza con cambiarle el nombre ya que si un atacante accede a named.boot sabrá donde está localizado el archivo de información del domino local. La información de los anfitriones de su zona es considera confiable.

 

CACHE "dominio" "named.ca"

Establece la información almacenada en la "cache" para "named".

El archivo "named.ca" es muy importante. Contiene un conjunto de registros conocidos como "pistas de servidores" que listan información acerca de los servidores de nombres raíz y sus direcciones IP.

Sin el registro cache no se puede realizar ningún cache en el servidor local, lo cual produciría severos problemas en el proceso de búsqueda de nombres. El servidor local tampoco podría establecer contacto con ningún servidor de nombres de raíz y por lo tanto sería incapaz de resolver cualquier nombre de anfitrión local.

Un archivo llamado named.rev es utilizado para la resolución inversa de direcciones. De utilidad para evitar el engaño "spoofing" de direcciones. El administrador deberá resguardarlos.

 

FORWARDERS "lista de servidores"

Permite que algún servidor de nombres de los especificados en "lista de servidores" resuelva una petición, cuando la misma no puede ser realizada a partir de la información local. Esto podría ser utilizado por un intruso para redirigir la consulta hacia otro lugar luego de dejar inoperante al servidor local.

 

SLAVE

Convierte al DNS local en un esclavo. El servidor local trata de resolver los nombres de DNS por medio de consultas recursivas. Se utiliza en conjunto con la petición a los servicios descriptos en la opción forwarders.

Esta opción es muy peligrosa y es una de las vulnerabilidades que se están explotando actualmente en Internet.

 

Toda la información de los archivos de base de datos "named" está guardada en un formato conocido como "registro de recursos", utilizado también por "named".

Una mala modificación de estos registros puede provocar problemas de configuración del DNS y por ende su mal funcionamiento. Se debe evitar que terceros alteren en forma intencional o por error los registros de recursos.

CONSEJOS:

 

En general las nuevas distribuciones de Bind tienen importantes problemas de seguridad. No todas están resueltas.

Varios problemas pueden ser corregidos con el uso de técnicas de autenticación criptográfica.

CERT recomienda la instalación de patches cuando existan o seguir ciertas reglas de carácter transitorio publicadas en Advisories.

Es una buena técnica de seguridad filtrar en un router todos los servicios de autenticación basados en name, así no tendría que confiar en la información de DNS para la autenticación. Esto incluye servicios de rlogin, rsh (rpc), xhost, NFS y cualquier otro servicio instalado localmente que sea basado en confianza (trust based) de la información del dominio.

Cualquier alteración en la sintaxis de los archivos o en la configuración pueden provocar que el DNS no funcione. Por lo tanto proteger archivos involucrados y "scripts". Si son alterados se podrían redirigir las consultas hacia otros lugares o hosts inexistentes.

No tener configuraciones de tipo abiertas. Evitar vulnerabilidades en el directorio /etc/.

Utilizar el comando "nslockup" para probar los servidores de DNS.

Utilizar software desarrollado especialmente para chequeo de vulnerabilidades en un sistema.

Realizar resolución regular e inversa para probar el DNS.

Evitar el "spoofing".

ÚLTIMAS VULNERABILIDADES DETECTADAS:

 

Las mismas están siendo muy explotadas en Internet.

 

Ayuda a que un atacante obtenga acceso no autorizado a hosts corriendo versiones vulnerables del programa RPCbind, obteniendo información sobre programas RPC remotos aún cuando la conectividad con el port standard de RPCbind (111) sea limitado por filtros.

 

Tres problemas combinados se explotan mucho en LINUX, que entre otras cosas, permiten ejecutar código arbitrario en un servidor como "superusuario". CERT aconseja actualizar a la versión Bind 8.1.2. Consultar el advisorie de CERT. Conseguir Actualización.

 

El uso ID's predecibles en consultas y consultas recursivas de un servidor de nombres permite corromper su cache. Esto posibilita que un atacante altere él cache del name server en forma tal que altera la resolución de direcciones y nombres de hosts en Internet.

La técnica consiste en : un usuario remoto con privilegios de "root" contamina él cache de Bind enviando paquetes UDP con dirección origen falso. No es necesario que el atacante tenga control del name server ni que haga sniffing.

La falla de seguridad es haber permitido que el servidor de nombres esté configurado para aceptar recursión de consultas. Esta facilidad permite que un name server proporcione respuestas sobre dominios que el no atiende. El mecanismo utilizado es el siguiente: cuando el servidor de nombres recibe la consulta si no es de su autoridad hace contacto con el DNS apropiado y cuando recibe la respuesta la encamina hacia el cliente que realizó la consulta respectiva.

Para que esta técnica surta efecto el DNS debe estar configurado para soportar recursión y mantener las respuestas en él cache. Esta es una práctica común y configurada por default que debe ser modificada por el administrador del sistema.

 

Bind permite que se provean a programas HOSTNAMES de longitud mayor a MAXHOSTNAMELEN. Esto puede provocar un error de BUFFER OVERFLOW pues muchos programas utilizan buffers de MAXHOSTNAMELEN de tamaño y copian los resultados de un query en dichos buffers.

Esto permite a un atacante, en el peor de los casos, ejecutar cualquier comando en un servidor remoto.

Son vulnerables a esta técnica todos los sistemas corriendo Bind.

La solución es conseguir patches de software disponibles.

 

Es el envenenamiento de la cache. Ocurre cuando información maliciosa recibida desde un servidor de nombres remoto es grabada (cached) por otro name server. Esta información en mal estado está disponible para otros programas que soliciten información del cache a través de la interfaz del cliente.

Análisis reportados por CERT indican que esta técnica está siendo utilizada para afectar el mapeo de hostsnames y direcciones IP. Una vez que el mapeo es cambiado cualquier información enviada entre hosts puede estar sujeto a inspección, captura o corrupción de la información intercambiada entre hosts.

FUENTES:

 

Fuentes: Shadow Sentinel, Secure Network Inc, Core SDI S.A. y CERT

 

 

 

 

PATCHES:

Código implementado para la solución de problemas específicos.