¿Por qué se llama al error Heartbleed una de las mayores amenazas de seguridad que Internet ha visto?


Versión TLDR: esta falla grave (CVE-2014-0160) es una comprobación de límites faltantes antes de una llamada memcpy () que utiliza una entrada de usuario no desinfectada como parámetro de longitud. Un atacante puede engañar a OpenSSL para que asigne un búfer de 64 KB, copie más bytes de los necesarios en el búfer, devuelva ese búfer y, por lo tanto, filtre el contenido de la memoria de la víctima, 64 KB a la vez.

Versión larga:

Esta respuesta es solo para servir como explicación del error a los lectores que no están familiarizados con el tema.

  1. La versión “explícame como si tuviera cinco años”.
  2. La versión técnica.

Doy la bienvenida a los expertos para que respondan sobre el impacto, lleguen y den sus comentarios sobre este error.

Heartbleed no es un problema con las tecnologías TLS / SSL que encriptan Internet. Ni siquiera es un problema con cómo funciona OpenSSL en teoría. Es solo un error de codificación tonto.

Cuando dos servidores se preparan para hacer un apretón de manos encriptado, realizan algo llamado latido , un acto del cual el error recibe su nombre increíblemente aterrador.

Los latidos del corazón son una forma en que dos computadoras que están hablando entre sí para asegurarse de que la otra sigue viva, de modo que si algo sale mal durante un proceso, no continúa. Lo hacen mediante el envío de datos de ida y vuelta entre sí.
El cliente (ese es usted) envía sus latidos al servidor (su banco, por ejemplo), y el servidor lo devuelve de inmediato. De esa manera, si algo sale mal durante la transacción (por ejemplo, si una computadora explota literalmente), la otra lo sabrá, porque los latidos del corazón se desincronizan. Es como asegurarse de que los dos cabezales de una cinta de casete se muevan cuando la esté reproduciendo. Si un husillo se detiene y el otro continúa, algo se romperá.

  • La versión “explícame como si tuviera cinco años”:

Imagen, tienes un montón de fotos y vas a una tienda por una caja para guardarlas. El tipo que dirige la tienda es muy estúpido y no puede contar nada.

Caminas hacia el mostrador de esta tienda con 100 fotos y las abofeteas diciendo “Tengo 100 fotos”. Los ojos del dueño se iluminan de alegría. “¡Tengo una caja para esos!” él dice. “Tengo una caja de 100 fotos!” Saca una caja de debajo del mostrador y dice: “¡Aquí está! Alguien la dejó aquí llena de fotos, pero ya no las necesitan”. Luego saca una foto de la caja, la quema, coloca una de sus fotos y continúa haciéndolo hasta que se queda sin fotos. Al final de ese proceso, el cuadro ahora está lleno de tus fotos, y él te lo devuelve. Tienes tu caja, y todas las fotos antiguas se destruyen. ¡Hurra! Un pequeño intercambio ordenado 1: 1.

Pero imagina si en lugar de 100 fotos le diste una sola. Caminas hacia el mostrador, sonríes con una sonrisa villana, abrazas tu única foto y dices “Tengo 100 fotos”. Nuevamente, el propietario tiene una caja para ti y saca una caja llena de 100 fotos que alguien dejó allí. Una vez más, saca una foto de la caja, la quema y pone la suya. Luego, después de solo una foto, ya no tiene fotos, y como es muy estúpido y no puede contar nada , asume esto. significa que su trabajo está hecho y desliza la caja hacia usted, con su foto y 99 de otra persona. Él ha tomado tu palabra, a pesar de todas las pruebas de lo contrario.
Esto significa que puedes irte con 99 fotos que no te pertenecen, ¡y tal vez una de ellas es de una persona desnuda! ¡Puntuación! Aún mejor, este cajero es tan tonto que ni siquiera puede distinguir fotos cero de fotos que no sean cero. Si solo dice que tiene 100 fotos y no le da literalmente nada, él todavía le dará una caja de 100 fotos que pertenecen a otra persona.

