Webinar’a Katılın | Siber Tehditlere Karşı Güçlü Koruma

CSRF/XSRF (Cross-Site Request Forgery)

Web uygulamalarının önemi düşünüldüğünde, bu uygulamaların geliştirilmesi sırasında yapılan hatalar; hırsızlığa, kullanıcı bilgilerinin değiştirilmesine ve yetkisiz kullanıma yol açabilir. CSRF’de bu hatalarla ilişkili saldırı yöntemlerinden birisidir.

Cross-Site Request Forgery (CSRF/XSRF) Nedir?

CSRF, Siteler Arası İstek Sahteciliği anlamına gelen “Cross-Site Request Forgery” kısaltmasından gelir. Aynı zamanda XSRF de denir. Bu saldırı yöntemi, hedeflenen son kullanıcının isteği üzerine işlemlerin gerçekleştirilmesine izin verir. Önlenmesi kolay olmasına rağmen sonuçları çok tehlikeli olabilmektedir.

Bir kullanıcının yetkilendirmesi ile kullanıcıların internet bankacılığı üzerinden havale, mail gönderme, şifre değiştirme gibi yapılabilecek işlemler CSRF kullanılarak yapılabilen işlemlerdir.

Ayrıca her Cross-Site Request Forgery saldırı talebinin aslında son kullanıcı tarafından yapıldığı da bilinmektedir.

XSRF Açığı ile Sistem Nasıl Sömürülür?

Bir kullanıcının hesabıyla http://www.eymenshop.com adresinden alışveriş yapabileceğini varsayalım. Aşağıda gösterilen form, kullanıcının alışveriş sepetine bıraktığı ürünleri silmek için kullanılmıştır.

<form action=”admin.php” method=”GET”>

<input type=”hidden” name=”islem” value=”SepettekileriSil”>

<input type=”submit” value=”Sepettekileri Sil”>

</form>

Yukarıdaki HTML kodları bir düğme oluşturacaktır. Bu butona tıklamak kullanıcıyı admin.php?islem=Sepetisil sayfasına yönlendirecektir. Sepetteki oturum için alınması gereken öğeler silinecektir.

Saldırgan Cross-Site Request Forgery zafiyetinden yararlanmak için www.siteofhacker.com

şeklinde bir web sitesi hazırlar.

<html>

<iframe src=”http://eymenshop.com/admin.php?islem=token=ABC” width=”0″ height=”0″></iframe>

</html>

Yukarıdaki zemine uygun saldırı şu şekilde gerçekleşmektedir:

  • Kullanıcı, alışveriş sistemine hesabıyla giriş yapar ve sepete ürün ekler.
  • Bu esnada saldırgan hazırlamış olduğu www.siteofhacler.com adresine giriş yapar.
  • Sayfada yer alan iframe kodu çalışır ve sepetteki ürünler silinir.

Saldırganın sitesine giren bir kullanıcının tarayıcısı, bu adrese bir istekte bulunduğu için bir yetkilendirme (oturum) sorunu ile karşı karşıya kalacaktır.

Cross-Site Request Forgery Zafiyeti Nasıl Giderilir?

Web uygulamalarında bir kullanıcı veya üçüncü parti yazılımlar tarafından form isteklerinin yapılıp yapılmadığını anlamak için, formun gönderildiği anda forma özel tanımlamalar yapılarak gönderilmelerin doğrulanması gerekmektedir.

Bir kullanıcının hesabıyla http://www.eymenshop.com adresinden alışveriş yapabileceğini varsayalım. Kullanıcının sepetine attığı ürünleri silmek için;

<form action=”admin.php” method=”GET”>

<input type=”hidden” name=”islem” value=”SepettekileriSil”>

<?php

$_SESSION[‘csrf’]= md5(rand(0,9999999)) ;

?>

<input type=”hidden” name=”csrf” value=” <?=echo $_SESSION[‘csrf’]; ?>”>

<input type=”submit” value=”Sepettekileri Sil”>

</form>

Yukarıdaki HTML kodları bir buton meydana getirecektir. PHP etiketi içerisinde yer alan tanımlama ile birlikte 0 ile 9999999 sayısı arasında rastgele bir değer oluşturup bu değer $_SESSİON[“token”] olarak tanımlanacaktır. Aynı zamanda bu değer form ile birlikte gönderilecektir. Bu butona tıklandığında kullanıcı admin.php adresine yönlendirilecek, oturum kontrolü yapılacak ve işlem değişkeni “SepettekileriSil” ve SESSION olarak tanımlanan değer “csrf” değişkeninden ise sepetteki ürünler silinecektir.

Sonuç olarak saldırgan Cross-Site Request Forgery zafiyetinden yararlanmak için bir aşağıdaki kodu bir web sayfasında kullandığını düşünelim.

<html>

<iframe src=”http://eymenshop.com/admin.php?islem=token=ABC” width=”0″ height=”0″></iframe>

</html>

CSRF “input” değerinde yer alan ve o an oluşturulan rastgele sayıyı bilmediğinden dolayı silme işlemi başarıyla gerçekleşmeyecektir.

  • Oluşturlan XSRF token anahtarı güçlü olmalıdır. Aksi taktirde sistem tahmin edilebilir bir anahtar ile CSRF saldırısına açık hale gelebilir.
  • Rails gibi bir yapı ile uygulama geliştirme yapıyorsanız ilgili kontroller içerisine protect_form_forgery with:exception ekleyerek XSRF saldırılarına karşı otomatize olarak token eklemesini ve kontrol edilmesini sağlanılabilmektedir.

 

Kategoriler Makaleler