Ders 7 - Cross Site Request Forgery (Low Level)
Bu yazıda DVWA adlı web uygulamasının içerisinde bulunan bir sayfanın güvenlik zafiyetinden faydalanarak Cross Site Request Forgery saldırısında bulunulacaktır.

Konuya giriş yapmadan önce bu yazının dahil olduğu dvwa eğitim serisindeki tüm makalelere şu adresten


bu yazının ilintili olduğu dvwa eğitim serisindeki diğer makalelere ise şu adreslerden


erişebilirsiniz.

Dersin Hedefi

DVWA'da oturum açmış kurbanın şifresini kurban fark etmeden değiştirin.

Cross Site Request Forgery Nedir?

Cross-Site Request Forgery, yani sitelerarası talep sahtekarlığı saldırısı uzaktan bir form tag'ını kurbana submit'leştirmeye denir. Mesela saldırganın online bir bankacılık işlemi için kullanılan parametrelere sahip linki kurbana eposta yoluyla gönderdiğini varsayalım. Bu durumda kurban mail'i görüntülediği sıralarda ilgili bankaya ait siteye bağlı vaziyette ise istemeden bankanın bir form'unu submit'lemiş olur ve mesela saldırgana para transfer etmiş olur. Tüm bu süreci anlamlandırabileceğiniz örnek bir sonraki başlıkta bahsedilmiştir.

Cross Site Reqeust Forgery Nasıl Yapılır?

İlk olarak bu dersin linkine dikkat edin:

http://localhost/dvwa/vulnerabilities/csrf/

Ardından ekrandaki metin kutularını doldurun:





Change butonu ile form'u submit'leştirdiğinizde linkin dönüştüğü son hale bakın:

http://localhost/dvwa/vulnerabilities/csrf/?
password_new=deneme&password_conf=deneme
&Change=Change#


Görüldüğü üzere DVWA'nın bu sayfası şifre değişikliğini "GET" methodu ile yapmaktadır. Bunu bilen saldırgan yukarıdaki linke bakarak şifre kısımlarına kendi belirlediği şifreleri koyabilir, ardından bu linki <img'nin içine gömüp bir eposta hazırlayabilir ve kurbana yollayabilir. Bunun üzerine kurban, saldırgandan gelen postayı görüntülediğinde eğer DVWA'da oturumu o sıralar açık vaziyette ise şifresini istemeden değiştirmiş olur. Hem de fark etmeden... Böylesi bir senaryoda saldırgan aşağıdaki gibi bir eposta içeriğini kurbana yollayabilir:



TEBRİKLER, 10$ KAZANDINIZ

Bravo size ^^



Yukarıdaki <img> tag'ına dikkat edin. <img> tag'ı resim linki almalıyken bunun yerine saldırganın emelleri doğrultusunda hazırlanmış bir link almıştır. Bu link kurbanın şifresini "deneme" olarak değiştirecektir. Aklınıza şöyle bir soru gelmiş olabilir: Neden <img> tag'ı kullanıldı? Bunun nedeni <img> tag'ının aldığı linke kullanıcıdan hiçbir müdahale istemeden otomatikmen talep gönderiyor oluşundandır. Yani düşünün: Bir web sitesinde siz resim görüntülerken genellikle "resmi görüntüle" gibi butonlara basmazsınız. Resim kendiliğinden görüntülenir. İşte bunun nedeni <img> tag'ının otomatik bir şekilde resmi sunucudan istiyor oluşundandır. Saldırgan <img> tag'ının bu otomatik talep gönderme özelliğinden faydalanarak resim linki yerine kendi saldırı linkini koymuştur. Böylelikle kurban epostayı görüntülendiğinde <img> tag'ı otomatikmen kendinde olan linke resim alabilmek için talepte bulunacaktır. Sonuçta bu bir resim linki olmadığı için cevap olarak resim gelmeyecektir. Fakat sonuçta talep yapılmış olacaktır. Yani sanki kurban, saldırganın gönderdiği linki tarayıcısının adres çubuğuna girip ENTER'lamış gibi olacaktır. Diğer bir ifadeyle sanki kurban DVWA'nın şifre değiştirme sayfasında yer alan formu eliyle submit'lemiş gibi olacaktır. Saldırgan kurbanın epostadan kuşkulanmaması için <img tag'ına genişlik ve yükseklik olarak 1 değerini koymuştur (width="1" height="1") Böylece <img> tag'ı resim alamadığında resim görüntülenemiyoru ifade etmek için göstereceği çarpı işaretinin görüntülenmesi engellenmiş olacaktır ve kurban hiçbir şeyden haberdar olamayacaktır.

