Güvenli Yazılım
Güvenli yazılım geliştirme kurallarını öğrenmek için öncelikle güvenli yazılımı anlamalısınız. Güvenli yazılım mimarisi, olası saldırılara karşı önlemler alınarak tasarlanmış, siber saldırıya maruz kaldığı zamanda bile işleyişi bozmadan çalışmaya devam edebilen yazılımları kapsar.
Güvenli Yazılım Geliştirme
Tüm yazılım geliştirme süreci aşamaları boyunca ihtiyaç duyulan özelliklerin tespiti, ara yüz tasarımı, özelliklerin geliştirilmesi ve test edilmesi vb. gibi hususlar dahil olmak üzere, yazılımın planlamasından bitirilmesine kadarki geçen sürede güvenli yazılım geliştirme için yapılan tüm faaliyetlerdir.
Özet
Bir saldırı veya tehdit durumunda, yazılım normal şekilde çalışmaya devam etmelidir. Siber saldırılara karşı önlemlerin alınması ve bu önlemler doğrultusunda yazılımın geliştirilmesine yazılım güvenliği denir. Yazılım güvenliği faaliyetlerinin amacı Tüm bilgi güvenliği saldırılarına karşı daha dayanıklı ve hatasız yazılımlar üretmektir.
Güvenli Yazılım Nasıl Geliştirilir?
Yazılımlara yapılan saldırılarda 3 farklı temel neden vardır;
- Saldırılan yazılımı tamamen etkisiz hale getirip kullanılmasını engellemek.
- Yazılıma korsan bir kod dahil edilerek işleyişini bozmak veya farklı amaçlarda çalışmasını sağlamak.
- Yazılımdaki zafiyetleri tespit etmek için farklı aralıklarla incelemeler yapıp zayıf noktalarını tespit etmek ve sonrasında yazılımın bulunduğu sunucu ardından daha geniş bir alana yayılarak tüm veri merkezlerine erişimi sağlamak.
Yazılım saldırılarını önlemek için öncelikle yazılım güvenliği ilkelerine uygun bir yol izlenmeli ve güvenliği arttıracak tasarım yöntemleri ve uygulamaları kullanılmalıdır. Dışarıdan izinsiz veri aktarımını engellemek için form alanlarından gelen verilerin kontrol edilerek sunucuya aktarılması gerekir. Önlem almak ve güvenlik senaryolarını kafamızda kurmak, yazılımın geliştirilmesi ve bitirilmesi sonrası güvenli bir yazılım haline gelmesindeki en büyük etkendir.
YAZILIM GÜVENLİĞİ İLKELERİ
Aşağıda açıklanan güvenlik ilkelerinin yazılım geliştirme sürecindeki tüm durumlarda (planlama, geliştirme, kullanılan uygulamaların tercihi, projeye dahil olan personel ve projeyi kullanacak olan kullanıcılar) kullanılması gereklidir. Sistemsel devamlılığın yanı sıra kullanıcıların etkileşimleri ve geribildirimleri de dikkate alınmalıdır. Sistemsel ve kullanıcı taraflı güvenlik ilkeleri aşağıda detaylı bir şekilde açıklanmaktadır.
Ayrıcalıkları (Yetkileri) Düşük Tut
En az ayrıcalık ilkesi, kullanıcı ve yazılımın gerekli işlemleri gerçekleştirirken ihtiyaç duyacağı en düşük işlem yetkisine sahip olmasıdır. Bu ilkede projede yavaşlama ve aksamalar olmadığı gibi güvenlik bakımından da üst düzel bir güvenlik sağlanmış olur. Ayrıcalıkların düşük olması aşağıdakilerin gerçekleşmesini sağlar;
- Yazılımın minimum veri kullanımı sayesinde sistemsel yavaşlıklar engellenir.
- Uygulamaya verilen yetkilerin düşük olması sunucu üzerinde erişebileceği alanları kısıtlayacağı için saldırıya uğrasa bile dönüşü olmayan sonuçlara yol açmayacaktır.
Tüm Erişimleri Kayıt Altında Tut
Yazılımda gerçekleştirilen önemli işlemlerin kayıt altında tutulmasıdır. Yazılımın başlatılması, kapatılması, veri eklenmesi – silinmesi, bir isteğin gerçekleşmesi ve isteğe dönen cevap gibi önemli olarak sayılan işlemler loglama yöntemleri ile kayıt altında tutulur. Bu sayede yazılımda gerçekleşen sorunların ve fark edilmeyen zafiyetlerin tespiti kolaylaşır.
Erişimleri Ayrı Tut
Yazılımda bulunan önemli bir dosyaya veya özelliğe erişilmeye çalışıldığında erişim denetiminin arttırılmasıdır. 2fa (iki faktörlü doğrulama) buna bir örnektir. Kullanıcı önemli bir dosyaya erişmeden önce (Şekil 1) sunucuda oturum açmalı ardından erişmek istediği yere oturum açmalıdır. Her iki doğrulama işlemi de gerçekleşirse erişim izni verilebilir, aksi durumda erişim reddedilir.

Şekil 1 Erişim Şeması
Varsayılanları Gözden Geçir
Yazılımda kullanılan tüm varsayılanların gözden geçirilmesidir. Güvenlik zafiyeti tespit edilen varsayılanlar güvenli hale getirilmelidir. Genel olarak yapılan hatalar aşağıdaki gibidir.
- Kullanılan dosya ve metin belgelerinin herkese açık olması ve üzerinde düzenlemeler yapılabilmesi.
- Yazılımın bulunduğun dizinin kolay erişilebilir ve basit (anlaşılır) olması.
- Erişime açık dosyalarda şifrelerin bulunması
- IP zafiyetine karşı tehdit olabilecek varsayılan ayarlar.
Ortak Erişim Alanlarına Erişimi Sınıflandır
Ortak alanlara erişimlerde farklı kanallar kullanılmasıdır. Aynı kanaldan yapılan erişimlerde veri sızması ve çalışması durumu kaçınılmazdır. Bu tip durumlarda erişim kanallarını sınıflandırmak gerekir.
Zafiyeti Tespit Et ve Engelle
Yazılımda bulunan zafiyetlerin tespit edilerek güvenlik önlemleri çerçevesinde düzenlemelerin yeniden yapılandırılmasıdır. Yazılımlara yapılan saldırılarda genellikle zafiyet oranı yüksek olan alanlar kullanılır. Güvenlik Zafiyeti bulunan yazılımda zafiyet tarama testleri yapılarak tespitler yapılır ve sonrasında güvenlik arttırma çalışmaları yapılır.
Saldırı Yapılabilecek Ara Yüz Alanlarının Minimuma İndirilmesi
Yazılım ara yüzünde sunucuya bilgi gönderme veya sunucudan bilgi alma alanlarının azaltılmasıdır. Yazılım ara yüzünde bulunan iletişim alanlarının az olması yazılım güvenliğini arttırır.