Copyright © The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the Creative Commons Attribution-ShareAlike 2.5 License. To view this license, visit The OWASP Foundation OWASP Day Turkey - Sep Güvenli Web Uygulamalarının Geliştirilmesi Korhan GÜRLER
OWASP Day – Turkey – Sep 2007 BT Güvenliğinin Değişen Odağı Bilişim güvenliği problemlerinin büyük bölümü uygulamalara doğru kayıyor Saldırıların %75’i uygulama katmanında gerçekleştiriliyor (Gartner) Saldırganlar ve güvenlik uzmanları arasındaki savaş artan biçimde uygulama katmanına kayıyor (Network World) Pek çok yazılım ekibi güvenli yazılımları nasıl geliştireceği konusunda bilgi sahibi değil Geliştiricilerin %64’ü güvenli yazılımlar geliştirebildiklerinden emin değil (Microsoft) Güvenlik uzmanlarının pek çoğu yazılım konusunda uzman değildir
OWASP Day – Turkey – Sep 2007 Geleneksel Yaklaşım ile Koruma Firewall’lar ile sistemlerimizi koruruz “Saldırganları uzak tutalım” Kriptografi kullanımı yazılımın güvenliğini sağlar “Tüm verilerimizi şifreli saklıyoruz” Yazılım ürünlerinin bittiğinde test edilmesi Saldır ve yamala (penetrate and patch) Güvenlik özellikleri yazılımlarımızı güvenli kılar “Biz SSL kullanıyoruz” Proje hedefleri içerisinde güvenliğin konu edilmemesi “Güvenlik konusunu bir sonraki sürümde ele alacağız”
OWASP Day – Turkey – Sep 2007 Modern Yaklaşım Güvenlik “risk yönetimi”dir Öncesinde riskleri analiz etmeden güvenli bir yazılım geliştirilemez Güvenlik konusunun geliştirme sürecinin entegre bir parçası olması zorunludur Nihai yazılım ürününün güvenli olması için gerekli aktivitelerin gerçekleştirilmesi Çeşitli metrikler ile geliştirme süreci boyunca izleme Sürekli iyileştirme
OWASP Day – Turkey – Sep 2007 Yazılım Güvenliği Nihai yazılım ürününün teknik özellikleri (features) geliştirme sürecinin sağladığı güvence (process assurance) açılarından beklentileri karşılar düzeyde olmasınının sağlanması çabası
OWASP Day – Turkey – Sep 2007 Geliştirme Sürecinde Güvenlik Güvenlik Gereksinimleri Tespiti İhtiyaç Analizi Tasarımın Tamamlanması Test Planlarının Tamamlanması Kodlamanın Tamamlanması Sunuş Sunuş Sonrası Güvenlik Kalıplarının Uygulanması Dış İnceleme Geliştirici Eğitimi Güvenlik Testleri Geliştirilmesi Kaynak kod incelemesi Statik kod analiz araçları Güvenlik Denetimi Öğren ve İyileştir Dış İnceleme Tehdit Analizi Destek ve Olay Müdahalesi Tasarım Prensiplerinin Uygulanması Geçmiş Zafiyetlerin İncelenmesi
OWASP Day – Turkey – Sep 2007 Güvenli Tasarım Prensipleri En zayıf halkayı sağlamlaştır Savunma derinliği geliştir ve uygula Hataları güvenli biçimde ele al Minimum yetki prensibini uygula Bölümlendir Güven ilişkilerini gevşet Yalınlığı sağla Gizliliği destekle Şeffaflık sağla
OWASP Day – Turkey – Sep 2007 Güvenlik Tasarım Kalıpları Bir güvenlik kalıbı, tekrarlanan bir bilişim güvenliği problemi için üretilmiş çözüm şablonudur Yeniden kullanılabilir Özelleştirilebilir Deneyim ve birikim ile süzülmüş Potansiyel problemleri ile birlikte Programlama dilinden, ortamından bağımsız Tasarım kalıbı Yazılım tasarım kalıbı Kalıp kitaplıkları
OWASP Day – Turkey – Sep 2007 Örnek Kalıplar Hesap kilitleme (account lockout) Doğrulanmış oturum (authenticated session) İstemcide veri depolama (client data storage) İstemci veri filtreleri (client data filters) Yönlendirilmiş oturum (directed session) Gizlenmiş gerçekleştirim (hidden implementation) Şifrelenmiş depolama (encrypted storage) Mayın tarlası (minefield) Ağ adresi karalistesi (network address blacklist) Bölümlendirilmiş uygulama (partitioned application)
OWASP Day – Turkey – Sep 2007 Tehdit Modelleme Yazılımınıza yönelik tehditleri bilmeden güvenli bir yazılım üretemezsiniz İçerisine güvenlik özelliklerinin yerleştirilmesi bir yazılımı güvenli kılmaz “Biz SSL kullanıyoruz” “Biz strong-authentication kullanıyoruz” Tehdit modellemesi yazılım geliştirmeden önce yapılmalıdır Yazılım güvenlik problemlerinin azımsanmayacak bir bölümü tasarımdan kaynaklanmaktadır Tehdit modeli belgesi hangi tehditlere karşı önlemler alındığını gösteren yaşayan bir belge olacaktır
OWASP Day – Turkey – Sep 2007 Saldırı Yüzeyi ve Geliştirme Süreci Tasarım dokümantasyonunda saldırı yüzeyi belgelenmelidir Ön-tanımlı ağ protokolleri Doğrulama ve yetkilendirme gerektiren uç noktalar Anonim erişim sağlanabilen noktalar özellikle not edilmeli Ön-tanımlı olarak kapalı olacak özellikler Yeniden kullanılabilir bileşenler Çalışan kodların kullanıcı kimlikleri Tanımlanan kullanıcı hesapları Göreli saldırı yüzeyi yazılım geliştirme süreci boyunca izlenmelidir Yüzeyin genişlemesi/daralması kontrol altında tutulmalıdır
OWASP Day – Turkey – Sep 2007 Saldırı Yüzeyinin İzlenmesi Neden yeni bir kullanıcı eklendi? Yetkileri nedir? Parolası nedir? (*) 1 x Uygulama HesabıAçılacak kullanıcı hesabı yok Neden yeni bir port eklendi? Eklenmese olmaz mıydı? Doğrulama yapılıyor mu? Nerelerden bağlanılabiliyor? 2 x UDP port1 x UDP port İyi gelişme2 x TCP port3 x TCP port YorumlarBugünBaz Durum *: Açılan uygulama hesabı güvenliğin sağlanmasına katkı sağlıyor da olabilir
OWASP Day – Turkey – Sep 2007 Gerçekleştirime Özel Konular “Beklenmediğe hazır ol, çalışması gereken tek bir satır bile çalışmayabilir” Saldırganın hedefi yazılımın akışını değiştirmek yetkilerini yükselterek yetkisiz işlem yapmak yazılımı çalışmaz hale getirmek ya da bunların bir bileşkesidir Hiç olmadık bir anda programcının tüm varsayımları geçersiz hale gelebilir Varsayımlar yok, anormal durumlara devamlı hazırlık zorunluluğu var
OWASP Day – Turkey – Sep 2007 Girdilerin Sınanması: Neden? Güvenilmez kaynaklardan gelen tüm girdiler işleme tabi tutulmadan önce sınanmalıdır Uygunsuz girdiler ile bir sürecin işleyişini değiştirmek mümkündür Neye güvenilebileceği her uygulama ve her kuruluş için farklı olabilir Kullanıcılardan, ağ üzerinden Sistem üzerindeki diğer süreçlerden Kitaplıklardan (.so,.dll vb.) İşletim sisteminden Uygulama içerisindeki diğer fonksiyonlardan gelen verilerin sınanması gerekli olabilir
OWASP Day – Turkey – Sep 2007 Girdilerin Sınanması: Nasıl? Geçerli olan girdiler tanımlanmalı ve bunun dışındaki veriler kabul edilmemelidir Tersi yapılmamalıdır: Geçersiz verileri/sembolleri tanımlama ve diğerlerinin tümünü kabul etme Veriler için maksimum uzunluk/büyüklük tanımlanmalı ve daha büyük girdi kabul edilmemelidir
OWASP Day – Turkey – Sep 2007 Diğer Gerçekleştirim Konuları Taşma problemleri ve korunma Alan taşmaları Tamsayı taşmaları Yarış durumları Şifreleme ve rastgele sayıların uygunsuz kullanımı Platforma / dile özel güvenlik konuları J2EE /.Net güvenlik mekanizmaları ve kullanımı Platforma spesifik diğer noktalar ...
OWASP Day – Turkey – Sep 2007 Yazılım Testleri Geliştirme süreci testleri Yazılım test araçları Yazılım İnceleme Toplantıları (peer reviews) Saldırı simülasyonları
OWASP Day – Turkey – Sep 2007 Geliştirme Süreci Testleri Kod geliştirme ve test/sınama birbirine paralel olarak yürütülmelidir Her programcı “test kodları” hazırlanması gerektiğini bilir, pek azı hazırlar Sağlam kod güvenli kod Çevik (agile) teknikler sürekli sınama vurgusu yapmaktadır Sürekli bütünleştir, sürekli sına, sürekli yeniden eklemlendir (refactor)
OWASP Day – Turkey – Sep 2007 Tehdit Modeline Göre Test Etme Yazılım güvenlik testleri standart testlerden fazlasını içermelidir Denetleyenlerin güvenlik birikimi Pek çoğu güvenlik denetleyicisi (kötü niyetli) değildir Neler test edilmeli? Nasıl test edilmeli? Modeldeki her tehtidin bir test planı olmalı Tehdit modeli testlerin yönlendirilmesine yardımcı olur
OWASP Day – Turkey – Sep 2007 Yazılım Güvenliği Test Araçları Statik analiz araçları *lint, lint4j RATS, ITS4, flawfinder prefix, prefast, fxcop Dinamik analiz araçları Valgrind, IBM/Rational Purify, ElectricFence Fuzzer’lar SPIKE Retina – CHAM …
Copyright © The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the Creative Commons Attribution-ShareAlike 2.5 License. To view this license, visit The OWASP Foundation OWASP Day Turkey - Sep Güvenliğiniz geleceğinizdir…