A estas alturas todo el mundo sabe acerca de la OpenSSLHeartbleedvulnerabilidad: a los límites que faltan comprobar en una de las implementaciones más populares TLS ha hecho millones de servidores web (ymás) Filtrar todo tipo de información confidencial de la memoria. Este puede gotear credenciales de inicio de sesión, cookies de autenticación y el tráfico de Internet a los atacantes. Pero, ¿podría ser utilizado para recuperar la clave privada del sitio TLS? Esto permitiría el descifrado completo de tráfico registrado previamente si confidencialidad directa perfecta no fue negociado en el momento y de otra manera los ataques man-in-the-middle a todas las futuras sesiones TLS.
Dado que esta sería una consecuencia mucho más grave de Heartbleed, decidí investigar. Los resultados fueron positivos: yo era capaz de extraer las claves privadas de un servidor Nginx prueba después del trabajo de unos días. Más tarde me presenté mis técnicas para resolver elCloudFlare Desafío. Junto con algunos otros investigadores de seguridad, de forma independiente demostró que las claves privadas RSA son realmente en riesgo. Vamos a ir a través de los detalles acerca de cómo extraer la clave privada y por qué el ataque es posible.
Cómo extraer la clave privada
Los lectores que no están familiarizados con RSA puede leer sobre élaquí. Para simplificar las cosas un poco, un gran número (2048 bits)se construye al producto de multiplicar dos números primos grandes generadas aleatoriamenteyse hace pública mientrasyse mantienen en secreto. Descubrimientoqpermite la recuperación de la clave privada. Un ataque genérico es simplemente factorizar, Pero esto se cree que es difícil. Sin embargo, con una vulnerabilidad como Heartbleed, el ataque es mucho más simple: ya que el servidor Web necesita la clave privada de la memoria a firmar el acuerdo de TLS,ydebe vivir en la memoria y podemos tratar de obtenerlos con paquetes Heartbleed. El problema se convierte simplemente en cómo identificarlos en los datos devueltos. Esto es fácil, ya que sabemosyson 1024 bits (128 bytes) de largo, y OpenSSLrepresentagrandes números de little-endian en la memoria. Un enfoque de fuerza bruta tratar cada 128 bytes consecutivos en los paquetes Heartbleed como números little-endian y pruebas si se dividees suficiente para detectar posibles fugas. Así es como la mayoría de las personas resuelven el desafío CloudFlare.
No hay comentarios:
Publicar un comentario