**Heartbleed**, Taşıma Güvenliği Katmanı (TLS) protokolü gerçekleştiriminde geniş biçimde kullanılan, açık kaynak kodlu kriptografi kütüphanesi OpenSSL'de 2014 yılı Nisan ayında tespit edilen bir yazılım hatasıdır. Heartbleed bu TLS için kullanılan OpenSSL örneğinin, istemci ya da sunucu olduğu fark etmeden kötü niyetle kullanılabilir. Bu açık sayesinde bir saldırgan sunucu hafızasından veri okuyabildiği gibi, bir sunucunun SSL özel anahtarlarını da ele geçirebilir.

OpenSSL in düzeltilmiş bir sürümü 7 Nisan 2014 te yayınlandı ve aynı gün Heartbleed hatası halka duyuruldu.

Heartbleed çalışması: SSL bağlantısı için ilk olarak sunucunun çalışıp çalışmadığını kontrol eden paket gönderilir. Cevap gelince SSL veri iletişimi başlar. Veri iletişiminde istenen bilgi ve boyutu gönderilmektedir. Bu açığın sebebi: veri boyutunun SSL sunucusu tarafından kontrol edilmemesi istenen kadar veriyi geri göndermesidir. Bu da sunucunun o anda hafızada (RAM'de) bulunan bilgileri göndermesi anlamına gelmektedir. Sunucu hafızasında o anda kullanıcıların şifreleri, sitenin sertifikası olabilir ve saldırgan bu bilgileri kolay bir şekilde alabilir.

Çözümü: OpenSSL istenen bilginin boyutunu kontrol etmeye başlamıştır.

Yapılan incelemeler sonucunda bazı saldırganların yazılım hatasının tespitinden çok önce bu açığı kullanmış olma ihtimalinin yüksek olduğunu göstermektedir. Bloomberg'e konuşan iki muhbirin ifadesine göre ABD Ulusal Güvenlik Dairesi (NSA) bu açıktan haberdardı fakat kamuoyuna açıklamadı. NSA bu iddiayı yalanladı.

Tarihçe
-------

7 Nisan 2014'te, OpenSSL versiyonlarında TLS Heartbeat eklentisinin bellek kullanma ile ilgili ciddi bir yazılım hatası içerdiği duyuruldu. Bu açık ile uygulamanın belleğindeki 64kb veri her heartbeat adı verilen istekle ele geçirilebilir.

### Keşfedilmesi

Google ın güvenlik ekibinden Neel Mehta 1 Nisan 2014 te OpenSSL e Heartbleed i bildirmiştir.

Davranışı
---------

Heartbleed'in tarifi
RFC 6520 Heartbeat Uzantısı, bağlantının bir ucundaki bilgisayarın Heartbeat istek mesajı göndermesini sağlayan TLS güvenli iletişim bağlantılarını test eder. Bu istek genel olarak karşıdaki bilgisayarın cevap verebiliyor durumda olduğunun kontrolünü gerçekleştirmek için yapılır. Bu Heartbeat isteği tipik olarak, bir metin ve dönecek cevap için 16-bit sayı uzunluğunda yük içerir. Bu isteği alan bilgisayar kesinlikle aynı yükte bilgiyi göndericiye geri göndermelidir.

Etkilenen OpenSSL versiyonlarında bu gelen isteğe karşılık, mesajın yükündeki uzunluğun tam miktarı kadar bilgi ara bellekten cevap olarak geri gönderilir. Bu hatadan dolayı göndericiye dönen mesaj, gelen istekteki metine ek olarak o an bellekte ne varsa içerir.

Bu nedenle Heartbleed, saldırganın kısa yük ve daha uzun cevap uzunluğu içeren kusurlu Heartbeat isteği göndererek, kurbanın belleğinden 64 kilobayt veri okumasına olanak sağlayarak kötü niyetle kullanılabilir. Gerçek bir Heartbeat İsteğinde karşıdaki bilgisayarın cevap verebilir durumda olduğu kontrolü için gönderilen mesaj örnek olarak "bana dört harf 'elma' cevabını ver" şeklinde iken, Hearbleed İsteğinde "bana 100 harf 'elma' cevabını ver" olarak gönderilir. O an bellekteki 'elma' metninden sonra geriye kalan 96 karakter cevap olarak gönderilir. Bu sayede saldırgan bellekte o an var olan bilgileri okuyabildiği gibi sertifika bilgilerine de ulaşabilir. Dönen cevabın "elma. Kullanıcı A parolasını 'parola123' olarak değiştirdi. Sunucu anahtarı 43508012430167.." şeklinde olması mümkündür.

### Etkilenen OpenSSL sürümleri

OpenSSL in 1.0.1 den 1.0.1f'e kadar tüm sürümleri bu hatadan etkilenmiştir. 1.0.1'den daha önceki ve 1.0.1g'den daha sonraki sürümler bu hataya karşı savunmasız değildir. Bu etkilenen OpenSSL sürümleri *-DOPENSSL\_NO\_HEARTBEATS* ile derlenmedikçe savunmasız durumdadırlar.

Kaynakça
--------

1. ↑  McKenzie, Patrick (9 Nisan 2014). "What Heartbleed Can Teach The OSS Community About Marketing". *Kalzumeus*. 20 Aralık 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 8 Şubat 2018.
2. ↑  Biggs, John (9 Nisan 2014). "Heartbleed, The First Security Bug With A Cool Logo". *TechCrunch* (İngilizce). 11 Şubat 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 8 Şubat 2018.