Güvenli Yazılım Geliştirme neden gerekli?

Eğer bir güvenlik istismarı gerçekleşirse, ürüne/projeye/şirkete zarar oluşturur:

  • İtibar kaybı,
  • Müşteri kaybı,
  • Hassas veri kaybı,

İstismar hakkında bilinmesi gerekenler:

  • Güvenli yazılım geliştirme kaygısı olmaksızın yazılan kodlar zafiyet oluşması riskini artırır.
  • Bir zafiyet kötü niyetli kişiler/yazılımlar tarafından kullanılarak sistem istismar edilebilir.
  • İstismar bir ihlal, zarar verme veya sızıntı olabilir.
  • Yaşanan istismar sonrasında, zafiyetin hangi bileşen veya fonksiyonlardan kaynaklandığını bulabilmek de kritiktir.
  • İstismar sonrası onarımlar, fonksiyonel ve yapısal bütünlük açısından her zaman daha risklidir.

İpuçları

  1. Veri girişini doğrulayın. Tüm güvenilmeyen veri kaynaklarından gelen verileri girişte doğrulayın. Doğru yapılan bir veri girişi doğrulaması, yazılım güvenlik açıklarının büyük çoğunluğunu ortadan kaldıracaktır. Komut satırı argümanları, ağ arayüzleri, çevresel değişkenler ve kullanıcı tarafından kontrol edilen dosyalar dahil olmak üzere gelen tüm verilerden şüphelenin. [Seacord 05]
  2. Mimari ve tasarım güvenlik politikaları. Bir yazılım mimarisi oluşturun ve yazılımınızı güvenlik ilkelerini uygulamak ve zorlamak için tasarlayın. Örneğin, sisteminiz farklı zamanlarda farklı ayrıcalıklar gerektiriyorsa, sistemi, her biri uygun bir ayrıcalık kümesine sahip, birbiriyle iletişim halinde olan farklı alt sistemlere bölmeyi düşünün.
  3. Derleyici uyarılarını dikkate alın. Derleyiciniz için mevcut olan en yüksek uyarı seviyesini kullanarak kodu derleyin ve [C MSC00-A, C++ MSC00-A] kodunu değiştirerek uyarıları ortadan kaldırın. Ek güvenlik açıklarını tespit etmek ve ortadan kaldırmak için statik ve dinamik analiz araçlarını kullanın.
  4. Basit tutun. Tasarımı olabildiğince basit ve küçük tutun [Saltzer 74, Saltzer 75]. Karmaşık tasarımlar, uygulama, yapılandırma ve kullanımlarında hata yapma olasılığını artırır. Ek olarak, güvenlik mekanizmaları daha karmaşık hale geldikçe, uygun bir güvence düzeyi elde etmek için gereken çaba önemli ölçüde artar.
  5. Varsayılan olarak her şeyi reddedin. Erişim kararlarını izne dayandırın. Bu, varsayılan olarak erişimin reddedildiği ve izin verilen koşulların belirlediği anlamına gelir. [Saltzer 74, Saltzer 75]
  6. En az ayrıcalık ilkesine bağlı kalın. Her işlem, işi tamamlamak için gereken en az ayrıcalık kümesiyle yürütülmelidir. Herhangi bir yükseltilmiş izin minimum bir süre için tutulmalıdır. Bu yaklaşım, bir saldırganın yüksek seviyeli ayrıcalıklarla kod çalıştırabilmesinin önüne geçer. [Saltzer 74, Saltzer 75]
  7. Diğer sistemlere gönderilen verileri sterilize edin. Komut kabukları, ilişkisel veritabanları ve ticari kullanıma hazır (COTS) bileşenler gibi karmaşık alt sistemlere [C STR02-A] iletilen tüm verileri kontrol edin ve ayıklayın. Saldırganlar, SQL, komut veya diğer enjeksiyon saldırılarını kullanarak bu bileşenlerde herhangi bir çağrım yapabilir. Alt sistem, çağrının yapıldığı bağlamı anlamadığından, burada problem bir girdi doğrulama sorunu değildir. Çağrıyı yapan, süreç bağlamı bildiği için, alt sistemden bir çağrı yapmadan önce verileri temizlemekten sorumludur.
  8. Savunmayı derinlemesine uygulayın. Riski birden çok savunma stratejisiyle yönetin, böylece bir savunma katmanının yetersiz olduğu ortaya çıkarsa, başka bir savunma katmanı bir güvenlik açığının istismar edilebilir bir güvenlik açığı haline gelmesini önleyebilir ve/veya başarılı bir istismarın sonuçlarını sınırlandırabilir. Örneğin, güvenli programlama tekniklerini güvenli çalışma zamanı ortamlarıyla birleştirmek, dağıtım sırasında kodda kalan güvenlik açıklarından operasyonel ortamda yararlanma olasılığını azaltmalıdır [Seacord 05].
  9. Etkili kalite güvence tekniklerini kullanın. İyi kalite güvence teknikleri, güvenlik açıklarının belirlenmesi ve ortadan kaldırılmasında etkili olabilir. Fuzz testi, sızma testi ve kaynak kodu denetimlerinin tümü, etkili bir kalite güvence programının parçası olarak dahil edilmelidir. Bağımsız güvenlik incelemeleri daha güvenli sistemlere yol açabilir. Dış gözden geçirenler bağımsız bir bakış açısı getirir; örneğin, geçersiz varsayımları belirleme ve düzeltmede [Seacord 05].
  10. Güvenli bir kodlama standardı benimseyin. Hedef geliştirme diliniz ve platformunuz için güvenli bir kodlama standardı geliştirin ve/veya uygulayın.