Genel Bakış
POODLE (Padding Oracle On Downgraded Legacy Encryption – Düşürülmüş Eski Şifrelemede Dolgu Orakülü), Ekim 2014'te Google'dan Bodo Möller, Thai Duong ve Krzysztof Kotowicz tarafından kamuoyuna duyurulan bir ortadaki adam (man-in-the-middle) saldırısıdır. Saldırı, SSLv3'ün Şifreli Blok Zincirleme (CBC) modundaki temel bir tasarım hatasını hedef alır: SSLv3, dolgu baytlarının içeriğini tanımlamamaktadır; bu durum bir dolgu orakülü saldırısına zemin hazırlar. Bu zafiyet bir yazılım hatasından değil, SSLv3 protokol spesifikasyonunun kendisinden kaynaklandığından hiçbir yama ile giderilemez; tek geçerli çözüm SSLv3'ün tamamen devre dışı bırakılmasıdır.
Daha sonra keşfedilen POODLE-TLS (CVE-2014-8730) varyantı ise TLS spesifikasyonu tarafından kapsanmasına rağmen CBC dolguyu doğru biçimde doğrulamayan bazı TLS uygulamalarını etkilemekte olup bu uygulamaların ayrıca yamalanması gerekmektedir.
Nasıl Çalışır?
Saldırının gerçekleşmesi için üç koşulun aynı anda sağlanması gerekir: saldırganın ortadaki adam konumunda olması (örn. aynı ağ segmentinde bulunması), bağlantının SSLv3'e düşürülebilir olması ve saldırganın kurbanın tarayıcısını hedef sunucuya tekrarlı istekler göndermeye zorlaması (herhangi bir kökenden enjekte edilen JavaScript aracılığıyla mümkündür, zira tarayıcı çerezleri otomatik olarak ekler).
- Protokol düşürme: Modern istemciler önce TLS 1.2 veya 1.3'ü dener. El sıkışma başarısız olursa (gerçek ya da saldırgan kaynaklı), birçok istemci TLS 1.1, TLS 1.0 ve son olarak SSLv3'e geri düşer. Saldırgan, üst sürüm el sıkışmalarını iptal etmek için TCP RST paketleri göndererek SSLv3'ü zorlar.
- SSLv3'te CBC dolgu orakülü: CBC modunda her düz metin bloğu, şifrelenmeden önce bir önceki şifreli metin bloğuyla XOR işlemine tabi tutulur. MAC-then-encrypt (önce MAC, sonra şifreleme) şeması kullanılır. TLS'de dolgu içeriği belirlenmiştir (tüm baytların dolgu uzunluğu değerine eşit olması gerekir) ve dolgu hatası ayırt edilebilir bir hata yanıtı döndürerek bir orakül oluşturur. SSLv3 ise yalnızca son dolgu baytını belirtir; önceki dolgu baytları göz ardı edilir; bu da her CBC bloğunu geçerli bir orakül hedefine dönüştürür.
- Bayt bayt şifre çözme: Saldırgan şifreli metindeki belirli baytları manipüle ederek sunucunun MAC hatası mı, dolgu hatası mı yoksa geçerli bir yanıt mı döndürdüğünü gözlemler; bu sayede her istek başına 1 bit bilgi elde eder. Bayt başına yaklaşık 256 istek üzerinden saldırgan her düz metin baytını kurtarabilir; bu işlem genellikle HTTP başlıklarında gönderilen oturum çerezlerini hedef alır.
- Pratik sömürü: 16 baytlık bir oturum çerezinin kurtarılması ortalama 256 × 16 = 4.096 istek gerektirir. Modern ağ hızlarında bu işlem saniyeler ile dakikalar arasında tamamlanarak şifreleme anahtarı kırılmadan oturum ele geçirmesine olanak tanır.
Saldırı, sunucu perspektifinden tamamen pasiftir; bellek bozulma hatası veya girdi doğrulama başarısızlığı değil, protokolün hata işleme mekanizması istismar edilmektedir.
İş Etkisi
Kimlik doğrulanmış bir oturuma karşı gerçekleştirilen başarılı bir POODLE saldırısı, saldırganın oturum belirteçlerini çalmasına ve kurban kullanıcı kimlik bilgilerini öğrenmeksizin onun kimliğine bürünmesine olanak tanır. Uygulamaya bağlı olarak sonuçlar şunları içerebilir:
- Hesap ele geçirme ve hassas uygulama işlevlerine veya verilerine yetkisiz erişim.
- Düzenleyici ve uyumluluk ihlali — SSLv3 desteğinin sürdürülmesi, PCI DSS 3.1+ gerekliliklerini (Haziran 2016'ya kadar SSLv3 devre dışı bırakılmasını zorunlu kılan) ve NIST SP 800-52 Rev. 2 kılavuzunu doğrudan ihlal etmektedir.
- Veri gizliliği ihlali — Düşürülmüş SSLv3 oturumu üzerinden iletilen tüm veriler (kimlik doğrulama belirteçleri, kişisel veriler, API anahtarları dahil) saldırgan tarafından okunabilir hale gelebilir.
- İtibar kaybı — Uzun süredir kullanımdan kaldırılmış bir zafiyetin açığa çıkması, denetçiler, müşteriler ve iş ortakları nezdinde zayıf güvenlik uygulamalarının işareti olarak değerlendirilir.
Nasıl Düzeltilir?
- Tüm sunucu ve istemcilerde SSLv3'ü devre dışı bırakın. Bu kesin çözümdür. OpenSSL tabanlı sunucularda (Apache, Nginx) Apache için
SSLProtocol all -SSLv2 -SSLv3, Nginx içinssl_protocols TLSv1.2 TLSv1.3;yapılandırmasını ekleyin. IIS'de SSLv3'üHKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Serverkayıt defteri anahtarınaEnabled = 0değerini atayarak devre dışı bırakın. - Tüm uç noktalarda minimum TLS 1.2 zorunluluğu getirin. TLS 1.3 tercih edilmektedir. Belgelenmiş zayıflıkları (BEAST, RC4 önyargıları) nedeniyle TLS 1.0 ve TLS 1.1 de kullanımdan kaldırılmalıdır.
- TLS_FALLBACK_SCSV'yi uygulayın (RFC 7507). Bu Sinyal Şifre Paketi Değeri, sunucunun yapay olarak düşürülmüş el sıkışmaları tespit edip reddetmesine olanak tanıyarak protokol düşürme saldırılarını engeller.
- POODLE-TLS yamalarını uygulayın: TLS yığınınız CVE-2014-8730'a karşı savunmasız olarak tanımlandıysa ilgili TLS kütüphanesi satıcısının (OpenSSL, NSS, SChannel vb.) güvenlik danışmanlığını takip edin.
- Tüm uç noktaları denetleyin: Yalnızca kamuya açık HTTPS sunucularını değil, yük dengeleyicileri, CDN kökenlerini, dahili API'leri, posta sunucularını (SMTP STARTTLS, IMAPS) ve VPN geçitlerini de kapsayın.
- Şifre paketi yapılandırmasını doğrulayın: Mozilla'nın SSL Yapılandırma Üreticisi'ni kullanın ve SSL Labs Sunucu Testi gibi araçlarla SSLv3'ün artık sunulmadığını teyit edin.
Kaynaklar
- Möller, Duong, Kotowicz – This POODLE Bites: Exploiting the SSL 3.0 Fallback (Orijinal Makale)
- NVD – CVE-2014-3566
- RFC 7507 – Protokol Düşürme Saldırılarını Önleme İçin TLS Geri Dönüş Sinyal Şifre Paketi Değeri (SCSV)
- RFC 7568 – Secure Sockets Layer Sürüm 3.0'ın Kullanımdan Kaldırılması
- OWASP – Transport Layer Security Hızlı Başvuru Kılavuzu
- MITRE CWE-326 – Yetersiz Şifreleme Gücü
- MITRE CWE-757 – Müzakere Sırasında Daha Az Güvenli Algoritmanın Seçimi
- Mozilla Güvenlik – Sunucu Tarafı TLS Kılavuzu
- NIST SP 800-52 Rev. 2 – TLS Uygulamalarının Seçimi, Yapılandırılması ve Kullanımına İlişkin Kılavuz