Web Uygulamalarında Güvenlik Problemleri Bünyamin DEMİR www.owasp.org/index.php/Turkey www.webguvenligi.org OWASP [email protected] 13 Mayıs 2009 Copyright © The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the.
Download
Report
Transcript Web Uygulamalarında Güvenlik Problemleri Bünyamin DEMİR www.owasp.org/index.php/Turkey www.webguvenligi.org OWASP [email protected] 13 Mayıs 2009 Copyright © The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the.
Web Uygulamalarında
Güvenlik Problemleri
Bünyamin DEMİR
www.owasp.org/index.php/Turkey
www.webguvenligi.org
OWASP
[email protected]
13 Mayıs 2009
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
WebGoat
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
WebGoat
Top 10
WebScarab
Legal
Live CD
AppSec 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ı ModSecurity log analizi)
Owasp-WeBekci (SoC 2008) ve MSALParser
CAMMP (Chroot Apache Mysql ModSecurity PHP)
SecureImage (.NET, Java ve PHP API)
SecureTomcat (Tomcat J2EE sunucu güvenlik denetimi)
Çeviri Projesi (~500 sayfa doküman)
Otomatize Sql Entektörleri Analizi (SoC 2008)
AntiCsurf (Cross Side Request Forgery için PHP API`si)
ApacheLive (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
WebGoat
Güvenlik açıklıkları barındıran bir OWASP projesidir (J2EE 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
WebGoat Kurulumu
WebGoat Proje Sayfası:
http://www.owasp.org/index.php/Category:OWASP_WebGoat_Project
WebGoat-OWASP_Standard-5.2 indirilir. Webgoat.bat çalıştırılır
http://localhost/WebGoat/attack
Kullanıcı adı: guest
Şifre: guest
WebScarab Proje Sayfası:
http://www.owasp.org/index.php/Category:OWASP_WebScarab_Project
webscarab-installer indirilir ve kolay şekilde kurulur.
WebScarab ile HTPP ve HTTPS trafiği izlenir ve araya girme imkanı sağlanır.
WebScarab 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.
WebScarab
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 arka 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 field1, field2, field3 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 field1, field2, field3 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_%28Cross_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)
an2 + bn + c olan bir algoritmanın performansı O(n2)’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(N2) ikinci dereceden
Bir grafikte iki düğüm arasındaki en kısa yolu
bulma
O(N3)
Ardarda gerçekleştirilen lineer denklemler
üçüncü dereceden
O(2N)
ü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 field1, field2, field3 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
SQLiBench
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/AVL%20tree%20a
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