ROBOT Saldırısı 19 Yıllık Zafiyeti Hayata Döndürüyor
Daniel Bleichenbacher, 1998 yılında sunucularda koşan TLS yığınlarına bir takım hatalı PKCS#1 v1.5 padding'leri ile paketler göndererek, adaptif seçilmiş şifreli metin saldırısı yapmanın mümkün olduğunu tespit etti. Söz konusu yöntem RSA kriptolama üzerinde kullanıldığında TLS gizliliğini paramparça etti.
Daniel Bleichenbacher, 1998 yılında sunucularda koşan TLS yığınlarına bir takım hatalı PKCS#1 v1.5 padding'leri ile paketler göndererek, adaptif seçilmiş şifreli metin saldırısı yapmanın mümkün olduğunu tespit etti. Söz konusu yöntem RSA kriptolama üzerinde kullanıldığında TLS gizliliğini paramparça etti.
ROBOT Saldırısı Nedir?
ROBOT, Return Of Bleichenbacher's Oracle Threat yani Bleichenbacher'in Oracle Tehdidinin Dönüşü'nün kısaltılmışıdır. Hanno Bӧck, Juraj Somorovsky ve Craig Young tarafından yapılan araştırma gösterdi ki, orijinal zafiyet günümüzde dahi, RSA kriptolama kullanan TLS sunucularının şifreli trafiğini çözmek için kullanılabilmektedir. Üstelik bu işi yapmak için sunucunun özel anahtarına (private key) ihtiyaç duyulmamaktadır. Söz konusu zafiyet ilk olarak 90'ların sonundan bu yana bilinmekle birlikte, pek çok web sitesi, TLS ile birlikte RSA kriptolama kullandıkları için, bu saldırıya karşı korunmasız durumdadırlar.
ROBOT Saldırısı Nasıl Çalışıyor?
Bir saldırgan, sunucuya TLS-RSA el sıkışması (handshake) esnasında, padding'lerinde farklı hatalar yapılmış bir takım "Client Key Exchange" (CKE) mesajları gönderir. Ardından, sunucunun söz konusu hatalı olmak üzere düzenlenmiş bu mesajlara verdiği tepkileri izleyerek sunucunun kendisini ROBOT saldırısına karşı savunmasız durumuna düşürecek bir oracle açığa çıkarıp çıkarmadığını kestirebilir. Bir oracle (kahin) yanıtı, saldırganın şifrelenmiş metinden açık metnin bir kısmını elde etmesini sağlayan bir sunucu yanıtıdır. Bir saldırgan savunmasız bir sunucu bulması durumunda, sunucunun şifreli trafiğini çözmeye ve/veya sunucu adına istediği mesajı imzalamaya muktedir olacaktır. Bu eylemleri gerçekleştirebilmek için ise saldırgan öncelikle pasif bir şekilde sunucu trafiğini dinleyip belirli bir miktarda şifreli mesajı kaydetmek durumundadır. Kaydedilmesi gereken trafiğin miktarını sunucu tarafından açık edilen oracle'ın tipi belirlemektedir.
Saldırı Performansı ve Oracle Tipleri
Bleichenbacher tarafından yazılan ilk makalede de belirtildiği üzere, sunucu tarafından üretilen oracle yanıtlarının kuvveti saldırının etkisini de belirlemektedir, şöyle ki;
- Her yeni ve geçerli oracle yanıtı ile, saldırı algoritması şifrelenmiş metinin bir başka aralığını çözmektedir
- Eğer bu yanıt negatif olursa, yani bir oracle yanıtı açığa çıkmazsa, şifreli verinin yeni bir aralığı çözülemez; bu durumda saldırı algoritması yeni sorgular üretmek durumunda kalır
En kuvvetli oracle tipi ile ortalama 10,000 sorgu bir şifreli metinin çözülmesi için yeterli olur iken, en zayıf oracle tipi ile yaklaşık 18,000,000 sorgu yapmak gerekmektedir. Tüm diğer oracle tipleri, kuvvet olarak, söz konusu bu iki ucun arasında bir noktada yer almaktadır.
Bu durumu basite indirgemek adına, orijinal ROBOT saldırısı makalesi genel olarak iki tip oracle olduğunu varsaymaktadır:
- Kuvvetli oracle - bir milyondan az sorguya ihtiyaç duyulur
- Zayıf oracle - birkaç milyon sorguya ihtiyaç duyulur
Bir ROBOT Sorgusunun Anatomisi
Daha önce izah ettiğimiz üzere, bir saldırgan bir sunucudan oracle yanıtları elde etmek için, TLS-RSA el sıkışması esnasında sunucuya yanlış padding'e sahip olacak şekilde modifiye edilmiş CKE mesajları göndermektedir.
Bleichenbacher tarafından yapılan önceki çalışmaya dayanarak söyleyebiliyoruz ki, bir saldırganın bu şekilde üretebileceği beş farklı yanlış padding tipi vardır. Bu padding tipleriyle üretilen mesajların her biri sunucuda farklı bir davranışı tetiklemek üzere tasarlanmıştır. Aşağıda bu padding tiplerini inceledik.
Doğru Formatlanmış TLS Mesajı
Bu mesaj doğru bir PKCS #1 v1.5 padding'i içerir. Olması gerektiği gibi '0x00' byte değeri doğru pozisyonda, TLS versiyon bilgisi doğru girilmiş ve pre-master secret değeri doğru konumlandırılmıştır.
0x0002 [2] | PAD | 0x00 [1] | TLS Version [2] | Random [46] |
Pre-master Secret |
Bu mesaj TLS version ve padding'i doğru tahmin etmiş bir saldırganı simüle etmek üzere tasarlanmıştır. Sunucunun doğruluğunu değerlendirmek için gereklidir.
Hatalı Padding
Bu mesaj yanlış padding byte değerleri ile başlamaktadır.
0x4117 [2] | PAD |
Padding'deki geçersiz ilk iki byte değeri, sunucuda beklenmeyen bir davranışı tetiklemek üzere tasarlanmıştır.
Yanlış Pozisyonda 0x00 Byte Değeri
Bu mesaj geçerli bir format içermektedir fakat '0x00' byte değeri yanlış konumlandırılmıştır. Böylece unpadded pre-master secret değeri geçersiz bir uzunluğa sahip olacaktır.
0x0002 [2] | PAD | 0x0011 |
Pek çok PKCS #1 v1.5 implementasyonu mesaj bir kez unpad edildiğinde elde edilen pre-master secret değerinin geçerli uzunluğa sahip olacağını varsaymaktadır. Eğer söz konusu değer daha uzunsa veya daha kısaysa haliyle bu durum sunucuda beklenmeyen bir durumun oluşmasına ve yine beklenmeyen bir davranışa sebep olacaktır.
Kayıp 0x00 Byte Değeri
Bu mesaj doğru imza ile başlamasına rağmen '0x00' byte değeri bulunmamaktadır.
0x0002 [2] | PAD |
Eğer '0x00' byte değeri bir padding içerisinde bulunamazsa, PKCS #1 v1.5 implementasyonu, PAD bloğunun bittiği noktayı tespit edemeyeceğinden mesajı unpad edemeyecektir - ki bu yine beklenmeyen bir sunucu davranışı ile sonuçlanacaktır.
Hatalı TLS Versiyonu
Bu mesaj hatalı (ve hatta tanımsız) bir TLS versiyonu içermektedir.
0x0002 [2] | PAD | 0x00 [1] | 0x0202 [2] | Random [46] |
Pre-master Secret [48] |
Hatalı TLS versiyonunun sunucuda yine beklenmeyen bir davranış oluşturacağı Bleichenbacher tarafından yapılan çalışmada izah edilmektedir.
Zafiyet Nasıl Tespit Ediliyor?
Tüm bu padding varyasyonlarını üretip, sunucudan bir oracle yanıtı almak için bir saldırganlar şu şekilde hareket etmektedir:
- Öncelikle, sunucu ile bir TLS-RSA el sıkışması başlatarak 'Server Hello' mesajından sunucuya ait sertifikayı elde ederler
- Ardından, önceki bölümlerde izah edilen 'padding'ler ile CKE mesajlarını oluştururlar. Bahsi geçen 'padding'in uzunluğu sunucuya sertifikanın açık anahtar uzunluğu ile aynı olmalıdır.
- Oluşturulan bu CKE varyasyonlarını ardından Change Cipher Spec (CCS) ve Finished mesajları gelecek şekilde gönderirler. Diğer mesajların bu şekilde CKE mesajının peşi sıra gönderilmesi durumuna mesaj akışı (message flow) ismi verilmektedir.
- Eğer her bir varyasyon için sunucunun verdiği yanıt aynı değilse, sunucu bir oracle açığa veriyor demektir, yani sunucu saldırıya karşı savunmasızdır.
- Eğer tüm yanıtlar aynı ise, bu kez saldırganlar mesaj akışı tamamlanmadan yani sadece CKE mesajlarını sunucuya göndererek el sıkışmanın zaman aşımına uğramasını beklemeye başlarlar.
- Yine, eğer herhangi bir yanıt diğerlerinden farklı ise hedefin saldırıya karşı savunmasız olduğunu tespit ederler.
Zaman aşımı beklenen senaryoda sunucu ve istemci arasındaki bağlantıya uygun bir zaman aşımı süresi atamak da saldırının önemli bir parçasıdır. Çok uzun zaman aşımı süreleri saldırıyı pratikte zorlaştırırken yahut imkansız hale getirirken, çok kısa zaman aşımı süreleri ise tutarsız durumlara sebep olup saldırının başarısız olması ile sonuçlanacaktır.
ROBOT Saldırısının Etkisi ve Çözümü
ROBOT zafiyeti ilk defa keşfedildiğinde, Alexa Top 1 Milyon listesinin ilk 100 kaydının yaklaşık üçte birinin bu saldırıya karşı savunmasız durumda olduğu tespit edilmiştir. Buna ilave olarak, pek çok diğer hizmet sağlayıcı ve açık kaynak projelerin de aynı şekilde savunmasız olduğu raporlanmıştır.
Bu saldırıdan etkilenen bileşenlerin tam listesi için ROBOT Attack sayfasına başvurabilirsiniz. Eğer güvenlik yaması yayınlamış ürünlerden herhangi birini kullanıyorsanız, elbette söz konusu güncellemeyi yüklemelisiniz.
RSA Kriptolama Kullanmayın!
Fakat, buna benzer zafiyetlerden sakınmak için, RSA kriptolama modlarını sunucunuzda tamamen kapatmanız çok daha iyi olacaktır. Zira bu (ROBOT saldırısı), Bleichenbacher tarafından araştırması yapılan RSA kriptolama modlarında padding oracle saldırısının ilk varyasyonu değil. Daha evvel DROWN (Decrypting RSA with Obsolete and Weakened eNcryption) olarak da bilinen bir başka saldırı ile de sunucunun kripto güvenliğini tamamen kırmak mümkün olmuştu. Tüm bunların üzerine RSA kriptolama modlarının ileri güvenlikten (forward secrecy) yoksun olduklarını da hatırlatırız.
Özet olarak, RSA kriptolama modlarının bu denli istismar edilebilir olması söz konusu modları devre dışı bırakmayı en iyi güvenlik politikası kılıyor. RSA kriptolama modları ismi 'TLS_RSA' ile başlayan (içinde 'DHE' veya 'ECDHE' geçenler hariç) tüm kriptolama modlarıdır. Bunları sunucularınızda koşan TLS yığınlarında devre dışı bırakmanızı şiddetle tavsiye ediyoruz!
Netsparker ile ROBOT Zafiyetlerini Tarama
ROBOT kontrollerini de içeren Netsparker web uygulama güvenlik tarayıcısı hotfix versiyonu 22 Aralık tarihinde yayınlandı. Netsparker'ın ROBOT kontrollerini de yaptığından emin olmak için Scan Policy ayarlarınızda SSL güvenlik kontrollerinin seçili olduğundan emin olunuz.
İlave olarak hızlıca ROBOT zafiyeti için sisteminizi kontrol etmek isterseniz, yeni bir Scan Policy oluşturarak sadece SSL kontrollerini devreye alabilirsiniz.
Yine tarama süresini kısaltmak ve hızlıca ROBOT zafiyeti kontrollerini yapmak için Scan Policy ayarlarınızda JavaScript Anayzer seçeneğini devre dışı bırakabilir ve kontrol etmek istediğiniz hedefi Imported Links bölümüne ekledikten sonra taramayı Scan Imported Links Only seçeneği ile başlatabilirsiniz.
Burada önemli bir detayı hatırlatmakta fayda görüyoruz; bir host üzerinde birden fazla TLS yığını aynı anda mevcut olabilir. Aynı şekilde 'www' ile sunulan host üzerinde koşan TLS yığını 'www' olmadan sunulan sitedeki TLS yığınından farklı olabilir. Bu sebeple ROBOT zafiyeti için gerekli kontrolleri yaparken tüm TLS yığınlarının kapsandığından emin olunmalıdır.
ROBOT Saldırısı Araştırması
ROBOT saldırısı üzerine tüm diğer teknik detaylar için, Hanno Bӧck, Juraj Somorovsky ve Craig Young tarafından hazırlanan Return Of Bleichenbacher’s Oracle Threat (ROBOT) isimli makaleye başvurabilirsiniz.