İletişim

Clickjacking (Tıklama Korsanlığı) Nedir?

Kısa tanım

Clickjacking (tıklama korsanlığı), bir sayfanın başka bir site içinde görünmez ya da gizlenmiş bir iframe olarak yüklenip kullanıcının farkında olmadan o sayfadaki bir düğmeye tıklatılmasına dayanan saldırıdır. Kullanıcı zararsız bir öğeye tıkladığını sanırken aslında oturumunun açık olduğu sitede bir ayarı değiştirir veya bir işlemi onaylar. Başlıca savunma, CSP frame-ancestors ve X-Frame-Options başlıklarıyla sayfanın çerçevelenmesini kısıtlamaktır.

Diğer adları: Clickjacking, tıklama korsanlığı, UI redressing, arayüz örtme saldırısı

Kullanıcının tıklamasının görünmez bir iframe ile yem butonun üstündeki hedef siteye kaçırıldığı ve frame-ancestors ile engellendiği diyagram

Görünen düğme ile tıklanan düğme farklı

Clickjacking'in temel fikri basittir: Saldırganın sitesi, hedef sitedeki bir sayfayı iframe içinde yükler, iframe'i saydam yapar ve kendi sayfasındaki göz alıcı bir düğmenin tam üzerine konumlandırır. Ziyaretçi “ödülü al” düğmesine bastığını düşünür; tıklama aslında görünmeyen katmandaki “hesabı sil”, “ödemeyi onayla” veya “kamerama erişim ver” düğmesine gider. Hedef sitede oturum açıksa işlem, kullanıcının kendi yetkisiyle gerçekleşir.

Bu yüzden saldırı, sitedeki bir kod hatasından değil, sayfanın başka bir origin tarafından çerçevelenebilmesinden doğar. Hesap ayarları, ödeme onayı, sosyal medya “takip et” veya “beğen” düğmeleri ve tek tıklamayla çalışan yönetici işlemleri en çok hedef alınan yerlerdir. Kullanıcı açısından bakıldığında, kandırmaya dayalı arayüz tasarımlarıyla, yani karanlık desenlerle akrabadır; farkı, aldatmanın başkasının sitesinde kurgulanmasıdır.

Asıl savunma: çerçevelenmeyi sunucu söyler

Sayfanın hangi sitelerde iframe içinde gösterilebileceğine tarayıcı karar verir, ama bu kararı sunucunun gönderdiği HTTP başlıkları belirler. Güncel yöntem, İçerik Güvenlik Politikası'nın frame-ancestors direktifidir. Eski tarayıcılar için X-Frame-Options başlığı da yanında gönderilebilir:

# Hiçbir yerde çerçevelenmesin
Content-Security-Policy: frame-ancestors 'none'
X-Frame-Options: DENY

# Yalnızca kendi sitemizde çerçevelensin
Content-Security-Policy: frame-ancestors 'self'
X-Frame-Options: SAMEORIGIN

# Kendimiz ve belirli bir iş ortağı
Content-Security-Policy: frame-ancestors 'self' https://partner.example

Pratikte bilinmesi gereken birkaç ayrıntı var:

  • X-Frame-Options'ın ALLOW-FROM değeri artık modern tarayıcılarda yok sayılıyor. Belirli bir dış siteye izin vermek gerekiyorsa tek seçenek frame-ancestors'tır.
  • İki başlık da <meta http-equiv> etiketiyle verilirse çalışmaz; gerçek HTTP yanıt başlığı olarak gönderilmeleri gerekir.
  • frame-ancestors, sayfanızı kimin çerçeveleyebileceğini belirler. Sizin sayfanızın hangi iframe'leri yükleyebileceğini belirleyen frame-src ile karıştırılmamalıdır.
  • Başlıklar HTML sayfalarına uygulanmalıdır; bir gömme widget'ı veya ödeme sayfası gibi bilerek başka sitelere açılan sayfalar varsa, izin listesi yalnızca o sayfalar için genişletilmelidir.

Ek katmanlar ve eskimiş yaklaşımlar

OWASP'nin clickjacking rehberi, başlıkların yanında oturum çerezlerinde SameSite özniteliğini de bir savunma katmanı olarak sayar: Lax veya Strict çerezler başka bir siteye gömülü iframe'deki isteklere eklenmez, bu da sayfa çerçevelense bile kullanıcının oturumsuz görünmesini sağlar. Ancak saldırı oturum gerektirmeyen bir işlemi hedefliyorsa bu katman işe yaramaz. Sayfanın çerçeve içinde olup olmadığını JavaScript ile kontrol edip kendini üst pencereye taşıyan eski “frame-busting” betikleri ise güvenilir bir savunma sayılmaz; başlıkların yerini tutmaz.

Kritik işlemleri tek tıklamaya bağlamamak, yani şifre tekrarı veya ayrı bir onay adımı istemek de clickjacking'in yanı sıra CSRF gibi kullanıcı adına işlem yaptıran saldırılara karşı faydalı bir alışkanlıktır.

Sitenizde kontrol etmek

Tarayıcı geliştirici araçlarının Ağ sekmesinde ana HTML yanıtını seçip yanıt başlıklarında content-security-policy içinde frame-ancestors ya da x-frame-options olup olmadığına bakmak yeterlidir. Komut satırında curl -sI https://example.com aynı bilgiyi verir. Doruva'nın SEO Analiz Aracı da güvenlik başlıkları bölümünde bu iki başlığın eksikliğini bilgi amaçlı listeler.

İlgili terimler

← Sözlüğe dön