Güvenli Yazılım Geliştirme Süreçleri

Güvenli Yazılım Geliştirme Süreçleri

Güvenli Yazılım Geliştirme Nedir?

Güvenli yazılım geliştirmek, geliştirilecek uygulama için yazılacak olan kodun belli niteliklere sahip olarak yazılmasını esas alır. Bu nitelikler başlıca kodun güvenliği, okunabilirliği, tekrar kullanılabilirliği, bakım kolaylığı vs. olarak sıralanabilir. Bu standartları belirleyen çeşitli organizasyonlar mevcuttur ,“Open Web Application Security Project (OWASP)” yani “Açık Web Uygulama Güvenliği Projesi” kar amacı gütmeyen bir organizasyon olarak güvenli yazılım geliştirme standartlarını belirlemek için çalışmalar yürütmektedirler. Çeşitli dillerde güvenli yazılım geliştirme rehberleri yayınlamışlar ve yazılımcılara bu konuda yol göstermek için çalışmaktadırlar.

Güvenli Yazılım Geliştirme Neden Gereklidir?

Bilgi teknolojilerinin hayatımızın her alanında yer edinmesiyle birlikte yazılımın da günlük hayatımızdaki yeri büyük bir öneme sahip oldu. Teknolojik cihazların hayatımızda bu kadar önemli bir konuma sahip olması da ortaya çıkabilecek tehlikenin boyutlarını bir hayli artırdı. Tehlikenin derecesi, yanlış bir siteye tıklamak ile bilgisayarına bulaşabilecek nispeten basit bir virüsten, kredi kartı veya kimlik bilgilerinizin bilgisayar korsanı olarak tabir edilen hackerlarca çalınıp izniniz dışında kullanılmasına kadar artabiliyor. Uzmanlar bu durumun farkında ve gerekli önlemleri almak ve güvenliği sağlamak için dünyanın her yanından I.T. görevlileri, bilgisayar mühendisleri ve yazılımcılar yeni yöntemler geliştiriyor. Bu yöntemlerin esas hedefi ise geliştirilen yazılımı daha sağlam ve güvenli hale getirerek sorunu temelde çözmek. Yazılımların güvenliği artırmanın yolu ise iyi eğitimli, güvenli yazılım geliştirme tekniklerine hâkim yazılımcılar yetiştirmekten geçiyor. Sektördeki yazılımcılar belli bir standardı yakaladıktan sonra daha güvenilir yazılımlar geliştirilebilir. Bunun için de güvenli yazılım geliştirme tekniklerinin yazılımcılar tarafından bir kalite standardı olarak benimsenmesi esastır.

Risklerden Kaçınmanın Yolları Nelerdir?

Yukarıda bahsettiğimiz, başlıca OWASP olmak üzere bu konuda çalışmalar yapan organizasyonların belirlediği standartlara uygun olan yazılımlar geliştirmek ve geliştirilen yazılımları bu standartlarda denetlemek yapılabilecek en temel uygulamadır. Asıl yapılması gereken ise gerek güvenlik gerek süreklilik açısından yazılımcıların bu konuda eğitim alması ve güvenli yazılım geliştirmede pratikleşmesi olacaktır. Bunun için alanında yetkin kuruluşlardan destek alınabilir.

Güvenli Yazılım Geliştirmede Kullanılan Yöntemler

1. Onaylanmış Girdi (Validate Input)

Güvenilmeyen kaynaklardan gelen girdileri önce bir onaylama süzgecinden geçirmek demektir. Düzgün yapılmış bir onaylama işlemi ile dışarıdan gelebilecek tehditlerin büyük çoğunluğu bir yazılım zafiyetine yol açmadan elenebilir. Dış kaynaklardan gelen girdilere şüpheci yaklaşmak bu girdileri detaylı olarak denetlemek önemlidir.

2. Derleyici Uyarılarına Dikkat Etmek (Heed Compiler Warnings)

