Curriculum
- 4 Sections
- 7 Lessons
- 6 Hours
- Güvenli Yazılım Geliştirmeye Giriş: Güvenli Yazılım Geliştirme Anlayışı3
- Güvenli Geliştirme Uygulamaları: Güvenli Kodlama Teknikleri, Tehdit Modelleme ve Risk Değerlendirmesi3
- Uygulama ve Bakım: Güvenli Yazılım Dağıtımı ve Dağıtım Sonrası Güvenlik Uygulamaları3
- Ek Okumalar1
Teorik Temeller
Güvenli Kodlama Teknikleri
Güvenli kodlama teknikleri, geliştiricilerin saldırılara karşı dayanıklı uygulamalar oluşturmasını ve kullanıcı verilerini korumasını sağlar. Bu teknikler, güvenli geliştirme uygulamalarının bir alt kümesi olup, kodun güvenlik açıklarını önleyecek şekilde yazılmasına odaklanır. İşte bazı temel güvenli kodlama teknikleri:
- -Girdi Doğrulama: Kullanıcılardan, dosyalardan, veri tabanlarından veya diğer harici kaynaklardan alınan tüm girdilerin tür, uzunluk, format ve aralık açısından doğrulandığından emin olun. Bu, uygulamada kullanılmadan önce yapılmalıdır.
- -Çıktı Kodlama: Verileri görüntülerken veya iletirken, enjeksiyon saldırılarını önlemek için uygun şekilde kodlayın. Örneğin, HTML çıktısını kodlayarak tarayıcının zararlı betikleri çalıştırmasını önleyin.
- -Parametrik Sorgular: Veri tabanlarına erişirken SQL enjeksiyon saldırılarını önlemek için parametrik sorgular veya hazırlanmış ifadeler kullanın.
- -En Az Ayrıcalık: İşlemleri en az izinle çalıştırarak ve kaynaklara en düşük izinlerle erişerek en az ayrıcalık ilkesini uygulayın.
- -Kimlik Doğrulama ve Yetkilendirme: Güçlü kimlik doğrulama mekanizmaları uygulayın ve yalnızca yetkili kullanıcıların hassas işlevlere ve verilere erişimini sağlamak için sıkı yetkilendirme kontrolleri uygulayın.
- -Şifre Yönetimi: Şifreleri güvenli bir şekilde, bcrypt veya Argon2 gibi güçlü, uyarlanabilir hash algoritmaları kullanarak saklayın.
- -Oturum Yönetimi: Oturum verilerini güvenli bir şekilde saklayın ve oturum jetonlarının genellikle HTTPS ile HTTP başlıklarında güvenli bir şekilde iletildiğinden emin olun.
- -Hata Yönetimi: Kullanıcıya hassas bilgiler açığa çıkarmayan sağlam hata yönetimi uygulayın.
- -Şifreleme: Verileri iletimde (TLS/SSL ile) ve dinlenmede şifreleyin. Şifreleme uygulamalarının güncel olduğundan ve güçlü algoritmalar ve anahtarlar kullandığından emin olun.
-Kod İmzalama: Kodunuzu imzalayarak bütünlüğünü ve kaynağını doğrulayın. Bu, müdahaleyi önlemeye yardımcı olur ve kullanıcıları yetkisiz değişiklikler hakkında bilgilendirebilir.
-Güvenli Dosya İşlemleri: Dosyalarla çalışırken, dosya işlemlerinin güvenli bir şekilde yapıldığından ve dosya izinlerinin uygun şekilde ayarlandığından emin olun.
-Bellek Yönetimi: Bellek yönetimini otomatik olarak yapmayan diller (örneğin C ve C++) kullanıyorsanız, bellek tahsisi, kullanımı ve serbest bırakılması konusunda dikkatli olun ve bellek sızıntıları ve tampon taşmaları gibi sorunları önleyin.
-Eşzamanlılık ve Yarış Durumu Yönetimi: Eşzamanlı yürütme için güvenli kod yazın ve yarış durumlarını (TOCTOU hataları gibi) ele alın.
-Veri Temizleme: Yorumlayıcılara veya komut kabuklarına aktarılacak verileri temizleyerek enjeksiyon saldırılarını önleyin.
-Kod İncelemeleri ve Statik Analiz: Güvenlik odaklı olarak düzenli kod incelemeleri yapın ve kodda potansiyel güvenlik açıklarını otomatik olarak tespit etmek için statik analiz araçları kullanın.
-Bağımlılık Güvenliği: Üçüncü taraf kütüphaneleri ve bağımlılıkları güncel tutun ve bilinen güvenlik açıklarını kontrol etmek için yazılım bileşen analiz araçları kullanın.

