- Konu sahibi
- #1
Clickjacking nedir?
Clickjacking, kullanıcının gördüğü sayfa ile gerçekte tıkladığı öğenin farklı olduğu bir arayüz saldırısıdır. Saldırgan, güvenilir bir sitenin tıklanabilir alanını saydam veya yanıltıcı biriframe katmanında, masum görünen düğmenin üstüne hizalar. Kullanıcı kendi isteğiyle tıkladığını sanarken alttaki güvenilir sayfadaki işlem tetiklenebilir.Nasıl çalışır?
Saldırganın sayfasında örneğin “Videoyu oynat” düğmesi bulunur. Bunun üstüne, saydamlaştırılmış bir banka, yönetim paneli veya hesap ayarları sayfasının ilgili bölümü hizalanır. Kullanıcının tıklaması, gördüğü düğme yerine saydam katmandaki “Onayla”, “Sil” veya “Yetkilendir” kontrolüne ulaşır.Saldırının etkili olabilmesi için genellikle şu koşullar birlikte gerekir:
- Hedef site başka bir sayfada çerçeve içinde görüntülenebiliyor olmalıdır.
- Kullanıcının hedef sitede geçerli oturumu bulunmalıdır.
- Hedef işlem, yalnızca görünür metin veya ek bir doğrulama olmadan tıklamayla yapılabiliyor olmalıdır.
Varsayımsal bir örnekte yönetim paneline giriş yapmış bir yönetici, saldırganın hazırladığı sayfada “Ödülü al” düğmesine basar. Saydam katmandaki yönetim paneli düğmesi bu noktaya denk getirildiyse, yönetici fark etmeden bir ayarı değiştirebilir. Bu, kullanıcının parolasının ele geçirildiği anlamına gelmez; sorun, yetkili oturumun yanıltıcı bir arayüz üzerinden kötüye kullanılmasıdır.
Site sahibi için korunma adımları
Öncelik, hassas sayfaların başka siteler tarafından çerçevelenmesini tarayıcıya bildiren yanıt başlıklarını göndermektir.- Korunacak sayfaların HTTP yanıtlarında, özellikle giriş yapılabilen yönetim ve hesap sayfalarında
Content-Security-Policyiçindekiframe-ancestorsyönergesini tanımlayın. Sayfanın hiç çerçevelenmemesi isteniyorsa en dar politikaframe-ancestors 'none'olur. - Eski veya CSP desteklemeyen istemciler için
X-Frame-Options: DENYbaşlığını da gönderin. Aynı origin’in çerçevelemesine ihtiyaç varsaSAMEORIGINgibi daha sınırlı bir seçenek değerlendirilir. - Başlıkların gerçekten hedef sayfada döndüğünü, yönlendirme sonrasında kaybolmadığını ve önbellek ya da ters vekil katmanında değiştirilmediğini kontrol edin.
- Çerçevelenmesi zorunlu olan bir sayfa varsa tüm siteyi gevşetmek yerine yalnızca gereken güvenilir üst kaynakları açıkça tanımlayın. Hassas işlemleri mümkünse yeniden kimlik doğrulama veya kullanıcı onayıyla güçlendirin.
En küçük başlık örneği şu şekildedir:
Kod:
Content-Security-Policy: frame-ancestors 'none'
X-Frame-Options: DENY
Bu başlıklar HTML meta etiketiyle değil, HTTP yanıt başlığı olarak eklenmelidir. frame-ancestors, default-src değerinden miras almaz; ayrıca tanımlanmalıdır. frame-ancestors destekleyen tarayıcılar iki başlık birlikteyse onu esas alır. Üçüncü tarafın çerçevelemesine izin verirken eski istemcilerde DENY/SAMEORIGIN davranışını da hesaba katın. Tarayıcı, politika ihlali olan bir çerçeveyi yüklemeyi engeller; bu nedenle saldırganın saydam katmanını hedef sayfanın üzerine yerleştirmesi mümkün olmaz.
Hangi politika seçilmeli?
Karar verirken çerçeveleme ihtiyacını ve sayfanın hassasiyetini birlikte değerlendirin:| Sayfa durumu | Tercih | Gerekçe |
|---|---|---|
| Çerçevelenmesi gerekmiyor | frame-ancestors 'none' | En dar izin; harici çerçevelemeyi kapatır. |
| Yalnızca aynı site içinde kullanılacak | frame-ancestors 'self' | Aynı kaynak dışındaki çerçevelemeyi sınırlar. |
| Belirli bir uygulama tarafından kullanılacak | Yalnız gereken kaynakları listeleyin | Geniş izin yerine kontrollü entegrasyon sağlar. |
Değişiklikten sonra tarayıcının geliştirici araçlarında Network sekmesinden hedef yanıtı açın ve başlıkların bulunduğunu kontrol edin. Çerçeveleme denemesi engelleniyorsa konsolda CSP veya X-Frame-Options kaynaklı bir engelleme görülmesi beklenir. Başlık görünmüyor ya da sayfa hâlâ çerçevelenebiliyorsa yapılandırma yanlış katmana uygulanmış, yönlendirmede kaybolmuş veya başka bir sunucu yanıtı dönüyor olabilir.
Sık yapılan hatalar
- Yalnızca sayfadaki JavaScript kontrolüne güvenmek: JavaScript devre dışı bırakılabilir veya farklı bir çerçeveleme senaryosunda beklenmedik davranabilir. Sunucu yanıt başlıkları temel savunma olmalıdır.
- Güvenilir görünen her alan adına çerçeveleme izni vermek: İzin verilen bir alan ele geçirilirse veya yanlış yapılandırılırsa koruma zayıflar.
- Yalnızca giriş sayfasını korumak: Asıl risk, oturum açıkken işlem yapan ayar, ödeme ve yönetim uç noktalarında ortaya çıkar.
- Başlığın yalnızca ana sayfada bulunmasını yeterli sanmak: Koruma, hassas yanıtların tamamında ve yönlendirme zincirlerinde doğrulanmalıdır.