Ders İzlencesi

Yazılımın, saldırı altındayken fonksiyonlarını doğru bir şekilde yerine getirmeye devam edecek şekilde geliştirilmesine, yazılım güvenliği adı verilir. Güvenlik göz önüne alınarak, yazılımın tasarlanması, geliştirilmesi ve test edilmesi işlemlerinin bütününü kapsar. Yazılım güvenliği faaliyetlerinin amacı, gerçek hayatta kullanımda, tüm bilgi güvenliği saldırılarına karşı daha dirençli çalışan, hatasız yazılım üretmektir.
Yazılıma karşı yapılan saldırılarının üç ana amacı bulunmaktadır:
1.    Yazılımın çalışmasını tamamen durdurmak veya sekteye uğratmak,
2.    İçine kötü niyetli kod dahil ederek veya yazılımın kodunu değiştirmek yoluyla, yazılımın çalışma biçimini ve akışını değiştirmek,
3.    Yazılımın çalışmasındaki işlemler ve çevresiyle ilgili bilgi edinerek yazılımın zayıf noktalarını tespit etmek.
Bu derste, yazılım güvenliğini sağlamak için güvenli yazılım geliştirme yaşam döngüsü, yazılım risk ve tehdit analizi, güvenlik gereklerinin tanımlanması, güvenli kodlama pratikleri, yazılım güvenlik testleri, statik ve dinamik kod analizi, yazılımda yetkilendirme ve erişim denetimi, web uygulamaları güvenliği, yazılım güvenliği standartları ve olgunluk modelleri konuları ele alınacaktır.
Ön koşul:
En az bir programlama diline hakimiyet zorunludur.

Kaynak kitaplar:
1.    Software Security: Building Security In, Gary McGraw
2.    Writing Secure Code, Second Edition, Michael Howard
3.    Security Software Development: Assessing and Managing Security Risks, Douglas A. Ashbaugh
4.    Model-Driven Risk Analysis: The CORAS Approach, Mass Soldal Lund, Bjørnar Solhaug, Ketil Stølen

5.    Muhtelif rapor, standart ve makaleler


Haftalık program

Hafta 1
Yazılım güvenliği kavramları: Yazılım güvenliğine giriş, kavram ve tanımlar, yazılıma yönelik gü̈ncel siber tehditler

Hafta 2
Güvenli yazılım geliştirme ilkeleri ve Güvenli yazılım geliştirme yaşam döngüsü'ne (Secure Software Development Lifecycle) detaylı bakış

Hafta 3
Güvenlik gerekleri analizi ve tanımlama: Sistem gerekleri ve kullanım vakaları tanımlama, varlık analizi, tehdit analizi, güvenlik gerekleri tanımlama

Hafta 4
Yazılım risk analizi: Risk analizi kapsamını belirleme, kantitatif ve kalitatif risk analizi, veri akışı analizi, saldırı durumları (misuse case) analizi

Hafta 5
Model tabanlı risk analizi ve tehdit modelleme: Model tabanlı risk analizi metodolojisi, tehdit modelleme ve risk analizi araçlarının kullanımı

Hafta 6
Güvenli yazılım geliştirme süreci vaka analizi: (1-5). Haftada öğrenilen kavramların gerçek hayatta bir projede uygulanması

Hafta 7
Programlama dillerinde yazılım güvenliği hususları: C/C++ yazılım geliştirmede güvenlik hususları. String (Karakter dizisi), bellek taşması (buffer overflow) açıklıkları ve önlemleri

Hafta 8
Programlama dillerinde yazılım güvenliği hususları: Kodlama stilleri, sık görülen kodlama hataları, kod ve derleyici seviyesi güvenlik önlemleri, işletim sistemi seviyesi yazılım güvenliği önlemleri

Hafta 9
Yazılım güvenliği testleri metodolojisi: White-box, grey-box, black-box test yaklaşımları, fuzz testi

Hafta 10
Web ve bulut yazılımları güvenliği (1): Web teknolojileri standartları, bilgi toplama ve ayar yönetimi, girdi çıktı alan tespiti ve manipülasyonları

Hafta 11
Web ve bulut yazılımları güvenliği (2): Komut enjeksiyonu saldırı ve önlemleri, web ve bulut yazılımlarında kimlik doğrulama, oturum yönetimi, iş mantığı

Hafta 12
Yazılım ve uygulama güvenliği standartları: Yazılım ve uygulama güvenliği standartlarına genel bakış, SAMM ve BSIMM yazılım güvenliği olgunluk modelleri

Hafta 13
Yazılımlarda yetkilendirme ve erişim denetimi: MAC, DAC, RBAC, ABAC erişim denetim modelleri, erişim denetim politikalarının tanımlanması ve denetlenmesi

Hafta 14
Program analizi: Statik analiz, sembolik koşturma, dinamik analiz, formel (biçimsel) analiz



Değerlendirme Yöntemi
Değerlendirme Aracı Ağırlık
Final Sınavı 35
Derse devam 10
Dönem projesi ve sunumu 40
Ödevler 15