web-dev-qa-db-fra.com

Comment fonctionne exactement le battement de cœur OpenSSL TLS (Heartbleed)?

J'ai entendu plus sur OpenSSL Heartbleed attack , qui exploite une faille dans l'étape de pulsation de TLS. Si vous n'en avez pas entendu parler, cela permet aux gens de:

  • Voler des clés privées OpenSSL
  • Voler les clés secondaires OpenSSL
  • Récupérez jusqu'à 64 Ko de mémoire sur le serveur affecté
  • En conséquence, déchiffrez tout le trafic entre le serveur et le (s) client (s)

Le commit à OpenSSL qui résout ce problème est ici

Je ne suis pas certain - tout ce que j'ai lu contient des informations sur ce que l'on doit faire à ce sujet, mais pas comment cela fonctionne. Alors, comment fonctionne cette attaque?

224
user43639

Ce n'est pas une faille dans TLS; il s'agit d'un simple bogue de sécurité de la mémoire dans OpenSSL.

Les meilleures explications que j'ai rencontrées jusqu'à présent sont les articles de blog Diagnosis of the OpenSSL Heartbleed Bug par Sean Cassidy et Attack of the week: OpenSSL Heartbleed par Matthew Green.

En bref, Heartbeat permet à un point de terminaison de dire "Je vous envoie des données, renvoyez-les-moi". Vous envoyez à la fois un chiffre de longueur et les données elles-mêmes. La longueur peut aller jusqu'à 64 Ko. Malheureusement, si vous utilisez la longueur pour réclamer "J'envoie 64 Ko de données" (par exemple) et ensuite seulement vraiment envoie, disons, un octet, OpenSSL vous renverra votre octet - et 64 Ko (moins un) d'autres données de la RAM.

Oups!

Cela permet à l'autre point d'extrémité d'obtenir des portions aléatoires de mémoire à partir du processus utilisant OpenSSL. Un attaquant ne peut pas choisir quelle mémoire, mais s'il essaie suffisamment de fois, la structure de données de sa demande risque de se retrouver à côté de quelque chose d'intéressant, comme votre privé clés ou cookies ou mots de passe des utilisateurs.

Aucune de ces activités ne sera enregistrée nulle part, sauf si vous enregistrez, comme toutes vos données de connexion TLS brutes.

Pas bon.

https://xkcd.com/1354/

La bande dessinée xkcd ci-dessus fait un bon travail illustrant le problème.


Edit: j'ai écrit dans un commentaire ci-dessous que les messages de pulsation sont cryptés. Ce n'est pas toujours vrai. Vous pouvez envoyer un battement de cœur au début de la négociation TLS, avant l'activation du cryptage (bien que vous ne soyez pas censé le faire). Dans ce cas, la demande et la réponse ne seront pas chiffrées. En utilisation normale, les battements de cœur devraient toujours être envoyés plus tard, chiffrés, mais la plupart des outils d'exploitation ne prendront probablement pas la peine de terminer la prise de contact et d'attendre le chiffrement. (Merci, RedBaron.)

247
Matt Nordhoff