Güvenli yazılım geliştirme süreçleri ve olgunluk modelleri Güvenli yazılım geliştirme süreçleri ve olgunluk modelleri

Güvenli yazılım geliştirme süreçleri ve olgunluk modelleri

Güvenli yazılım geliştirme süreçleri ve olgunluk modelleri

02/12/2022 14:56

TÜBİTAK araştırmacıları Süleyman Muhammed Arıkan, Tolga Yılmaz ve Özgür Yürekten kaleme aldı: “Güvenli Yazılım Geliştirme Süreçleri ve Olgunluk Modelleri”
BU HABERİ
PAYLAŞ

Bilişim sistemleri tarafından kullanılan yazılımlar; programlar, kütüphaneler, dijital ortam, çevrimiçi dokümanlar ve veri gibi bileşenlerden meydana gelir. Bileşenlerin farklı donanım ve işletim sistemlerinde çalıştığı, farklı programlama dilleri (Java, C#, Python vb.) ile geliştirildiği, farklı derleyiciler ve bütünleşik geliştirme ortamları (IDE) ile oluşturulduğu ya da farklı girdi çıktı dilleri (JSON, XML vb.) üzerinden kullanıldığı düşünüldüğünde karmaşık, katmanlı bir yapının karşımıza çıktığı görülebilir.

Bu katmanlar, yazılımı birçok açıdan dış müdahalelere karşı hassaslaştırmasına rağmen çoğu yazılım geliştirme projesinde, yazılımların güvenliğine işlevsellikle aynı oranda önem verilmemektedir. Bir yazılımın temel amacı, müşterinin ya da hedef kitlenin istekleri/ihtiyaçları doğrultusunda güvenliği, tasarlanmış işlevsellik sunmaktır. Fakat yazılımların güvenliği tasarım ve geliştirme aşamasında çoğunlukla dikkate alınmamakta, daha sonra eklenebilecek bir özellik ve ikincil bir uğraş konusu olarak algılanmaktadır. Bu durum da yazılım ürünlerinde telafisi zor ve giderilmesi maliyetli güvenlik açıklarına sebep olmaktadır. Bu sorunları önlemek, yazılımın bilgi güvenliği saldırılarına (bütünlük, erişilebilirlik, gizlilik) karşı daha dirençli çalışmasını sağlamak ve saldırı/tehdit altındayken işlevlerini doğru bir şekilde yerine getirmeye devam etmesi için yazılım güvenliği pratikleri kullanılmalıdır.

Yazılım Geliştirme Yaşam Döngüsü

Yazılım güvenliği; bir yazılımın tüm parçalarıyla birlikte geliştirilmesi, çalışır hale getirilmesi, müşteriye sunulması, işletilmesi ve sonlandırılması gibi süreçlerin tümüyle ilişkilidir. Dolayısıyla yazılımda güvenliği sağlamak için Yazılım Geliştirme Yaşam Döngüsü (YGYD) süresince yazılım güvenliği pratikleri uygulanmalıdır.

YGYD; müşteri beklentilerini karşılayan, zaman ve maliyet tahminlerine göre tamamlanan kaliteli yazılımlar üretmek amacıyla kullanılır. Yazılımlar için; planlama, analiz, tasarım, geliştirme, test, kurulum ve bakım gibi temel aşamaların tümü YGYD kapsamındadır. Bu aşamalar modelden modele farklılık gösterebilir. Yazılım geliştirme sürecinde sıklıkla tercih edilen yaşam döngüsü modellerine; şelale (waterfall) modeli, tekrarlı ve artımlı (iterative and incremental) model, spiral model, v-modeli, prototip modeli ve büyük patlama (big bang) modeli örnek olarak gösterilebilir.

Şelale modeli, birbirinin peşi sıra ilerleyen, seri süreçlere sahip, basit ve uygulaması, kolay bir model olduğundan gereksinimleri tam anlamıyla anlaşılan projelere oldukça uygundur.

Tekrarlı ve artımlı model, başlangıç aşamasında hızlıca çalışır halde prototip fonksiyonların geliştirilebildiği, müşterinin erken aşamalarda geri dönüş vermesine imkan sağlayan ve paralel geliştirme planlamasına müsait yapısından dolayı karmaşık ve büyük projeler için kullanılabilen bir modeldir.

Spiral modelde, yazılımlar parçalı olarak geliştirildiği için süreçler daha şeffaftır ve müşteri, erken aşamalarda ürünü kısıtlı olarak kullanabildiğinden geri dönüşte bulunabilir.

V modeli, test aktivitelerinin erken aşamalarda başlamasından dolayı problemlerin daha çabuk fark edilebilmesini sağlayan, uygulaması basit bir modeldir.

Prototip model, müşteri memnuniyetini daha erken aşamada sağlayarak yazılımın reddedilme ihtimalini azaltan ve eksik olan parçaların çabuk fark edilebildiği bir modeldir.

Büyük patlama modeli ise; belirli bir süreç takip etmeden, tam anlamıyla belirli olmayan gereksinimleri yazılıma dönüştürmeyi amaçlayan, yüksek riske sahip bir model olduğundan, küçük ölçekli/kısa süreli projeler için denenebilir bir modeldir.

Süreçler ve Olgunluk Modelleri

Kurum ve proje ihtiyaçları göz önünde bulundurularak yazılım geliştirme sürecinde kullanılmasına karar verilen YGYD boyunca, yazılım güvenliği pratiklerini uygulamak ve mevcut durumu analiz etmek amacıyla, ticari veya kar amacı gütmeyen kuruluşlarca sunulmakta olan çeşitli güvenli yazılım geliştirme süreçlerinden ve olgunluk modellerinden faydalanılabilir.

Süreçler güvenli yazılıma ulaşmak için gerçekleştirilecek çeşitli faaliyetleri tanımlarken, olgunluk modelleri güvenlik açısından yazılımın farklı yönlerini ölçebilecek analiz yöntemleri sunar. Bu çerçevede, güvenli yazılım geliştirme için tanımlanmış süreç ve olgunluk modellerine Microsoft SDL, OWASP SAMM, BSIMM ve SAFECode örnek olarak gösterilebilir.

Microsoft SDL

Microsoft Security Development Lifecycle (SDL), geliştiricilerin daha güvenli yazılımlar oluşturmalarına ve geliştirme maliyetlerini düşürmelerine yardımcı olan bir yazılım geliştirme sürecidir. Klasik spiral modele dayanan Microsoft SDL, güvenlik ve gizliliği erken safhada ve gelişim sürecinin tüm aşamalarında göz önünde bulundurur. İlk sürümünün sunulduğu 2008 yılından bu zamana; bulut, nesnelerin interneti (internet of things) ve yapay zekâ gibi farklı teknolojiler için çeşitli güncellemeler yapılmıştır. Microsoft yazılım kültürüne güvenlik ve gizlilik yerleştirmede kritik rol oynayan Microsoft SDL, bütünsel ve pratik bir yaklaşım sunarak geliştirme sürecinde radikal değişiklikler gerektirmez. Bünyesinde barındırdığı 7 faz ve 17 pratik Şekil 1’de gösterilmiştir.

BSIMM

The Building Security In Maturity Model (BSIMM) yazılım güvenliği çatısı, yazılım güvenliği için yapılması gereken faaliyetleri tanımlamaktan ziyade, sektörde yer alan firmalar tarafından uygulanmakta olan mevcut faaliyetleri raporlamaktadır. Modelin 2020 yılı itibari ile güncel olan BSIMM10 versiyonunda, 122 firma ile yapılan görüşmelerin sonuçları bulunmaktadır. Görüşmeler neticesinde tespit edilen faaliyetler yönetişim, istihbarat, süreç etkileşim noktaları ve kurulum olmak üzere 4 adet bilgi alanı altında gruplandırılır. Bu kapsamda; bir yazılım güvenliği sürecini yönetmek ve ölçmek için yönetişim, ilgili bilgilerin toplanması ve işlenmesi için istihbarat, yazılım geliştirme çıktıları ve süreçlerine ilişkin analiz ve güvence sağlamak için süreç etkileşim noktaları, yazılımın kurulum ve bakım faaliyetleri için ise kurulum bilgi alanından faydalanılabilir.

BSIMM yazılım güvenliği çatısında, her bir bilgi alanı 3 uzmanlık alanına, her uzmanlık alanı da 3 seviyeye ayrılırken her seviye 2 ila 6 arasında eylem barındırmaktadır. İlgili bilgi ve uzmanlık alanları Şekil 2’de görülebilir.

SAFECode

SAFECode, etkin yazılım güvencesi yöntemlerinin geliştirilmesi yoluyla bilgi ve iletişim teknolojisi ürünlerine ve hizmetlerine duyulan güveni artırmak için 2007 yılında Nokia, SAP, Symantec, Microsoft, EMC ve Juniper Networks işbirliği ile, endüstri tarafından yönlendirilen ve kâr amacı gütmeyen bir konsorsiyum olarak kurulmuştur. Yazılım, donanım ve hizmetlerin daha güvenli geliştirilmesi/ sağlanması için işletilebilecek en iyi faaliyetleri belirlemeyi hedeflemektedir. Alan uzmanlarının tecrübelerine dayanarak belirlenen en iyi faaliyetler; Güvenli Yazılım Geliştirme için Temel İlkeler, Yazılım Güvence Değerlendirme İlkeleri ve Bulut Uygulamalarının Güvenli Geliştirilmesi için İlkeler gibi çeşitli yayınlar üzerinden paylaşılmaktadır. Paylaşılan tüm yayınlara, SAFECode’un resmi web sitesi üzerinden ücretsiz olarak ulaşılabilir.

OWASP SAMM

The Open Web Application Security Project (OWASP), kar amacı gütmeden yazılım güvenliğini geliştirmeye odaklanmış bir organizasyondur. Dünya çapındaki kuruluşlara, üniversitelere ve bireylere yazılım güvenliği için tarafsız ve pratik bilgiler sunmak amacıyla, yazılım güvenliği konusunda birçok uzmanın görüşü doğrultusunda bilgi tabanlı belgeler yayımlar. Bazı OWASP ürünlerine; OWASP Top 10, Offensive Web Testing Framework (OWTF), Application Security Verification Standart (ASVS) ve The Software Assurance Maturity Model (SAMM) örnek olarak gösterilebilir.

Yazılım güvenliği için bir strateji oluşturmak ve uygulamak için kullanılan SAMM, kuruluşların karşılaştığı risklere odaklanan bir çerçevedir. Bu çerçeve ile bir organizasyondaki güvenlikle ilgili yapılması gereken faaliyetler tanımlanabilirken, mevcut yazılım güvenliği faaliyetleri de değerlendirilebilir. Ayrıca, dengeli bir yazılım güvenliği güvence programı oluşturulabilir ve/veya mevcut yazılım güvenliği güvence programında iyileştirmeler yapılabilir.

SAMM modelinde, kuruluş için olgunluk seviyeleri tanımlanarak güvenlik pratiklerinin kazanılması için yol haritası çizilir. Bu kapsamda, her güvenlik pratiği için üç olgunluk seviyesine (1,2 ve 3) ek olarak bir başlangıç seviyesi (0) tanımlanmıştır. İlgili pratik için; modelin kullanılmasından önce kurumun durumunun ölçüldüğünü belirten 0. Seviye, deneme uygulamalarının yapıldığını belirten 1. Seviye, modelin etkin olarak uygulandığını belirten 2. Seviye ve modelin tüm detayları ile uygulandığını belirten 3. Seviye düzeyleri tanımlanmıştır. İlgili iş fonksiyonları ve güvenlik pratikleri Şekil 3 üzerinde gösterilmiştir.

Sonuç

Gerçekleşmesi muhtemel saldırılara karşı çeşitli önlemlere sahip, saldırıyı önleyemese dahi saldırıya rağmen çalışma sürecini doğru bir şekilde devam ettirebilecek mimariyi/tasarımı kullanan yazılımın geliştirilmesi amacıyla, güvenli yazılım geliştirme süreçleri ve olgunluk modellerinden faydalanılabilir. Mevcut süreçler, yazılım yaşam döngüsü boyunca göz önünde bulundurulması ve/veya uygulanması gereken güvenlik faaliyetlerini tanımlamaktadır. Bu güvenlik faaliyetleri yardımıyla, güvenli yazılım geliştirme ile ilgili süreçler daha kolay işletilebilir.

Mevcut olgunluk modelleri ise, yazılım güvenliği pratiklerinin ne derecede uygulandığını ortaya koyan, derecelendirmeye dayalı ölçüm modelleri sunmaktadır. Bu modeller kullanılarak, yazılımın geliştirme sürecinde uygulanan güvenlik pratiklerinin durumu ölçülebilir. Çalışmaya konu olan güvenli yazılım geliştirme süreçleri ve olgunluk modelleri ışığında:

· Ağırlıklı olarak endüstri pratiklerini takip etmek ve uygulamak için BSIMM,

· Güvenli yazılım geliştirme pratiklerini ağırlıklı olarak hazır araçlar ile takip etmek için Microsoft SDL,

· Kurumsal güvenli yazılım geliştirme olgunluğunu, başarı kriterleri, kontrol listeleri ve değerlendirme metodolojileri kullanarak artırmak için OWASP SAMM,

· Çalışmaları, en temel düzeydeki güvenli yazılım geliştirme faaliyetlerini dikkate alarak yürütmek için SAFECode yayınlarının kullanılması, uygun birer seçenek olarak görülmektedir.

Kaynak: TÜBİTAK BİLGEM Teknoloji Dergisi