CSRF saldırıları

Siteler Arası İstek Sahteciliği (CSRFCross Site Request Forgery ) ,  kötü niyetli bir web sitesi, e-posta, blog, anlık mesaj veya programı bir kullanıcının web tarayıcısının, kullanıcı kimliği doğrulandığında güvenilen bir sitede istenmeyen bir eylem gerçekleştirmesine neden olduğunda oluşan bir saldırı türüdür.

CSRF tarayıcıların eylemin kullanıcı tarafından açıkça gerçekleştirilip gerçekleştirilmediğini ( örneğin, bir formdaki bir butonu tıklamak veya bir bağlantıya tıklamak gibi ) veya kullanıcının bu eylemi istemeden gerçekleştirdiğini nasıl ayırt edeceklerini anlamamasıdır.

CSRF zafiyeti yaygın bir saldırı türüdür. Arka arkaya birkaç kez OWASP Top 10 listesinde yer edinmiştir. Ve en sık karşılaşılan çevrimiçi saldırılardandır.  Bu yöntem sıkça kullanılan popüler web uygulamalarında dahi görülen bir zafiyettir.

CSRF Saldırıları Nasıl Gerçekleştirilir

Siteler Arası İstek Sahteciliği saldırısını yürütmenin iki ana bölümü vardır. İlki, kurbanı bir bağlantıya tıklaması veya bir sayfayı yüklemesi için kandırmaktır. Bu normalde sosyal mühendislik ve kötü niyetli bağlantılar aracılığıyla yapılır. İkinci bölüm, kurbanın tarayıcısından web sitesine hazırlanmış, meşru görünümlü bir istek göndermektir. İstek, kurbanın o web sitesiyle ilişkilendirdiği tüm tanımlama bilgileri dahil saldırgan tarafından seçilen değerlerle gönderilir. Bu şekilde web sitesi, bu kurbanın web sitesinde çeşitli eylemleri gerçekleştirebileceğini bilir. Bu HTTP kimlik bilgileriyle veya tanımlama bilgileriyle gönderilen herhangi bir istek, kurban istemi saldırganın komutuyla gönderiyor olsa bile meşru kabul edilecektir.

CSRF

Siteler Arası İstek Sahteciliği, yalnızca mağdurun kimliği doğrulanırsa etkili olacaktır. Bu da, saldırının başarılı olması için mağdurun oturum açmış olması gerektiği anlamına gelir. CSRF saldırıları kimlik doğrulama sürecini atlamak için kullanıldığından, bu saldırılara karşı korunmasa bile, genel erişime açık içerik gibi, bu saldırılardan etkilenmeyen bazı öğeler olabilir. Örneğin, bir web sitesindeki genel iletişim formu CSRF’ye karşı güvenlidir. Bu tür HTML formları, mağdurun form gönderimi için herhangi bir ayrıcalığa sahip olmasını gerektirmez.

GET İsteği Kullanan CSRF Saldırısı Örneği

HTTP GET, doğası gereği idempotent (Bir metodun bir defa çağrıldığında alınan sonuç ile birden fazla kez çağrıldığında alınan sonuç aynı ise bu bir idempotent metottur) bir istek yöntemi olarak düşünülmüştür. Bu, bu HTTP yönteminin durum değişikliklerini gerçekleştirmek için kullanılmaması gerektiği anlamına gelir. Bir GET isteği göndermek hiçbir zaman herhangi bir verinin değişmesine neden olmamalıdır. Ancak bazı web uygulamaları, parola değiştirme veya kullanıcı ekleme gibi işlemlerde durum değişiklikleri gerçekleştirmek için daha uygun olan POST yerine GET’i kullanmaya devam eder.

Kurban, saldırgan tarafından sosyal mühendislik kullanarak sağlanan bağlantıya tıkladığında, saldırganın kötü niyetli sitesine yönlendirilir. Bu web sitesi, kullanıcının web tarayıcısını istenmeyen bir istek göndermesi için tetikleyen bir komut dosyası yürütür. Mağdur, bu istenmeyen istemci tarafı talebinin gönderildiğinin farkında değildir. Ancak, sunucu tarafında, kullanıcının söylediği kişi olduğunu doğrulamak için kullanılan tanımlama bilgilerini içerdiğinden, kullanıcı isteği göndermiş gibi görünür.

