190 likes | 419 Views
Yazılım Geliştirme Sürecinde Güvenlik Testleri. Burak Dayıoğlu, burak.dayioglu@pro-g.com.tr. Yazılımları Neden Test Ediyoruz?. Test Ediyoruz Çünkü. Hatasız yazılım geliştiremiyoruz Ancak Az hatalı Hatanın etkisinin az olduğu yazılımları hedefleyebiliyoruz
E N D
Yazılım Geliştirme Sürecinde Güvenlik Testleri Burak Dayıoğlu, burak.dayioglu@pro-g.com.tr
Yazılımları Neden Test Ediyoruz?
Test Ediyoruz Çünkü ... • Hatasız yazılım geliştiremiyoruz • Ancak • Az hatalı • Hatanın etkisinin az olduğu yazılımları hedefleyebiliyoruz • Hatasız geliştirecek teknolojimiz olana değin teste devam...
Farklı Test Kategorileri • İşlevsellik • Performans • Erişilebilirlik (accessibility) • Uluslararasılaştırma (i18n) • Güvenlik Her test kategorisi hata bulmayı hedeflemez; bazıları beklentileri karşılama düzeyini belirlemek içindir
%80 Bilişim güvenliği ihlallerinin YAZILIM GÜVENLİĞİ problemlerinden kaynaklananlarının oranı (Kaynak: Gartner)
Güvensizliğin Bedeli • Yazılımların güvenlik problemlerinin bedelleri çok ağır olabilir • Ölüm ve yaralanma • Ulusal güvenlik zafiyetleri • Finansal kayıplar • İtibar kaybı • Kıymetli bilgilerin çalınması • ...
İşimizi Yazılım Taşıyor • Tüm kritik iş süreçleri bilgisayar yazılımları ile destekleniyor • Yazılımların güvenliğinin sağlanması artık çok daha önemli
Güvenlik Testini Kim Yapar? • Geliştiriciler • Test uzmanları • Meraklılar • Güvenlik denetim firmaları • Suç işleyecekler / suç örgütleri
Neyi Test Ediyoruz? • Girdi denetimi • Doğrulama/yetkilendirme • Kayıt tutma • Zaman/durum yönetimi • ... • Buffer overflow • Integer overflow • Command injection • SQL injection • LDAP injection • Cross-site scripting • Format strings • HTTP response splitting • Log forging • Log flooding • Time sync • Deadlocks • Race conditions • HTTP session fixation • Improper thread mgmt • Double checked locking • Authentication bypass • Man in the middle • Replay • Spoofing • Credential management • Least privilege violation • Password management • Privacy violation
Genel Yaklaşım • Teste konu yazılımı iyice anla • Hedef için olumsuz neler yapabileceğini kurgula ve planla • Kurgu ve planlar ışığında testlerini gerçekleştir • Çevrede ne olup bittiğini izle, gelişmelerden haberdar ol
Güvenliğe Özel Test Teknikleri • Açık kod ile • Kod ve tasarım gözden geçirmeleri • Statik kod analizi araçlarının kullanılması • Kapalı kod ile • Tersine Mühendislik ile açık koda dönüştürme • Sızma Testleri • Fuzz testleri Tüm testler fonksiyonel olmayan testlerdir
Kod/Tasarım Gözden Geçirmesi • Yazılım kaynak kodunun ve tasarım belgelemesinin “okunması” • Avantajı: Çok etkili • Dezavantajı: Ölçeklenemiyor
Statik Kod Analizi Araçları • Kaynak kodu analiz eden araçların kullanımı ile bilindik güvenlik programlama hatalarının tespiti • Avantajı: Problemlerin çok hızlı tespiti • Dezavantajı: Yazılımın “bağlamından” habersiz olmak
Tersine Mühendislik • Yönetilen platformlar yaygınlaşıyor • Java JRE, .Net CLR, Macromedia Flash • Binary’lere sahipseniz (genellikle) kaynak koda dönebilirsiniz • Reflection yolu ile • Kod karıştırıcılar kullanılmadı ise
Penetrasyon Testleri Kullanıcı Arayüzü Veritabanı Arayüzü Teste KonuYazılım Ağ İletişim Arayüzü Ağ İletişim Arayüzü Web Servisi Arayüzü Web Servisi Arayüzü Dosya Sistemi Arayüzü Dosya Sistemi Arayüzü İşletim Sistemi Platformu ve Ağ Altyapısı
Fuzz Testleri • Yazılımın arayüzlerinden • Tümüyle rastgele • Kısmen rastgele veri girişi yapılır, yazılımın davranışı incelenir • Her farklı tür uygulama ve protokol için fuzzer bulmak güç olabilir • Pek çok modern web tarayıcısının içerisinde web fuzzer’lar bulunmaktadır
Özet Olarak • Yazılımları güvenlikleri açısından test etmek zorundayız • Kaynak kod ve tasarım belgelemesi incelemesi • Statik kod analiz araçları • Tersine mühendislik • Penetrasyon testleri • Fuzz testleri • Teknikler geliştirme sürecinin tamamında kullanılabilir