Bir Yazılımın Çalışıyor Olması Güvenli Olduğu Anlamına Gelmez
Yazılım geliştirme dünyasında yıllardır değişmeyen bir gerçek vardır:
Bir uygulamanın çalışıyor olması, güvenli olduğu anlamına gelmez.
Hatta birçok güvenlik uzmanına göre saldırganlar, bir uygulamayı son kullanıcıdan çok daha detaylı inceler.
Bir kullanıcı uygulamaya giriş yapar, işlemini tamamlar ve çıkar.
Bir saldırgan ise:
Giriş ekranını test eder
API çağrılarını analiz eder
Yetkilendirme mekanizmalarını inceler
Parametreleri değiştirir
Açık kaynak kütüphaneleri araştırır
Sunucu yapılandırmalarını tarar
Amaç sistemdeki en küçük zafiyeti bulmaktır.
Bugün veri ihlallerinin büyük bölümü gelişmiş siber saldırılardan değil, temel güvenlik hatalarından kaynaklanmaktadır.
Yanlış yapılandırılmış bir API...
Şifrelenmemiş hassas veriler...
Yetki kontrolü eksiklikleri...
Güncel olmayan kütüphaneler...
Bunların her biri milyonlarca dolarlık zararlara yol açabilir.
Bu nedenle modern yazılım geliştirme anlayışında artık şu soru sorulmaktadır:
"Bu uygulama çalışıyor mu?" değil,
"Bu uygulama güvenli mi?"
İşte Güvenli Yazılım Geliştirme (Secure Software Development) yaklaşımı tam olarak bu soruya cevap verir.
Güvenli Yazılım Geliştirme Nedir?
Güvenli Yazılım Geliştirme, yazılım yaşam döngüsünün her aşamasında güvenlik prensiplerinin uygulanmasını sağlayan sistematik bir yaklaşımdır.
Bu yaklaşımda güvenlik;
Analiz aşamasında
Tasarım aşamasında
Geliştirme aşamasında
Test süreçlerinde
DevOps operasyonlarında
Bakım süreçlerinde
aktif olarak değerlendirilir.
Eskiden güvenlik çoğu zaman projenin son aşamasında yapılan bir kontrol listesi olarak görülüyordu.
Günümüzde ise bu yaklaşım geçerliliğini kaybetmiştir.
Çünkü yazılım sistemleri artık çok daha karmaşıktır.
Modern uygulamalar:
Web servisleri
Mobil uygulamalar
Mikro servisler
Bulut servisleri
Konteyner altyapıları
Üçüncü taraf API'ler
Açık kaynak kütüphaneler
gibi onlarca bileşenden oluşmaktadır.
Bu nedenle güvenlik sonradan eklenebilecek bir özellik değil, sistemin temel tasarım prensiplerinden biri olmalıdır.
Bu yaklaşımı öğrenmek isteyen profesyoneller için kapsamlı bir başlangıç noktası:
Güvenli Yazılım Geliştirme Eğitimi
Güvenli Yazılım Geliştirme Neden Önemlidir?
Siber saldırıların maliyeti her yıl artmaktadır.
Bir güvenlik ihlali sonucunda:
Müşteri verileri sızabilir
Finansal kayıplar oluşabilir
Regülasyon cezaları alınabilir
Marka itibarı zarar görebilir
Hizmet kesintileri yaşanabilir
Örneğin geçmişte yaşanan birçok büyük veri ihlalinin temel nedeni oldukça basit güvenlik hatalarıydı.
Bazı durumlarda yalnızca tek bir API yetkilendirme hatası milyonlarca kaydın sızmasına neden olmuştur.
Bu nedenle güvenlik maliyet değil, yatırım olarak değerlendirilmelidir.
Secure SDLC (Secure Software Development Life Cycle)
Güvenli Yazılım Yaşam Döngüsü, yazılım geliştirme sürecinin her aşamasına güvenlik kontrollerinin dahil edilmesini ifade eder.
Klasik SDLC yaklaşımında süreç şu şekilde ilerler:
Analiz
Tasarım
Geliştirme
Test
Yayına Alma
Bakım
Secure SDLC ise aynı aşamaların her birine güvenlik faaliyetleri ekler.
Örneğin:
Analiz aşamasında risk değerlendirmesi yapılır.
Tasarım aşamasında tehdit modelleme gerçekleştirilir.
Kodlama sırasında güvenli kodlama standartları uygulanır.
Test aşamasında güvenlik testleri yapılır.
Canlı ortamda ise sürekli izleme mekanizmaları devreye alınır.
Bu yaklaşım güvenlik açıklarının daha oluşmadan önlenmesini sağlar.
Threat Modeling (Tehdit Modelleme) Nedir?
Threat Modeling yani Tehdit Modelleme, bir saldırganın sistemi nasıl hedef alabileceğini önceden analiz etme sürecidir.
Kısaca:
Saldırgan gibi düşünme sanatıdır.
Bir e-ticaret sistemi geliştirdiğinizi düşünelim.
Sistemde:
Kullanıcı giriş ekranı
Ödeme sistemi
Sipariş yönetimi
Yönetim paneli
API servisleri
bulunuyor.
Threat Modeling sırasında şu sorular sorulur:
Bir saldırgan ödeme sistemini manipüle edebilir mi?
Kullanıcı oturumları ele geçirilebilir mi?
API'ler yetkisiz erişime açık mı?
Hassas bilgiler sızdırılabilir mi?
Yönetici paneline yetkisiz erişim mümkün mü?
Amaç saldırılar gerçekleşmeden önce potansiyel riskleri ortaya çıkarmaktır.
Bu sayede güvenlik açıkları daha kod yazılmadan tespit edilebilir.
STRIDE Modeli Nedir?
Threat Modeling süreçlerinde en yaygın kullanılan yöntemlerden biri STRIDE modelidir.
Microsoft tarafından geliştirilmiştir.
STRIDE altı temel tehdit kategorisinden oluşur.
Spoofing
Kimlik taklidi yapılmasıdır.
Örneğin saldırganın başka bir kullanıcı gibi sisteme giriş yapması.
Bu nedenle güçlü kimlik doğrulama mekanizmaları gereklidir.
Tampering
Verilerin değiştirilmesidir.
Örneğin ağ üzerinden iletilen bir isteğin saldırgan tarafından değiştirilmesi.
TLS ve dijital imzalar bu riskleri azaltır.
Repudiation
İşlemlerin inkâr edilmesidir.
Bir kullanıcının yaptığı işlemi sonradan reddetmesi durumudur.
Bu nedenle loglama ve denetim kayıtları kritik öneme sahiptir.
Information Disclosure
Bilgi sızıntısıdır.
Müşteri kayıtlarının veya finansal bilgilerin yetkisiz kişilere açılması bu kategoriye girer.
Denial of Service
Sistemin hizmet veremez hale getirilmesidir.
Yoğun trafik gönderilerek sunucuların çökertilmesi en yaygın örnektir.
Elevation of Privilege
Yetki yükseltme saldırılarıdır.
Normal bir kullanıcının yönetici hakları elde etmesi bu kategoriye girer.
Security Architecture Review Nedir?
Security Architecture Review, sistem mimarisinin güvenlik açısından incelenmesidir.
Kod kalitesi yüksek olabilir.
Ancak mimari yanlış tasarlanmışsa sistem yine de güvensiz olabilir.
Bu nedenle güvenlik uzmanları yalnızca kodu değil, tüm mimariyi değerlendirir.
İncelenen başlıca alanlar:
Kimlik doğrulama sistemi
Yetkilendirme yapısı
Veri koruma mekanizmaları
Ağ mimarisi
API güvenliği
Bulut altyapısı
Loglama ve izleme sistemleri
Amaç sistem tasarımındaki kritik riskleri erkenden ortaya çıkarmaktır.
Authentication (Kimlik Doğrulama)
Authentication, kullanıcının gerçekten iddia ettiği kişi olup olmadığını doğrulama işlemidir.
Örneğin:
Kullanıcı adı ve parola
Çok faktörlü kimlik doğrulama (MFA)
Biometrik doğrulama
OAuth
mekanizmaları Authentication kapsamında değerlendirilir.
Günümüzde yalnızca parola kullanımı çoğu zaman yeterli kabul edilmemektedir.
Authorization (Yetkilendirme)
Authorization ise doğrulanmış kullanıcının ne yapabileceğini belirler.
Örneğin:
Bir insan kaynakları çalışanının maaş bilgilerini görüntüleyebilmesi normaldir.
Ancak aynı kullanıcının sistem yöneticisi ayarlarını değiştirebilmesi güvenlik problemidir.
Authorization hataları günümüzde en yaygın uygulama güvenliği riskleri arasında yer almaktadır.
Data Protection (Veri Koruma)
Verilerin korunması modern güvenliğin temelidir.
Burada değerlendirilen konular:
Şifreleme algoritmaları
TLS kullanımı
Anahtar yönetimi
Veri maskeleme
Veri sınıflandırma
özellikleridir.
Özellikle kişisel verilerin korunması açısından bu alan kritik öneme sahiptir.
Risk Assessment (Risk Değerlendirmesi) Nedir?
Risk Assessment, sistemdeki güvenlik risklerinin önceliklendirilmesini sağlayan süreçtir.
Çünkü her güvenlik açığı aynı öneme sahip değildir.
Örneğin:
Bir SQL Injection açığı milyonlarca kaydın sızmasına neden olabilir.
Ancak bir hata sayfasında kullanılan yazı tipi bilgisi çok düşük risk oluşturabilir.
Bu nedenle kurumlar kaynaklarını doğru alanlara yönlendirmek zorundadır.
Risk Nasıl Hesaplanır?
En yaygın yaklaşım:
Risk = Olasılık × Etki
şeklindedir.
Olasılık
Bir saldırının gerçekleşme ihtimalidir.
Etki
Gerçekleştiğinde oluşturacağı zarardır.
Örneğin:
Yetki kontrolü olmayan bir API.
Olasılık: Yüksek
Etki: Çok yüksek
Sonuç: Kritik Risk
Bu nedenle ilk düzeltilmesi gereken açıklar arasında yer alır.
Güvenli Yazılım Geliştirme Bir Kültürdür
Birçok organizasyon güvenliği yalnızca güvenlik ekibinin sorumluluğu olarak görür.
Oysa modern yaklaşım farklıdır.
Güvenlik:
Yazılımcıların
Test ekiplerinin
DevOps mühendislerinin
Sistem yöneticilerinin
Yazılım mimarlarının
ortak sorumluluğudur.
Bu nedenle güvenli yazılım geliştirme yalnızca teknik bir konu değil, aynı zamanda kurumsal bir kültürdür.
Bir sonraki aşamada bu kültürün en önemli parçalarından biri olan Secure by Design, OWASP Top 10, Application Security ve DevSecOps konularına geçeceğiz.
İlgili eğitimler:
Application Security for Developers Eğitimi