Kodu yazarken derleyicinin verdiği uyarılara dikkat etmek ile yapılabilecek mantık hatalarının ve ileride büyük güvenlik sorunları oluşturabilecek küçük problemlerin önüne geçebilir. Kod analiz araçları kullanılarak da daha detaylı güvenlik zafiyetleri tespit edilebilir.

3. Güvenlik Politikalarına Uygun Mimari ve Tasarım(Architect and Design for Security Policies)

Yazılımda kullanılacak mimari ve tasarımın güvenlik politikaları esas alınarak tasarlanması gereklidir. Örneğin sistemi alt parçalara bölmek ve kendi arasında iletişim kurmasını sağlamak, bütün işlemleri bir sistemin tek başına yapmasından daha güvenli bir tasarımdır.

4.Sade Olun (Keep It Simple)

Tasarımınızı olabildiğince sade ve küçük tutmanız bir zafiyeti daha kolay fark etmenizi ve önlemini kolayca almanızı sağlar. Karmaşık tasarımlar hataları artırdığı gibi yazılımınızın başka sistemlere uyarlanmasını da zorlaştırır.

5.Varsayılan Erişim(Default Deny)

Genellikle erişim tasarımları reddedilen erişimler üzerine kuruludur. Yani reddedilen erişimler varsayılan olarak belirlenir ve bunun dışında kalan erişimlere izin verilir. Bu tasarımı dikkatli yapmak geçersiz erişimleri engellemek için önemlidir.

6.En Düşük Ayrıcalık Prensibi (Adhere to the Principle of Least Privilege)

Bu prensip yapılan işlemlerde kullanılabilecek en düşük ayrıcalık ve izinlerin kullanılmasını esas alır. Böylece olası bir saldırıda, saldırganın ele geçirebileceği izinler ve yetkiler sınırlı olacaktır.

7. Sterilize Veri Gönderimi(Sanitize Data Sent to Other Systems)

Sistemden geçen command shell, ilgili veri tabanları gibi bütün verilerin sterilize edilerek alt sistemlere gönderilmeleri gerekir. Saldırganlar alt sistemler arası iletişime sızmak için kendi oluşturdukları komutları ve verileri göndermeyi deneyebilirler. Alt sistemlerin bunları anlayabilmesi için güvenilir verileri sterilize olarak göndermek önemlidir.

8. Derinlemesine Uygulama Savunması (Practice Defense in Depth)

Bir riski önlemek için birden fazla savunma stratejisi gerekebilir. Bu yüzden derinlemesine katmanlı bir savunma hazırlayarak, saldırganın bir katmanı geçse bile diğerinde takılması sağlanabilir ve sisteme sızması engellenmiş olur. Örneğin güvenli yazılım geliştirme teknikleri kullanımı ile uygulamanın çalışacağı ortamı güvenli hale getirmek kombine edilerek zafiyet riski azaltılabilir.

9.Etkili Kalite Güvence Teknikleri Kullanımı (Use Effective Quality Assurance Techniques)

İyi kalite güvence teknikleri güvenlik için son derece etkili olabilir. Fuzz testleri, “pentest” adı verilen sızma testleri, kaynak kod analizi gibi teknikler bunlara örnektir. Dışarıdan bir inceleme almak kendi göremediğiniz hataları fark etmenizi sağlar ve yine uygulamanızın güvenliği için bağımsız bir bakış açısı ile hazırlanan bir raporun çok büyük faydaları olabilir.

10. Güvenli Yazılım Geliştirme Standardına Sahip Olmak (Adopt a Secure Coding Standard)

Bir yazılımı geliştirirken güvenli yazılım geliştirme standardı belirlemek veya belirlenen standardı uygulamak hedeflenen platform ve uygulama için önemlidir. Örnek olarak OWASP standartları baz alınabilir.

 

Kaynak Kod Analizi

Blog postu ile ilgili bir sorunuz varsa bizimle iletişime geçebilirsiniz.

Size nasıl yardımcı olalım?

İhtiyacınız olan her an Prisma danışmanları yanı başınızda. Bizimle 7/24 iletişime geçebilirsiniz.


    Sızma testi hizmetlerimizi incelediniz mi?