HeartBleed nedir?

heartbleednedir

HeartBleed yakın zamanlarda oraya çıkan internetin en büyük ayıplarından biridir. Kullanıcıların bilgilerine kolaylıkla ulaşılmasını sağlayan bir OpenSSL hatasıdır. Bu problemden etkilenmiş bütün siteler açıklarını hızla kapatmaktadırlar. Sizin de hesabınızı güvene almak için yapmanız gereken heartbleed’den nasibini almış sitelerdeki şifrelerinizi değiştirmektir.

HeartBleed’den etkilenen sitelerden bazıları:

  • Google (Gmail de dahil)
  • Yahoo (Yahoo Mail de dahil)
  • Facebook (kesin değil, ama şifre değiştirmekte fayda var)
  • Instagram
  • Pinterest
  • Tumblr
  • GoDaddy
  • TurboTax
  • USAA
  • Dropbox
  • GitHub
  • OKCupid
  • SoundCloud

Screen Shot 2014-04-11 at 5.59.22 PM
Oysa, açık kaynaklı projelerden biri olan OpenSSL ‘in en güzel yanı kodlamanın açık olmasıdır. Böylece OpenSSL kodlamasında gizli kısımlar olamaz. Hatta, heartbleed’in bulunduğu ve düzeltildiği anı bile görebilirsiniz.

HeartBleed’in bu şeffaflığa rağmen iki yıldır bulunamamış ve gözden kaçmış olması da şaşırtıcıdır. HeartBleed TLS/SSL ile ilgili bir problem değildir, hatta OpenSSL’in çalışma prensipleri ile de alakalı değildir. Basit bir kodlama hatasıdır.

İki server birbiri ile iletişime geçip şifrelenmiş el sıkışma meydana getirecekleri zaman (encrypted handshake), kalp atışı (heartbeat) denen bir olay yaparlar. Bu HeartBleed de adını bu HeartBeat olayından almaktadır.

HeartBeat birbirleri ile haberleşen iki bilgisayarın birbirlerinin varlığını kontrol etmeye yarar. Yani bir tarafın bağlantısı koptuğunda diğer taraf bunu hemen anlar ve bilgi göndermeyi keser.

Örneğin siz, bankanız ile online işlem yaparken sizin cihazınızdan bankaya bir kalp atışı gider ve bankanın bilgisayarı buna cevap verir. Böylece bir şey ters gittiğinde kalp atışı senkronizasyonu bozulur ve gerekli önlem alınır. Bu basit işlem her gün milyonlarca kez yapılmaktadır ve arızalı OpenSSL bir çuval inciri berbat etmektedir. Hem de şu kısacık kod ile:
memcpy(bp, pl, payload);

memcopy (memory copy) bp ya da pl nereyi gösterirse göstersin hafızadaki payload byte’larını kopyalar. HeartBleed açığının oluşma nedeni ise memcpy sadece payload’ı değil hafızada o anda bulunan geri kalan 64k’ya kadar her şeyi bp’nin landing strip’ine kopyalıyor olması ve bilgiyi isteyen tarafa yollamasıdır. Bu işlemin gerçekleşmeyeceği tek durum ise hafızanın okunmayan bir kısmına ulaşılınca meydana gelmektedir. Bu durumda da segmentation fault hatası oluşur.

Bu karmaşık olayı şöyle basit bir önekle açıklayabiliriz:
Bir fotoğrafçıya gittiğinzi düşünün. Masanın üzerinde size ait olmayan fotoğraflar duruyor. Siz bu fotoğrafların üzerine size ait bir adet fotoğraf koyup, dükkan sahibine 100 adet fotoğrafın sizin olduğunu söylediğinizde adamcağız ‘seni kıracağıma, dişimi kırarım’ diyip bu fotoğrafları bir güzel bir kutuya yerleştirip size veriyor.

Segmentation Fault denen olayda ise çöpün üzerinde duran 80 adet fotoğrafın üzerine 1 fotoğraf kopyup buradaki 100 adet fotoğraf benim dediğinizi düşünün. 82. fotoğrafa gelince çöpe ulaşıldığı için dükkan sahibi amca error verip kalıyor.

Peki bu korkunç olay ne demek oluyor? Bilgiye ulaşmak isteyenler bu metafordaki yöntemle insanların kullanıcı isimlerine, şifrelerine, her türlü gizli bilgilerine kolaylıkla sahip olabiliyorlar.

Bu açığın çözümü de açığın kendisi kadar kolay:

* Read type and payload length first */
if (1 + 2 + 16 > s->s3->rrec.length)

return 0;

/* silently discard */

hbtype = *p++;

n2s(p, payload);

if (1 + 2 + payload + 16 > s->s3->rrec.length)

return 0;

/* silently discard per RFC 6520 sec. 4 */

pl = p;

HeartBleed açığı olan siteler hızla bu arızayı gideriyor ve kullanıcılarından şifrelerini değiştirmelerini istiyorlar.
HeartBleed açığı olan siteleri: http://filippo.io/Heartbleed/ buradan kontrol edebilirsiniz.
Screen Shot 2014-04-11 at 7.01.24 PM

Kaynaklar:
gizmodo
tamindir.com