OpenSSH y configuración de DNS

Recientemente me fijé que un Linux Box tardaba demasiado tiempo (unos 6 segundos) para pedirme la contraseña una vez ingresado el comando ssh user@ip

Haciendo una depuración del lado del cliente, se mostraba lo siguiente:

debug2: set_newkeys: mode 1
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug2: set_newkeys: mode 0
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /home/vostorga/.ssh/id_rsa
debug2: key: /home/vostorga/.ssh/id_dsa

<una pausa de 6 segundos>

debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering public key: /home/vostorga/.ssh/id_rsa
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
debug1: Trying private key: /home/vostorga/.ssh/id_dsa
debug2: we did not send a packet, disable method
debug1: Next authentication method: password
root@192.168.x.x’s password:

Al principio pensé que había algún problema con los tipos de autenticación disponibles en el servidor, pero viendo un problema parecido del joven jmaslibre con su DNS, me puse a revisar la configuración de dns del servidor OpenSSH, en otras palabras /etc/hosts y /etc/resolv.conf y resultó que la IP especificada en /etc/resolv.conf no  estaba ofreciendo DNS.

Lo curioso es que si no se especificaba servidor DNS o se agregaba otro, funcionaba correctamente, a pesar de estar trabajando en una LAN.

El servidor OpenSSH quería hacer una resolución inversa y esos segundos de pausa era el intento fallido de realizar dicha operación, por lo que las soluciones pueden incluir:

  • Verificar /etc/hosts
  • Verificar que /etc/resolv.conf no contengan servidores inválidos
  • Deshabilitar en el archivo sshd_config la resolución inversa con el parámetro UseDNS no

DNS Recursivo, y ataques DDoS a que se refiere?

Antes de verse intimidado por la cantidad exagerada de texto de este post, si usted administra un servidor DNS, debería de leer lo siguiente:

Primero aclararemos que DNS es el acrónimo en inglés para Sistema de Dominio de Nombres, en otras palabras es un medio que nos permite traducir una dirección web a IP y viceversa, por ejemplo linux.org.sv a la IP 68.178.241.185 y la IP 68.178.241.185 a linux.org.sv. Esto se pensó con el propósito de que la navegación en Internet fuera cómoda.

En forma general, existen dos tipos de servidores DNS, que son los servidores recursivos y los servidores autoritativos, y es posible que ambos se ejecuten en la misma máquina.

El autoritativo es un servidor que conoce información acerca de uno o más dominios (lo que normalmente se denominan zonas), por lo general es uno o dos dominios, y no sabe información sobre otros dominios.

El recursivo es un servidor capaz de encontrar la respuesta a cualquier consulta DNS, y puede encontrar información acerca de casi todos los dominios, por ejemplo google.com, linux.org, gentoo.org . Generalmente estos servidores están abiertos a cualquier IP , en otras palabras, pueden ser consultados por cualquier maquina en el mundo.

El problema es que muchas entidades hacen que el mismo servidor actúe tanto como autoritativo como recursivo. Una práctica sana es tenerlos separados, lo cual previene el problema denominado “envenenamiento de cache”.
Si es imposible tenerlos separados, es recomendable que permitan recursión a solo un rango de IPs “confiables”.

Para clasificar la inseguridad de tener un servidor DNS recursivo abierto a internet es comparable a tener un “Open Proxy” en un servidor proxy o un “Open Relay” en un servidor de correos. Simplemente era algo que hasta cierta fecha no fue aprovechado por “mentes siniestras” pero que ahora es aprovechado y utilizado para fines oscuros.

Posibles riesgos de tener un servidor recursivo en Internet
Ser una víctima de ataques de envenenamiento de caché, la cual hace que el servidor afectado almacene información falsa. Dicha información puede ser utilizada para comprometer la seguridad de los clientes que hacen consultas al servidor afectado, por ejemplo redireccionar google.com a un sitio con malware, o redireccionar sitios de bancos con la intención de obtener información confidencial del usuario.

El servidor podría ser ocupado para un ataque DoS distribuido el cual puede tener las siguientes consecuencias:

  • La gran cantidad de consultas DNS recibidas por el servidor y la gran cantidad de respuestas enviadas a la víctima pueden consumir una considerable cantidad de ancho de banda
  • Problemas legales ya que si, por ejemplo, un equipo de un ISP ataca a un cliente, seguramente el cliente lo demandará

Un ejemplo de las consecuencias de la recursividad (Ataque DDoS)

Aquí

En que consiste el ataque? me da curiosidad saber…
Trataré de explicarlo de la manera mas sencilla: con ejemplos.
Para dar un ejemplo, a veces un dominio x recibe respuestas ICMP echo, porque “alguien” modifico los paquetes para que parecieran como si el dominio x hizo la petición ICMP echo, en otras palabras recibimos respuesta de un ping que NUNCA salio de nuestro dominio.
Ahora de otra manera, como los paquetes UDP son fragmentados por los servidores, y UDP puede ser fácilmente modificado su IP de origen, el servidor DNS recibe un paquete grande, que se hace mas grande (técnicamente, mas fragmentos), enviando la respuesta al blanco atacado. Imaginemos muchos DNS recursivos enviando respuestas al “blanco atacado”. Si, eso es una Denegación de servicio distribuida (DDoS).

Si sienten la explicación anterior muy sencilla o vaga, pueden leer http://www.isotf.org/news/DNS-Amplification-Attacks.pdf 🙂

Soluciones al problema

Entonces algunos podrían decirme, y no es esa la intención de un DNS, resolver todos los dominios a todo el mundo?
No, esa es una función de un servidor recursivo, como hemos hablado anteriormente puede ser autoritativo y contener información solamente para un dominio. Lo mas conveniente es que permita la recursividad solamente a un rango de IPs

Yo estoy protegido, porque ocupo Bind en Linux/BSD 🙂
No, la recursión no se refiere a un sistema operativo o software en específico 🙁

Espero lo anterior les haya despertado la curiosidad sobre el tema, saludos

Powered by WordPress with GimpStyle Theme design by Horacio Bella.
Entries and comments feeds. Valid XHTML and CSS.