Clickjacking ve X-Frame-Options

Sızma testlerinde otomatik zafiyet tarayıcılarının sıklıkla tespit ettiği bir konudan bahsedeceğiz. Risk seviyesi genellikle düşük olarak gösterilen clickjacking zafiyeti sayfanın kritikliğine göre önem arz edebilir. Bu sebeple küçük bir örnek ile clickjacking’i ve önlemini sizlere gösterceğim.

Örneğin aşağıdaki gibi bir bilet satışı yapılan bir sayfamız olsun. Confirm denildiğinde biletin satın alındığını düşünün. Diyelim ki bu sayfa da clickjacking için bir önlem alınmadığını ve kullanıcının Confirm demediğini düşünelim.

25 - Clickjacking ve X-Frame-Options

Şimdi de kötü niyetli bir kimsenin aşağıdaki gibi kullanıcının ilgisini çekebilecek bir sayfa hazırladığını düşünelim. Bir altındaki resimdeki kaynak kod da görüleceğe üzere bir Confirm butonu frame olarak eklenmiş.

26 - Clickjacking ve X-Frame-Options

31 - Clickjacking ve X-Frame-Options

Kötü niyetli kişi kullanıcının Confirm demesiyle aşağıdaki gibi bir istek yaptığını Burp ile araya girerek görebiliriz.

28 - Clickjacking ve X-Frame-Options

Kötü niyetli kimse malesef amacına ulaştı. 10 tane bileti aldırmış olduk.

29 - Clickjacking ve X-Frame-Options

Önlem

İstemci ve sunucu tarafında çeşitli yöntemler kullanmak mümkün. İstemci tarafında önlem almak ise sayfanızın zafiyetini kapamaz. Bu yüzden sunucu tarafında önlem almak daha kolay olacaktır. Bunun için kullanıcızı korumanın en güzel yöntem ise herhangi bir yerden böyle bir istek gelebileceğini düşünerek X-Frame-Options başlığını cevap başlığı içerisine dahil etmek olacaktır. Böylece önlem almış olabiliriz.Aşağıdaki seçenekleri kullanabilirsiniz.

X-Frame-Options : SAMEORIGIN
X-Frame-Options : DENY

SAMEORIGIN ile sadece istek yapan ile istek yapılan aynı site ise frame kabul edilir. DENY ile de anlaşılacağı üzere hiç bir frame isteği kabul edilmez.

Örneğin Apache’de X-Frame-Options : DENY başlığını cevap içinde gönderdiğimizi ve önlemin işe yaradığını görelim. Bunun için Apache sunucusunun yapılandırma dosyasına aşağıdaki direktifi girdiğimizi düşünelim.

Header always append X-Frame-Options DENY

32 - Clickjacking ve X-Frame-Options

Sonuç olarak Frame kaynak kodda görülse de tarayıcı üzerinde Confirm butonu göstermeyerek kullanıcımızı bu butona tıklamasının önüne geçtik.

33 - Clickjacking ve X-Frame-Options