Merhabalar forum yöneticimiz @asil_ruh 'un başlatmış olduğu Hacking Senaryoları isimli içeriğe benimde bir katkımın olmasını istedim ve bu senaryoda oldukça popüler bir yöntemden bahsedeceğim.
Senaryo için gerekçeler;
Kurbanı İyi Tanımak
Phishing
CSRF
Senaryoyu dikkatlice, üşenmeden okuyun çünkü her işlemi tek tek anlattığım eğitici bir yazı olacak.
Çayınızı demlediyseniz başlıyorum.
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 domain’e ait HTML’i okumasının mümkün olmaması, dolayısı ile HTML Form data içerisine verification token koyamamasıdır.
Kısa, akılda kalıcı ve bilgilendirici bir şekilde anlatmaya çalıştım.
Okuduğunuz için teşekkürler.
Hiçbir Hakkı Saklı Değildir, Saklı Olsa Zaten İnternette İşi Yoktur, Çalıp Çırpmak Tamamen Serbesttir.
Senaryo için gerekçeler;
Kurbanı İyi Tanımak
Phishing
CSRF
Senaryoyu dikkatlice, üşenmeden okuyun çünkü her işlemi tek tek anlattığım eğitici bir yazı olacak.
Çayınızı demlediyseniz başlıyorum.
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 domain’e ait HTML’i okumasının mümkün olmaması, dolayısı ile HTML Form data içerisine verification token koyamamasıdır.
Kısa, akılda kalıcı ve bilgilendirici bir şekilde anlatmaya çalıştım.
Okuduğunuz için teşekkürler.
Hiçbir Hakkı Saklı Değildir, Saklı Olsa Zaten İnternette İşi Yoktur, Çalıp Çırpmak Tamamen Serbesttir.
Bu içeriği görmek için giriş yapın.