Güvenli Yazılım Geliştirme

Güvenli yazılım geliştirme, yazılımın gizlilik, bütünlük ve erişilebilirliği gibi önemli özelliklerini korumak için gereklidir. Güvenli yazılım geliştirme, yazılımın istenmeyen erişim, hırsızlık, veri sızıntısı, kimlik avı, virüsler, kötü amaçlı yazılımlar ve diğer saldırılardan korunmasını sağlar.

Güvenli yazılım geliştirme ayrıca, yazılımın hatalarını azaltarak ve siber saldırıların riskini azaltarak, son kullanıcıların güvenliği ve gizliliği için önemlidir. Böylece, hem kullanıcıların hem de yazılım şirketlerinin itibarını koruyarak, müşteri memnuniyeti artırılabilir.

Ayrıca, birçok kuruluşun ve hükümetlerin, siber güvenlik ihlalleri, veri sızıntıları ve diğer saldırılar nedeniyle büyük maddi kayıplara uğraması nedeniyle, güvenli yazılım geliştirme giderek daha fazla önem kazanmaktadır. Sonuç olarak, güvenli yazılım geliştirme, sadece bir yazılımın işlevselliği değil, aynı zamanda güvenliği ve kullanıcı gizliliği açısından da kritik bir unsurdur.

Peki güvenli yazılım geliştirmek için neler yapabiliriz.

  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.