DVWA'da oturumunuz açık vaziyette dursun ve yukarıdaki eposta içeriğini bir html dosyasına yapıştırın. Ardından html dosyasını tarayıcınızın yan sekmesinde görüntüleyin. Artık şifreniz değişmiş bulunmaktadır. Bunu görmek için DVWA'nın sol alt köşesindeki Logout butonuna tıklayın ve eski şifreniz ile giriş yapmayı deneyin. Giremeyeceksiniz. Epostada kullandığınız linkin parametresinde yer alan yeni şifre ile giriş yapabilirsiniz.

NOT: Saldırı esnasında bir eposta hizmeti fark ettiyseniz kullanılmadı. Bunun yerine eposta içeriğini biz kendi tarayıcımızda görüntüleyerek saldırıyı simule ettik. Bunun nedeni popüler eposta hizmeti veren servislerin bu tip saldırıları bertaraf ediyor oluşundandır.

[!] UYARI [Modern Tarayıcılarda İşe Yaramaz]

Cookie'lerin cross site request forgery saldırılarında kullanılmasının önüne geçmek için SameSite adı verilen bir bayrak geliştirilmiştir. Bu bayrak 3 değer alabilmektedir. Bunlardan birisi Lax, diğeri Strict ve üçüncüsü none'dır.

  • Lax

    SameSite=Lax olarak belirlendiğinde web tarayıcı siteler arası alt isteklerde çerezleri göndermez. Örneğin web uygulama resimleri veya iframe'leri siteler arası istekle yüklerken çerezleri göndermez. Böylece olası csrf saldırıları önlenmiş olur. Fakat örneğin web uygulamadaki bir link ile bir başka web uygulamaya giderken siteler arası istekte çerezleri gönderir. Bu nedenle Lax esnek olan kuraldır.

  • Strict

    SameSite=Strict ayarı web tarayıcıda çerezler hangi web uygulamaya aitse sadece o web uygulamada kullanılabilir yapar. Yani third-party (üçüncü taraf) web uygulamalara çerez gönderimi tamamen yasaklanır. Sadece first-party (uygulamanın kendisine) çerez gönderimine izin verir.

  • None

    SameSite=None belirlendiğinde siteler arası isteklerde çerezlerin gönderilmemesi noktasında hiçbir sınırlama yapılmaz. Bu da csrf saldırıları ile siteler arası istekler yaparak çerezleri kullanma ve zafiyetli web uygulamalarda kurbanların oturumunda aksiyonlar almaya meydan verir.

Modern web tarayıcılarda son gerçekleşen güncellemeler neticesinde SameSite ayarı varsayılan olarak None iken Lax yapılmıştır. Önceleri web uygulama sahipleri SameSite'ı Lax veya Strict tanımlayarak CSRF'den korunuyorlardı. Şimdi bu ayarı varsayılan olarak web tarayıcılar yürürlüğe koymuştur. Bu nedenle web uygulama geliştiricileri SameSite ayar sıkılaştırmasını girmeyi unutmuş olsa bile (açıklığa sahip olsa bile) web tarayıcıların koruma kalkanı sayesinde koruma altında olacaklardır.

Yukarıda anlatılan <img width=1 height=1 ile yapılan siteler arası istek modern web tarayıcılarda çerezleri yanına alamayacağı için csrf saldırısı başarısız olacaktır. CSRF saldırısı düzenlemenin yolu kapanmış gibi görünüyor. Fakat doğrusunu söylemek gerekirse durum aslında öyle değil.

  • Samesite=None şeklinde yanlış yapılandırmaya sahip bir web uygulamaya CSRF saldırısı halen düzenlenebilir. Çünkü SameSite=none ayarı modern tarayıcılardaki Lax ayarının üzerine yazılır ve web tarayıcıların bloklama işlemini boşa çıkarır.

  • SameSite=Lax şeklinde esnek yapılandırmaya sahip bir web uygulamaya konulacak girdi (<a href ile link) ile web uygulamaya CSRF saldırısı halen düzenlenebilir. Çünkü Lax ayarı link ile başka web uygulamaya gidilirken çerezlerin de gitmesine müsaade etmektedir.

  • Modern web tarayıcıların eski sürümlerini kullanan azınlık kitle için web uygulamalara SameSite ayarı girmemişlerse halen csrf saldırısı düzenlenebilir. Çünkü eski web tarayıcılarda samesite varsayılan olarak none durumdadır. Web uygulamada da SameSite güvenlik ayarı girilmemişse csrf saldırılarına karşın tamamen savunmasız olacaktır. Her ne kadar modern web tarayıcılar SameSite'ı Lax olarak ayarlasa da yine de web uygulama tarafında SameSite ayarı Lax veya Strict olarak girilmelidir. Böylece eski web tarayıcı kullanan kullanıcı kitlesini de csrf saldırılarından korumuş oluruz. Onları da koruma altına almış oluruz.

