Cross-Site Request Forgery (CSRF) Nedir? CSRF Saldırılarına Genel Bir Bakış
Cross-Site Request Forgery (CSRF), web sitelerinde güvenlik açığı yaratan bir tür siber saldırıdır.
Siteler Arası İstek Sahteciliği anlamına gelen CSRF sizin internet üzerindeki bir siteye önceden giriş yapmış olmanızı ve sitenin sizin oturumunuz açıkken gelen istekleri güvenilir kabul etmesini kötüye kullanır. One-click attack veya session riding olarak da bilinen saldırı, sizin farkında olmadığınız işlemleri gerçekleştirir. Örneğin siz bir bankacılık sitesinde oturum açık bıraktığınızda, saldırgan sizin haberiniz olmadan başka bir hesaba para transfer etmenize neden olan bağlantıyı gönderebilir.
CSRF süreci, zararlı bir e-posta linki tıklamak ya da zararlı web sitesini ziyaret etmek gibi basit bir eylemle başlar. Zararlı bağlantı, sizin bilginiz dışında tarayıcınızı kullanarak, daha önce oturum açmış olduğunuz web uygulamasına otomatik istekler gönderir. İstekler arasında finansal işlemler, şifre değişiklikleri, hesap ayarlarında değişiklik yapma gibi eylemler bulunabilir. Mesela saldırganlar, kullanıcının sosyal medya hesaplarındaki e-posta adresini veya şifresini değiştirecek istekler gönderebilir. Ardından kişi listesine onun adına mesajlar atarak dolandırıcılık yapabilir.
Tarihin en büyük çaplı CSRF saldırılarından biri 2019 yılında OAuth protokolü üzerinden gerçekleşti. Protokol üzerinden yapılan CSRF saldırısı, OAuth kullanan Facebook ve Google gibi büyük teknoloji şirketlerine büyük zarar verdi. Saldırganlar, hedeflenen kullanıcıların oturum açma süreçlerini manipüle ederek, zararlı scriptlere yetki verilmesini sağladı. Bu, tüm kullanıcıların bilgilerine erişim izni anlamına geliyordu.
Cross-Site Request Forgery (CSRF) saldırısı, diğer web saldırı türlerinden farklı mekanizmalar kullanarak, kullanıcıların bilgileri üzerinden yetkisiz işlemler yapılmasına olanak tanır. En büyük fark zaten oturum açılmış site üzerinden kullanıcının bilgisi olmadan işlemler yapmasıdır. Doğrudan ilgili veri tabanına dair hedefleme yapmaz. Örnek vermek gerekirse, XSS hedef web sayfasına kötü amaçlı betikler ekler. CSRF ise, kullanıcının tarayıcısını kullanarak kötü niyetli istekler gönderir. Her iki saldırı tipi bağımsız olarak da oldukça etkili iken birlikte daha da güçlü olurlar. Bunun en büyük örneği 2005 MySpace sızıntısıdır.
2005 yılında MySpace'te Samy Kamkar tarafından yaratılan Samy Worm, iki saldırının etkilerini dramatik şekilde göstermiştir. Kamkar kendi MySpace profil sayfasına, ziyaretçilerin tarayıcıları üzerinde otomatik olarak çalışan ve kendisini kullanıcıların arkadaş listesine ekleyen JavaScript kodunu yerleştirmişti. Daha da önemlisi, bu kod aynı zamanda ziyaret eden kullanıcıların profillerine kopyalanarak ilerledi, böylece virüs hızla yayıldı. Sonuçta 20 saat içinde bir milyondan fazla kullanıcı etkilenmiştir.
CSRF Saldırı Türleri
CSRF saldırılarını anlamak için, saldırıların farklı tiplerini ve her birinin nasıl işlediğini incelemek yararlı olabilir. İşte en yaygın CSRF saldırı türleri aşağıdaki gibi sıralanır:
GET tabanlı CSRF saldırıları
GET tabanlı CSRF, zararlı bir isteği tetiklemek için HTTP GET isteğini kullanır. URL üzerinden veri gönderilerek gerçekleştirilir. Örneğin, kullanıcı bağlantıya tıkladığında, kullanıcının bilgisi olmadan eylemi tetikleyen bir URL yoluyla bir istek gönderilebilir. İstekler, genellikle kullanıcı ayarlarını değiştirmek, mesaj göndermek veya hesap bilgilerini güncellemek gibi işlemler için kullanılabilir.
Örneğin bir fotoğraf paylaşım sitesi kullanıcının profil resmini güncellemek için GET isteği kullanır. URL şöyledir: http://photosite.com/updateAvatar?imageurl=newimage.jpg. Bir saldırgan, popüler bir forumda "Yılın en iyi fotoğrafı burada!" başlıklı zararlı bir link yayınlar. Kullanıcı bu linke tıkladığında, profil resmi farkında olmadan saldırganın belirlediği bir resimle değiştirilir.
Kod Çıktısı:
Ziyaretçilerin Gördüğü:
Yılın en iyi fotoğrafı burada!
POST tabanlı CSRF saldırıları
POST tabanlı CSRF, saldırganların, internet üzerindeki formları kullanarak gizlice zararlı işlemler yapmasına olanak tanıyan bir tür siber saldırıdır. Saldırganlar kötü amaçlı web sayfası hazırlayarak bir kullanıcının bilgisi olmadan form gönderimi yapar. Form gönderimleri, genellikle finans işlemleri gibi önemli bilgilerin gönderildiği ya da güncellendiği işlemlerde kullanılır. Veriler tipik olarak HTTP POST istekleri ile gönderilir ve form elementlerini içeren HTML belgeleri üzerinden kullanıcı girişi ile başlatılır.
Örneğin, kullanıcıdan banka hesabından para transferi yapmak için form doldurması istenir. Saldırgan, kullanıcıya bir e-posta gönderir ve bu e-postada, otomatik olarak para transferi yapılmasını sağlayacak bir form bulunur.
JSON tabanlı CSRF saldırıları
Modern web uygulamalarında AJAX ve JSON kullanımının artmasıyla, JSON tabanlı CSRF saldırıları da görülmeye başlamıştır. Saldırganlar, AJAX çağrıları yoluyla JSON verilerini içeren istekler gönderir. Zafiyet, web uygulamasının CORS (Cross-Origin Resource Sharing) politikalarının yanlış yapılandırılması durumunda gerçekleşebilir.
Bir sosyal ağ uygulaması, kullanıcıların profil ayarlarını JSON üzerinden AJAX ile günceller. Saldırgan, bir blogda kötü niyetli JavaScript kodu yerleştirir. Bu kod ziyaretçilerin sosyal ağdaki profil bilgilerini gizlice değiştirir. Kullanıcı, blog sayfasını ziyaret ettiğinde, arka planda AJAX isteği çalışarak kullanıcının bilgisi dışında profil bilgileri güncellenir.
Flash tabanlı CSRF saldırıları
Flash uygulamaları, geçmişte web tarayıcıları üzerinden çeşitli oyun ya da medya oynatıcı içerikleri yürütmek için kullanılırdı. Flash tabanlı CSRF, Adobe Flash gibi platformlar aracılığıyla gerçekleştirilir ve ana Flash uygulamasının kötü niyetli yapılandırılmasıyla olur. Siz o oyuna tıkladığınızda arka planda çalışan CSRF, bilginiz olmadan arka planda HTTP istekleri gönderebilir. Flash'ın modern web geliştirme pratiklerinde kullanımı azaldığı için bu tür saldırılar azalmıştır, fakat geçmişte önemli bir tehdit unsuru oluşturmuşlardır.
Örneğin, online oyun platformları, oyuncuların ayarlarını güncellemek için Flash uygulamalarını kullanır. Saldırgan, bu Flash uygulamasına benzer görünümlü kötü niyetli Flash uygulaması tasarlayarak oyun forumuna yükler. Oyuncular kötü niyetli Flash uygulamasını indirip çalıştırdıklarında, arka planda oyun içi kredi kartı bilgileri ve ayarları değiştirilir.
CSRF Saldırılarının Potansiyel Tehlikeleri
Cross-Site Request Forgery saldırılarının, yol açabileceği potansiyel tehlikeler şunlardır:
- Yetkisiz işlem yapmak CSRF saldırılarının temel kullanım amacıdır. Bilginiz dışında hesap ayarlarınızı değiştirmek, şifrelerinizi yenilemek gibi işlemlerle saldırgan sizin adınıza hareket edebilir.
- Online bankacılık veya e-ticaret sitelerine yapılan CSRF saldırıları, onayınız olmadan finansal hesaplarınızdan para akışı olmasını yapılmasına sebep olabilir.
- CSRF saldırıları, kişisel bilgilerinizin değiştirilmesi veya çalınması için araç olarak kullanılabilir. Kimlik hırsızlığıyla suç işleme gibi daha geniş çapta güvenlik sorunlarına yol açabilir.
- Bir web sitesinin CSRF saldırılarına karşı savunmasız olması, ziyaretçileri arasında güven kaybına neden olur. Siteye olan trafik azalması ve uzun vadede işletme itibarının zarar görmesiyle sonuçlanır.
- CSRF’ye izin veren güvenlik ihlalleri ve veri sızıntıları, işletmeler için yasal sonuçlar doğurur. Yasalar karşısında işletmeler, kullanıcı verilerini koruma konusunda net yükümlülüklere sahiptir. Güvenlik ihlalleri sonucunda, işletmeler yasal cezalara çarptırılabilir ve kullanıcılara karşı tazminat davalarıyla karşılaşabilirler.
- Eğer CSRF saldırıları iç sistemler veya üçüncü taraf hizmetlerle entegre olan platformlarda gerçekleşirse, bu sistemlerin de zarar görmesi mümkündür. Bu tür bir saldırı, sistemler arası işlemleri bozabilir ve geniş çapta teknik sorunlara neden olabilir.
CSRF Saldırılarından Korunma Yöntemleri
CSRF saldırılarına karşı korunmak, tüm web geliştiricileri için önemli bir önceliktir. CSRF saldırılarını önleme yöntemleri iki ana başlık altında incelenebilir: Sunucu Tarafı Önlemler ve İstemci Tarafı Önlemler.
Sunucu Tarafı Korunma Yöntemleri
Sunucu tarafı önlemler, arasında en bilineni anti-CSRF tokenlerinin kullanılmasıdır. Tokenlar, datanın güvenilir bir kaynaktan geldiğini doğrulamak için kullanılan benzersiz tanımlayıcılardır. Her kullanıcı oturumu için benzersiz bir token oluşturulur ve bu token, sunucu tarafında saklanan bir değerle eşleştirilir. Kullanıcı bir istekte bulunduğunda, bu token da istekle birlikte gönderilir ve sunucu tarafından kontrol edilir. Eğer token eşleşmezse, istek reddedilir, böylece kötü niyetli sitelerin kullanıcı adına istenmeyen işlemler yapması engellenir. Her bir tokenin tek tek doğrulanması gerektiği için bu işlem vakit alır.
Modern tarayıcılar, CSRF koruması sağlamak adına çerezler için kullanılan SamSite özelliğini destekler. Böylelikle çerezlerin yalnızca ilk taraf web siteleri tarafından kullanılmasını sağlar. SameSite=Lax veya SameSite=Strict ayarı, CSRF saldırı riskini büyük ölçüde azaltır. Fakat SamSite özelliği tüm tarayıcılar tarafından desteklenmeyebilir. Çok hassas işlemler için, özellikle finansal işlemler ve hesap ayarlarının değiştirilmesi gibi durumlar için ek doğrulama adımları eklemek faydalı olabilir.
Sunucu tarafında, gelen isteklerin Referer veya Origin HTTP başlıklarını kontrol etmek, isteklerin güvenilir kaynaklardan gelip gelmediğini belirlemek için kullanılabilir. Eğer başlık beklenen değerlerden birini içermiyorsa, istek reddedilebilir.
CSRF saldırılarının başarılı olabilmesi için genellikle XSS zafiyetlerinden faydalanılır. XSS saldırılarından korunmak, otomatik olarak CSRF saldırı riskini de azaltır. Bu nedenle kullanıcı girdilerinin uygun şekilde temizlenmesi ve kodlama yapılması önemlidir. Sıkı CORS politikaları, bazı geçerli iş kullanımlarını sınırlayabilir ve geliştiricilerin kaynaklar arası etkileşimlerini zorlaştırabilir.
İstemci Tarafı Korunma Yöntemleri
İstemci tarafı korunma yöntemleri, kullanıcıların çevrimiçi hizmetler kullanırken güvende olmalarını sağlamak için önemlidir.İstemci korumaları kullanıcıların cihazlarındaki tarayıcılar aracılığıyla uygulanır. JavaScript kütüphanelerinin kullanımı, uygulama güvenliğini artırarak isteklerin yalnızca güvenilir kaynaklardan yapıldığından emin olmanıza yardımcı olur.
Örneğin, node.js tabanlı uygulamalar için oldukça popüler bir middleware kütüphanesi olan csurf, Express.js gibi framework'lerle uyumlu şekilde çalışır. Bu kütüphane CSRF token'ları oluşturur ve bu token'ları doğrulayarak gelen isteklerin güvenliğini sağlar. CSURF, her form gönderiminde veya AJAX isteğinde kullanılabilecek bir token sağlar ve bu token sunucu tarafında doğrulanır.
Uygulayabileceğiniz diğer önlemler arasında sistemi kullanacak herkesin siber güvenlik konusunda eğitilmesi ve farkındalıklarının artırılmasıdır. Güvenli internet kullanımı konusunda bilinçlendirilmek zararlı bağlantılara tıklamaktan kaçınmalarını ve güvenli olmayan ağlara bağlanmamalarını sağlar. Sisteme ek güvenlik duvarları ekleyerek sisteminize sızmaya çalışan kişileri durdurabilirsiniz. Ek olarak düzenli web uygulama güvenlik taramaları yapmak, potansiyel zafiyetleri tespit ederek onları gidermede kritik rol oynar.
CSRF Saldırıları Nasıl Tespit Edilir ve Engellenir?
CSRF saldırılarının tespitinde en sık tercih edilen yöntem güvenlik açığı tespit araçlarıdır. Uygulamalar sistemleri tarayarak potansiyel zafiyetleri belirler. Örneğin Burp Suite web uygulama güvenlik testleri için kapsamlı bir platformdur. Otomatik ve manuel test seçenekleriyle, güvenlik açıklarını tespit ederek düzeltmeler için önerilerde bulunur.
Bir diğer seçenek olan OWASP ZAP kullanımı ücretsiz olmasıyla öne çıkar. Açık kaynaklı olan araç, deneme saldırıları yapma ve zayıf noktaları bulma konusunda oldukça etkilidir. Özellikle geliştirme sürecinin erken aşamalarında entegrasyon için uygundur.
Eğer işletmeniz adına CSRF güvenliği sağlamak isterseniz siz de Timus’un sunduğu Berqnet Firewall çözümünden faydalanabilirsiniz. Siber tehditlere karşı ekstra koruma duvarı sağlayan Berqnet Firewall ya da bulut tabanlı bir çalışma şekli yürütüyorsanız yine Timus’un sunduğu SASE çözümüyle ağ üzerindeki veri transferlerinizi koruma altına alabilirsiniz.
Kaynakça
- https://dergipark.org.tr/tr/download/article-file/401125
- https://en.wikipedia.org/wiki/Samy_(computer_worm)
- https://www.wired.com/2008/09/scripting-attacks-make-even-the-largest-sites-vulnerable/
- https://learn.microsoft.com/tr-tr/aspnet/web-api/overview/security/preventing-cross-site-request-forgery-csrf-attacks
- https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html#introduction
- https://levelup.gitconnected.com/bulletproofing-your-web-apps-a-deep-dive-into-csrf-security-with-node-js-and-redis-a1c9d8d4dacd
Sıkça Sorulan Sorular
Çerezlerin yalnızca ilk taraf isteklerde gönderilmesini sağlayan SameSite cookie özelliği, birçok CSRF saldırısını engelleyebilir. Ancak SameSite cookie özelliği, saldırının aynı siteden (first-party) gerçekleştiği veya saldırganın kullanıcı oturum bilgilerini başka yollarla ele geçirdiği durumlarda, SameSite özelliği yetersiz kalabilir.
JWT kullanan uygulamalarda CSRF saldırılarına karşı koruma, token'ın nasıl saklandığına bağlıdır. Eğer JWT çerezlerde saklanıyorsa, uygulamalar CSRF'ye karşı savunmasız olabilir. Bunun yerine JWT'nin Authorization header üzerinden gönderilmesi önerilir çünkü bu yöntem tarayıcının otomatik olarak çerezleri gönderme işlemine dayanmaz.
CSRF token'larının süresi uygulamanın gereksinimlerine ve güvenlik politikalarına göre değişebilir. Genellikle bir oturum boyunca geçerli olmaları önerilir. Oturum sonlandığında veya belirli bir süre sonra token'ın süresinin dolması güvenlik açısından iyi bir uygulamadır.
CSRF token'ları, güçlü bir rassal sayı üreteci kullanılarak oluşturulmalı ve en az 128 bit uzunluğuna erişmelidir. Token'lar, sunucu tarafında kullanıcı oturumu ile ilişkilendirilirek her kullanıcı isteği ile sunucu tarafından doğrulanır. Erişimi kısıtlanmış bir ortamda güvenle saklayabilirsiniz.
HTTP Referer başlığı her zaman güvenilir değildir. Kullanıcılar veya saldırganlar tarafından manipüle edilebilir, ve bazı kullanıcılar gizlilik nedeniyle bu başlığı devre dışı bırakabilir. Güvenlik önlemlerinde yalnızca Referer başlığına dayanmak yetersizdir.
CORS, bir kaynağın hangi kökenlerden (origins) gelen isteklere izin verdiğini belirler. CORS başlı başına bir CSRF koruması sağlamaz, ancak doğru yapılandırıldığında, yalnızca belirli kökenlerden gelen isteklerin kabul edilmesine izin vererek kötü niyetli sitelerin istek göndermesini engelleyebilir.
CSRF saldırılarına karşı kullanılan farklı token üretme algoritmaları arasında HMAC, gizli bir anahtar ve oturum bilgileri kullanarak benzersiz tokenlar üretir. SHA-256 ve SHA-512, güçlü hash fonksiyonları kullanarak güvenli tokenlar oluşturur. UUID, rastgele ve benzersiz tokenlar sağlar. CSPRNG ise kriptografik olarak güvenli rastgele sayılar kullanarak token tanımlar.
CSRF saldırılarını önlemek için çeşitli açık kaynak kütüphaneler bulunur. Örnekler arasında OWASP CSRFProtector, Ruby on Rails'in built-in CSRF koruması, Django'nun CSRF middleware'i bulunur. Kütüphaneler, uygulamalarınızı güvenli hale getirmek için otomatik olarak CSRF token'ları yöneterek doğrular.
Mobil uygulamalar genellikle tarayıcı tabanlı CSRF saldırılarına karşı daha az hassastır çünkü mobil uygulamalar çoğunlukla API çağrıları yapar ve çerezleri kullanmaz. Ancak mobil uygulamalar da CSRF benzeri saldırılara karşı dikkatli olmalıdır. Önlemler arasında, her istek için güvenlik token'ları kullanmak ve kullanıcının önemli işlemleri manuel olarak onaylaması gerektiren ek adımlar eklemek bulunur.