Şekil-4
(Kaynak: https://securityboulevard.com/2022/01/7-security-coding-guidelines-to-keep-in-mind/)
Tehdit Modelleme ve Risk Değerlendirmesi
Tehdit modelleme ve risk değerlendirmesi, siber güvenlik ve yazılım geliştirmede kullanılan proaktif süreçlerdir; bir sisteme yönelik potansiyel tehditleri tanımlamak, önceliklendirmek ve azaltmak için kullanılırlar. Bu uygulamalar, geliştirme sürecinin en erken aşamalarından itibaren güvenlik önlemlerinin entegre edilmesinin önemini vurgulayan daha geniş bir güvenlik yaklaşımı olan Güvenlik Tasarımının bir parçasıdır. Tehdit modelleme, bir sisteme yönelik potansiyel tehditleri tanımlamak ve ele almak için yapılandırılmış bir yaklaşımdır.

Figure-5
(Source: https://www.security-analyst.org/threat-analysis-and-risk-assessment/)
Tehdit Modelleme ve Risk Değerlendirmesi için En İyi Uygulamalar
Erken Başlayın: Tehdit modelleme ve risk değerlendirmesine tasarım aşamasında başlayın ve geliştirme yaşam döngüsü boyunca tekrar edin.
Çok Disiplinli Ekipleri Dahil Edin: Geliştiriciler, güvenlik profesyonelleri, operasyon personeli ve iş analistleri gibi farklı bakış açılarına sahip üyeleri dahil edin.
Standart Çerçeveler ve Metodolojiler Kullanın: Süreci yönlendirmek için NIST, ISO veya OCTAVE gibi yerleşik çerçeveleri ve STRIDE veya PASTA gibi metodolojileri uygulayın.
Dokümantasyonu Güncel Tutun: Tüm bulgular ve eylemler iyi bir şekilde belgelenmeli ve kolayca erişilebilir olmalıdır.
Geliştirme Süreci ile Entegre Edin: Tehdit modelleme ve risk değerlendirmesini yazılım geliştirme yaşam döngüsüne (SDLC) entegre edin ve düzenli geliştirme uygulamalarının bir parçası haline getirin.
Eğitin ve Eğitim Verin: Tüm paydaşlara, tehdit modelleme ve risk değerlendirmesinin önemini ve yöntemlerini anlamalarını sağlamak için eğitim verin.
- Düzenli Olarak Yeniden Değerlendirin: Güvenlik tek seferlik bir çaba değildir. Yeni güvenlik açıklarına, sistemdeki değişikliklere veya ortaya çıkan tehditlere yanıt olarak tehditleri ve riskleri düzenli olarak yeniden değerlendirin.
Güvenlik Testi
Güvenlik testi, yazılım geliştirme yaşam döngüsünün ve genel siber güvenlik stratejisinin kritik bir bileşenidir. Bu süreç, bir sistemin güvenlik özelliklerini değerlendirerek verileri korumasını ve işlevselliğini planlandığı şekilde sürdürmesini sağlamayı amaçlar. İşte çeşitli güvenlik test türleri ve genellikle nasıl yapıldıkları hakkında bir genel bakış:
a) Zayıflık Tarama (Vulnerability Scanning): Otomatik araçlar, sistemleri, ağları ve uygulamaları bilinen zayıflıklar için tarar.
b) Penetrasyon Testi (Pen Testing): Penetrasyon testi, bir siber saldırıyı simüle ederek sistemlerde, ağlarda ve uygulamalarda zayıflıkları tanımlayıp istismar eder. Genellikle etik hackerlar tarafından, zararlı saldırganların kullandığı tekniklerin kontrol edilen ve yetkilendirilmiş bir şekilde kullanıldığı bir testtir.
c) Güvenlik Denetimi (Security Auditing): Güvenlik kontrolleri ve süreçlerinin doğru ve etkili bir şekilde uygulandığını sistematik olarak değerlendirme sürecidir.
d) Güvenlik Değerlendirmesi (Security Assessment): Zayıflık tarama, penetrasyon testi, güvenlik denetimi ve risk değerlendirmesi gibi daha geniş bir değerlendirmeyi kapsar. Bir organizasyonun güvenlik durumunun kapsamlı bir resmini sunar.
e) Risk Değerlendirmesi (Risk Assessment): Organizasyon varlıklarına yönelik riskleri tanımlama, nicelendirmenin ve önceliklendirme sürecidir.
f) Etik Hackleme (Ethical Hacking): Penetrasyon testine benzer şekilde, etik hackleme, bir organizasyonun sistemlerine bilinçli olarak saldırarak bir saldırganın perspektifinden zayıflıkları bulmayı içerir.
g) Kod İncelemesi (Code Review): Kod incelemeleri, manuel olarak veya otomatik araçlar kullanılarak yapılabilir ve yazılım geliştirme sürecinin güvenliğini sağlamada temel bir adımdır.
h) Yapılandırma Yönetimi İncelemesi (Configuration Management Review): Sistemlerin ve uygulamaların güvenli bir şekilde yapılandırıldığından emin olmak kritik öneme sahiptir.
i) Uyumluluk Denetimi (Compliance Auditing): Sistemlerin ve süreçlerin ilgili güvenlik standartları ve düzenlemelere (örneğin GDPR, HIPAA, PCI DSS) uygunluğunu doğrulama sürecidir.
j) Kırmızı Ekip Testi (Red Teaming): Bir organizasyonun insanlarını, ağlarını, uygulamalarını ve fiziksel güvenlik kontrollerini gerçek bir düşmandan gelen bir saldırıya ne kadar dayanıklı olduğunu test eden çok katmanlı bir saldırı simülasyonudur.
k) Sosyal Mühendislik Testi (Social Engineering Testing): Bir organizasyonun personelinin sosyal mühendislik taktiklerine (örneğin phishing, pretexting, baiting, veya tailgating) ne kadar duyarlı olduğunu test etme sürecidir.
l) Durum Değerlendirmesi (Posture Assessment): Bilgisayar sistemlerinin, ağların ve diğer bilgi varlıklarının güvenlik durumunu analiz etme ve anlama sürecidir. Güvenlik açıklarını belirlemeye yardımcı olur.

Şekil-6
(Kaynak: https://www.educba.com/security-testing/)