Yukarıda anlatılan <img width=1 height=1 ile csrf saldırı tekniğini eski bir web tarayıcıda (örn; Ubuntu 14.04 LTS Desktop işletim sisteminde varsayılan olarak inebilen Chromium web tarayıcıda) işe yarar şekilde kullanabilirsiniz. Eski Chromium web tarayıcıda eposta iletisini görüntülediğinizde yan sekmedeki oturumu açık dvwa uygulamasının parolası değişmiş olacaktır. Veya eski web tarayıcı yerine modern web tarayıcılarda csrf nasıl yaparız buna bir bakalım.

Cross Site Request Forgery Modern Web Tarayıcılarda Nasıl Yapılır?

CSRF saldırılarını modern web tarayıcılarda yapabilmek için zafiyetli web uygulamada csrf koruması olmayan işlem yapan bir link belirlenir. Bu link sosyal mühendislik yoluyla email veya sosyal platformlar üzerinden paylaşılır ve linke tıklayanlara eğer gittikleri uygulamada halihazırda oturumları açıksa bir işlem yaptırılmış olunur.

DVWA csrf zafiyetli sayfaya bir göz atalım.

http://10.0.2.18/dvwa/vulnerabilities/csrf/

Ekrandaki metin kutularını doldurun:





Change butonu ile form'u submit'leştirdiğinizde linkin dönüştüğü son hale bakın:

http://10.0.2.18/dvwa/vulnerabilities/csrf/?
password_new=deneme&password_conf=deneme
&Change=Change#


Görüldüğü üzere DVWA'nın bu sayfası şifre değişikliğini "GET" methodu ile yapmaktadır. Saldırgan bu linke bakarak şifre kısımlarına kendi belirlediği şifreleri koyabilir, ardından bu linki sosyal mühendislik yoluyla çeşitli platformlara koyabilir.

X Forumunda Bir İleti:

XYZ kodlu hatanın cevabı aşağıdaki linktedir:

<a src="http://10.0.2.18/dvwa/vulnerabilities/csrf/?password_new=deneme123&password_conf=deneme123&Change=Change#">XYZ Kodu Hatasının Çözümü</a>





Bu linki yan sekmede görüntüleyip tıkladığında csrf saldırısı yaşanmış olur.





Kullanıcı zararlı linke tıkladığında yaşanan durumu sersemleyip algılayamazsa, dikkatinden kaçarsa veya önemsemezse fark etmeden şifresini değiştirmiş olacaktır.





Bu şekilde kurbanlara csrf zafiyetli web uygulamalarda aksiyonlar aldırtılabilir.

Sonuç

Yukarıda bahsedilen yöntemle şifre değiştirmenin dışında daha etkili saldırılar da yapılabilir. Mesela bu yöntem para transferi için GET methodunu kullanan online bankacılık sitelerinde de kullanılabilir. <img tag'ı ile veya <a tag'ı ile url'nin para ve transfer yap parametrelerine belli bir miktar para ve saldırganın kendi hesap bilgisi konularak kurbanın ruhu duymadan para transferi gerçekleştirilebilir. Fakat popüler ve global bankalar böyle açıklıklara artık sahip değiller. Ayrıca email hizmeti sunan hotmail, gmail gibi popüler servisler <img> tagının usülsüzce kullanımı konusunda önlemler almışlardır. Mesela gmail aldığı img tag'ını kendi sunucusunda değerlendiriyor ve img tag'ının resim üretmediğini tespit etiğinde img'nin src attribute'una kendi url'sini yerleştirerek eposta alıcısına postayı o şekilde sunuyor. Böylelikle kurban saldırıyı atlatmış oluyor. Bu sakıncalı URL'yi ziyaret eden Google sunucusu ise normal bir kullanıcı gibi sitelerde gezip oturum açmayacağı için gelen saldırıdan etkilenmiyor. Dolayısıyla img tag'ının bu kaydadeğer kullanımı popüler eposta servis sağlayıcıları için geçerli değildir. Ancak a tag'ı ile halen popüler eposta servis sağlayıcıları üzerinden csrf saldırıları düzenlenebilir. Ayrıca yeni yetme email servislerinde eğer önlem alınmamışsa img ile csrf saldırısı halen düzenlenebilir.

