ASP.NET Security Yazı Dizisi - 3

ASP.NET Security Yazı Dizisi - 3

Bu makalemizde Cross-Site Scripting (XSS) saldırılarına karşı nasıl önlem alınabileceğini irdeleyeceğiz...

İlk önce XSS’in ne olduğundan bahsederek başlamak daha uygun olur.

XSS Nedir ?

XSS kısaca, HTML ve JavaScript yardımıyla açığı olan sitelerdeki script kodlarına ekleme yaparak istenilen yönde işlem yapmak demektir.Bunun kötüye kullanım yolu; açığın bulunduğu sitenin kullanıcılarına içerisine istediğimiz işlemi yapan kod parçacığını enjekte edip link halinde vermek.Bu açığa örnek olarak son yılların en büyük sistem açıklarından birisi olan Hotmail’deki XSS açığını verebiliriz.

XSS’in en çok kullanıldığı alan cookie çalma yöntemidir.

Cookie Nedir ?

Cookie : Ana makine’dan istemci makina’ya gönderilen .txt uzantılı bir dosyadır.Bu dosyada sizin ana makine’deki siteye bağlandığınızda sizin kullanıcı adınız, şifreniz, sisteme otomatik giriş yap seçeneğiniz, sisteme son giriş yaptığınız tarih, sisteme giriş yaptığınız andaki saat bilgisi vs. her türlü bilgi yer alabilir.Genellikle üyelik sistemi olan sitelerde cookie’ler içerisinde kullanıcı adı ve şifresi bulunur.Bu cookie bilgileri eğer başka birisinin eline geçerse ve kendi cookie bilgileri ile sizin cookie bilgilerinizi yer değiştirirse açığı olan siteye bağlandığı anda sizin kullanıcı adı ve şifreniz ile sisteme bağlantı sağlanmış olacaktır.Cookie’ler sizin Cookies klasörünüzde tutulur ve her alan adı için ayrı cookie oluşturulur.

XSS saldırılarına karşı kod güvenliğimizi nasıl sağlarız ?

Kullanıcıdan aldığımız bilgiyi direk olarak veritabanımıza kaydediyorsak ve yine aynı şekilde verilerimiz veritabanından kullanıcıya direk olarak gönderilmesini sağlıyorsak; kötü niyetli kodların bizim sistemimizde çalışmasına olanak sağlamış oluruz.

Örnek olarak :

Kullanıcılarımız için bir MemberNetwork tasarladık ve bir kullanıcının diğer bir kullanıcının profiline eklenecek yazılar yazmasına olanak sağladık.MemberNetwork üzerinde kötü niyetli kullanıcının diğer kullanıcının profiline eklenecek yazı kısmına şeklinde bir yazı yazması bu yazının profiline bu yazının eklenmiş olduğu kullanıcının profiline giriş yapıldığı zaman bu kod parçasının olduğu kısım çalışmaya başladığı anda profil kısmında bulunduğumuz site http://www.cyber-security.org adresine yönlenecektir.

Şimdi de yukarıdaki adres yönlendiren kod parçacığımız yerine başka bir kod yazalım.

şeklinde bir kod parçacığı eklediğimizde bu kod çalıştığı anda kullanıcının Session bilgilerini kotuniyetlikullanici.com adresi üzerindeki cookieBilgileriniAl.aspx isimli sayfa’nın cookieBilgi değişkenine atayacaktır ve kötü niyetli kullanıcının sistemine kayıt edecektir.

Aslında ASP.NET programcıları XSS konusunda diğer programcılardan biraz daha şanslı.Çünkü "<" ve ">" işaretleri arasında gelen bilgiler "Potansiyel Tehlikeli Bilgi" olarak algılanır ve genellikle sistemde hataya neden olur.

Mesela programcı sisteminde "FCK Editör" kullanmak istediğinde FCK Editör’ün kullanıldığı sayfanın başına ValidateRequest = false şeklinde bir kod parçası eklemek zorunda kalıyor.Bu durum da XSS saldırıları için ortam oluşturuyor.

