Türk Bayrağı
Teknik Not
Bilgi Güvenliği 3 dk okuma

"Zaten Yaparlar" Varsayımı: Projelerde Güvenlik Neden Şansa Bırakılamaz?

Sektörde geçen 16 yılın ardından, işin mutfağında—veritabanı yapılarından tutun da kapsamlı API ve SSO (Single Sign-On) altyapılarına kadar—gördüğüm en net gerçek şu: Güvenlik, "nasılsa yaparlar" varsayımına bırakılamaya...

Sektörde geçen 16 yılın ardından, işin mutfağında—veritabanı yapılarından tutun da kapsamlı API ve SSO (Single Sign-On) altyapılarına kadar—gördüğüm en net gerçek şu: Güvenlik, "nasılsa yaparlar" varsayımına bırakılamayacak kadar ciddi bir konudur.

Eğer bir işin temelleri atılırken güvenlik standartları açıkça konuşulmazsa, sistemin zafiyet göstermesi maalesef kaçınılmaz oluyor. Geçtiğimiz günlerde okuduğum bir araştırma da tam olarak bu konuya, çok ilginç bir açıdan yaklaşıyor.

Güvenlik Beklentisi Açıkça İfade Edilmeli

2017 ve 2018 yıllarında gerçekleştirilen bir araştırma, geliştiricilerin parola güvenliği konusundaki yaklaşımlarına ayna tutuyor. İki farklı gruba bir kullanıcı kayıt ekranı geliştirme görevi veriliyor. Bir gruptan parolaları güvenli bir şekilde saklamaları özellikle istenirken, diğer gruba herhangi bir güvenlik şartı belirtilmiyor. Sonuç oldukça düşündürücü: Şart koşulmayan gruptaki katılımcıların hiçbiri ekstra bir güvenlik önlemi alma ihtiyacı hissetmiyor. Temel gerekçeleri ise projenin gerçek bir müşteri için yapılmıyor olması.

"Peki profesyonel dünyada durum farklı mı?" diye sorabilirsiniz. Araştırmacılar, dışarıdan anlaştıkları 43 serbest (freelance) geliştiriciyle benzer bir senaryoyu test ettiklerinde; güvenlik şartı belirtilmeyen 22 geliştiriciden 15'inin (yaklaşık %68) parolaları güvenli saklamaya yönelik herhangi bir adım atmadığını tespit ediyor.

Kavram Kargaşası: Base64 Bir Şifreleme Değildir

Veritabanları ve veri yapılarıyla bu kadar iç içe biri olarak bu araştırmada asıl dikkatimi çeken nokta, sektörde yer edindiğini düşünen profesyonellerin bile Encoding (kodlama) ve Hashing (özetleme) kavramlarını zaman zaman birbirine karıştırması oldu. Araştırmadaki bazı veriler durumu net bir şekilde özetliyor:

  • Base64 Yanılgısı: 43 geliştiriciden 8'i parolaları korumak için Base64 kullanmayı tercih etmiş. Ancak Base64 bir şifreleme algoritması değil, veriyi farklı bir formata dönüştüren bir kodlama standartıdır. Sonundaki "=" (padding) işaretinden kolayca tanınabilen bu yapı, saniyeler içinde geri çevrilerek orijinal parolayı açığa çıkarabilir.

  • Doğrulanmamış Kod Kullanımı: 17 kişi, internette buldukları kod bloklarını güvenlik kontrolünden geçirmeden doğrudan işe dahil etmiş. Güvenlik altyapısının kaynağı belirsiz çözümler üzerine oturtulması büyük bir risktir.

  • Eski Teknolojiler: 10 geliştirici ise MD5 kullanmış. MD5'in artık "Collision" (çakışma) zafiyetleri barındırdığı bilinen bir gerçek. İki farklı metnin aynı MD5 özetini verebilmesi, sisteme tamamen farklı ve yanlış bir parolayla bile giriş yapılabilmesine olanak tanır.

Güvenli Bir Sistem İçin Temel Standartlar

Çalıştığım her yapıda taviz vermeden uyguladığım temel güvenlik standartları şunlardır:

  1. Modern Algoritmalar: Parola güvenliği için SHA-256, BCrypt veya PBKDF2 gibi güncel ve endüstri standardı Hashing algoritmaları tercih edilmeli.

  2. Tuzlama (Salting) Kriteri: Sadece hash işlemi uygulamak tek başına yeterli değildir. "Rainbow Tables" (önceden hesaplanmış hash tabloları) saldırılarını engellemek adına, her kullanıcı için benzersiz ve kriptografik olarak güvenli bir "salt" (tuz) değeri üretilmeli. Parola, bu değerle birleştirilerek hash'lenmeli.

  3. İzole Veri Saklama: Güvenlik katmanını bir adım öteye taşımak için, üretilen bu benzersiz "salt" değerleri mümkünse parolaların bulunduğu tablodan bağımsız, izole bir alanda saklanmalı.

Özetle; bir ekiple çalışırken veya bir kodu incelerken, işleyişi varsayımlar üzerine kuramayız. Teknik gereksinimleri ve güvenlik standartlarını projenin en başında, şeffaf ve net bir şekilde belirlemek gerekir. Unutmayalım ki yazılım dünyasında talep edilmeyen güvenlik, nadiren kendiliğinden inşa edilir.