13 ene. 2014

NTP Reflection Attack

Los ataques de denegación de servicio se siguen usando tanto en ataques de protesta, como por parte de otras empresas para dejar sin servicio a empresas de la competencia. Para ataques de denegación de servicio hay muchísimos, quizás los más famosos sean los de tipo flood, en los que el servidor no es capaz de atender todo el tráfico entrante y por lo tanto se satura y deja de estar accesible.

Pero hay otro tipo de ataques que se llaman ataques del tipo "Reflection" es algo bastante peligroso y no muy complicado de llevar a cabo. Cuando salió la noticia de que, con NTP era posible, realizar ataques de denegación de servicio, me he acordado de que con NTP, ya tenemos 3 servicios (entre otros) con los que se pueden hacer ataques del tipo "Reflection".

Para los expertos NTP (demo) no representaba una amenaza seria y a menudo es descuidado por los administradores de sistemas a pesar de que la vulnerabilidad ya aparecía en 2010. Por cierto, incluso tiene un CVE asociado, el CVE-2013-5211), el grupo DERP Trolling ha dejado patente que tenemos que cambiar la visión que tenemos frente a este protocolo.

Ataque sobre NTP

NTP es un protocolo usado principalmente para sincronizar los relojes del sistema operativo. Podemos leer sobre el en las siguientes RFC: http://www.ntp.org/rfc.html.

Los servidores NTP escuchan en el puerto 123 UDP y por cada petición, por ejemplo, de 8 bytes pueden llegar a generar una respuesta hasta casi 60 veces mayor. Pero esta respuesta no es la habitual de un servidor NTP sino que es una característica del protocolo que ahora ha sido parcheada para evitar este tipo de ataques. Curiosamente en la lista de desarrollo de NTP la debilidad ya aparecía en 2010. Por cierto, está corregida en la versión 4.2.7 del servidor NTP.

Es posible efectuar una petición al servidor NTP para obtener una lista con información de peticiones a modo de registro, una lista denominada Monitor data. Incluso existe un script para nmap que encuentra servidores NTP con esta característica. Gracias a esto es posible amplificar la respuesta.

Ataque sobre SNMP

SNMP (Protocolo simple de gestión red) es usado para monitorizar y administrar dispositivos en una red IP. Basado en una arquitectura gestor/agente, normalmente utiliza el puerto 161 UDP. Existen diferentes versiones de SNMP en uso, los más usados son SNMPv1 SNMPV2, la versión más reciente es SNMPv3 no ha sido ampliamente aceptada dado que muchos de los dispositivos implementados en el mercado no soportan dicha versión, que permite cifrar las conexiones, lo que ofrece una mayor seguridad antes posibles atacantes.

Principalmente intervienen los siguientes elementos:
  • Dispositivos administrados: Es un nodo de red que contiene un agente SNMP. Ejemplo: Router.
  • Agente: Software que reside en el dispositivo administrado
  • NMS (Sistemas de administración de la red): Ejecuta aplicaciones que supervisan y controlan los dispositivos administrados. 

En la imagen se ha preparado un laboratorio para hacer las pruebas. Este tipo de ataques no siempre pueden ser reproducidos en un entorno como internet ya que los proveedores de servicio suelen aplicar medidas de filtrado que impiden la realización de técnicas de spoofing.

¿Como funciona el ataque?
El atacante envía una petición con la dirección IP manipulada en la que solicita información de un OID concreto de la MIB (base de datos jerárquica) del SNMP. Esta información es respondida a la dirección IP spoofeada por el atacante. En el caso de una consulta get-request la respuesta dada por el nodo snmp es relativamente mucho mas grande que la petición de consulta, esto quiere decir, que muchas consultas a nodos snmp, hace efectivo este ataque.