Buraya kadar hep HTML üzerinde oluşabilecek açıklardan bahsettik.Bu JavaScript, VBScript ve XML ile olmayacağı anlamına gelmez.

JavaScript için bir örnek kod parçası yazalım :

default.aspx sayfamızda bulunan JavaScript’imiz ;

------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------

default.aspx sayfamızdan gelen bilgi ;

------------------------------------------------------------------------------------------------

LtKullaniciAdi.Text = "Doğukan";

------------------------------------------------------------------------------------------------

Sayfamız çalıştığında ekranda bir uyarı penceresinde "Hoşgeldin Doğukan" şeklinde bir uyarı çıkacaktır.

Şimdi buradaki kullanici adi bilgimizin veritabanımız üzerinden geldiğiniz varsayalım ve kötü niyetli kullanıcı sistemimize üye olurken kullanıcı adı bilgisine " ’location.href= "http://www.cyber-security.org’; alert(’Yönleniyor’); "şeklinde bir ifade girerse bu kod çalıştığı zaman ekranda "Hoşgeldin " yazısı gözükecek ve sistem hemen http://www.cyber-security.org adresine yönlenecektir.

Sayfamız derlendiği zaman oluşacak JavaScript kodunu inceleyelim :

------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------

şekline dönüşecektir ve site yönlenecektir.

Buraya kadar saldırının mantığı ve nasıl gerçekleştiğinden bahsettik.Şimdi de buna karşı nasıl önlemler alacağımıza gelelim.XSS açığını önlemek için "Microsoft Anti-Cross Site Scripting Library" kütüphanesini kullanacağız.

Kütüphaneyi http://www.microsoft.com/downloads/details.aspx?FamilyId=EFB9C819-53FF-4F82-BFAF-E11625130C25&displaylang=en adresinden temin edebilirsiniz.

Kütüphaneyi kurduktan sonra Program Files\Microsoft\Anti-Cross Site Scripting Library V1.0\Library\ klasörünün içinden kullanıdığınız .NET framework sürümünün bulunduğu klasör içerisindeki AntiXSSLibrary.dll dosyasını projemize referans olarak ekliyoruz.Bu işlem bittikten sonra kütüphaneyi Microsoft.Application.Security.AntiXSS namespace’i üzerinden kullanmaya başlayabiliriz.Kütüphane içerisinde 7 tane statik metod bulunmaktadır.Bunlar;

• HtmlEncode• HtmlAttributeEncode• JavaScriptEncode• UrlEncode• VisualBasicScriptEncode• XmlEncode• XmlAttributeEncode

metodlarıdır.

Az önce verdiğimiz örnek kodun güvenliğini sağlayacak kodu yazalım :

------------------------------------------------------------------------------------------------

using Microsoft.Security.Application.AntiXss;

...

LtKullaniciAdi.Text = JavaScriptEncode(" location.href= "http://www.cyber-security.org’; alert(’Yönleniyor’) ");

------------------------------------------------------------------------------------------------

Kodumuzu bu şekilde derlediğimizde yönlendirme olmayacaktır.

XSS saldırılarından kullanıcı olarak nasıl korunuruz ?

http://www.cyber-warrior.org/Root.asp?Action=Download&Downloadid=254 adresinden indireceğiniz CW XSS Security programı ile güvenliğinizi arttırabilirsiniz.

CW XSS Security sayesinde farkında olmadan tıkladığınız linkteki, gizli-aşikâr frame içinde XSS saldırısı olma ihtimali olan bir kod var ise o kod parçacığı devreye girmeden CW XSS Security eklentisi devreye girerek size bir uyarı mesajı verir.Sizden bu konuda onay ister.Ayrıca onay isterken saldırganın post adresini decode edip size gösterir.Böyleye yeni bir XSS açığı çıktığında bunu kötü niyetli birisi sizin üzerinizde denemeye çalışıyor ise buna yakalanmazsınız ve o sitede bulunan açığı da öğrenmiş olursunuz.

Yazan : Doğukan DEMİR

Döküman Arama

Başlık :

Kapat