CSRF saldırısı ile parola değiştirme dışında yapılabileceklere ilave olarak kurbanın zafiyete sahip web uygulamasındaki hesabında yer alan eposta adresini değiştirme (böylece hesabı ele geçirmeye dönük şifre reset'lemeyi umma), kurban adına zafiyete sahip web uygulamasında absürt bir ileti gönderilme (böylece kurbanı belki kötü bir duruma düşürme) ve benzeri örnekler verilebilir.

Bu gösterilen csrf saldırısı temel bir uygulamadır. Bu uygulamayı saldırganın çeşitli sayıda saldırı kodunu epostaya veya bir sosyal platforma gömerek gerçekleştirdiğini hayal edebilirsiniz. Yani eposta içerisinde veya sosyal platformlar içerisinde csrf açığı olan birden fazla web uygulamasına (popüler teknoloji forumlarına, popüler oyun forumlarına, popüler portallere) dönük aksiyon aldırtma img / a etiketleri veya birden fazla aksiyon aldırtma img / a etiketleri yer alabilir. Bu şekilde birden fazla (örn; onlarca) <img etiketi ile veya <a href linki ile saldırganlar kurbanların bu siteleri kullanıyor olduğu varsayımından hareketle başarılı olma şanslarını arttırabilirler.

Ekstra [Eski Web Tarayıcılar İçin]

Piyasada Zimbra adıyla öne çıkan açık kaynak bir eposta servisi üzerinden csrf saldırısını uygulayalım ve bu eposta içeriğinin gerçekten işe yarayıp yaramadığını test edelim. Öncelikle (filtreleme mekanizmaları iyi çalışmayan) bu eposta servisiyle / uygulamasıyla zararlı kod içeren (Tebrikler 10$ kazandınız.... diyen içerekteki) epostayı oluşturalım. Not: Muhtemel odur ki eposta içeriğini saldırgan daha akıllıca süslemeyi deneyebilir. Böylece kurbanların epostaya tıklama ve görüntüleme dürtüleri üzerinden sonuca ulaşmayı deneyebilir.

Aşağıda örnek bir eposta servisi üzerinden eposta oluşturma ekranı gösterilmiştir.





Eposta servisinin eposta içeriği doldurma bölgesine metin nitelikte veri doldurma yerine html veri koyabilmek için eposta servisinin seçenek olarak sunduğu "Kaynak Kod" olanağından faydalanılır.





Daha sonra kaynak kod bölümüne zararlı kod gömülür.





Pencereye Tamam dendiğinde kaynak kod, eposta metin bölümüne gömülecektir ve görünüm olarak sadece html verinin oluşturduğu çıktı ekrana gelecektir. Gönder butonu ile eposta kurbana gönderilir.





Örneğin yine aynı filtreleme mekanizması iyi çalışmayan eposta servisiyle / uygulamasıyla kurban, epostayı almış olsun.





Kurban epostayı açmadan önce, burada saldırının işe yaraması noktasında bir başka gereksinime ihtiyaç vardır. O da kurbanın tarayıcıda eposta servisini görüntülerken yan sekmesinde Cross Site Request Forgery zafiyetine sahip web uygulamasını da barındırıyor olmasıdır. Burada örnek olarak DVWA uygulaması kullanılmaktadır.





Kurban epostayı açmadan önce yan sekmedeki Cross Site Request Forgery açığına sahip web uygulamasında surf'ünü dilediğince yaparken







veya başka yan sekmelerde takılırken bir süre sonra eposta servisinin olduğu sekmeye geldiğinde ve gelen zararlı postayı açtığında o sırada Cross Site Request Forgery zafiyetine sahip web uygulaması halen yanda açık olduğundan




1



2


saldırı gerçekleşir. Böylelikle kurban farkına dahi varmadan yan sekmedeki sitede bir işlem yapmış olacaktır. Burada csrf açığı olan web uygulaması ve bu açıklığı barındıran noktası gereği kurbana sadece şifre değiştirttik. O bilmese de... Eğer csrf açığı olan web uygulamasında başka csrf açıklığı barındıran noktalar da varsa o zaman yapılabileceklerin niceliği ve niteliği o kadar saldırgan nezdinde artacaktır.

Not:
Örnek olarak kullanılan eposta istemcisi resim içerikli postadaki resimlerin görüntülenmesini onaylıyor musun onaylamıyor musun tarzı bir vurguda bulunmaktadır. Bu bir önlemdir. Fakat yeterli değildir. Çünkü burada kullanıcıya bir anlamda CSRF saldırısını yiyip yememe seçimi sunulmaktadır. Bu riski, kullanıcıya sunmadan esasında eposta hizmetinin bazı filtrelemelerle minimize etmesi gerekirdi. Fakat filtreleme mekanizması iyi çalışmadığından risk olduğu gibi kullanıcılarına gitmektedir.


Kurban, ekranında hiçbir hareket görmese de saldırıyı yemiş olur ve yanda açık olan Cross Site Request Forgery zafiyetine sahip web uygulamasındaki hesabı zararlı postada ne yap deniyorsa onu farkına varmadan yapmış olur. Bu DVWA uygulamasında biz kurbanın şifresini değiştirme form'unu uzaktan sessizce kendi belirlediğimiz şifre ile submit'ledik (yani submit'lettirdik). Fakat bu yolla yapılabilecekler Cross Site Request Forgery zafiyetine sahip web uygulamasının yetenekleri ölçüsünde arta da bilir azala da bilir. Bir uygulama ne kadar çok Cross Site Request Forgery zafiyetine sahip talep alma ve sunucuya gönderme noktası barındırıyorsa saldırgan o kadar çok şey yapabilir.

Saldırı sonrası kurban tekrar yan sekmedeki Cross Site Request Forgery zafiyetine sahip web uygulamasına (örn; bir forum olabilir bu) geçip halen sorunsuzca surf'ünü yapabilir.









Fakat Logout (çıkış) yaptığında, daha önce görüntülediği zararlı posta kurbanın zafiyete sahip web uygulamasındaki şifresini değiştirdiği için tekrar giriş yapamayacaktır.




Kurban CSRF açığına sahip web sitesindeki
hesabından çıkış yapar



Çıkış yapılmıştır.



Kurban belli bir süre sonra uygulamaya
tekrar giriş yapmak ister.




Görüldüğü üzere giriş başarısızdır. Çünkü daha önce görüntülediği zararlı eposta onun kullanmakta olduğu uygulamadaki hesabının şifresini değiştirmiştir.





Eposta içeriğine gömülen kodda şifre "deneme" olarak değiştirilsin denmişti. Bu nedenle şifre olarak "password" yerine saldırganın belirlediği "deneme" girildiğinde





oturum açılabilecektir. Böylece CSRF zafiyeti yoluyla kurbanlara sessiz sedasız aksiyon aldırtılabilir.

Yararlanılan Kaynak:

Bu yazı 16.01.2016 tarihinde, saat 14:58:54'de yazılmıştır. 24.03.2025 tarihi ve 03:40:17 saatinde ise güncellenmiştir.
Yazar : Hasan Fatih ŞİMŞEK Görüntülenme Sayısı : 4172
Yorumlar
Yorum
Yani mail sunucularından göndersek manipule etmiş oluruz değil mi ? IMG tagı çalışır değil mi ?
Bu yorum 17.10.2016 tarihinde, saat 13:16:45'de gönderilmiştir.
Mehmet
Abi bu ders çok temel kalmış. :( Medium ve High level' da anlatır mısın?
Bu yorum 04.08.2018 tarihinde, saat 11:56:47'de gönderilmiştir.
Hasan Fatih ŞİMŞEK
Merhaba Mehmet, hevesini anlıyorum. Ancak haftaiçleri çalışmaktayım ve haftasonları da kafa tatili yapıyorum. Durum gerçi artık biraz değişti. Uzun bir aradan sonra artık haftaiçleri bir günümün belli bir vaktini bloga harcayacağım . O nedenle talep ettiğin makaleleri belki de öncelik sırasına alıp yayınlayabilirim. İyi çalışmalar.
Bu yorum 13.08.2018 tarihinde, saat 11:21:22'de gönderilmiştir.
Hasan Fatih ŞİMŞEK
Diğer arkadaş, mail sunucudan gönderdiğinde de başarılı olursun. Ancak popüler mail servisleri (hotmail,gmail,yahoo gibi) bu saldırıları berbataraf ettiğinden onlarda bu teknikle başarılı olamazsın. Burada anlatılan teknik bu saldırı türünün bir örneği ve yeni yetme mail servislerinde işe yaraması muhtemel.
Bu yorum 27.08.2018 tarihinde, saat 08:41:01'de gönderilmiştir.
Yorum Ekle
*
* (E-posta adresiniz yayınlanmayacaktır.)
*
*

#Arşiv


#Giriş

ID :
Şifre :