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:
- https://owasp.org/www-community/attacks/csrf
- https://owasp.org/www-community/attacks/Man-in-the-middle_attack
- https://www.imperva.com/learn/application-security/csrf-cross-site-request-forgery/
- https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html#samesite-cookie-attribute
- https://tools.ietf.org/html/rfc7519
- https://jwt.io/
- https://www.nccgroup.com/us/about-us/newsroom-and-events/blog/2017/september/common-csrf-prevention-misconceptions
- https://github.com/righettod/poc-csrf/blob/master/src/main/java/eu/righettod/poccsrf/filter/CSRFValidationFilter.java
Hiç yorum yok :
Yorum Gönder