6 de marzo de 2016

DROWN. Un nuevo ataque que intenta asfixiar la criptografía

Junto a la publicación de una nueva versión de OpenSSL, saltó a la luz una nueva vulnerabilidad de esas que van a dar que hablar durante mucho tiempo. Se suma a las ya vistas en el 2014 e igualmente importantes en OpenSSL como Heartbleed y POODLE. Esta nueva vulnerabilidad podría permitir a un atacante descifrar comunicaciones seguras con relativa sencillez.
Sin ninguna duda esta vulnerabilidad es de gran importancia, según las estimaciones un 33% de los sitios son vulnerables a este ataque. Y como no podía ser de otra forma, la vulnerabilidad viene con nombre, logo y hasta página web; ha quedado bautizada como DROWN (Decrypting RSA with Obsolete and Weakened eNcryption).
La vulnerabilidad es grave en cierto contexto, podría permitir descifrar sesiones TLS si el servidor soporta SSL versión 2 o suites de cifrado marcadas como EXPORT. El problema, con identificador CVE-2016-0800, es una nueva forma de ataque de protocolo cruzado, similar o inspirado en el Padding Oracle Attack de años atrás, debido al uso que hace de un protocolo obsoleto, como SSL versión 2, mientras que la víctima sigue usando TLS, un protocolo actualmente seguro, sin percatarse del ataque.
La misma página web del problema dispone de un test que permite comprobar, con la simple introducción de un dominio (o dirección IP), ver todos los dominios y certificados vulnerables. Huelga decir que no se trata de un test "en directo" sino de una consulta a una base de datos que han hecho pública. No obstante se ha hecho pública de una herramienta que permite comprobarlo en local.
Los servidores y clientes actuales emplean TLS como protocolo de cifrado. Sin embargo, debido a errores o descuidos de configuración, muchos servidores todavía siguen soportando SSLv2. Este soporte, incluso en algunos casos se apoya debido a que algunos clientes sin actualizar todavía utilizan SSLv2. Por lo tanto, a pesar de que SSLv2 se sabe que es inseguro hasta el tuétano, soportar SSLv2 no se consideraba, en ciertos ambientes, un problema de seguridad grave por el reducido parque de clientes anticuados que lo usan.
DROWN muestra que simplemente el soporte de SSLv2 representa un riego para los servidores y clientes; ya que puede permitir descifrar las conexiones TLS entre servidor y cliente mediante el envío de sondas a un servidor que soporte SSLv2 y utilice la misma clave privada. El ataque en sí, a grandes rasgos, se basa en la posibilidad de obtención de la clave privada de la sesión segura gracias a SSL versión 2. Es decir, mientras que el cliente se conecta al servidor por TLS, el atacante hace hombre en el medio entre los dos e inyecta peticiones SSL. Debido a las vulnerabilidades de SSL es capaz de obtener la clave privada de esa sesión (ojo, no la clave privada del servidor como hemos escuchado por ahí) y posteriormente utilizarla para descifrar el tráfico capturado.
Como proteger un servidor ante DROWN
  • Para OpenSSL la forma más sencilla y recomendable es que se actualice a la versión OpenSSL 1.0.2g o OpenSSL 1.0.1s.
  • Para Microsoft IIS (Windows Server) las versiones de IIS 7.0 y superiors deben tener SSLv2 desactivado por defecto. Los usuarios que hayan activado SSLv2 de forma manual deberán tomar los pasos para desactivarlo de nuevo. De todas formas se recomienda comprobar si su clave privada está expuesta en otro lugar. Las versiones de IIS inferiores a 7.0 ya no están soportadas por Microsoft y deberían actualizarse a las versiones soportadas.
  • Para Network Security Services (NSS), librería criptográfica incluida en múltiples productos de servidor, las versiones 3.13 (publicada en 2012) y superiores deben tener SSLv2 desactivado por defecto. Los usuarios que hayan activado SSLv2 de forma manual deberán tomar los pasos para desactivarlo de Nuevo. Usuarios de versiones anteriores deberían actualizarse a una versión más reciente. De igual forma se recomienda comprobar si su clave privada está expuesta en otro lugar.
  • Hay que señalar que DROWN puede empeorar debido a otras vulnerabilidades (con CVE-2016-0703 y CVE-2016-0704) en OpenSSL, que afectan a versiones de OpenSSL anteriores a marzo de 2015, momento en el cual el código fue rediseñado para hacer frente a la vulnerabilidad CVE-2015-0293. Estas vulnerabilidades afectan a OpenSSL versiones 1.0.2, 1.0.1l, 1.0.0q, 0.9.8ze y anteriores. Fueron corregidas en OpenSSL 1.0.2a, 1.0.1m, 1.0.0r y 0.9.8zf. Estos problemas podrían permitir ataques de DROWN mucho más eficientes, incluso eficaces contra conjuntos de cifrado que no sean de exportación, y sin necesidad de requerir un cálculo significativo.
  • Y con CVE-2015-3197 un problema que afecta a OpenSSL versiones anteriores a 1.0.2f y 1.0.1r, permite a un atacante emplear DROWN para conectar a un servidor con SSLv2 desactivado, si el soporte para SSLv2 todavía se encuentra habilitado.
Más información:
Fuente: Hispasec