En el caso de Heartbleed, esas fotos son bits de datos. A veces, estos fragmentos de datos se unen para ser un correo electrónico, una contraseña o un nombre de usuario. A veces incluso encajan para ser la contraseña de un gran sitio web, un sello de firma con su nombre y el código clave de su sistema de seguridad. La selección de las sobras que obtienes es aleatoria, pero puedes hacer el truco tantas veces como quieras y eventualmente obtienes algo bueno. Solo sigue pidiendo cajas.

Eso es lo que las personas nefastas que conocen Heartbleed pueden seguir pidiéndole información a un servidor, una y otra vez, hasta que envíe algo jugoso.

  • La versión técnica.

    La violación real que está poniendo de rodillas a Internet ocurre en esta pequeña línea de código:

    memcpy (pb, p1, carga útil);

En pocas palabras (como sea posible), es solo un error de desbordamiento de búfer . Memcpy es un comando que copia datos y requiere tres piezas de información para hacer el trabajo; Esos son los términos entre paréntesis. El primer bit de información es el destino final de los datos que deben copiarse. El segundo es la ubicación de los datos que deben copiarse. El tercero es la cantidad de datos que la computadora va a encontrar cuando vaya a hacer esa copia. En este caso, el bp es un lugar en la computadora servidor, p1 son los datos reales que el cliente envió como un latido, y la carga útil es un número que dice qué tan grande es p1 .

Lo importante que debe saber aquí es que copiar datos en las computadoras es más complicado de lo que parece porque realmente no existe tal cosa como la memoria “vacía”. Entonces, bp , el lugar donde se copiarán los datos del cliente, en realidad no está vacío. En cambio, está lleno de los datos que antes se encontraban en esa parte de la computadora. La computadora simplemente lo trata como vacío porque esos datos se han marcado para su eliminación. Hasta que se llene de datos nuevos, el bp de destino es un conjunto de datos antiguos que se pueden sobrescribir. Sin embargo, todavía está allí.

Ahora, idealmente, cuando memcpy toma los datos de p1 y los coloca en bp , cubre todos esos datos viejos y basura en bp . Después de todo, la carga útil dice cuán grande es p1 , y el espacio en bp fue creado para ser exactamente del mismo tamaño; Un ajuste perfecto. Cuando se dispara sin problemas, todo lo que solía estar en bp se destruye y se llena con los datos de p1 . Y eso es lo que se devuelve al cliente: exactamente lo que enviaron en primer lugar. Lo que queda es una pequeña y ordenada transacción 1: 1 donde lo que entra también vuelve a salir.

Funciona muy bien, a menos que la carga útil esté mintiendo . Si la carga útil dice que p1 es de 64 KB cuando en realidad es de 0 KB, tiene un problema. Ninguno de los datos antiguos en bp se sobrescribe, porque no hay nada que lo reemplace. En la práctica, eso significa que los datos antiguos que estaban almacenados en bp antes del latido se devuelven al cliente. A veces esos datos son inofensivos, a veces es su contraseña bancaria. De cualquier manera, termina en algún lugar donde no debería.

Compilado de varias fuentes de noticias, gran contribución de Gizmodo.

No sé mucho sobre cómo funcionan SSL y TLS, pero este comentario sobre Ars Technica pinta una imagen realmente aterradora:

myforwik :

En una escala del 1 al 10, diría 11. Todavía estoy ocupado lidiando con basura en mis servidores. Hice un ataque junto con un colega en un servidor bajo nuestro propio control y en cuestión de minutos tuvimos inicios de sesión y contraseñas. Lidiar con esta basura significa no solo actualizar sus bibliotecas openssl (la parte fácil) sino también crear nuevos certificados y tratar con la CA (la parte molesta). Tengo que revocar mis antiguos certificados, crear una nueva clave privada, crear una nueva CSR, subirlos a la CA para firmarlos y finalmente reemplazar los certificados y las claves privadas en los servidores cuando la CA hace su trabajo. Cuando se trata de errores de seguridad, este será un candidato para un primer puesto en los libros de historia

Incluso 11 es un eufemismo. ¡Recuerde que los servidores involucrados potencialmente han estado filtrando su clave privada para su certificado! Esto significa que cualquiera puede ‘fingir’ ser ellos.

