Selamun Aleyküm, Bu senaryoda oldukça popüler bir yöntemden bahsedeceğim arkadaşlar.
Senaryo için gerekçeler;
Kurbanı İyi Tanımak
Phishing
CSRF
Hediye Iphone Kazandınız!
Patronu Ahmet Bey'den maaşını EFT olarak alan saldırganımız, transferin GüvenBank isimli bir bankadan gerçekleştiğini görür ve başlar GüvenBank'ı incelemeye.
GüvenBank isimli güven vermeyen bankayı inceleyen saldırgan guvenbank.com sitesinde CSRF için bir korumanın olmadığını görür.
CSRF Nedir?
Cross Site Request Forgery (CSRF), saldırganın kendi hazırladığı zararlı bir web sitesi üzerinde kullanıcının bir takım tıklamalar yapmasını sağlayarak, başka bir domain’deki web sitesine kendine göre hazırladığı isteği post ettirmesini sağlamasıdır.
Ahmet Bey'in eski bir telefon kullandığını bilen saldırganımız Hediye Iphone Kazandınız! isminde sahte bir site oluşturup patronu Ahmet Bey'e phishing maili atar.
Maili gören Ahmet Bey daha önce bir arkadaşının internet çekilişleri sayesinde telefon kazandığını hatırlar ve bu sefer şansın kendi yüzüne güldüğüne inanır.
Hemen formu doldurmaya başlar;
Formu dolduran Ahmet Bey sevinç içinde gönder tuşuna bastığı sırada Samsung telefonuna gelen GüvenBANK bildirimi ile çılgına döner; “50.000 TL’lik EFT işleminiz gerçekleşmiştir”
Bu Nasıl Oldu?
Ahmet Bey'in bilmediği bir şey vardı; sayfanın kaynak HTML'i
Ahmet Bey o sırada guvenbank.com'da login durumda olduğu için geçerli bir authentication cookie’si vardı. Tarayıcı, isteğin hediyeiphone.com sitesinden gelmesine bakmaksızın, form action’daki hedef adresin guvenbank.com’a ait olması sebebi ile, guvenbank.com’a ait tüm cookie’leri istekle beraber gönderdi.
Tarayıcının bunu CORS olarak algılaması gerekmez mi?
HTML form action'lara istediğiniz domain'den bir hedef verebiliyorsunuz. Bu geçerli bir durum. Ama aynısını script'le yapmanız yasak. Javascript'le, sitenin kendi domaini dışında bir domaine HTTP POST göndermek tarayıcı tarafından engelleniyor. İstisna, hedef sitenin CORS’a izin vermiş olması.
CORS Nedir ?
Cross-Origin Resource Sharing, bir web sayfası üzerindeki bazı kaynakların, kaynağın sunulduğu alan adının dışındaki bir alan adından istenebilmesine izin veren bir mekanizmadır. Bir web sayfası, özgürce kökler arası resimleri, stil sayfalarını, betikleri ve videoları ekleyebilmektedir.
Sorunu anladığımızı var sayıyorum, peki çözüm nedir?
- Request verification için bir cookie oluştur ve içinde uzun bir token değeri tut.
- HTML içerisine, bu token ile uyumlu bir HTML hidden input verification token alanı koy.
- Request’i sunucuda ilk işlediğin noktada, POST içinde gelen Form Data’daki verification token değeri, verification cookie ile uyumlu değil ise bu bir saldırıdır. Akışı kes. Eğer uyumlu ise geçerli bir istektir.
Bu yöntemin temel mantığı, zararlı web sitesinin başka bir do main’e ait HTML’i okumasının mümkün olmaması, dolayısı ile HTML Form data içerisine verification token koyamamasıdır.
CSRF’den Korunmanı İçin 3 önlem
1) Token şart arkadașlar.
Her formda gizli bir token olacak. Sunucu da bu token’ı kontrol edecek.
Token yoksa = işlem yok.
Bu işin omurgası bu.
2) Cookie ayarı düzgün olması lazım.
SameSite=Lax (veya kritik işlerde Strict).
Böylece başka siteler sizin session cookie'nizi kullanamaz.
3) Kritik işlemlerde ekstra doğrulama.
Para gönderme, şifre değiştirme, mail değiştirme gibi şeylerde
– SMS,
– şifre tekrar,
– captcha
gibi bir engel koyarsınız.
Kısa, akılda kalıcı ve bilgilendirici bir şekilde anlatmaya çalıştım.
Okuduğunuz için teşekkürler.
Senaryo için gerekçeler;
Kurbanı İyi Tanımak
Phishing
CSRF
Hediye Iphone Kazandınız!
Patronu Ahmet Bey'den maaşını EFT olarak alan saldırganımız, transferin GüvenBank isimli bir bankadan gerçekleştiğini görür ve başlar GüvenBank'ı incelemeye.
GüvenBank isimli güven vermeyen bankayı inceleyen saldırgan guvenbank.com sitesinde CSRF için bir korumanın olmadığını görür.
CSRF Nedir?
Cross Site Request Forgery (CSRF), saldırganın kendi hazırladığı zararlı bir web sitesi üzerinde kullanıcının bir takım tıklamalar yapmasını sağlayarak, başka bir domain’deki web sitesine kendine göre hazırladığı isteği post ettirmesini sağlamasıdır.
Ahmet Bey'in eski bir telefon kullandığını bilen saldırganımız Hediye Iphone Kazandınız! isminde sahte bir site oluşturup patronu Ahmet Bey'e phishing maili atar.
Maili gören Ahmet Bey daha önce bir arkadaşının internet çekilişleri sayesinde telefon kazandığını hatırlar ve bu sefer şansın kendi yüzüne güldüğüne inanır.
Hemen formu doldurmaya başlar;
Formu dolduran Ahmet Bey sevinç içinde gönder tuşuna bastığı sırada Samsung telefonuna gelen GüvenBANK bildirimi ile çılgına döner; “50.000 TL’lik EFT işleminiz gerçekleşmiştir”
Bu Nasıl Oldu?
Ahmet Bey'in bilmediği bir şey vardı; sayfanın kaynak HTML'i
Ahmet Bey o sırada guvenbank.com'da login durumda olduğu için geçerli bir authentication cookie’si vardı. Tarayıcı, isteğin hediyeiphone.com sitesinden gelmesine bakmaksızın, form action’daki hedef adresin guvenbank.com’a ait olması sebebi ile, guvenbank.com’a ait tüm cookie’leri istekle beraber gönderdi.
Tarayıcının bunu CORS olarak algılaması gerekmez mi?
HTML form action'lara istediğiniz domain'den bir hedef verebiliyorsunuz. Bu geçerli bir durum. Ama aynısını script'le yapmanız yasak. Javascript'le, sitenin kendi domaini dışında bir domaine HTTP POST göndermek tarayıcı tarafından engelleniyor. İstisna, hedef sitenin CORS’a izin vermiş olması.
CORS Nedir ?
Cross-Origin Resource Sharing, bir web sayfası üzerindeki bazı kaynakların, kaynağın sunulduğu alan adının dışındaki bir alan adından istenebilmesine izin veren bir mekanizmadır. Bir web sayfası, özgürce kökler arası resimleri, stil sayfalarını, betikleri ve videoları ekleyebilmektedir.
Sorunu anladığımızı var sayıyorum, peki çözüm nedir?
- Request verification için bir cookie oluştur ve içinde uzun bir token değeri tut.
- HTML içerisine, bu token ile uyumlu bir HTML hidden input verification token alanı koy.
- Request’i sunucuda ilk işlediğin noktada, POST içinde gelen Form Data’daki verification token değeri, verification cookie ile uyumlu değil ise bu bir saldırıdır. Akışı kes. Eğer uyumlu ise geçerli bir istektir.
Bu yöntemin temel mantığı, zararlı web sitesinin başka bir do main’e ait HTML’i okumasının mümkün olmaması, dolayısı ile HTML Form data içerisine verification token koyamamasıdır.
CSRF’den Korunmanı İçin 3 önlem
1) Token şart arkadașlar.
Her formda gizli bir token olacak. Sunucu da bu token’ı kontrol edecek.
Token yoksa = işlem yok.
Bu işin omurgası bu.
2) Cookie ayarı düzgün olması lazım.
SameSite=Lax (veya kritik işlerde Strict).
Böylece başka siteler sizin session cookie'nizi kullanamaz.
3) Kritik işlemlerde ekstra doğrulama.
Para gönderme, şifre değiştirme, mail değiştirme gibi şeylerde
– SMS,
– şifre tekrar,
– captcha
gibi bir engel koyarsınız.
Kısa, akılda kalıcı ve bilgilendirici bir şekilde anlatmaya çalıştım.
Okuduğunuz için teşekkürler.


