46 KB

advertisement
Web Uygulama Güvenliği
Web Application Security
Ömer Çıtak1
Bilgisayar ve Öğretim Teknolojileri Eğitimi,
Balıkesir Üniversitesi
[email protected]
ÖZETÇE
Bu bildiri kapsamında web uygulamalarında sürekli
karşılaşılan SQL Injection, Cross-site Scripting, Upload
Authentication,
Memcache
Injection
gibi
güvenlik
zafiyetlerinin nasıl ortaya çıktığı, saldırgan tarafından nasıl
kullanıldığı ve güvenlik uzmanın bu zafiyeti nasıl gidereceği
anlatılmıştır.
1.
GİRİŞ
Uzun yıllardır hem yazılımcı hem de güvenlik sorumlusu
olarak görev yaptığımdan yazılımcıların işin güvenlik
kısmında eksik kaldığı sonucuna ulaştım. Bir web
geliştiricisinin kullandığı teknolojiler barındıran bir
laboratuvar kurup sistemler üzerinde zafiyet testleri
gerçekleştirdim.
2.
Cross Site Scripting
XSS yani Cross-site Scripting, kurbanın web tarayıcısında
zararlı javascript kodu çalıştırmaya olanak sağlayan güvenlik
zafiyetidir. Genelde Dom-Based, Reflected ve Stored olmak
üzere 3 başlık altında incelenir.
2.3 Stored XSS
Stored XSS, XSS türleri arasında en tehlike olanıdır. Çünkü
kurban, zararlı kodu kurbanına çalıştırtmak için herhangi bir
sosyal mühendislik sergilemesine gerek yoktur. Kurban
tarafından çalıştırılması istenen zararlı kod, kurban ve
sistemden etkilenecek tüm kullanıcıların görebildiği ortak bir
sayfaya kaydediliyor. Genelde bu kaydedilme işlemi, veri
tabanı üzerinden gerçekleşiyor. Kurban ve sistemdeki diğer
kullanıcılar, farkında olmadan saldırgan tarafından
yerleştirilmiş zararlı kodu çalıştırabiliyor.
3.
SQL Injection
SQL Injection, SQL dilini kullanan veri tabanı sistemlerinde,
kullanıcıdan alınan verinin herhangi bir filtreleme işlemine
sokulmadan doğrudan SQL sorgusuna dahil edildiği
durumlarda ortaya çıkmaktadır. Genelde Union Based, Blind
ve Time Based olmak üzere 3 başlık altında incelenir.
2.1. Dom-Based XSS
3.1. Union Based SQL Injection
Dom Based XSS, kabaca sayfa içerisinde anchor yani
çapalama kullanılan durumlarda ortaya çıkmaktadır. Bir web
sayfasında çapaya tıklandığında sayfanın gidilen bölümü, yani
gidilen çapanın div nesnesinin id atribütü herhangi bir şekilde
javascript içerinden işleniyor ise, saldırgan çapanın id
atribütünü değiştirerek kurbanın web tarayıcısına istediği
zararlı kodu çalıştırtabilir.
Union, SQL dilinde sorgu birleştirme görevini yapan
komuttur. Genelde veri tabanından veri çekilen (SELECT *
FROM gibi) gibi sorgulara, kullanıcıdan alınan veriler koşul
olarak eklenir. Saldırgan, sorguya koşul olarak eklenecek
veriyi UNION ile başlatırsa devamında kendi istediği sorguyu
yazıp, sistem üzerinde istediği sorguyu çalıştırabilir.
3.2. Blind SQL Injection
2.2 Reflected XSS
Reflected XSS, herhangi bir inputtan alınan verinin herhangi
bir filtreden geçirilmeden doğrudan ekrana çıktı olarak
yansıtılmasından kaynaklanan bir zafiyettir. Genelde GET
metodu kullanılan, arama gibi sayfalarda karşımıza çıkar. GET
metodu ile gönderilen veri doğrudan adres çubuğunda yer
almaktadır. Arama sayfasından örnek verecek olursak;
saldırgan gerçekten bir arama yapmak yerine aranacak
kelimeyi kurbana zarar verecek tarzda bir javascript kodu ile
değiştirir ise kurban farkında olmadan bu saldırıdan
etkilenecektir.
Blind SQL Injection ise Union Based ile aynı altyapıda çalışır.
Tek farkı çıktı olarak verilen sistem hata mesajlarının
gizlenmiş olmasıdır. Union Based’da sorgu bozulduğunda
sistemin verdiği hatalardan yola çıkarak veri tabanı ismi, veri
tabanındaki tablo isimleri, kolon isimleri gibi verilere
ulaşılabiliyordu. Blind’de hata mesajları gizli olduğundan bu
bilgilere doğrudan hata mesajı üzerinden ulaşılamıyor.
Sorgunun sonuna ufak koşul sorguları yazarak istenilen
verinin doğruluğu kontrol edile edile istenilen tüm bilgilere
ulaşılabiliyor.
3.3. Time Based
Time Based, veri tabanından veri çeken sorgularda değil,
ekleme, silme, güncelleme gibi işlemlerde ortaya çıkan bir
zafiyettir. Veri tabanından veri çekme işlemi olmadığından
saldırgan istediği verilere doğrudan ulaşamıyor. O yüzden
ekleme, silme, güncelleme gibi sorguların sonuna DELAY
yani zaman aşımı koyuyor ve bu zaman aşımını bir kontrolcü
olarak kullanarak sistem üzerindeki istediği veriye
ulaşabiliyor.
4.
Memcached Injection
Memcached, sunucu tarafından kullanıcı tarafına verilerin
daha hızlı iletilmesi için geliştirilmiş bir önbellekleme
yazılımıdır. Veri tabanında sık sık güncellenmeyecek veriler
Memcache üzerine kaydedilir. Kullanıcı sisteme girip, verita
tabanından bir veri okumak istediği zaman eğer veri
memcache’de var ise sistemin RAM’i üzerinden kullanıcıya
çok hızlı bir şekilde verilir. Bu şekilde veri hem kullanıcıya
hızlı bir şekilde ulaşmış olacak aynı zamanda veri tabanı bu
tarz sorgular ile yorulmayacak.
Ancak saldırgan, veri tabanından çekilip memcache’e
kaydedilmesi gereken verilere Injection saldırısı ile kendi
zararlı payload’ını yerleştirir ise, kullanıcı sisteme girdiğinde
veri yerine saldırganın yerleştirmiş olduğu zararlı payload’ı
görebilir.
5.
Upload Authentication
Bazı sistemler işleyiş gereği kullanıcıdan dosya almak zorunda
olabilir. Örneğin bir fotoğraf barındırma servisi sunan web
uygulaması, kullanıcının kendi bilgisayarından seçmiş olduğu
resmi kendi sunucuna taşıyıp herkese servis ediyor. Bu tarz
uygulamalarda saldırgan, kendi bilgisayarından gerçekten bir
resim yerine sunucu ile SSH bağlantısı yapabileceği veya
sunucuyu uzaktan yönetebileceği zararlı “web shell”
yükleyebilir. Bu tarz saldırıların engellenmesi için dosya
içeriği kontrolü, php veya kullanılan yazılım dilinin kendi
resim işleme kütüphaneleri kullanılabilir.
Download