No es suficiente hacer nuevos certificados. ¡Todos los certificados antiguos ahora podrían usarse para ataques de hombre en el medio! ¡Es posible que 2/3 de los certificados de Internet necesiten ser incluidos en la lista negra! Este es un desastre MAYOR.

No es factible incluir en la lista negra una cantidad tan grande de certificados, ya que cada dispositivo requiere una lista de todos los certificados incluidos en la lista negra. Esto significa que todas las principales entidades emisoras de certificados tendrán que incluir en la lista negra a sus autoridades de certificación intermedias y comenzar a emitir todos los nuevos certificados bajo nuevas entidades emisoras de certificados. Esto significa que incluso las personas que no se vieron afectadas probablemente tendrán que poner sus certificados en la lista negra.

En resumen, CADA CA existente utilizada en Internet puede tener que aparecer en la lista negra, y todos los certificados SSL se vuelven a emitir.

IMO SSL / TLS ahora está completamente roto. La cantidad de certificados potenciales que han sido explotados y que ahora podrían usarse para ataques de hombre en el medio podría ser de millones … la lista de certificados de la lista negra estará en millones y / o la cantidad de autoridades subcertificadas en la lista negra probablemente sea más de 10,000. Los vendedores ya odian incluir uno o dos elementos en la lista negra, y mucho menos esta cantidad de elementos …

[Este comentario fue una elección del editor, y confiaría en el juicio del personal de Ars en tales cosas.]
Algunas fuentes dicen que aproximadamente el 18% de la web se ve afectada (en lugar de dos tercios), pero aún suman cientos de miles. Por supuesto, no soy un experto y no conozco las calificaciones de myforwik, por lo que doy la bienvenida a personas con conocimientos para que critiquen su comentario.
EDITAR:
Recordé haber visto una configuración de Google Chrome para verificar la revocación del certificado del servidor, y está desactivada de manera predeterminada. No sé cuán efectivo será, lo estoy habilitando ahora.
Heartbleed también trae otro problema. No tiene sentido cambiar las contraseñas hasta que se sepa que el servidor aplicó el parche y revocó su antiguo certificado. Hay listas de sitios afectados por el error, pero en este punto parece que tendrá que verificar manualmente si el sitio en el que se encuentra ya no se ve afectado y si se revocó su certificado. Un comentario en la publicación de Ars tenía http://filippo.io/Heartbleed/ como sitio para las pruebas. Creo que Quora también se vio afectada, y han parcheado su sistema, ya que parecen haber revocado su antiguo certificado. El actual se emitió el 10/04/2014 [hoy]. Es hora de que cambie mis contraseñas aquí.

La vulnerabilidad es muy grave porque permite a un atacante acceder a información en RAM que puede contener claves privadas y otros datos críticos. Con las claves privadas, un atacante podría descifrar toda comunicación adicional con ese servidor. Se vuelve aún más grave por el hecho de que la gran mayoría de Internet fue vulnerable a esta falla durante varios años. Mire esta publicación Muchos dispositivos nunca serán parcheados para corregir el error Heartbleed. Eso es preocupante. Una empresa con la que trabajo hizo esta publicación, que pensé que hizo un buen trabajo al explicar la situación. Ataques de vulnerabilidad de OpenSSL en el corazón de la seguridad en línea

Es realmente grave porque (a) un atacante puede ver cualquier cosa que esté en la memoria del servidor; Y (b) no hay forma de saber si un servidor ha sido atacado, Y (c) afecta a una proporción significativa de servidores en Internet. Cualquiera de esos sería suficientemente malo por sí solo.

Llegó allí, por lo que podemos decir en este momento, por accidente.

Y ha estado allí durante dos años porque, hasta ahora, nadie lo había notado. (Al menos nadie que conozcamos).

Hay muchos buenos detalles en las otras respuestas a esta pregunta, pero espero que este resumen ayude a preparar el escenario.

Simple. La mayoría de los humanos se volvieron adictos 🙂 Lo cual está bastante jodido …

Hay algunas razones

1. Tuvimos este problema durante 3 años o más antes de saberlo.

2. A muchas personas les robaron cuentas por este error.

3. Solo con decir esto te estás amenazando o intimidando a un hacker para que te piratee.

Esas son algunas razones.