Www.example.com’un iki parametre içeren bir GET isteği kullanarak para transferlerini transfer edilecek tutar ve para transferini alacak kişinin kimliği işlediğini düşünelim. Bu örnekte, web uygulamasının, 100.000 lirayı Ahmet’in hesabına aktarmasını isteyecek olan meşru bir URL’yi göstermektedir.

İstek, kimliği doğrulanmış kullanıcıyı temsil eden bir tanımlama bilgisi içerir, bu nedenle aktarım için kaynak hesabı tanımlamaya gerek yoktur. Normal bir kullanıcı bu URL’ye erişirse, uygulamanın paranın çekileceği hesabı bilmesi için kimliğini doğrulaması gerekir. CSRF kullanarak, mağduru, saldırganın kimliği doğrulanırken istediği talebi göndermesi için kandırmak mümkündür.

İstismar edilen uygulama bir GET isteği beklerse, saldırgan  kendi web sitesine örneğin <img> tagı içine kötü amaçlı bir etiket ekleyebilir. Bir resme bağlanmak yerine, bu etiket bankanın web uygulamasına bir istek gönderir:

<img data-fr-src = “http://example.com/transfer?amount=1000000&account=Ahmet” />

Normal şartlar altında, kullanıcının tarayıcısı o web sitesiyle ilgili çerezleri otomatik olarak gönderir. Bu, kurbanın saldırgan adına bir durum değişikliği yapmasına neden olur. Bu durumda, durum değişikliği bir para transferidir.

Bu örneğin çok basit olduğunu ve gerçek dünyayı yansıtmadığını düşünebilirsiniz. Ancak CSRF saldırılarının nasıl çalıştığını konusunda iyi bir örnek olduğu unutulmamalıdır. Bununla birlikte, GET’e dayalı benzer güvenlik açıkları geçmişte popüler yazılımlarda ortaya çıkmıştır.

POST İsteklerini Kullanan CSRF Saldırıları

Durum değiştiren isteklerin çoğu, HTTP POST istekleri kullanılarak yapılır. Bu, web uygulamalarının bir durum değişikliği söz konusu olduğunda GET yerine POST kabul etme olasılığının daha yüksek olduğu anlamına gelir. POST durumunda, kullanıcının tarayıcısı parametreleri ve değerleri, bir GET isteğinde olduğu gibi URL’de değil, istek gövdesinde gönderir.

Kurbanı POST isteği göndermesi için kandırmak biraz daha zor olabilir. Bir GET isteğinde, saldırganın yalnızca kurbanın gerekli tüm bilgileri içeren bir URL göndermesine ihtiyacı vardır. POST durumunda, isteğe bir talep gövdesi eklenmelidir. Ancak saldırgan, kullanıcının tarayıcısının sayfa yüklenir yüklenmez istenmeyen bir POST isteği göndermesine neden olan JavaScript içeren kötü amaçlı bir web sitesi tasarlayabilir.

Aşağıdaki JavaScript örneği, sayfa yüklenir yüklenmez kurbanın tarayıcısından otomatik olarak bir istek gönderen onload işlevini gösterir.

<body onload=”document.csrf.submit()”>
<form action=”http://example.com/transfer” method=”POST” name=”csrf”>
<input type=”hidden” name=”amount” value=”1000000″>
<input type=”hidden” name=”account” value=”Ahmet”>
</form>

Sayfa yüklenir yüklenmez, JavaScript onload işlevi gizli formun gönderilmesini sağlar ve bu da POST isteğini gönderir. Form, saldırgan tarafından oluşturulan iki parametre ve bunların değerlerini içerir. POST hedefi, example.com, kurbanın çerezlerini içerdiği için talebi meşru olarak tanımlar.

Saldırgan, onu görünmez kılan özniteliklere sahip bir IFrame’den de yararlanabilir. Saldırgan, aynı yükleme işlevini kullanarak kötü amaçlı bir web sayfası içeren IFrame’i yükleyebilir ve IFrame yüklenir yüklenmez bir istek gönderilmesine neden olabilir. Diğer bir seçenek de XMLHttpRequest teknolojisini kullanmaktır.

Bir sonraki yazımızda CSRF saldırılarına karşı korunma yöntemleri hakkında bahsedeceğiz. İşletmenizin itibar kayıplarından korumak ve açıklardan korunmak için sızma testi yaptırmayı unutmayın.