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

Teknolojinin gelişmesiyle beraber bilgiye ulaşmamız ve bilgiyi kullanmamız çok daha kolay bir hale gelmiştir. Elbette ki bu durum siber saldırganlar için zamanla avantaj haline gelmiş ve siber saldırılar artarak yeni yöntemler ve teknikler geliştirilmeye başlanmıştır.

Bununla birlikte bu veriyi zorla elde etmek isteyen, kendi çıkarları için kullanmak isteyen kötü niyetki kişiler olduğunu da görmekteyiz.

Bir yazılımın işlevini yerine getirdiği sırada tehdit veya saldırı altındayken başarılı bir şekilde korunmasına ve siber tehditlere karşı önceden önlem alınmasına yazılım güvenliği sağlanması adı verilir. Yazılım güvenliği faaliyetlerinin amacı tüm saldırılara karşı daha dirençli ve korumalı geliştirme yapmaktadır.

Yazılıma karşı yapılan saldırıların, yazılımı tamamen hizmet dışı bırakmak, içine zararlı kod eklenerek yazılımın kodunu değiştirmek yoluyla yazılımı farklı bir amaç doğrultusunda çalıştırmak ve yazılımın zayıf noktalarını tespit ederek üzerinde çalışan sisteme ve sistemdeki diğer yazılımlara sızmak gibi farklı amaçları bulunabilir.

Güvenli Yazılım Geliştirme Modelleri

Şimdiye kadar ortaya atılan yazılım geliştirme modellerine bakıldığında hepsinin temelinde güvenli yazılım geliştirme yaşam döngüsünün yer aldığı görülmektedir.

Döngünün birinci adımı olan eğitim ve farkındalığın artırılması sürecin temeli olan ve tüm süreç boyunca devam etmesi gereken bir unsurdur. Bu aşamada personellerin tehdit unsurlarına karşı bilinçlendirilmesi, güvenlik testleri konusunda eğitilmesi gerekir. İhtiyaç analizi kısmında yazılımın geliştirilmesi, güvenlik ve test için gerekli ihtiyaçlar belirlenmelidir.

Tasarım ve risk analizinde tehdit modelleme, gizlilik risk analizi gibi yöntemlerden faydalanılarak yazılımın ne tür risk grupları içerisinde olacağı tespit edilir. Geliştirme sırasında yazılım önceki adımlarda belirlenen yöntemlere göre geliştirilmeye başlanır. Bu sırada kaynak kod analizi gibi yöntemlerden faydalanılmalıdır.

Doğrulama aşamasında ortaya çıkan yazılım, güvenliğin temel esasları olan gizlilik, bütünlük, ulaşılabilirlik gibi kriterler ile test edilir ve ortaya çıkacak açıkların giderilmesi sağlanır. Devreye alımda yazılım son halini almıştır ve yayınlanmaya hazırdır. Öncesinde yapılan işlemlerin sonucu, yazılım kullanıcıya sunulması ile birlikte bu aşamada gözlemlenir.

Açıklık yönetimi ve geri bildirimler adımında ise kullanıcıdan alınan geri bildirimler ile yazılımda gözden kaçan veya değiştirilmesi gereken durumlar tespit edilir. Bu durumların tespiti sonucunda personeller eksik veya hatalı yerler için tekrar eğitilir. Bu sebeple de sürecin başına dönülmüş olur.

Yetenek Olgunluk Modeli

1986 yılında geliştirilen bu modelde ana odak var olan uygulamaların geliştirilmesidir. Ürünün güvenlik standartlarına uygun olarak geliştirilmesinden ziyade belirli bir alandaki zayıflıklarının giderilmesini amaçlar.

Tümleşik Yetenek Olgunluk Modeli

CMM modelini temel alır ve amacı bir organizasyonun denetlenmesi ve yönetimi ile ilgili çözümler sunmaktır. CMMI modeli, ürünün geliştirilmesi sürdürülebilmesi ve satış yönetiminin iyileştirilmesine yöneliktir. 5 seviyeden oluşmaktadır.

Microsoft Security Development Lifecycle

Microsoft tarafından karşılaşılan problemleri gidermek amacıyla güvenlik ve gizliliği bütünleştirmek için geliştirilen modeldir. Temel yazılım yaşam döngüsüne dayanan bu modelde süreç tamamen proje yöneticisine bağlıdır.

Yazılım Garanti Olgunluk Süreci

OWASP tarafından geliştirilen bu model bilgi güvenliği operasyonlarının yazılım geliştirme sürecine dahil edilmesi amacıyla ortaya çıkmıştır. Bu model organizasyonun büyüklüğünden bağımsızdır. Tek bir iş için kullanılabileceği gibi organizasyonun tamamında veya belirli bir bölümünde de kullanılabilir.

Bu modellerin yanı sıra birçok güvenli yazılım geliştirme yaklaşımı ve her birinin diğerlerine göre avantajları ve dezavantajları vardır. Bir model diğer modellerden daha iyidir gibi bir yaklaşım yapmak oldukça zordur. Önemli nokta organizasyonun yapısı, büyüklüğü, yaptığı iş dikkate alınarak ihtiyaçların analiz edilmesi ve uygun modelin seçilmesidir. Yapılan yanlış bir seçimde geliştirici veya test ekiplerine gereğinden fazla iş yükü binebilir ve yapılan iş olduğundan daha karmaşık bir hal alabilir. Diğer taraftan yetersiz bir model seçildiğinde oluşacak zafiyetler sebebiyle kullanıcılar mağdur edilebilir, organizasyon zor durumda kalabilir.

