29 Aralık 2010 Çarşamba

OWASP-SM-005: CSRF

CSRF, son kullanıcıyı, login olduğu bir web uygulamasında istemediği fonksiyonları çalıştırmaya zorlayan bir saldırı türüdür. Sosyal mühendisliğin de küçük bir yardımıyla (mail yada chat yoluyla bir link göndermek gibi) saldırgan uygulama kullanıcısını kendi istediği bir fonksiyonu çalıştırmaya zorlayabilir.
Bazen CSRF saldırısı, açıklık bulunan sitede depolanabilir: Stored CSRF. Basitçe HTML kabul eden bir alanda IMG veya IFRAME etiketleri ile, ya da daha karmaşık bir XSS saldırısı ile bu depolama gerçekleştirilebilir.Eğer saldırı sitede depolanabilirse etkisi daha da artar.

ÇalışMAyan önleme teknikleri:
  • Gizli bir cookie kullanmak. Tüm cookie'ler, gizli olanlar dahil, her taleple birlikte submit edilecektir.
  • Sadece POST talepleri kabul etmek. Yanlış anlama şurada: Saldırgan kötü niyetli bir link oluşturamayacağından CSRF saldırısı da gerçekleştiremez. Maalesef bu kanı yanlış. Saldrıgan, kullanıcıyı POST talebi göndermek için başka yollara da sahip; saldırganın web sitesinde gizli değerler içeren basit bir form içinde mesela.
Saldırı nasıl çalışır:
Bir saldırı geliştirmek için öncelikle kurbanın çalıştıracağı kötü niyetli bir talebin nasıl oluşturulabileceğini anlamamız gerekir. Örnek üzerinde inceleyelim:
Ahmet banka.com'u kullanarak 100 TL transfer etmek istiyor. Ahmet'in oluşturacağı talep yaklaşık şöyle olacaktır:
POST http://banka.com/transfer.do HTTP/1.1
...
...
...
Content-Length: 19;

acct=NURETTIN&amount=100
Saldıray, aynı talebin şu şekilde yapılabileceğini de farkediyor:
GET http://banka.com/transfer.do?acct=NURETTIN&amount=100 HTTP/1.1
Saldıray, Ahmet'i kurban olarak kullanarak bu açıklığı exploit etmeyi düşünüyor. Önce Ahmet'in kendisine 100.000 TL transfer etmesini sağlayacak bir talep oluşturuyor:
http://banka.com/transfer.do?acct=SALDIRAY&amount=100000
Şimdi Ahmet'i bu kötü niyetli talebi submit etmeye ikna etmeli. En basit yol olarak bit html mail ile şöyle bir link gönderir:
<a href="http://banka.com/transfer.do?acct=SALDIRAY&amount=100000">Karı kız resimleri!</a>
Eğer Ahmet bu linke tıkladığında bankaya login olmuş durumdaysa transfer gerçekleşecektir. Ama Saldıray biliyor ki transfer gerçekleştiğinde Ahmet'e transferin gerçekleştiğine dair bir bilgi mesajı verilecek. Bu yüzden Saldıray saldırıyı bir "0-byte image" içine saklıyor:
<img src="http://banka.com/transfer.do?acct=SALDIRAY&amount=100000" width="1" height="1" border="0">
Eğer bu imaj etiketi mail içindeyse, Ahmet sadece browser'ın resmi render edemediğini belirten küçük bir kutu görecek. Bununla birlikte browser talebi banka.com'a gönderecek ve transferin gerçekleştirildiğine dair herhangi bir işaret de olmayacaktır.

Hiç yorum yok:

Yorum Gönder

Web Uygulama Sızma Testleri İçin Kontrol Listeleri - V

Checklist for Web App Pentesting - V 6. Veri Denetimi (Data Validation) Testleri 6.1 Girdi Denetimi Bütün girdiler denetlenmelidir....