- 7 Tem 2013
- 8,220
- 4
- 709
Bu konuda yüzeysel olarak Cross-Site requested forgery'den bahsedeceğiz birkaç örnekle de yaygın CSRF zafiyetlerini açıklamaya çalışacağız. Tabi bu açıkların nasıl önlenebileceğini de anlatacağız konuya geçelim.
CSRF Nedir?
Saldırgan sitenin açığından faydalanarak siteye sanki o kullanıcıymış gibi erişerek işlem yapmasını sağlar. Bu güvenlik açığı; bir web tarayıcısı, bir web sayfasında yer alan betiklerin ikinci bir web sayfası üzerindeki veriye erişimine sadece bu iki sayfa aynı köke sahipse izin vermekte olan aynı kök politikasını çiğner.
Labler konunun altındadır.
Eğer zaten CSRF hakkında temel bilgiye sahipseniz yani temel konsepti falan biliyorsanız direkt pratiğe geçip konu sonundaki yorumlardan lablere gidebilirsiniz
CSRF saldırısının etkisi nedir?
Başarılı bir CSRF saldırısı gerçekleşirse saldırgan kurbanın yapmak istemediği şeyleri yapmasına neden olur yani mesela kurbanın hesabındaki mail adresini değiştirmesine sebep olabilir veya şifresini sadece mail olarak düşünmeyin para transferi bile yapmasına sebep olabilir. Duruma göre saldırgan kurbanın hesabı üzerinde %100 kontrole sahip olabilir eğer bahsettiğimiz bu kurbanın hesabı da yetkili bir hesapsa durum daha da vahimleşir. Çünkü uygulama verileri ve fonksiyonelliği tehlikeye girmiş olur.
CSRF nasıl çalışır?
CSRF saldırısının olması için 3 şarttan bahsedebiliriz:
Saldırganın kullanabileceği bir eylem olması gerekli:
Örneğin bu diğer kullanıcılar için izinleri değiştirme vb. bir şey olabilir. Ya da kullanıcıya özgü herhangi bir eylem olabilir (şifre değiştirme vb.)
Cookie tabanlı session handling:
Uygulama istekleri yapan kullanıcıyı tanımlamak için oturum çerezlerine güvenir. (session cookies) Çünkü kullanıcı isteklerini doğrulamak ve oturumları takip etmek için başka bir mekanizma yoktur.
Tahmin edilemeyen istek parametreleri olmamalı:
Eylemi gerçekleştiren istek saldırgan tarafından belirlenemeyen parametreler içermemeli. Örneğin saldırgan, bir kullanıcının şifresini değiştirmesine neden olduğunda saldırının başarıyla gerçekleşmesi için bu fonksiyon zafiyete sahip olmalıdır.
Mesela uygulama kullanıcının e-mail adresini değiştirmesini sağlayan bir fonksiyon içeriyor diyelim. Kullanıcı bunu yapmaya çalıştığında şu tarz bir HTTP isteği göndermiş olur:
Bu mail adresini değiştirme olayı saldırganın ilgisini çeker ve buna takiben saldırgan şifre resetlemeyi tetikleyecek ve kullanıcının hesabı üzerinde full kontrole sahip olacaktır.
Uygulama hangi kullanıcının isteği gönderdiğini belirlemek için bir session cookie (oturum çerezi) kullanır.
Saldırgan eylemi gerçekleştirmek için istek parametrelerinin değerlerini kolayca belirleyebilir. Böylece saldırgan bir web sayfası oluşturabilir şu HTML kodlarına bir bakalım:
Eğer kurban kullanıcı saldırganın web sayfasını ziyaret ederse şöyle şeyler olacak:
Saldırganın sayfası açıklı siteye yönelik bir HTTP isteği tetikleyecek
Eğer kullanıcı açıklı siteye giriş yapmışsa tarayıcısı oturum çerezlerini yani session cookileri otomatik olarak isteğe dahil edecek.
Açıklı site isteği normal bir şekilde kullanıcı tarafından yapılmış gibi işleyecek ve kullanıcının mail adresini değiştirecek.
Not: isteklere farklı bilgiler de eklenebilir ve potansiyel risk demektir (misal isteklere otomatik olarak bazı kullanıcı kimlik bilgilerinin eklenmesi vb.)
CSRF Saldırısı Nasıl Oluşturulur?
HTML'i manuel olarak oluşturmak biraz yavaş kalabilir özellikle isteğin bir ton parametreye sahip olduğunu düşünürsek işler karışabilir.
Bir CSRF saldırısını oluşturmanın en kolay yolu, Burp Suite Professional'da default olan CSRF PoC özelliğini kullanmaktır: CSRF PoC
CSRF Nedir?
Saldırgan sitenin açığından faydalanarak siteye sanki o kullanıcıymış gibi erişerek işlem yapmasını sağlar. Bu güvenlik açığı; bir web tarayıcısı, bir web sayfasında yer alan betiklerin ikinci bir web sayfası üzerindeki veriye erişimine sadece bu iki sayfa aynı köke sahipse izin vermekte olan aynı kök politikasını çiğner.
Labler konunun altındadır.
Eğer zaten CSRF hakkında temel bilgiye sahipseniz yani temel konsepti falan biliyorsanız direkt pratiğe geçip konu sonundaki yorumlardan lablere gidebilirsiniz
CSRF saldırısının etkisi nedir?
Başarılı bir CSRF saldırısı gerçekleşirse saldırgan kurbanın yapmak istemediği şeyleri yapmasına neden olur yani mesela kurbanın hesabındaki mail adresini değiştirmesine sebep olabilir veya şifresini sadece mail olarak düşünmeyin para transferi bile yapmasına sebep olabilir. Duruma göre saldırgan kurbanın hesabı üzerinde %100 kontrole sahip olabilir eğer bahsettiğimiz bu kurbanın hesabı da yetkili bir hesapsa durum daha da vahimleşir. Çünkü uygulama verileri ve fonksiyonelliği tehlikeye girmiş olur.
CSRF nasıl çalışır?
CSRF saldırısının olması için 3 şarttan bahsedebiliriz:
Saldırganın kullanabileceği bir eylem olması gerekli:
Örneğin bu diğer kullanıcılar için izinleri değiştirme vb. bir şey olabilir. Ya da kullanıcıya özgü herhangi bir eylem olabilir (şifre değiştirme vb.)
Cookie tabanlı session handling:
Uygulama istekleri yapan kullanıcıyı tanımlamak için oturum çerezlerine güvenir. (session cookies) Çünkü kullanıcı isteklerini doğrulamak ve oturumları takip etmek için başka bir mekanizma yoktur.
Tahmin edilemeyen istek parametreleri olmamalı:
Eylemi gerçekleştiren istek saldırgan tarafından belirlenemeyen parametreler içermemeli. Örneğin saldırgan, bir kullanıcının şifresini değiştirmesine neden olduğunda saldırının başarıyla gerçekleşmesi için bu fonksiyon zafiyete sahip olmalıdır.
Mesela uygulama kullanıcının e-mail adresini değiştirmesini sağlayan bir fonksiyon içeriyor diyelim. Kullanıcı bunu yapmaya çalıştığında şu tarz bir HTTP isteği göndermiş olur:
HTTP:
POST /email/change HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 30
Cookie: session=yvthwsztyeQkAPzeQ5gHgTvlyxHfsAfE
[email protected]
Bu mail adresini değiştirme olayı saldırganın ilgisini çeker ve buna takiben saldırgan şifre resetlemeyi tetikleyecek ve kullanıcının hesabı üzerinde full kontrole sahip olacaktır.
Uygulama hangi kullanıcının isteği gönderdiğini belirlemek için bir session cookie (oturum çerezi) kullanır.
Saldırgan eylemi gerçekleştirmek için istek parametrelerinin değerlerini kolayca belirleyebilir. Böylece saldırgan bir web sayfası oluşturabilir şu HTML kodlarına bir bakalım:
HTML:
<html>
<body>
<form action="https://vulnerable-website.com/email/change" method="POST">
<input type="hidden" name="email" value="[email protected]" />
</form>
<script>
document.forms[0].submit();
</script>
</body>
</html>
Eğer kurban kullanıcı saldırganın web sayfasını ziyaret ederse şöyle şeyler olacak:
Saldırganın sayfası açıklı siteye yönelik bir HTTP isteği tetikleyecek
Eğer kullanıcı açıklı siteye giriş yapmışsa tarayıcısı oturum çerezlerini yani session cookileri otomatik olarak isteğe dahil edecek.
Açıklı site isteği normal bir şekilde kullanıcı tarafından yapılmış gibi işleyecek ve kullanıcının mail adresini değiştirecek.
Not: isteklere farklı bilgiler de eklenebilir ve potansiyel risk demektir (misal isteklere otomatik olarak bazı kullanıcı kimlik bilgilerinin eklenmesi vb.)
CSRF Saldırısı Nasıl Oluşturulur?
HTML'i manuel olarak oluşturmak biraz yavaş kalabilir özellikle isteğin bir ton parametreye sahip olduğunu düşünürsek işler karışabilir.
Bir CSRF saldırısını oluşturmanın en kolay yolu, Burp Suite Professional'da default olan CSRF PoC özelliğini kullanmaktır: CSRF PoC
- Burp Suite Professional'da test etmek veya istismar etmek istediğiniz herhangi bir yerde bir requıest seçin.
- Sağ tık ile içerik menüsünden Etkileşim araçları/CSRF PoC Oluştur'u seçin. (Engagement tools/Generate CSRF PoC)
- Burp Suite, seçilen isteği tetikleyecek olan bir HTML üretecek (kurbanın tarayıcısı tarafından otomatik olarak eklenecek çerezler hariç).
- Saldırının durumuna göre ince ayar yapmak için CSRF PoC generator'daki çeşitli seçenekleri ayarlayabilirsiniz. Request'lerin garip özellikleriyle başa çıkmak için bazı beklenmedik durumlarda bunu yapmanız gerekebilir.
- Oluşturulan HTML'yi bir web sayfasına kopyalayın, savunmasız web sitesinde oturum açmış bir tarayıcıda görüntüleyin, amaçlanan isteğin başarılı bir şekilde yapılıp yapılmadığını ve istenen eylemin gerçekleşip gerçekleşmediğini test edin.
Bir CSRF istismarı nasıl sağlanır?
CSRF saldırıları için teslim mekanizmaları esasında reflected XSS ile aynıdır. Tipik olarak, saldırgan kötü amaçlı HTML'yi kontrolünde olan bir web sitesine yerleştirir ve ardından kurbanları bu web sitesini ziyaret etmeye teşvik eder. Bu işlem, kullanıcıya bir e-posta veya sosyal medya mesajı yoluyla web sitesine bir bağlantı verilerek yapılabilir veya bu saldırı, popüler bir web sitesine (örneğin, bir kullanıcı yorumuna) yerleştirilirse, kullanıcıların web sitesini ziyaret etmesini bekleyebilirler.
Bazı basit CSRF istismarlarının GET yöntemini kullandığını ve savunmasız web sitesinde tek bir URL ile tamamen bağımsız olabileceğini unutmayın. Bu durumda, saldırganın harici bir site kullanması gerekmeyebilir ve kurbanlara doğrudan savunmasız domain'de kötü amaçlı bir URL verebilir. Önceki örnekte, e-posta adresini değiştirme isteği GET yöntemiyle gerçekleştirilebiliyorsa çoğu ihtimalle bir saldırı şöyle görünür:
HTML:
<img src="https://vulnerable-website.com/email/[email protected]">
CSRF'ye karşı yaygın savunma biçimleri
Günümüzde CSRF güvenlik açıklarını başarılı bir şekilde bulmak ve kullanmak genellikle hedef web sitesi, kurbanın tarayıcısı veya her ikisi tarafından dağıtılan CSRF karşıtı önlemlerin bypass edilmesini içerir. Karşılaşacağınız en yaygın savunmalar ise şunlardır:
CSRF tokenleri - Bir CSRF tokeni, sunucu tarafından oluşturulan ve istemciyle paylaşılan benzersiz, gizli ve öngörülemez bir değerdir. Bir form göndermek gibi hassas bir eylem gerçekleştirmeye çalışırken istemci request'e doğru CSRF tokeni eklemelidir. Bu, bir saldırganın kurban adına geçerli bir request oluşturmasını çok zorlaştırır.
SameSite tanımlama bilgileri (cookies) - SameSite, bir web sitesinin tanımlama bilgilerinin diğer web sitelerinden kaynaklanan isteklere ne zaman dahil edildiğini belirleyen bir tarayıcı güvenlik mekanizmasıdır. Hassas eylemler gerçekleştirmek için istekler genellikle kimliği doğrulanmış bir tanımlama bilgisi gerektirdiğinden dolayı uygun SameSite kısıtlamaları bir saldırganın siteler arası bu tür eylemleri tetiklemesini engelleyebilir. 2021'den beri Chrome, Lax SameSite kısıtlamalarını varsayılan olarak uygular. Önerilen standart bu olması sebebi ile diğer büyük tarayıcıların gelecekte bu davranışı benimsemesini bekliyoruz.
Yönlendiren tabanlı doğrulama - Bazı uygulamalar normalde isteğin uygulamanın kendi domain'inden geldiğini doğrulayarak CSRF saldırılarına karşı savunma yapmaya çalışma amacı ile HTTP Referer başlığını kullanır. Bu genellikle CSRF token doğrulamasından daha az etkilidir.
Kaynak: What is CSRF (Cross-site request forgery)? Tutorial & Examples | Web Security Academy
Çevirmenler: @Gauloran @Dolyetyus