Yazılım güvenliği nedir ve nasıl olmalı?

Teknoloji günlük yaşamımızı giderek değiştiriyor. Hayatlarımıza dahil olmuş birçok teknolojik cihaz kullanıyoruz. Artık cep telefonlarımızı baş ucumuzdan ayırmıyoruz, bilgisayarlar her alanda çeşitli amaçlarla kullanılıyor, evlerimizdeki süpürgeler ve prizler bile akıllı diye adlandırılıyor.

Giderek dijitalleşen bu ortamda tüm bu teknolojilerin temelinde yazılımlar var diyebiliriz. Yazılımlar, cihazların belirli bir görevi yerine getirmesini sağlayan temel makine komutları olarak tanımlanabilir. Arabamızın kumandasında, cep telefonlarımızda, erişim sağladığımız web sitelerinde farklı seviyelerde yazılımlar çalışmaktadır. Bu bağlamda, yazılımların makine insan etkileşimindeki temel bağlardan birisi olduğunu da söyleyebiliriz. Dolayısıyla yazılımlar geliştirilirken hem insan hem de teknoloji etkenleri gözetilmektedir.

Dijital varlıklarımızın giderek arttığı bir ortamda bilgi güvenliği de kritik öneme sahip olmuştur. Güvenlik temel alınarak geliştirilmeyen yazılımlar hem bireysel hem de kurumsal anlamda siber güvenlik risklerini arttırmaktadır. Bu noktada yazılım geliştirme süreçlerini dikkate almak gerekmektedir. Bir yazılım geliştirilirken sahip olacağı fonksiyonlar, hızlı çalışması ve kolay kullanıma sahip olması gibi çeşitli kriterler gözetilebilmektedir. Ancak bunlarla birlikte her ne kadar göz ardı edilse de güvenlik kavramı da kritik öneme sahiptir.

Yazılım güvenliği, yazılıma yönelik gerçekleştirilecek siber saldırılar sonucunda yazılımın görevlerini doğru şekilde yerine getirememesine sebep olabilecek etkenlerin en aza indirilmesini amaçlayan faaliyetler bütünü olarak değerlendirilebilir. Bir süreç olan yazılım güvenliği, yazılım geliştiricilerden yazılımların devreye alındığı altyapılara kadar teknik, idari ve insan odaklı birçok bileşeni içermektedir. Bilgi güvenliğinin üç temel öğesi olan gizlilik, bütünlük ve erişilebilirlik kavramlarını gözeterek, yazılımların güvenliği bu üç başlık üzerinden de değerlendirilebilir.

Siber güvenlik alanındaki çalışmalar bir yarış gibi ilerlemektedir. Geliştirilen her yeni önlem, her yeni korumadan sonra saldırganlar da stratejilerini değiştirmekte ve geliştirmektedir. Bu doğrultuda yazılımların giderek daha özellikli ve karmaşık hale gelmesi ile birlikte yazılım geliştirici ekipler de büyümektedir. Bu da yazılım geliştirme süreçlerinin daha planlı şekilde yapılması gerekliliğini öne çıkarmaktadır. Yazılım geliştirme yaşam döngüsü kavramı bu noktada devreye girmektedir. Belirli temel adımları takip ederek yazılımın gereksinimlerinin belirlenmesi aşamasından devreye alma aşamasına kadar süreçler tanımlanmaktadır.

Mevcut döngü üzerine güvenlik ile ilgili süreçler de eklendiğinde güvenli yazılım geliştirme yaşam döngüsü süreçlerini elde etmekteyiz. Bu kapsamda herhangi bir yazılım geliştirme sürecinin her adımına güvenlik ile ilgili başlıklar eklenerek ilk aşamadan itibaren güvenlik odaklı yazılım geliştirme amaçlanmaktadır.

Güvenlik kavramını ele alırken sorulması gereken temel sorulardan birisi “neyi neyden koruyoruz?” dur. Bu konuda sık yapılan yanlışlardan birisi de yazılımlar çok güvenli olsun, en güvenli yazılım olsun gibi kavramlardır. Bununla birlikte, güvenlik tiyatrosu kavramı da benzer bir şekilde değerlendirilebilir. Güvenlik tiyatrosu, aslında herhangi bir güvenlik önlemi sağlamayan ancak kendimizi güvende hissetmemizi sağlayan önlemler olarak tanımlanabilir.

Doğru soruları sorup doğru cevapları almak tehdit modelleri ile sağlanabilir. Tehdit modelleme, güvenlik tehditlerinin belirlenmesini sağlayan ve riskleri tanımlayıp, risklerin olası etkilerini azaltmayı veya riskleri görünür hale getirip yönetmeyi amaçlayan analiz çalışmaları olarak tanımlanabilir. Yazılım geliştirme süreçlerinde de yazılım tasarım aşamasının bir parçası olarak kullanılacak tehdit modelini belirlemek gerekmektedir. Kullanılan yaygın bazı modeller STRIDE, PASTA ve DREAD olarak verilebilir.

Geleneksel yazılım geliştirme yaklaşımına baktığımızda, yazılım geliştiriciler çalışmalarını tamamladıktan sonra bitmiş ürüne siber güvenlik testleri yapılır ve bulunan bulgular ilgili ekiplere iletilerek gerekli düzeltmeler yapılır. Ardından, siber güvenlik ekipleri yapılan düzeltmelere yönelik doğrulama kontrollerini gerçekleştirip onay verdiklerinde sistemler devreye alınır. Sıklıkla kullanılan bu yaklaşım günümüzde yetersiz ve eksik kalmaktadır.

Tek seferlik yapılan güvenlik testleri yerine güvenliğin sürekli olarak ele alındığı yaklaşımlar benimsenmelidir. Yukarıda bahsettiğimiz güvenli yazılım geliştirme yaşam döngüsü de tek başına bunun için yeterli olmamaktadır. Sürekli güvenlik kavramı ve tasarımsal güvenli kavramları aslında yazılımların daha ilk aşamadan itibaren güvenlik odaklı olarak tasarlanıp hayata geçirilmesi gerekliliğini önermektedir ve teknik geliştirmelerin yanında esas olarak kültürel bir değişimi de ifade etmektedir. Bu da bizi giderek adını daha çok duymaya başladığımız DevSecOps kavramı ile tanıştırmaktadır. Carnegie Mellon Yazılım Mühendisliği Enstitüsü tarafından paylaşılan temel DevSecOps süreç adımları aşağıdaki görselde paylaşılmıştır.

DevSecOps, geliştirme (development), security (güvenlik) ve operasyon (operation) kavramlarını bir araya getiren teknik ve idari yöntemler bütünü olarak tanımlanabilir. DevSecOps, bir yazılımın yaşam döngüsünü güvenliği de merkeze alarak sürekli ve otomatik hale getirmeyi amaçlamaktadır. DevSecOps yaklaşımına göre süreç temel olarak kültürel değişim ile başlamalıdır. Bu da özellikle yazılım geliştirici ekiplerin güvenlik kavramlarına hakim olmasını ve güvenli yazılım geliştirme prensiplerini kullanıyor olmalarını benimsemektedir. Bu durum literatürde güvenliğin sola kaydırılması (“Shift Left”) ilkesinin ilk adımı olarak değerlendirilebilmektedir. Shift Left yaklaşımı kapsamında güvenliğin yaşam döngüsü üzerinde olabildiğince ilk adımlarda ele alınması gerekliliğini vurgular. Güvenli yazılım geliştirme yaşam döngüsü ile sağlanan bu durum DevSecOps yaklaşımı ile daha da önem kazanmıştır.

Kaynak: Aselsan

Yorum yapın