Hackerlar web tarayıcınızı zorlayarak istedikleri siteden istek gönderebilirler. Tek yapmaları gereken sizin bir bağlantıya tıklamanızı ya da bir e-postayı okumanızı sağlamak. Eğer sitede de bir koruma yoksa -ki genellikle yoktur- hackerlar tarayıcınızda sizin yapabileceğiniz her şeyi yapabilir. Özelliklerle oynayabilir, şifrelerinizi değişebilir hatta banka hesabınıza girebilir. Tüm bu kargaşanın altında Cross-Site (Çapraz Site) bağlantısı vardır.
Tarayıcılar bu bağlantıyı kesmek için genellikle "benzer kaynak ilkesini" kullanır. Bu ilke basitçe şöyledir; eğer sitenizin kaynaklarının (protokol, alan adı, port...) tümü eşleşmiyorsa bu site üzerinden başka bir siteye bilgi gönderimi ya da alımı yapamazsınız. Bu yöntem dışında internet üzerinde cross-site bağlantısı için başka bir güvenlik önlemi yoktur. Eğer ayrı bir web tarayıcısı kullanmıyorsanız her site bir diğerine veri gönderebilir. Yegane yöntem olan "benzer kaynak ilkesi" yöntemini aşmak ise saldırganlar için çokta zor değil. "IMG, FORM, SCRIPT, IFRAME" gibi etiketleri kullanarak kurbanın tarayıcısında bir istek oluşturulabilir bu da hedef siteye gönderilir.
Saldırganlar bu yöntem ile sahte istekler (forge request) gönderir. Bu saldırı yöntemi "cross-site request forgeries" ya da kısaca CSRF olarak adlandırılır. Örnek olarak Netflix'e yapılan CSRF saldırısına bir göz atalım.
Saldırgan bir resim etiketini istediği yere koyabilir, bir blog'a, web sayfasına ya da bir e-postanın içine. Kaza ile bu etiketi içeren bir sayfaya girerseniz ve Netflix hesabınıza da giriş yapmışsanız hesabınıza gizlice bir film eklenmiş olacaktır.
Daha gelişmiş saldırılar ardarda koyulan CSRF parçalarının sırayla çalışmasından doğabilir. Düşünün ki tarayıcınız çıldırdı ve ortalığı dağıtmaya başladı. Peki neler yapabilir? Giriş yaptığınız e-postalarınızı karıştırabilir. Daha önce giriş yaptığınız banka hesaplarında ne var ne yok diye göz atabilir. Ya da daha önceden "beni hatırla" seçeneğini işaretlediğiniz web sayfalarını gözüne kestirebilir. Peki ya iş yerinizdeyseniz ya da önemli bir ağa bağlı iseniz? Çılgın web tarayıcınız bu ağ için artık fitili çekilmiş bir bombadan farksızdır. İşte tüm bu saldırılar CSRF yöntemi ile basitçe ve uzaktan yapılabilir.
Güvenlik Sanatı
Peki tüm bu kargaşadan nasıl korunacağız? Dediğimiz gibi tarayıcılar güvenlik için yetersiz bu nedenle güvenlik önlemlerini kendimiz almalıyız. İlk olarak web sitelerine giriş yapmış (logged in) durumda kalmayın. Bir sayfadan çıkacaksanız sadece tarayıcıyı kapatmayın mutlaka "çıkış (logout)" bağlantısına da tıklayın. Diğer bir adım ise eğer CSRF'den korkuyorsanız kritik siteleriniz için ayrı tarayıcılar kullanın. Şirketler intranet uygulamaları genellikle için bu yöntemi izlerler.
Eğer bir CSRF saldırısı altındaysanız büyük ihtimalle olağadan dışı bir şey görmeyeceksiniz. Çünkü tamamen bağlantıların yönlendirilmesi ile yapılan CSRF saldırıları dışarı uyarı vs. vermez. Bunu anlamanın tek yolu saldırının hedefi olan hesaplarınızdaki anlık değişimlerdir.
Ayrıca CSRF çok güçlü bir teknikte olsa genellikle XSS ile birlikte kullanılır. Bu şekilde bağlantıya müdahale edildikten sonra sistemde çeşitli uygulamalarda çalıştırılabilir. Gelişen saldırı yöntemleriyle birlikte yakında CSRF-XSS kurtçuklarının çıkması olası görünüyor.
Şuanda CSRF'den en iyi korunma metodu rastgele anahtarlar oluşturmaktır. Bu anahtarları uygulamanızın içerisine, URL'nin içine ya da gizli bir form ile ekleyebilirsiniz. Örnek;
CSRF'den kurtulmak istiyorsanız yukarıdaki değişik yöntemleri kullanabilirsiniz fakat en önemli güvenlik önleminin sizin dikkatiniz olduğunu hiç bir zaman unutmayın.
Tarayıcılar bu bağlantıyı kesmek için genellikle "benzer kaynak ilkesini" kullanır. Bu ilke basitçe şöyledir; eğer sitenizin kaynaklarının (protokol, alan adı, port...) tümü eşleşmiyorsa bu site üzerinden başka bir siteye bilgi gönderimi ya da alımı yapamazsınız. Bu yöntem dışında internet üzerinde cross-site bağlantısı için başka bir güvenlik önlemi yoktur. Eğer ayrı bir web tarayıcısı kullanmıyorsanız her site bir diğerine veri gönderebilir. Yegane yöntem olan "benzer kaynak ilkesi" yöntemini aşmak ise saldırganlar için çokta zor değil. "IMG, FORM, SCRIPT, IFRAME" gibi etiketleri kullanarak kurbanın tarayıcısında bir istek oluşturulabilir bu da hedef siteye gönderilir.
Saldırganlar bu yöntem ile sahte istekler (forge request) gönderir. Bu saldırı yöntemi "cross-site request forgeries" ya da kısaca CSRF olarak adlandırılır. Örnek olarak Netflix'e yapılan CSRF saldırısına bir göz atalım.
- Kod:
<img src=http://www.netflix.com/AddToQueue?movieid=70011204 width="1" height="1" border="0">
<body onload="document.forms[0].submit()">
<form method="POST" action="https://bank.com/transfer.do">
<input type="hidden" name="account" value="123456789"/>
<input type="hidden" name="amount" value="2500"/>
</form>
Saldırgan bir resim etiketini istediği yere koyabilir, bir blog'a, web sayfasına ya da bir e-postanın içine. Kaza ile bu etiketi içeren bir sayfaya girerseniz ve Netflix hesabınıza da giriş yapmışsanız hesabınıza gizlice bir film eklenmiş olacaktır.
Daha gelişmiş saldırılar ardarda koyulan CSRF parçalarının sırayla çalışmasından doğabilir. Düşünün ki tarayıcınız çıldırdı ve ortalığı dağıtmaya başladı. Peki neler yapabilir? Giriş yaptığınız e-postalarınızı karıştırabilir. Daha önce giriş yaptığınız banka hesaplarında ne var ne yok diye göz atabilir. Ya da daha önceden "beni hatırla" seçeneğini işaretlediğiniz web sayfalarını gözüne kestirebilir. Peki ya iş yerinizdeyseniz ya da önemli bir ağa bağlı iseniz? Çılgın web tarayıcınız bu ağ için artık fitili çekilmiş bir bombadan farksızdır. İşte tüm bu saldırılar CSRF yöntemi ile basitçe ve uzaktan yapılabilir.
Güvenlik Sanatı
Peki tüm bu kargaşadan nasıl korunacağız? Dediğimiz gibi tarayıcılar güvenlik için yetersiz bu nedenle güvenlik önlemlerini kendimiz almalıyız. İlk olarak web sitelerine giriş yapmış (logged in) durumda kalmayın. Bir sayfadan çıkacaksanız sadece tarayıcıyı kapatmayın mutlaka "çıkış (logout)" bağlantısına da tıklayın. Diğer bir adım ise eğer CSRF'den korkuyorsanız kritik siteleriniz için ayrı tarayıcılar kullanın. Şirketler intranet uygulamaları genellikle için bu yöntemi izlerler.
Eğer bir CSRF saldırısı altındaysanız büyük ihtimalle olağadan dışı bir şey görmeyeceksiniz. Çünkü tamamen bağlantıların yönlendirilmesi ile yapılan CSRF saldırıları dışarı uyarı vs. vermez. Bunu anlamanın tek yolu saldırının hedefi olan hesaplarınızdaki anlık değişimlerdir.
Ayrıca CSRF çok güçlü bir teknikte olsa genellikle XSS ile birlikte kullanılır. Bu şekilde bağlantıya müdahale edildikten sonra sistemde çeşitli uygulamalarda çalıştırılabilir. Gelişen saldırı yöntemleriyle birlikte yakında CSRF-XSS kurtçuklarının çıkması olası görünüyor.
Şuanda CSRF'den en iyi korunma metodu rastgele anahtarlar oluşturmaktır. Bu anahtarları uygulamanızın içerisine, URL'nin içine ya da gizli bir form ile ekleyebilirsiniz. Örnek;
- Kod:
http://www.siteismi.com/?token=8FD41A&data=1
CSRF'den kurtulmak istiyorsanız yukarıdaki değişik yöntemleri kullanabilirsiniz fakat en önemli güvenlik önleminin sizin dikkatiniz olduğunu hiç bir zaman unutmayın.