Gömülü ortamlar için iki açık kaynaklı TLS/SSL uygulaması/kütüphanesi olan MatrixSSL ve wolfSSL’de yakın zamanda yamalanan güvenlik açıkları, kriptografik protokol uygulamalarında güvenlik açıklarını ortaya çıkarmak için bulanıklaştırma kullanmanın büyük potansiyelini vurguladı.
CVE-2022-43974 ve CVE-2022-42905
CVE-2022-43974, MatrixSSL 4.5.1-4.0.0 sürümlerinde bulunan ve bilgilerin açığa çıkmasına ve uzaktan kod yürütülmesine izin verebilecek bir arabellek taşması güvenlik açığıdır.
Deutsche Telekom’un BT Güvenlik Değerlendirme Tesisinde güvenlik değerlendiricileri olan Robert Hörr ve Alissar Ibrahim tarafından keşfedildi ve bildirildi ve Aralık 2022’de yayınlanan 4.6.0 sürümünde yamalandı.
CVE-2022-42905, wolfSSL 5.5.1 ve önceki sürümlerinde bulunan bir arabellek aşırı okuma güvenlik açığıdır ve kötüye kullanılabilir çökmelere neden olabilir (ancak yalnızca geri çağırma işlevleri etkinleştirildiyse).
LORIA, Inria’dan (Fransız Dijital Bilim ve Teknoloji Araştırma Enstitüsü) Lucca Hirschi ve Steve Kremer ve Trail of Bits’te staj yapan bir güvenlik mühendisi olan Max Ammann tarafından keşfedildi ve bildirildi. Ekim 2022’de yayınlanan wolfSSL 5.5.2 sürümünde yamalı.
Güvenlik açıklarını işaretlemek için kriptografik kitaplıkları belirsizleştirme
Her iki durumda da, araştırmacılar kusurları bulmak için bulanıklaştırmayı kullandılar.
“Bilgisayar yazılımı giderek daha karmaşık hale geliyor. Bu nedenle, makul kapsamla eksiksiz bir kaynak kodu incelemesi yapmak neredeyse imkansızdır. Bu nedenle, güvenlik açıklarını keşfetmek için modern fuzzing yöntemleri kullanılıyor,” dedi Deutsche Telekom’un güvenlik değerlendiricileri.
MatrixSSL kitaplığını kod kapsamı kılavuzlu bulanıklaştırıcılar AFL ve libFuzzer ile bulanıklaştırdılar ve güvenlik açığı, bellek hatalarını tespit etmeye yönelik bir araç olan AddressSanitizer ile bulundu. (Aynı araçları kullanarak, birkaç yıl önce Hörr, wolfSSL’de başka bir arabellek taşmasını ortaya çıkardı. Ayrıca, çeşitli bulanıklaştırma araçlarının güçlü yanlarını birleştirerek TLS kitaplıkları için Hızlı Otomatik Yazılım Testi çerçevesini geliştirdi.)
“AddressSanitizer ile birleştirilmiş kod kapsamına dayalı bulanıklaştırma, örneğin arabellek taşmalarını keşfetmek için güçlü bir yöntemdir. Giderek daha karmaşık hale gelen kaynak kodlarıyla, kaynak kodu incelemelerine kaynak açısından verimli bir alternatiftir, çünkü bu belirsizleştirme yaklaşımı çoğunlukla otomatik olarak yapılabilir. Fuzzing için pek çok yaklaşım olduğu için en iyi yaklaşımı bulmak fuzzing sanatıdır” dedi Hörr ve İbrahim.
Ammann ve araştırmacı arkadaşları, CVE-2022-42905’i ve diğer üç güvenlik açığını otomatik olarak keşfetmek için tlspuffin adlı yeni bir protokol bulanıklaştırıcısı kullandı.
“Tlspuffin, resmi protokol doğrulamasından ilham alan bir fuzzer. Başlangıçta LORIA, INRIA, Fransa’daki stajımın bir parçası olarak geliştirildi ve özellikle TLS veya SSH gibi kriptografik protokolleri hedef alıyor” dedi.
Fuzzer’ı yalnızca wolfSSL’deki yeni güvenlik açıklarını keşfetmek için değil, aynı zamanda tlspuffin’in çalıştığını kanıtlamanın bir yolu olarak önceden işaretlenmiş mantıksal güvenlik açıklarını (örn. FREAK) yeniden keşfetmek için kullandılar.
Mükemmel bir yazıyla Ammann, keşfedilen bazı güvenlik açıkları ve fuzzer’ın nasıl “tuhaf durumlar” bulduğunu ve bunların kaynağını bulmalarına nasıl izin verdiğini daha derinlemesine ele aldı.
“Kriptografik protokollerin uygulamalarını belirsizleştirmek zor. Dosya biçimlerinin geleneksel belirsizleştirilmesinden farklı olarak, kriptografik protokoller, derin protokol durumlarına ulaşmak için belirli bir kriptografik ve karşılıklı olarak bağımlı mesaj akışı gerektirir” diye açıkladı.
“Ayrıca, mantıksal hataları tespit etmek başlı başına bir zorluktur. AddressSanitizer, güvenlik araştırmacılarının bellekle ilgili sorunları güvenilir bir şekilde bulmasını sağlar. Kimlik doğrulama baypasları veya gizlilik kaybı gibi mantıksal hatalar için hiçbir otomatik algılayıcı mevcut değildir.”
Bu yüzden tlspuffin’i yarattılar. Kriptografik protokolleri test etmek için kullanılabilen onlarca yıllık Dolev-Yao modelini kullanan bu model, kriptografik protokollerin somut uygulamalarını başarılı bir şekilde bulanıklaştırabilmeleri için belirli modifikasyonlar içerir. Tlspuffin’in yapısı da LibAFL fuzzer’a dayanmaktadır.
Ammann, “Trail of Bits’teki stajımdan önce tlspuffin, OpenSSL’nin (Heartbleed’e karşı savunmasız olan 1.0.1 sürümü dahil) ve LibreSSL’nin çeşitli sürümlerini bulanıklaştırmayı zaten destekliyordu,” dedi. O zamandan beri sahip oldukları:
- Rastgele protokol kitaplıklarını bulanıklaştırma yeteneği ekleyen ve wolfSSL’yi bulanıklaştırma desteği ekleyen bir arabirim tasarladı
- SSH protokolünün yanı sıra libssh’i bulanıklaştırmak için destek eklendi
- Program çökmelerine yol açmayan güvenlik sorunlarının (örneğin, kimlik doğrulama baypasları veya protokol düşürmeleri) algılanmasına izin veren bir güvenlik ihlalleri kehaneti eklendi.
- Bulguları daha kolay doğrulamalarını sağlayan değişiklikler yapıldı
Tlspuffin artık TLS ve SSH protokollerini test etmek için kullanılabilir ve bu, yeni bir protokolü tlspuffin’e entegre etmek mümkündür, ancak “önemli bir çaba gerektirir ve protokolün derinlemesine anlaşılmasını gerektirir.” Geliştiriciler tarafından test takımları yazmak için de kullanılabilir.