Güvenli Yazılımı Tehdit Eden Unsurlar

Kod Yerleştirme

Kod yerleştirme yazılımların veya ağ ortamının güvenlik açıklarını kullanarak bir sistemde bulunan zafiyetten faydalanılmasını sağlayan kod parçalarının hedef sisteme yerleştirilerek çalıştırılmasıdır.

Bu durumun önlenmesi için alınan girdiler filtrelenmeli, yazılım dillerinde bulunan keyword’leri kullanmaktan kaçınılmalı, SQL işlemlerinde store procedure gibi yöntemler kullanılarak tüm girdi/çıktı işlemleri kontrolden geçirilmelidir. Bunlara ek olarak geliştirilen uygulamanın katmanlı bir mimariye sahip olması da tehlikelerin önüne geçilmesinde etkin rol oynamaktadır.

XSS Açıkları

XSS, OWASP Top 10 listesinde yer alan bir saldırı türüdür. Kullanıcıdan alınan bir girdinin veritabanında html şeklinde tutulması sonucu oluşan bir açıktır. Örneğin kötü niyetli bir kişi bir sitenin yorum kısmına Javascript kodu yazıp gönderirse, xss açığı olduğu taktirde bu yazılan kod çalışarak istenmeyen durumlar gerçekleşebilir. üç çeşit xss açığı vardır.

Reflected XSS

Kullanıcıdan bir girdi beklendiği sırada Javascript kodu gönderilir. Bu girdi eğer ekranda gösterilmek istenirse yazılan kod çalışır.

Stored/Persistent XSS

Bu tip xss saldırısında kullanıcıdan alınan girdi doğrudan ekrana yazdırılmak yerine veritabanı gibi herhangi bir yerde saklanır. Daha sonra normal bir şekilde kullanıcılar ilgili sayfayı ziyaret ettiğinde bu kod sanki o sayfaya geliştirici tarafından yazılmış gibi her seferinde çalışır.

DOM XSS

Bir Dom tabanl xss saldırısında zararlı kod, sunucu tarafına ulaşmadan doğrudan dom nesneleri üzerinde işlem yaparak çalışır. Javascript ile bir kullanıcı listesi oluşturduğumuzu düşünelim. XSS açığı varsa bu liste yazdırılırken dışarıdan müdahale ile süreci manipüle ederek istediğimiz bir işlemi yaptırabiliriz.

SQL Injection

SQL Injection, meta-karakter denilen derleyiciler için özel anlamlar taşıyan karakterleri kullanarak meydana gelen bir açıktır. Saldırganların, kullanıcıdan alınan kullanıcı adı ve parola gibi bilgilerin girildiği alanlara SQL kodunu manipüle edecek karakterleri yazarak veritabanına ulaşmasıdır. Örneğin bir alana şu şekilde bir yazı yazıldığını düşünelim: 10 or 1=1. Bu girdinin SQL karşılığı şu şekildedir:

SELECT * FROM Users WHERE UserID = 10 or 1=1

Bu sorguda WHERE koşulunda yazılan or 1=1 ifadesi ile her zaman true döndürülmesi sağlanmıştır. Bu sebeple UserID ne olursa olsun kullanıcıların listesini görebiliriz. Bu tabloda kullanıcıların parolaları da tutulursa tüm kullanıcı bilgileri çalınmış olur.

Başka bir durumda ise numerik bir alana veri girilirken veri tipi kontrol edilmesi gerekir.

SELECT * FROM Users WHERE UserID = “”

Örneğin yukarıdaki komutta “1; DROP TABLE ‘Users’;” şeklinde bir parametre girilirse tablo silinecektir.

SHELL Injection

Komut satırını kullanan her uygulamada bulunabilecek bir açıktır. Alınan verinin komut satırına özel bir kelime olup olmadığı mutlaka kontrol edilmelidir. Aksi takdirde saldırgan komut satırına ulaşabilir, sistemde istenmeyen durumlar meydana gelebilir.

Günümüzde her şeyin internet ortamında olduğunu, yazılımların ve donanımların güvenliği oldukça önemlidir. Gerekli önlemler alınmadığı takdirde oluşacak kayıplar hem kurumun itibarına hem de ekonomisine zarar verecektir. Geliştirilen araçlar ile siber saldırıların yapılması oldukça kolay hale gelmiştir. Bu gelişmeler takip edilmelidir. Ayrıca kurumdaki personeller ilgili konularda eğitilmeli, siber güvenlik alanında eğitimler verilmelidir.

Kaynakça

Beydağlı, E., Kara, M., Bahşi, H., & Alparslan, E. (2009). Güvenli Yazılım Geliştirme Modelleri ve Ortak Kriterler. 4. Ulusal Yazılım Mühendisliği Sempozyumu, 11-17.

Güvenli Yazılım Geliştirme Kılavuzu. (2018). TÜBİTAK BİLGEM.

SARIMAN, G., & KÜÇÜKSİLLE, E. U. (2013). Güvenli Yazılım Geliştirme Yaşam Süreci ve Statik Kod Analizi. 6. Uluslararası Bilgi Güvenliği ve Kriptoloji Konferansı, 282-286.

YILMAZ, S., & SAĞIROĞLU, Ş. (2013). Yazılım Güvenliği Üzerine Bir İnceleme. 6. Uluslararası Bilgi Güvenliği ve Kriptoloji Konferansı, 167-173.

Yazar: Stajyer Efdal İncesu
Düzenleme: Hamza Şamlıoğlu

Güvenli Yazılım Geliştirme Danışmanlığı