D P U S E C

CSRF/XSRF



CSRF Nedir, Nasıl Oluşur?


Siteler arası istek sahteciliği saldırısı olarak bilinen Cross-Site Request Forgery (CSRF), saldırganın kullanıcıyı manipüle etmesidir. Bu manipüle işlemi çeşitli phishing yöntemleridir. Böylece kullanıcının authentication işlemini tamamladığı hedef siteye, çerezlerini kullanarak kullanıcının isteği dışı çeşitli faaliyetleri gerçekleştirebilir. (hesabından para aktarmak, e-posta adresini ve şifresini değiştirmek )
İlk olarak zafiyeti tam olarak detaylı incelemeden önce temelde bilinmesi gerekenlere değinelim.

HTTP stateless bir protokoldür. Stateless olması durum bilgisi tutmadığını belirtir. Yani request-response cycle’ı (istek-cevap döngüsü) yaşandıktan sonra diğer istekte, bir önceki istekte neler olup bittiğine dair bir bilgi tutmadığı anlamına gelir. Cookieler de tam bu noktada hayatımıza girdi. Bu sayede yapılan her istekte kullanıcı bilgileri alınmadan cookieler üzerinden işlem yapılarak sunucu tarafında session bilgisi takip edilebilir hale geldi.

  • Çoğu web uygulaması, authentication işlemini kullanıcının oturumlarına dayalı olarak gerçekleştirir. Authentication işlemi tamamlandıktan sonra browser bir session cookie‘si saklar. Ardından browser cookie’yi kayıtlı domaine her yapılan istekle birlikte oturum işlemini daha kolay hale getirmek için gönderir.

Bu mekanizmanın doğasında bulunan risk, uygulamaya giden requestlerin hangi kaynaktan ve nasıl gönderildiği kontrol edilmediği sistemlerde çerezlerin eklenerek gitmesidir. Gerekli önlemler alınmadığında CSRF zafiyeti ortaya çıkar.

CSRF Nasıl Tespit Ederiz?


Sistemde Token yönteminin kullanılması, kullanıcıdan sürekli kimlik doğrulama işleminin gerçekleştirmesine gerek bırakmaz. Böylece arka planda doğrulamayı yapar. Özellikle CSRF atağını engellemek için sisteme giriş yapan kullanıcıya her işlemde farklı ve tahmin edilmesi güç token bilgisi verir. Verilen bu token bilgisi session boyunca aynı kalmaz ve session sonlanınca etkisiz hale gelmelidir. Sonuç olarak eğer token vb. kontrolü yapılmazsa, CSRF zafiyetini tespit ederiz.

CSRF Zafiyet Sömürüsü (CSRF Savunmasız)


HTTP GET isteği göndermek hiçbir zaman herhangi bir verinin değişmesine neden olmamalıdır. Ancak bazı web uygulamaları, veri değişikliği durumlarına uygun olan POST yerine GET yöntemini kullanılırlar.

Bu istek uygulamada kimliği doğrulanmış bir kullanıcıdan gittiği için saldırgan bu noktada URL manipüle edebilir. Kimlik doğrulama işlemini tamamlamış hedef kullanıcıya bu isteği gerçekleştirmesini sağlayacak phishing yöntemleri kullanabilir.
Bunlardan birisi saldırgan kendi sitesine kurbanı yönlendirip <img> tagi içerisinde manipüle ettiği isteği kullanıcı browserında parse ettirerek (parse işlemi sırasında browser isteğe cookieleri ekleyecek) manipüle edilmiş isteği kurban tarafından yaptırmış olacaktır. Örneğin:


POST isteklerine dayalı CSRF atağında, javascript kullanarak kullanıcının browserına bir <form> tagini otomatik olarak parse etmeye zorlar.
Örnek olarak hedef kullanıcının e-mail değiştirme işlemini gerçekleştiren bir uygulama aşağıdaki gibi bir form işlemini yapar.


Saldırgan kendi sitesinde mail adresini değiştirme işlemini tetikleyecek formu hazırlayıp eklerse saldırgan kontrolünde olan sayfanın kaynak kodunda görüldüğü gibi hedeflediği kişinin mail adresini değiştirmiş olacaktır.


Zafiyet Önlemleri

 
SameSite Cookies
Browserların cookie ekleme davranışı güvenlik problemlerine yol açtığı için cookieler tarafında kontrol sağlayabilmek için SameSite cookie ortaya çıktı. Bu tanımlamada farklı kaynaklardan tetiklenen isteklerde cookie’nin hangi durumlarda eklenebileceği talimatını veriyoruz. Bu tanımlamalar:
  1. Strict: Başka kaynaktan yapılan isteklere cookie eklemez.
  2. Lax: Çerezleri normal siteler arası isteklere göndermez ancak bir kullanıcı kaynak siteye giderken (Yani, bir bağlantıyı takip ederken) gönderir. (GET request)
  3. None: Çerezleri her isteğe ekler.
Çoğu modern tarayıcı SameSite özelliğini tüm çerezler için varsayılan olarak (Lax) ayarlasa da, web uygulamasında yine de manuel olarak ayarlanmalıdır. SameSite tek başına yeterli bir önlem değildir.

Anti-CSRF Tokens

 
Anti CSRF tokenları, kullanıcı tarayıcısına, tarayıcısının daha sonra geri göndermesi gereken bir token vermektedir. Bu token benzersiz olmalıdır ve HTTP istekleri yalnızca token doğrulandıktan sonra gerçekleşmelidir.
Yukarıdaki zafiyet örneklerinde giden isteklerde herhangi bir kontrol yoktu. Ancak şimdi web sunucusunun tokenı oturum açtıktan sonra tarayıcıya gönderilen bir session cookiesine yerleşir. Daha sonra form gönderimleri tokenı içeren bir gizli alan içerir. Doğru token uygulaması yapıldıysa CSRF açığı ortadan kalkar.  

KAYNAKLAR


Cross-Site Request Forgery Prevention – OWASP Cheat Sheet Series
https://book.hacktricks.xyz/pentesting-web/csrf-cross-site-request-forgery