Recomendaciones
  • Implementar SNMPv3: En el caso que los dispositivos puedan soportar esta versión del protocolo, es posible cifrar las comunicaciones, además de otras características de seguridad.
  • Enviar captura de autenticación: Es recomendable aplicar filtrado a los hosts que pueda realizar consultas SNMP y no permitir conexiones de los hosts no autorizados.
  • Nombres de comunidad aceptados: Un nombre de comunidad actúa como una contraseña compartida por uno o varios hosts SNMP. Es recomendable no utilizar nombres de comunidades por defecto (public/prívate). 

Ataque sobre DNS

Es un sistema de nomenclatura jerárquica para computadoras, servicios o cualquier recurso conectado a Internet o a una red privada.
Su función más importante, es traducir (resolver) nombres inteligibles para los humanos en identificadores binarios asociados con los equipos conectados a la red, esto con el propósito de poder localizar y direccionar estos equipos mundialmente.
Inicialmente, el DNS nació de la necesidad de recordar fácilmente los nombres de todos los servidores conectados a Internet.

Se compone básicamente por:
  • Clientes DNS: Un programa cliente DNS que se ejecuta en la computadora del usuario y que genera peticiones DNS de resolución de nombres a un servidor DNS (Por ejemplo: ¿Qué dirección IP corresponde a nombre.dominio?);
  • Servidores DNS: Contestan las peticiones de los clientes. Los servidores recursivos tienen la capacidad de reenviar la petición a otro servidor si no disponen de la dirección solicitada.
  • Zonas de autoridad: Porciones del espacio de nombres de dominio que almacenan los datos. Cada zona de autoridad abarca al menos un dominio y posiblemente sus subdominios, si estos últimos no son delegados a otras zonas de autoridad.

¿Como funciona el ataque?
En este escenario el atacante realiza una consulta a todos los registros DNS usando DNS recursivos, este tipo de DNS, si están mal configurados permiten que cualquier dirección IP pueda realizar consultas.

La petición UDP pide todos los registros del DNS, además la petición se realiza con la IP modificada, todas las peticiones de respuesta irán dirigidas a la dirección IP falsificada. Para que el ataque tenga éxito la petición el paquete UDP falsificado se realiza contra varios DNS recursivos, los DNS han de tener un registro de gran tamaño, para generar mucho tráfico. El paquete UDP también tiene el valor del TTL modificado, de esta manera, alarga la vida del paquete antes de ser descartado.

Recomendaciones
Un DNS se puede configurar de dos maneras, autoritativo, en cuyo caso conoce información acerca de uno o más dominios (lo que normalmente se denominan zonas), y no sabe información sobre otros dominios.

Otro modo de trabajo del DNS es el recursivo, en este caso 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, lacaixa.es. Generalmente estos servidores están abiertos a cualquier IP, en otras palabras, pueden ser consultados por cualquier máquina.

La recomendación en estos casos es separar el servidor autoritativo del recursivo, por ejemplo el autoritativo abierto a Internet y el recursivo solo para nuestra LAN, si no se pueden separar, permitir la recursividad a rangos de IPs confiables.

Ya hemos visto como se puede hacer con SNMP y DNS para hacer ataques del tipo "Reflection".
En la última investigación se ha visto que se podía hacer lo mismo usando el servicio NTP.

¿Como saber si nuestro servidor NTP es vulnerable?

Hay que ejecutar lo siguiente por consola:
ntpdc -n -c monlist remote_address

También se puede usar un script de Nmap: https://svn.nmap.org/nmap/scripts/ntp-monlist.nse
Recomendaciones
La forma más fácil de actualizar a la versión 4.2.7 NTP, que elimina el comando monlist completo. Si la actualización no es una opción, se puede iniciar el daemon NTP con NOQUERY  habilitada en el archivo conf NTP. Esto desactivará el acceso al modo 6 y 7 Packetts de consulta (que incluye monlist).

Fuente: DragonJAR e Hispasec

0 comentarios:

Publicar un comentario

Gracias por dejar un comentario en Segu-Info
Si vas a dejar una consulta, procura tener habilitado tu perfil en Blogger o deja una forma de contacto.

Gracias por comentar!