DROWN, vulnerabilidad crítica en OpenSSL

img1DROWN (Decrypting RSA with Obsolete and Weakened eNcryption) es una vulnerabilidad grave -de esas con página Web, paper técnico y hasta logo, como tiene que ser :)-, que afecta a HTTPS y otros servicios que dependen de algunos de los protocolos criptográficos más conocidos de la seguridad en Internet, SSL y TLS.

Los protocolos anteriormente mencionados son los encargados de evitar que se pueda leer la comunicación por terceros cuando se navega por la web, se utiliza en el correo electrónico, en el comercio online o en el envío de mensajes instantáneos, sin embargo, esta nueva técnica permite romper el cifrado y leer o robar cualquier tipo de información sensible.

El ataque explota una vulnerabilidad en OpenSSL y afecta a los servidores que utilizan el protocolo criptográfico SSLv2. Éste se inicia mediante la observación de más o menos varios cientos de conexiones entre el cliente y el servidor víctima, donde el atacante será capaz de descifrar una de ellas. Diferentes opciones de llevarlo a cabo podrían ser desde la interceptación del tráfico durante mucho tiempo o mediante el acceso de la víctima a un sitio web el cual haga muchas conexiones a otra página oculta. Estas conexiones pueden utilizar cualquier versión del protocolo SSL/TLS, siempre que empleen el método de intercambio de claves RSA de uso común, donde el cliente elige una clave de sesión aleatoria y la envía al servidor cifrada utilizando RSA y la clave pública del servidor.

img2

A continuación, el atacante se conecta varias veces al servidor utilizando el protocolo SSLv2 y envía mensajes de reconocimiento especialmente diseñados con modificaciones en el texto cifrado RSA de las conexiones de la víctima. La forma en la que el servidor responde a cada uno de estos mensajes depende de si el texto cifrado modificado descifra a un mensaje de texto con la forma correcta. Aunque el atacante no conoce la clave privada del servidor, sabe que la forma en la que el servidor responde termina por la filtración de información al atacante sobre las claves secretas utilizadas para las conexiones TLS de la víctima.

La forma en la que esa información se filtra puede adoptar dos formas:

  • La primera es donde el ataque explota una debilidad fundamental en el protocolo SSLv2 que se refiere al grado de exportación de criptografía que se introdujo para dar cumplimiento a restricciones del gobierno de los Estados Unidos. Los mensajes del atacante utilizan un cifrado que implica sólo 40 bits de material secreto cifrado por RSA. El atacante puede decir si su texto cifrado modificado fue válidamente constituido mediante la comparación de la respuesta del servidor para todas las 240 posibilidades, un número moderadamente grande pero que se puede realizar con un bajo costo para las GPU.
  • La mayoría de los servidores vulnerables están también afectados por un bug de OpenSSL que resulta bastante significativo para la versión más corta. En este caso especial el atacante puede crear sus mensajes de prueba para que aprenda de inmediato si tenían la forma correcta sin ningún tipo de cálculo grande. Lo que le llevaría a 17.000 conexiones para obtener la clave de una de cada 260 conexiones TLS de la víctima. Esto le lleva menos de un minuto.

Impacto

Según algunas cifras, el 17% de los servidores en HTTPS permiten conexiones del tipo SSLv2, pero la reutilización de claves privadas en diferentes servidores duplica las posibilidades de éxito del ataque, ya que no es necesario que las conexiones que realiza el atacante y las que intercepta vayan al mismo servidor, tan sólo es necesario que ambos servidores compartan claves privadas.

Los investigadores estiman que un 25% del millón de dominios más visitados es vulnerable y un 33% de todos los servidores. Esto incluye sitios web de importancia como yahoo.com, alibaba.com, flickr.com o groupon.com y muchos servicios de correo. Esta vulnerabilidad tiene graves consecuencias mientras no se solucione dado que la mayoría de estas páginas web trabajan con información muy sensible como correo, contraseñas y credenciales.

Lo que ha demostrado esta vulnerabilidad es que los protocolos de criptografía y cifrado obsoletos son peligrosos por el simple hecho de estar habilitados en el sistema.

Proteger el Servidor contra el ataque DROWN

Lo primero de todo sería deshabilitar SSLv2 y comprobar que tu clave privada no se ha compartido a través de ningún otro servidor. Como deshabilitar SSLv2 puede ser complicado se pueden seguir esta serie de instrucciones:

  1. OpenSSL: La solución más sencilla es actualizar a la versión más reciente, los usuarios de OpenSSL 1.0.2 deberían actualizar a OpenSSL 1.0.2g y los usuarios de OpenSSL 1.0.1 pasar a OpenSSL 1.0.1s
  2. Microsoft IIS: La versión “segura” es la 7.0 ya que tiene el SSLv2 deshabilitado por defecto
  3. Network Security Services: La versión 3.13 lleva el SSLv2 deshabilitado también por defecto, pero se recomienda comprobar si tu clave privada a sido expuesta
  4. Otra de las precauciones que podemos tomar es filtrar el tráfico de SSLv2 con un Firewall
  5. No utilizar cifrados EXPORT_GRADE en ninguno de tus servidores

Otras vulnerabilidades de SSL

SSL no ha estado exento de graves vulnerabilidades, hagamos memoria con las últimas más sonadas:

¿Apostamos si este año tendremos otra más sobre SSL? ¿Qué opináis?

(Imagen: https://drownattack.com/)