Bir Tıkla Değişmesin Hayatlar
Herkese tekrardan merhabalar. Bugün “Clickjacking ve Korunma Yolları” serimizin son bölümündeyiz. Bu bölümde sunucu taraflı ve tarayıcı tarafında basit ama etkili clickjacking önleme yöntemlerini göreceğiz.
[alert style=”yellow”]Okumadıysanız birinci bölüm için tıklayın: Clickjacking ve Korunma Yolları – 1[/alert]Test Sayfası Oluşturalım
Clickjacking temel olarak hangi yollardan zaaf kullandığını biliyoruz. Burada diğer önemli husus “opacity” – “şeffaflık” değerlerinin bu elementler için sıfırlanmış olmasıdır. Şeffaflığı tam olan (ters orantı) bir elementi elbette ki önyüzde görmemiz mümkün değil. Ufak bir test dokümanı hazırlayalım. Dosya ismini kendinize göre girip .html uzantılı olarak kaydedin.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<html> <head> <title>Clickjacking - 2 | Test</title> <meta charset="UTF-8"> <style type="text/css"> span{ position: absolute; top: 200px; right: 50%; } iframe{ width: 100%; height: 100%; position: absolute; top: 0px; left: 0px; filter: alpha(opacity=50); opacity: 0.5; } </style> </head> <body> <iframe src="https://kod5.org"></iframe> <span><a href="#">Programı İndir!</a></span> </body> </html> |
Örneğimizde bir adet span etiketi içerisinde göz boyayan bir link ve hemen üstünde de bir adresi açan (örnek için kod5.net) iframe nesnemiz mevcut. Aşağıda ekran çıktısını inceleyebiliriz.
Şimdi ise şeffaflık / opacity değerini sıfırlamak için aşağıdaki değişikliği iframe nesnesi için uyguluyor ve sonuca bakıyoruz:
1 2 |
filter: alpha(opacity=0); opacity: 0; |
Düşünelim, bu sayede acaba biz nereleri tıklayabiliriz ve sonuçları nerelere varabilir?
Önleyelim – Sunucu Üzerinde
Neyse ki bu durumu önlemek için bazı standartlar geliştirildi. Bunlardan en verimlisi sunucu tarafında yapılan X-Frame-Options değer atamasıdır. Bu ayar ve değerlerin Apache, nginx ve IIS üzerinde nasıl kullanılacağına bakalım.
Hangi değerler mevcut?
X-Frame-Options için 3 adet özellik tanımlanmıştır. Bunlar;
- Deny : Hiçbir frame nesnesinin çalışmaması için kullanılır
- Allow-From uri : URI bazlı olarak frame nesnelerine izin vermek için kullanılır
- SAMEORIGIN : Sadece kendi adresini kaynak olarak alan frame nesnelerine izin vermek için kullanılır. En etkili yöntem bu özellikle sağlanabilmektedir.
Apache HTTP sunucusu için httpd.conf dosyasında (eğer size özel hosting hizmetinizde kullanacaksanız .htaccess dosyasında);
1 |
Header always append X-Frame-Options SAMEORIGIN |
nginx HTTP sunucusu için nginx.conf dosyasında;
1 |
add_header X-Frame-Options SAMEORIGIN; |
IIS HTTP sunucusu için web.config dosyasında <Sysem.webServer> etiketi altında;
1 2 3 4 5 |
<httpProtocol> <customHeaders> <add name="X-Frame-Options" value="SAMEORIGIN" /> </customHeaders> </httpProtocol> |
Önleyelim – Tarayıcı üzerinde
X-Frame-Options ayarını HTML meta etiketi olarak da kullanabiliriz. Fakat burada sadece iki değer kullanılabilmektedir. Bunlar ise DENY ve SAMEORIGIN değerleridir. Bu etiketi kullanmak için <head> etiketi altında aşağıdaki kodu girebilirsiniz;
1 2 3 |
<meta http-equiv="X-Frame-Options" content="deny"> <meta http-equiv="X-Frame-Options" content="sameorigin"> |
Buna ek olarak ufak bir javascript kodu ile de bu zaafiyeti ilk adımında engelleyebiliriz fakat bu kod da aşılabilir.
1 2 3 4 |
<script type=“text/javascript”> if(top != window) top.location=window.location </script> |
Sonuç
Gün be gün yayılan sosyal medya kullanımı ile artan ve daha da devam edecek bu saldırılara karşı en önemli güvenlik önlemi basmadan önce en az 2 defa düşünmek ve her zaman dikkatli olmak olacaktır.
Her zaman için %99 güvenlik seviyesinden inmememeniz dileği ile, iyi bloglamalar.
Faydalı bağlantılar:
BGA Blog
OWASP Wiki – Clickjacking Defence Cheat Sheet
JavaScript.info Clickjacking
5 Ways Prevent to Clickjacking
Mozilla Developer X-Frame-Options
TheSiteWizard Apache X-Frame-Options