3 Ekim 2020 Cumartesi

Cross Site Request Forgery (CSRF,XSRF)

            Cross Site Request Forgery(CSRF veya XSRF), Siteler Arası İstek Sahteciliği yöntemiyle yapılan saldırı, istismar(exploit) türüdür.  Yetkili kullanıcılar dışındaki kötü niyetli kişiler, bir web sitesine, yetkili kullanıcıymış gibi request oluşturup, hedef seçtikleri kullanıcı yada uygulamaya oldukça etkili zararlar verebilmektedirler.  Yani verilebilecek zararın etkisi kullanıcının uygulama içindeki yetkisi ölçüsünde değişkenlik gösterir. Saldırganlar yetkili kullanıcı requestlerini “Man in the middle(Orta adam)” saldırısı, cookie, session datalarını çalma gibi yöntemler ile oluşturabilmektedirler. Yetkili kullanıcının web sitesinde kimliği doğrulanırsa, ilgili web sitesi meşru talepler ile sahte talepler arasında ayrım yapamaz. Bu yöntemde, saldırganlar sahte talepleri yetkili kullanıcılara yaptırmaktadırlar.

Saldırgan(fail), mağdur adına istenmeyen bir işlevi yerine getirmek için mağdurun kimliğini ve ayrıcalıklarını miras alır. Çoğu websitesi için tarayıcı istekleri; kullanıcının oturum tanımlama bilgisi, IP adresi, Windows etki alanı kimlik bilgileri vb. gibi web sitesiyle ilişkili tüm kimlik bilgilerini otomatik olarak içerir. Bu nedenle, kullanıcının şu anda sitede kimliği doğrulanmışsa, site, mağdur tarafından gönderilen sahte talep ile mağdur tarafından gönderilen meşru bir talep arasında ayrım yapamayacaktır. Bazen CSRF saldırısını savunmasız sitenin kendisinde depolamak da mümkündür. Bu tür güvenlik açıklarına "stored CSRF flaws(depolanan CSRF kusurları)" denir. Bu saldırı, HTML'yi kabul eden bir field da bir IMG veya IFRAME etiketini depolayarak veya daha karmaşık bir siteler arası komut dosyası saldırısı(XSS) ile gerçekleştirilebilir. Saldırgan sitede bir CSRF saldırısı depolayabilirse, saldırının ciddiyeti artar. Özellikle, mağdurun saldırıyı içeren sayfayı İnternet'teki rastgele bir sayfadan daha fazla görüntülemesi olasılığı vardır. Bu olasılık doğrultusunda mağdur doğrulanmış bilgileri ile isteği dışında bir saldırıya maruz kalmış olmaktadır.



Şekil 1 : CSRF saldırısı örneği.

            Şekildeki örnekte; fail(saldırgan) ele geçirdiği request’ i, CSRF açığı olan bir bankanın websitesinden login olmuş mağdurlara mail ile gönderip, bu kişilerin hesabından, kendi hesabına para transferi yaptırabilmektedir.

Alınabilecek Önlemler;

·         Her request için CSRF tokenları kullanmak; Örneğin her request için geçerlilik süresi minimum olan JWT(JSON Web Token) endüstri standardında(RFC 7519) tokenlar üretmek ve kullanmak şu an ki teknolojiler itibari ile oldukça güvenlidir.

·         Client tarafından gönderilecek requestlerde; Http request methodu olarak GET değil, POST kullanmak.

·         Request body si içerisindeki önemli dataları , client-side ve server-side olarak mümkünse encrypt-decrypt ederek kullanmak.

·         Oturum çerezleri için her zaman “SameSite Cookie Attribute” (https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html#samesite-cookie-attribute) kullanmak.

·         Standart Header lar ile Origin doğrulamak; Source origin ve target origin belirleyip, sunucu tarafında doğrulama yapabiliriz. (CORS filter ekleyebiliriz. Ancak düzgün yapılandırılmış bir CORS politikası önemli olsa da, kendi başına bir CSRF savunması oluşturmaz.)

·         Web site yayınlama yöntemi olarak TLS(SSL) standart protokollerini kullanmak; TLS(Transport Layer Security) önceki ismiyle SSL(Secure Sockets Layer), bilgisayar ağı üzerinden güvenli haberleşmeyi sağlamak için tasarlanmış kriptolama protokolleridir.

OWASP tarafından önerilen ve POC ‘si de yapılan, örnek önleme yöntemlerinden bazılarını içeren Java Web uygulamaları için kod örneğini ; “https://github.com/righettod/poc-csrf” linkinden inceleyebilirsiniz.

Not : Eğer Siteler Arası Komut Dosyası (XSS) zaafiyeti var ise, bu XSS zaafiyeti kullanılarak tüm CSRF önleme tekniklerini bypass etmek mümkündür. Bu yüzden XSS zaafiyetine karşı da önlemler alınması zorunludur.

Kaynaklar:


Hiç yorum yok :

Yorum Gönder