¿Cómo funciona exactamente la explotación del latido (Heartbleed) de OpenSSL TLS?

220

He estado escuchando más sobre el OpenSSL Heartbleed attack , que explota algunas fallas en el paso de latidos del corazón de TLS. Si no lo has escuchado, permite a las personas:

  • Robar claves privadas de OpenSSL
  • Robar claves secundarias de OpenSSL
  • Recupere hasta 64kb de memoria del servidor afectado
  • Como resultado, descifre todo el tráfico entre el servidor y el cliente (s)

El compromiso con OpenSSL que soluciona este problema es here

Estoy un poco confuso: todo lo que he leído contiene información sobre lo que uno debe hacer al respecto, pero no cómo funciona. Entonces, ¿cómo funciona este ataque?

    
pregunta Zyerah 08.04.2014 - 09:40
fuente

1 respuesta

245

Esto es no un defecto en TLS; es un error de seguridad de memoria simple en OpenSSL.

Las mejores explicaciones que he encontrado hasta ahora son las publicaciones del blog Diagnóstico del OpenSSL Heartbleed Bug por Sean Cassidy y El ataque de la semana : OpenSSL Heartbleed por Matthew Green.

En resumen, Heartbeat permite que un punto final diga "Te estoy enviando algunos datos, devuélvelos". Envías tanto una figura de longitud como los datos en sí. La figura de longitud puede ser de hasta 64 KiB. Desafortunadamente, si usa la cifra de longitud para reclamar "Estoy enviando 64 KiB de datos" (por ejemplo) y luego solo realmente envíe, digamos, un byte, OpenSSL le devolvería su byte, y 64 KiB (menos uno) de otros datos de la RAM.

¡Vaya!

Esto permite que el otro punto final obtenga porciones aleatorias de memoria del proceso utilizando OpenSSL. Un atacante no puede elegir la memoria que , pero si lo intentan lo suficiente, es probable que la estructura de datos de su solicitud se acerque a algo interesante, como las claves privadas o las cookies o contraseñas de los usuarios.

Ninguna de esta actividad se registrará en ningún lugar, a menos que registre, como, todos sus datos de conexión TLS en bruto.

No es bueno.

El cómic xkcd anterior hace un buen trabajo que ilustra el problema.

Editar: escribí en un comentario a continuación que los mensajes de latido están cifrados. Esto no siempre es cierto. Puede enviar un latido al principio del protocolo TLS, antes de que se active el cifrado (aunque se supone que no debe hacerlo). En este caso, tanto la solicitud como la respuesta no estarán encriptadas. En el uso normal, los latidos del corazón siempre deben enviarse más tarde, encriptados, pero la mayoría de las herramientas de explotación probablemente no se molestarán en completar el apretón de manos y esperar el cifrado. (Gracias, RedBaron.)

    
respondido por el Matt Nordhoff 08.04.2014 - 10:06
fuente

Lea otras preguntas en las etiquetas