Açık kaynak camiasının, özellikle de Paragon Initiative Enterprises’tan Scott Arciszewski’nin çabaları sonucunda PHP uygulamalarında önemli ilerlemeler kaydedildi. WordPress, Laravel ve Symfony gibi büyük projelerde değişiklikler söz konusu.
Başta WordPress 4.4, Laravel 5.2 ve Symfony 2.8 olmak üzere, bu projelerde artık CSPRNG (Cryptographically Secure PseudoRandom Number Generator/Kriptografik Olarak Güvenli Sözde Rasgele Sayı Üreteci) desteği olacak.
CSPRNG özellikle kriptografide kullanılmak üzere tasarlanmış bir rasgele sayı üreteci algoritması. Güvenlik uzmanları salt hashleri, anahtarlar, noncelar oluşturmak ve veri dolguları için CSPRNG algoritmalarını tavsiye ediyor. Bunun nedeni CSPRNG’nin yüksek entropili (rasgelelik) gerçek rasgele sayılar üretmesi. Dolayısıyla bu şifrelerin kaba kuvvet saldırılarıyla kırılması zor.
Her şey Facebook Yazılım Geliştirme Kiti’yle (SDK) başladı
Arciszweski bu soruna eğilmesinin nedeninin açık kaynaklı Facebook SDK’de iyi bir rasgele sayı üreteci sistemi bulunmaması olduğunu söylüyor.
Önce SDK’nin geliştirilmesi için Facebook’a bir yol haritası önermiş, sonra PHP 7’ye eklenmiş kriptografik olarak güvenli iki fonksiyonu alıp PHP 5.x’e taşımış.
Günümüzdeki büyük açık kaynaklı projelerin çoğunun hala eski versiyonları için PHP 5.x desteği sunması gerektiğinden, Arciszewski’nin random_compat kütüphanesindeki işi bitince bu projelerin bakım sorumluları kendi uygulamalarındaki “gerçek” rasgele sayı üretimi desteği konusunu yeniden gözden geçirme fırsatını bulmuşlar.
Şu an WordPress, Laravel ve Symfony bu kütüphaneyi kendi kod tabanlarına entegre etmiş durumda. CodeIgniter (v4)’un bir sonraki sürümü de bu işlevi, projenin minimum PHP sürümü gereksinimi olan PHP 7 üzerinden yerel olarak destekleyecek.
Joomla ise bu konuda biraz geride kalmış durumda. Önce halletmesi gereken bazı kriptografi sorunları var. Arciszewski Joomla’daki kriptografi zaafları hakkında bir rapor hazırlamasına rağmen Joomla geliştirme ekibi bu sorunlara henüz el atmış değil. Arciszewski Sofpedia’ya verdiği bir röportajda Joomla’nın kriptografi kütüphanesi olan JCrypt’in simetrik anahtar şifrelemesinden parola onayına kadar birçok işi hallettiğini söylüyor. “Joomla’nın eski parola onaylama sistemi (pre-bcrypt) birçok güvenlik şirketinin PR kampanyalarında ‘magic hash’ tabir ettiği şeye karşı açıklar içeriyor. Fakat esas sorun şurada: Eğer ‘0e’ ile başlayan herhangi iki hashiniz varsa ve bu hashleri yalnızca nümerik basamaklar takip ediyorsa, bu nümerik basamakların ne olduğuna bakmaksızın PHP bunların birbirine eşit olduğunu düşünüyor,” diyor Arciszewski. “Ayrıca bcryptleri kriptografi kurallarına pek uymuyor. Hashleri sabit zamanlı dizilim karşılaştırması fonksiyonu yerine === ile karşılaştırıyor. Kodlarına bugüne kadar hiçbir kriptograf bakmamış. Bu konuda hızlı bir yama için ===’yi hash_equals() ile değiştirmek gerekiyor.” Arciszewski daha sonra başka üç sorundan da bahsediyor.
– “Eski şifreleme sistemleri, JCryptCipherSimple, aşırı kötü. Eğer sisteme ‘AAAAAA…’ (A harfini 256 veya daha fazla kez tekrar ederek) mesajını girip, daha sonra şifre metninden bu mesajı çıkarttığınızda şifre anahtarını elde ediyorsunuz.”
– “Şifrelerinin hiçbirinde Onaylı Şifreleme yok.”
– “Mcrypt tabanlı şifrelerinin hepsi CBC modunu kullanacak şekilde ayarlanmış. Bu modda da her mesaj için Başlangıç Vektörü adı verilen benzersiz, tahmin edilemez (rasgele) bir sayı olması gerekiyor. Joomla ise her mesaj için rasgele bir değer oluşturmak yerine anahtar üretildiğinde bir değer başlatıp bu değeri her mesaj için kullanıyor. Çok sayıda şifre metni olduğu düşünülürse, bu hata CBC modunun güvenliğini ECB moduna düşürüyor. Joomla gibi popüler bir projenin böyle bir hata yapmış olması düşündürücü.”
Joomla bu eleştiriler üzerine Joomla 3.5.0’a bir random_compat ekleyerek rasgele sayı üretecini güvenli hale getirdi. Diğer sorunlar ise hala çözüm bekliyor.