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
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 |