RSS feed
<< HackBar Firefox Eklentisi | Home | Rusya vs Gürcistan >>

WUG-SYH #2 : Kara Listeleme

Web uygulamalarında en sık karşılaştığım problemlerden, problem olmasa da yanlış pratiklerden, birisi de blacklisting (kara listeleme) mantığıdır.

Teori & Laf Salatası
Blacklisting dediğimiz olayın pratiğini günlük hayatta pek çok yerde görebiliriz. Örneğin markete giderken genellikle ihtiyaçlarımızın listesini daha önceden bir kağıda yazmamız ve markette sadece bu ürünleri alıp çıkmamız tavsiye edilir. Sebebi ise açıktır, marketteki bir ton ürünü görüp ihtiyacımız olmasa bile almayı engellemek içindir.
Web uygulaması güvenliğinde de olay tam olarak böyle olmasa bile buna yakındır. Kullanıcıdan alınan girdinin, tanımladığımız doğru girdi tanımı ile birebir örtüşmesi gerekir. Bunun dışında kalan durumları ise tamamen reddetmeliyiz. Bu mantığa kısaca whitelisting deniyor.
Kötü pratik olarak geçen şey ise ; önümüzdeki bir market dolusu maldan işimize yaramayanların bir kısmını listeleyip geri kalanların hepsini almaya benziyor. Pratik olarak işinize yaramayacak olanların hepsini listelemeniz pek mümkün değil, düşünmediğiniz bir ton case çıkacak ve sonunda ister istemez işinize yaramayacak bir ton şeyi satın almış olacaksınız.
Bu olumlu ama yetersiz yaklaşıma ise blacklisting deniyor. Nitekim gelen kötü inputların hepsini ayıklayamadığınız için her türlü girdi manipülasyonu oyununa karşı korumasız kalıyorsunuz.

Gerçek Hayat İmplementasyonları
Bir çok web uygulamasında alınan parametrenin filtrelenmesi aşamasında blacklisting yapıldığını görüyorum.
Örneğin karşımda bir arama scripti var, "foo" katarını aratıyorum ve karşıma
'foo' aratıldı dönen sonuçlar :
şeklinde bir sonuç sayfası dönüyor.
Bu noktada ilk akla gelen şüphesiz ki SQL Injection ve XSS. Ben burada örneğe XSS üzerinden devam edeceğim.
Burada XSS testi yapmak isteyenler hemen en genel XSS payload'u olan <script>alert(1)</script> gibi bir şeyi deneyecektir. Dönen sonuç sayfası :
'alert(1)' aratıldı dönen sonuçlar :
Hissedeceğiniz üzere arka planda çalışan kodda <script> tag'i filtreleniyor. Yani karşı tarafta bir kara liste var, ve gönderdiğiniz input kara listede varsa filtrelenecek, yoksa sessiz sedasız atağınızı gerçekleştireceksiniz.
Ortalama bir saldırganın bu noktada deneyeceği şey :
<image src="" on error="alert(/XSS/)>
olacaktır. Bu noktada kara listenizde image tagı bulunmuyorsa atak yine başarıyla gerçekleşecek. <p> tagında bile XSS yapılabiliyorken kara listeleme mantığı tamamen zayıf ve yetersiz kalmaktadır.

Peki Çözüm Nedir ?
Görüldüğü üzere her türlü blacklisting filtresini geçmenin bir yolu bulunabilir. Çözüm ise gayet açık, yazının daha başında bahsettiğim whitelisting bakış açısı. Yani sadece olması gerektiği gibi girdiyi tanımlayıp, bu tanımla örtüşenleri kabul edip, gerisini reddetmek.

Ekstra Okuma & Referans
Cross Site Scripting Blacklist Protection
Unusual XSS Vectors



Add a comment Send a TrackBack