Web Uygulamalarnda Gvenlik Problemleri Bnyamin DEMR www owasp
Web Uygulamalarında Güvenlik Problemleri Bünyamin DEMİR www. owasp. org/index. php/Turkey www. webguvenligi. org OWASP 13 Mayıs 2009 bunyamin@owasp. org Copyright © The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the OWASP License. The OWASP Foundation http: //www. owasp. org
İçerik OWASP Güvenlik Zaafiyeti ve İkili Arama Nedir? Algoritma Analizi ve Karmaşıklık Neler Yapar? İkili Arama (Binary Search) OWASP-TR & WGT Amaç ve Hedefler Projeler Web. Goat Blind SQL Injection ve Binary Search Blind SQL Injection için Binary Search Optimizasyonu Nedir? Kurulum Path Based Access Control XSS SQL Injection Blind SQL Injection 2
OWASP – Nedir? Open Web Application Security Projest (OWASP) Güvensiz yazılımların sebep oldukları açıkları bulup, bunlarla mücadele eden bir topluluktur. Tüm OWASP ürünleri ücretsiz ve açıktır. Kar amacı gütmez Topluluga ait rakamlar 120+ (Chapter) 30+ Sponsor 50+ Proje 100+ E-posta listesi Aylık beş milyon üzerinde ziyaret 3
OWASP Neler Yapar? Testing Guide Web. Goat Top 10 Web. Scarab Legal Live CD App. Sec FAQ . NET Research LAPSE Araçlar Dökümanlar Metrics … … Topluluk Wiki Bölgeler (chapters) Forumlar Günlükler (blogs) Çeviriler Konferanslar 4
OWASP-TR / WGT Amaç ve Hedefler Web uygulaması güvenliğine ülkemizde gerekli duyarlılığın gösterilmesini sağlamak Web uygulaması güvenliği konusunda çalışan ve ilgi duyan arkadaşları bir platformda toplamak Güvenlik konulu makaleler, dökümanlar ve projelere yer ve destek sağlamak. Web uygulamalarının ortaya çıkardığı zararları en aza indirme yolunda çalışmalar yapmak Dünyada yapılan web uygulaması güvenliği konulu çalışmaların takibini sağlamak OWASP Vakfının Türkiye çalışmalarını sürdürmek Web uygulaması güvenliği projeleri geliştirmek. Web uygulaması güvenliği alanında yardımcı dökümanlar temin etmek. Özel ve kamu kuruluşları arası güvenlik konulu çalışmalar yapmak. Uluslararası konferanslar düzenlemek. Açık kaynak kodlu güvelik çalışmalarına destek vermek. Üniversitelerimizde uygulamalı web güvenliği farkındalığı eğitimleri vermek. 5
OWASP-TR / WGT Projelerimiz Jarvinen (Web tabanlı Mod. Security log analizi) Owasp-We. Bekci (So. C 2008) ve MSALParser CAMMP (Chroot Apache Mysql Mod. Security PHP) Secure. Image (. NET, Java ve PHP API) Secure. Tomcat (Tomcat J 2 EE sunucu güvenlik denetimi) Çeviri Projesi (~500 sayfa doküman) Otomatize Sql Entektörleri Analizi (So. C 2008) Anti. Csurf (Cross Side Request Forgery için PHP API`si) Apache. Live (Apache sunucusunun Keep-alive parametresi için güvenlik kontrolü yapan bir araçtır) Web Güvenliği Terimler Sözlüğü WIVET (Web Crawler’ın Teknik Yeteneklerinin Ölçülmesi ve Karşılaştırılması) 6
Web. Goat Güvenlik açıklıkları barındıran bir OWASP projesidir (J 2 EE ile yazılmıştır). Web uygulama güveliği bilincini arttırmak için hazırlanmış bir eğitim aracıdır. Bu araç sayesinde açıklıkları anlayabilme ve bunları exploit edebilme yeteneği kazandırılmak istenmektedir. Yüzlerce açıklık içermektedir. Açıklıkların detaylı çözümleri ve bu açıklıkları çözmek için yardımcı ipuçları barındırır. Açıklıklar belli kategorilerde sunulmaktadır. Kolayca yeni açıklıklar ilave edilebilir. Güvenlik testleri için ideal bir çalışma ortamı sunulur. Kolay kuruluma sahiptir. 7
Web. Goat Kurulumu Web. Goat Proje Sayfası: http: //www. owasp. org/index. php/Category: OWASP_Web. Goat_Project Web. Goat-OWASP_Standard-5. 2 indirilir. Webgoat. bat çalıştırılır http: //localhost/Web. Goat/attack Kullanıcı adı: guest Şifre: guest Web. Scarab Proje Sayfası: http: //www. owasp. org/index. php/Category: OWASP_Web. Scarab_Project webscarab-installer indirilir ve kolay şekilde kurulur. Web. Scarab ile HTPP ve HTTPS trafiği izlenir ve araya girme imkanı sağlanır. Web. Scarab aracını proxy (vekil sunucu) olarak kullanmak için Firefox Araçlar > Seçenekler > Gelişmiş > Ağ > Ayarlar > Vekil Sunucu Ayarları kısmına “Localhost, port 8008” yazılmalıdır. Web. Scarab Proxy > Intercept Requests 8
Path Based Access Control (Demo) Web uygulamalarında özellikle dizinlerden dosya okuturken karşımıza çıkan bir güvenlik açığıdır. Erişim sağlanan dizinin dışına çıkma imkanı varsa, bu imkan sayesinde stahmin edilen bazı dosyalara izinsiz erişim sağlanır. . . /main. jsp ye erişim sağlanabilir. 9
Stored XSS Saldırgan tarafından girilen zararlı kod parçasının kurban tarafından çalıştırılmasından kaynaklanmaktadır. 3. Mesaj açıldıktan sonra, mesaj içindeki <script>zararlı kod</script> client tarafında çalışır. 1. Bir mesaj formı yardımıyla <script>zararlı kod</script> enjekte edilir. 2. Kullanıcı kendine gelen mesajı açmayı ister. 10
Stored XSS (Demo) 1 3 2 4 1. Bruce olarak sisteme girilir. 2. Bilgileri güncellerken “street” alanında xss açığı olduğu tespit edilir ve zararlı kod parçaçığı yazılır. 3. Yönetici olan Moe sisteme girer. 4. Moe sisteme girdikten sonra kullanıcı profillerine bakarken Bruce`un girmiş olduğu zararlı kod parçacığı browser tarafından çalıştırılır. 11
Sql Injection (Demo) Sql Injection açığı bulunan bir formdan arkaya sql cümleciklerinin çalışma demosu. 12
Blind Sql Injection Web uygulamaları bazen gerçekleştirdikleri SQL sorgu sonuçlarını direk olarak cevapta barındırmazlar, ama sorguların sonuçları cevabın içeriğini değiştirir. Örnek olarak kimlik doğrulama ekranları, durum kontrol ekranları v. b. Bu tür durumlarda SQL enjeksiyonu zafiyeti varsa yani ilgili SQL sorgusu dinamik olarak oluşturuluyorsa, saldırganın önünde bu durumu exploit edebilmesi için yazacağı saldırı sorguları ile cevap farklılığı oluşturması gerekmektedir. Bu farklılık sayesinde, oluşturduğu sql sorgularının doğru çalışıp çalışmadığını anlayacak ve buna göre bilgiler çıkarmaya başlayacaktır. 13
Blind Sql Injection (Demo) Sorgu: SELECT field 1, field 2, field 3 FROM Users WHERE Id='$id' Gerekli Fonksiyonlar: • SUBSTRING (text, start, length): klasik string manipulasyon fonksiyonu • ASCII (char): verilen char değerinin ascii int karşılığı • LENGTH (text): klasik string uzunluk fonksiyonu $id -> 1' AND ASCII(SUBSTRING(username, 1, 1))=97 AND '1'='1 Değişen Sorgu: SELECT field 1, field 2, field 3 FROM Users WHERE Id='1' AND ASCII(SUBSTRING(username, 1, 1))=97 AND '1'='1' • Koyu kısım doğru dönerse içerik değişmeyecektir. Yanlış dönerse cevap değişecektir. • Doğal olarak bu işlem çok fazla istek gerektirir. • 1’; waitfor delay ‘ 0: 0: 5 ile sunucu 5 saniye geç cevap verir (MSSQL). 14
Dökümanlar http: //www. owasp. org/ altında; Web Uygulamalarında XSS’i Önlemek İçin; index. php/XSS_%28 Cross_Site_Scripting%29_Prevention_Cheat_Sheet Web Uygulamalarında SQL Enjeksiyonu’nu Önlemek İçin; index. php/SQL_Injection_Prevention_Cheat_Sheet Web Uygulamalarını Güvenlik Açıklarına Karşı Denetlemek İçin; index. php/Category: OWASP_Testing_Project 15
Algoritma Analizi ve Karmaşıklık • • Neden algoritmayı analiz ederiz? • Algoritmanın performansını ölçmek için • Farklı algoritmalarla karşılaştırmak için • Daha iyisi mümkün mü? Olabileceklerin en iyisi mi? Özelliklerinin analizi • Algoritmanın çalışma zamanı • Hafızada kapladığı alan Algoritmalarda Kamaşıklık: Bir algoritmanın hesaplama karmaşıklığının değerlendirilmesi algoritmanın çalışma hızı ve bellekte kapladığı alan ile ilgili bilgiler verir. Hesaplama karmaşıklığı iki açıdan incelebilir: zaman karmaşıklığı(time complexity) ve alan karmaşıklığı(space complexity). • Zaman karmaşıklığı (Büyüme Hızı) Büyük-O notasyonu ile gösterilir. • Büyüme hız bir algoritmanın performansını yansıtan en iyi göstergedir. • Büyük-O girdi verisinin büyüklüğünü gösteren bir N parametresine dayanan bir fonksiyondur. Örneğin n değerine bağlı olarak performansı (sabit a, b, c değerleri için) an 2 + bn + c olan bir algoritmanın performansı O(n 2)’dir 16
Sık Kullanılan Büyüme Hızları Zaman karmaşıklığı O(1) O(log N) sabit log Bağlı listeye ilk eleman olarak ekleme yapma Sıralı bir dizide bir eleman arama O(N) lineer O(N log N) Örnek n-log-n Sıralı olmayan bir dizide bir eleman arama N elemanı böl-parçala-yut yöntemiyle sıralama O(N 2) ikinci dereceden Bir grafikte iki düğüm arasındaki en kısa yolu bulma O(N 3) Ardarda gerçekleştirilen lineer denklemler üçüncü dereceden O(2 N) üstel Hanoi’nin Kuleleri problemi 17
İkili Arama (Binary Search) • • • Problem çözümlerinde böl ve yönet prensibine dayanır. Problemin büyüklüğünü belli oranda (genelde ½) azaltmak için sabit bir zaman harcanıyorsa bu algoritma O(log N)’dir. Bu algoritmada verilen veriler artan şekilde sıralanmış olmalıdır. – Veriler tamsayı ise en küçükten en büyüğe doğru sıralanmış, eğer kelime iseler alfabetik olarak sıralı şekildedir. Böyle bir veri kümesinde bir eleman aranması için algoritma ikili aramadır. İkili arama algoritmasının mantığı; sıralı veri kümesi ortadan iki kümeye ayrılarak bulunması istenen veri bu alt kümelerden hangisinin içerisinde olabileceğinin kontrolü prensibine bağlıdır. Arama işlemi alt kümelerde tekrarlanarak bulunması gerekli olan veri bulunmaya çalışılır. 18
İkili Arama Örneği 19
Blind SQL Injection & Binary Search Sorgu: Değişen Sorgu: SELECT field 1, field 2, field 3 FROM Users WHERE Id='1' AND ASCII(SUBSTRING(username, 1, 1))=97 AND '1'='1‘ • ASCII karakter kümesinde 97, ‘a’ harfine denk gelmektedir. Her bir karakterin kontrolü yapılır. • İlk karakterin doğruluğunun ölçülebilmesi için (ASCII okunabilir karakter kümesi aralığı 32 -126 dır); • f(n) = Θ(log n) • f(126 -32) = Θ(log (126 -32)) • ~7 karşılaştırmada karakterin doğruluğuna erişilir. • Milyon tane karakter için ne yapılabilir? 20
Blind SQL Injection için Binary Search Optimizasyonu • Normal karakter kümesi boyutu ASCII 126 'dan 32'ye kadar : 94 karakter. • Uppercase, Lowercase gibi dbms fonksiyonları ile karakter kümesi dörtte birine indirilebilir. - ASCII 65 -90 (A-Z) - f(90 -65) = Θ(log (90 -65)) = ~5 • Farklı ikili arama ağaçları tanımlanarak istekte bulunulur. Örneğin; öyle bir binary tree oluşturulurki, sol tarafta harfler, sağ tarafta sayılar olur. Sayısal Dolayısıyla sayısal ifadelerin çok geçtiği isterler için daha hızlı sonuçlar verecektir. 21
Kaynaklar SQLi. Bench http: //code. google. com/p/sqlibench/ OWASP Project http: //www. owasp. org/index. php/Category: OWASP_Sqlibenc h_Project Binary Tree Applet http: //webpages. ull. es/users/jriera/Docencia/AVL%20 tree%20 a pplet. htm Bedirhan Urgun – General Binary Search Algorithm http: //www. webguvenligi. org/sqlibench/on_general_binary_search_s qli_algorithm_theory. html 22
Teşekkürler! www. webguvenligi. org www. owasp. org E-posta listesine kayıt olmak için google: owasp turkey mail list 23
- Slides: 23