Hızlı cevap: Clickjacking (tıklama hırsızlığı), bir saldırganın sizin güvendiğiniz bir web sitesini görünmez bir katman olarak kendi tuzak sayfasının üstüne yerleştirmesi ve sizi aslında farkında olmadan o gizli sayfada bir işlem yapmaya kandırmasıdır. Bir düğmeye tıkladığınızı sanırsınız ama gerçekte görünmez katmandaki bir onayı (para transferi, izin verme, hesap ayarı değiştirme) tıklamış olursunuz. Saldırı, sitenin bir iframe içinde başka bir sayfaya gömülebilmesinden yararlanır. Korunmanın yolu site sahibinin elindedir ve basittir: sitenizin başka sayfalar içine gömülmesini engelleyen HTTP başlıklarını (X-Frame-Options: DENY ya da Content-Security-Policy frame-ancestors) eklemek. Bu tek yapılandırma, clickjacking saldırılarının neredeyse tamamını durdurur ve pek çok sitede eksiktir.

Bir web sitesine güveniyorsunuz, üzerindeki bir düğmeye tıklıyorsunuz, ama tıkladığınız şey gördüğünüz düğme değil. Clickjacking tam olarak budur: saldırgan, güvendiğiniz siteyi görünmez bir katman haline getirip kendi tuzağının üstüne koyar, siz masum bir şeye tıkladığınızı sanarken aslında gizli katmandaki tehlikeli bir işlemi onaylarsınız. Bu yazı, clickjacking'in nasıl çalıştığını ve bir site sahibi olarak buna karşı sitenizi nasıl koruyacağınızı anlatıyor.

Nasıl çalışır

Clickjacking, tarayıcıların bir web sayfasını başka bir sayfanın içine (iframe ile) gömebilme özelliğinden yararlanır. Saldırgan bir tuzak sayfası hazırlar; bu sayfada, örneğin "Ödülü Kazan" yazan çekici bir düğme vardır. Bu düğmenin tam üstüne, görünmez (saydam) hale getirilmiş bir iframe içinde güvendiğiniz gerçek bir siteyi (bankanız, sosyal medyanız) yerleştirir ve o sitenin tehlikeli bir düğmesini (para gönder, izin ver) tam sizin tıklayacağınız yere hizalar. Siz "Ödülü Kazan"a tıkladığınızı sanırsınız; gerçekte görünmez katmandaki gerçek işlemi onaylarsınız.

Saldırının gücü, her şeyin meşru sitede olup bitmesindedir; siz zaten o siteye giriş yapmışsınızdır, dolayısıyla işlem sizin yetkinizle gerçekleşir.

Neden tehlikeli

Senaryo Sonuç
Bankacılık onayı Farkında olmadan para transferi
İzin ekranı Bir uygulamaya yetki verme
Sosyal medya Beğenme, takip, paylaşım (likejacking)
Hesap ayarı E-posta/parola değiştirme onayı
Tek tık satın alma İstemsiz sipariş

Clickjacking'in sinsiliği, kullanıcının hiçbir hata yapmamasıdır; güvendiği bir siteye tıklar, ama tıklaması çalınır. Bu yüzden savunma kullanıcıda değil, sitenin kendisindedir.

Korunma: site sahibinin sorumluluğu

İyi haber şu: clickjacking'e karşı korunma site sahibinin elindedir ve teknik olarak basittir. Tarayıcıya "bu sayfa başka sayfaların içine gömülemez" demek yeterlidir. Bunu iki HTTP başlığından biriyle yaparsınız:

Yöntem Ayar Etki
X-Frame-Options DENY ya da SAMEORIGIN Sayfanın iframe'e gömülmesini engeller
CSP frame-ancestors 'none' ya da 'self' Modern, daha esnek eşdeğeri

Modern yaklaşım, Content-Security-Policy'nin frame-ancestors direktifidir; hangi sitelerin (varsa) sayfanızı gömebileceğini hassas biçimde kontrol eder. Çoğu site için "frame-ancestors 'self'" ya da "'none'" doğru seçimdir. Bu başlıklar, genel HTTP güvenlik başlıkları kümesinin bir parçasıdır; diğerlerini (HSTS, X-Content-Type-Options) SPF, DKIM, DMARC ve e-posta sahteciliği ve genel web güvenliği bağlamında ele aldık.

Bir zafiyet mi, bir yapılandırma eksiği mi

Clickjacking genelde bir kod açığı değil, bir yapılandırma eksiğidir; yani bir şeyi yanlış yapmaktan değil, bir korumayı hiç eklememekten kaynaklanır. Bu yüzden pek çok sızma testinde clickjacking bir bulgu olarak çıkar: site çalışır, güvenli görünür, ama iframe koruması eksiktir. Bu tür eksikler, bir web uygulaması sızma testi sırasında sistematik olarak tespit edilir. Eklenmesi dakikalar sürer ama eklenene kadar site açık bir hedeftir.

KAOS ve DSET yaklaşımı

DSET, kurumların web uygulamalarını clickjacking dahil yapılandırma eksiklerine karşı değerlendirir. Yerel yapay zekâ motorumuz KAOS, bir sitenin HTTP güvenlik başlıklarını tarayarak eksik X-Frame-Options ya da frame-ancestors korumasını tespit eder ve her bulguyu çalışan bir kanıtla, yanlış pozitif olmadan raporlar. Amaç, dakikalar içinde kapatılabilecek bir açığın bir saldırgana fırsat vermeden giderilmesini sağlamaktır.

Sık sorulan sorular

Clickjacking'e karşı kullanıcı olarak ne yapabilirim? Sınırlı bir şey, çünkü savunma esas olarak site sahibindedir. Yine de tarayıcınızı güncel tutmak, tanımadığınız sitelerdeki cazip "kazandınız" düğmelerine dikkatli olmak ve hassas işlemleri (bankacılık) yalnızca doğrudan girdiğiniz resmi sekmede yapmak riski azaltır. Ama asıl koruma, güvendiğiniz sitelerin iframe koruması eklemesiyle sağlanır; bu bir site-sahibi sorumluluğudur.

X-Frame-Options mı CSP frame-ancestors mı kullanmalıyım? İkisi de clickjacking'i engeller ama frame-ancestors daha modern ve esnektir; hangi sitelerin sayfanızı gömebileceğini hassas biçimde kontrol eder ve eski X-Frame-Options'ın yerini alır. En iyi yaklaşım, geniş tarayıcı uyumu için ikisini birlikte kullanmaktır: X-Frame-Options: SAMEORIGIN ve CSP frame-ancestors 'self'. Çoğu site için bu ikisi yeterlidir.

Sitem küçük, clickjacking beni ilgilendirir mi? Evet. Clickjacking, sitenizin boyutuna değil, içinde yapılan işlemlere bağlıdır. Kullanıcıların giriş yaptığı, bir işlem (satın alma, ayar değiştirme, onay) yaptığı her site hedef olabilir. Üstelik korumanın eklenmesi dakikalar sürer ve maliyeti yoktur; bu kadar ucuz ve etkili bir önlemi atlamak için bir neden yoktur.

Kaynaklar

Web uygulamanızı clickjacking ve diğer yapılandırma eksiklerine karşı değerlendirmek için DSET ile iletişime geçin. Ankara Hacettepe Teknokent laboratuvarımızdan web güvenliği danışmanlığı sağlıyoruz.