Yazılım ve Uygulama Güvenliği
Yazılım ve uygulama güvenliği, programların yazılma ve dağıtılma biçimlerinden kaynaklanan güvenlik açıklarını ve bunları bulma, önleme ve istismar etme yöntemlerini ele almaktadır; zira çoğu güvenlik ihlalinin bozuk kriptografiden ziyade hatalı yazılımdan kaynaklandığı kabul edilmektedir.
Tanım
Yazılım ve uygulama güvenliği, yazılımdaki güvenlik zafiyetlerini belirleme, önleme ve azaltma ile saldırganların bunları nasıl keşfettiğini ve istismar ettiğini anlama ile ilgilenen bir alandır.
Kapsam
Bu alan, yazılımın kendi güvenliğini kapsamaktadır: güvenlik açığı sınıfları (bellek güvenliği hataları, enjeksiyon, mantık hataları) ve bunların nasıl istismar edildiği, güvenli yazılım oluşturma uygulamaları (güvenli tasarım, kod incelemesi, test etme, fuzzing), kötü amaçlı yazılım analizi ve web uygulamalarının özel endişeleri. Saldırı ve savunma perspektiflerini birlikte ele almaktadır. Kriptografik algoritmalar ile ağ ve erişim kontrol altyapısı, ilgili diğer alanlarda ele alındığından bu kapsamın dışındadır.
Alt konular
Temel sorular
- Hangi programlama hatası sınıfları istismar edilebilir güvenlik açıklarına yol açmaktadır?
- Saldırganlar bir güvenlik açığını nasıl kod yürütmeye veya veri hırsızlığına dönüştürmektedir?
- Yazılım, başlangıçtan itibaren güvenli olacak şekilde nasıl tasarlanabilir, yazılabilir ve test edilebilir?
- Kötü amaçlı yazılım nasıl analiz edilmekte ve buna karşı nasıl savunma yapılmaktadır?
- Onlarca yıllık farkındalığa rağmen aynı güvenlik açığı sınıfları neden tekrar etmektedir?
Anahtar kavramlar
- güvenlik açığı sınıfları
- bellek güvenliği
- arabellek taşması (buffer overflow)
- enjeksiyon saldırıları
- istismar ve hafifletici önlemler
- güvenli geliştirme yaşam döngüsü
- statik ve dinamik analiz
- fuzzing
- kötü amaçlı yazılım analizi
Temel kuramlar
- Bellek güvenliği ve istismar
- Bellek güvenliği olmayan diller, saldırganların kontrol verilerini üzerine yazmasına ve yürütmeyi ele geçirmesine olanak tanıyan arabellek taşmaları gibi hatalara izin vermektedir; istismarı (ve ASLR, DEP, stack canaries gibi hafifletici önlemleri) anlamak, yazılım güvenliğinin merkezinde yer almaktadır.
- Güvenliği baştan inşa etme
- Güvenlik, geliştirme yaşam döngüsü boyunca (tehdit modellemesi, güvenli kodlama, kod incelemesi ve test etme yoluyla) entegre edildiğinde, sonradan eklenmek yerine en etkili olmaktadır; bu durum, hataları düzeltmenin daha ucuz olduğu sol tarafa kaydırmaktadır.
Klinik önem
Yazılım güvenlik açıkları, gerçek dünyadaki güvenlik olaylarının büyük bir kısmını tetiklemektedir: C/C++'daki bellek güvenliği hataları, kritik güvenlik açıklarının büyük bir kısmının temelini oluşturmakta, enjeksiyon zafiyetleri veritabanlarını tehlikeye atmakta ve tedarik zinciri saldırıları (SolarWinds, Log4Shell) bağımlılıklar aracılığıyla yayılmaktadır. Bu alan, işletim sistemlerinin, tarayıcıların ve uygulamaların nasıl güçlendirildiğini, güvenlik açığı bildiriminin, yamalamanın ve hata ödülü ekosistemlerinin nasıl işlediğini doğrudan şekillendirmektedir.
Kanıt ve kılavuzlar
Bu alan, ortak bilgi tabanları etrafında düzenlenmiştir: OWASP Top Ten ve CWE, yaygın zafiyetleri kataloglamakta, CVE/NVD sistemi, açıklanan güvenlik açıklarını CVSS ciddiyet skorları ile takip etmekte ve MITRE ATT&CK çerçevesi, saldırgan tekniklerini eşlemektedir. Güvenli geliştirme çerçeveleri (Microsoft SDL, NIST SSDF / SP 800-218) ve bellek güvenli diller (Rust), güncel en iyi uygulama rehberliğini temsil etmektedir.
Tarihçe
Yazılım güvenliği, ağa bağlı sistemlerin programları uzaktan saldırganlara maruz bırakmasıyla ortaya çıkmıştır. 1988 Morris solucanı bir arabellek taşması (buffer overflow) istismar etmiş; Aleph One'ın 1996 tarihli 'Smashing the Stack' makalesi istismar tekniğini popülerleştirmiş ve hafifletici önlemleri (stack canaries, yürütülemeyen bellek, ASLR) tetiklemiştir. 2000'li yıllar, güvenli geliştirmeyi (Microsoft'un 2002 tarihli Trustworthy Computing notundan sonraki SDL'si) resmileştirmiş ve Heartbleed, Log4Shell gibi tekrarlayan krizler, alanı merkezi konumda tutarak günümüzde bellek güvenli dillerin benimsenmesini sağlamaktadır.
Öne çıkan isimler
- Gary McGraw
- Ross Anderson
- Elias Levy (Aleph One)
- Dan Geer
İlgili konular
Temel eserler
- anderson2020
- mcgraw2006
- aleph1996
Sıkça sorulan sorular
- Neden aynı güvenlik açıkları (arabellek taşmaları gibi) tekrar tekrar ortaya çıkmaktadır?
- Kritik yazılımların çoğu bellek güvenliği olmayan dillerde yazılmakta, son teslim tarihleri ve karmaşıklık hatalara davetiye çıkarmakta ve eski kodlar onlarca yıl varlığını sürdürmektedir. Farkındalık olsa bile, gözden kaçan tek bir kontrol istismar edilebilir; bu nedenle alan giderek bellek güvenli dilleri ve otomatik analizi tercih etmektedir.
- Uygulama güvenliği kriptografiden ayrı mıdır?
- Bunlar birbirini tamamlamaktadır. Kriptografi, doğru kullanıldığında verileri korumaktadır; ancak uygulamalar genellikle kriptografiyi tamamen atlayan mantık hataları, enjeksiyon veya bellek hataları aracılığıyla ihlal edilmektedir. Kriptografik korumaların gerçekten işe yaraması için güçlü yazılım güvenliği gerekmektedir.