Clickjacking Güvenlik Rehberi

UI redressing saldırılarını anlayın, tespit edin ve korunma yöntemlerini öğrenin

⚠️ Gördüğünüze tıkladığınızdan emin misiniz?

Clickjacking Nedir?

Clickjacking (UI redressing olarak da bilinir), kullanıcıların fark etmeden farklı bir web sitesindeki öğelere tıklamasını sağlayan interface tabanlı bir saldırı türüdür. Bu saldırı tekniğinde, saldırgan hedef web sitesini şeffaf bir iframe içerisinde saklayarak kullanıcıyı aldatır.

Temel Çalışma Prensibi:
• Hedef web sitesi invisible iframe içinde gizlenir
• Üzerine cazip görünen sahte butonlar yerleştirilir
• Kullanıcı sahte butona tıklarken aslında gizli iframe'deki asıl butona tıklar
• Sonuç: Kullanıcının bilgisi dışında istemediği bir işlem gerçekleşir
<!-- Temel clickjacking saldırı yapısı -->
<style>
    #target_website {
        position: relative;
        width: 300px;
        height: 200px;
        opacity: 0.0001;  /* Neredeyse görünmez */
        z-index: 2;       /* En üstte */
    }
    #decoy_website {
        position: absolute;
        width: 300px;
        height: 200px;
        z-index: 1;       /* Altta */
    }
</style>

<div id="decoy_website">
    <button>Ücretsiz Hediye Al!</button>
</div>

<iframe id="target_website" src="https://victim-site.com/delete-account">
</iframe>
CSRF ile Farkı:
Clickjacking, CSRF'den farklı olarak kullanıcının aktif etkileşimini gerektirir. CSRF token'ları clickjacking saldırılarına karşı etkisizdir çünkü saldırı authentic bir session içinde gerçekleşir.

İnteraktif Clickjacking Demosu

Aşağıdaki demo ile clickjacking saldırısının nasıl çalıştığını görsel olarak anlayabilirsiniz. Gizli iframe'i görünür hale getirerek saldırının mekanizmasını keşfedin.

Clickjacking Simülasyonu

🎁 Ücretsiz iPhone Kazan!

Sadece bu butona tıklayın!


Hesabı Sil
(Gizli İframe)
Demo Açıklaması: Yukarıdaki örnekte, "Hemen Al!" butonuna tıkladığınızda aslında gizli iframe'deki "Hesabı Sil" butonuna tıklıyor olacaksınız. Bu clickjacking saldırısının temel mantığıdır.

Clickjacking Saldırı Türleri

Clickjacking saldırıları çeşitli formlarda karşımıza çıkabilir. Her birinin kendine özgü teknikleri ve etki alanları vardır.

Yüksek

Basit Clickjacking

En temel form. Tek bir iframe ve tek bir tıklama ile gerçekleştirilen saldırılar. Genellikle sosyal medya beğenileri veya basit işlemler için kullanılır.
Yüksek

Çoklu Adım Clickjacking

Karmaşık işlemler için birden fazla tıklama gerektiren saldırılar. E-ticaret sitelerinde ürün satın alma işlemleri gibi çok adımlı süreçlerde kullanılır.
Orta

Keystroke Logging

Kullanıcının klavye girişlerini yakalamak için invisible input alanları kullanır. Şifre ve kredi kartı bilgilerini çalmak için kullanılabilir.
Yüksek

Mobil Clickjacking

Mobil cihazlarda dokunmatik hareketleri hedef alan saldırılar. Swipe, pinch gibi gesture'lar kullanılarak gerçekleştirilir.
Yüksek

DOM Tabanlı

JavaScript kullanarak DOM manipülasyonu ile gerçekleştirilen clickjacking. Dinamik içerik oluşturma ve daha sofistike saldırılar için kullanılır.
Orta

Browser Bug Exploitation

Tarayıcı hatalarından yararlanarak frame busting korunmalarını atlama teknikleri. Browser-specific zaafiyetler kullanılır.
// Çoklu adım clickjacking örneği
<div id="step1" class="attack-layer">
    <button onclick="nextStep()">Adım 1: Giriş Yap</button>
    <iframe src="https://bank.com/login" class="hidden-frame"></iframe>
</div>

<div id="step2" class="attack-layer" style="display:none">
    <button onclick="finalStep()">Adım 2: Transfer Onayla</button>
    <iframe src="https://bank.com/transfer?amount=10000" class="hidden-frame"></iframe>
</div>

<style>
.hidden-frame {
    position: absolute;
    opacity: 0.01;
    z-index: 999;
}
</style>
Gelişmiş Teknikler:
• Drag & Drop Clickjacking: Dosya sürükle-bırak işlemlerini hedef alan saldırılar
• Scroll Jacking: Sayfa kaydırma hareketlerini manipüle etme
• Context Menu Hijacking: Sağ tık menülerini ele geçirme
• Fullscreen API Abuse: Tam ekran modunu kötüye kullanma

Clickjacking Korunma Yöntemleri

Clickjacking saldırılarından korunmak için hem client-side hem de server-side önlemler alınması gerekir. İşte en etkili korunma yöntemleri:

1. X-Frame-Options Header
Bu HTTP header, web sayfanızın iframe içinde yüklenmesini kontrol eder:
// X-Frame-Options header değerleri

// Hiç iframe'de yüklenmesin
X-Frame-Options: DENY

// Sadece aynı domain'de iframe'de yüklenebilsin  
X-Frame-Options: SAMEORIGIN

// Belirtilen domain'de iframe'de yüklenebilsin
X-Frame-Options: ALLOW-FROM https://trustedsite.com

// Nginx konfigürasyonu
add_header X-Frame-Options "SAMEORIGIN" always;

// Apache konfigürasyonu
Header always set X-Frame-Options "SAMEORIGIN"

// PHP'de header set etme
header("X-Frame-Options: SAMEORIGIN");
2. Content Security Policy (CSP)
Modern ve daha esnek çözüm. Frame-ancestors directive kullanılır:
// CSP frame-ancestors directive

// Hiçbir yerden iframe edilemesin
Content-Security-Policy: frame-ancestors 'none';

// Sadece aynı origin'den iframe edilebilsin
Content-Security-Policy: frame-ancestors 'self';

// Belirtilen domain'lerden iframe edilebilsin
Content-Security-Policy: frame-ancestors 'self' https://partner.com;

// Meta tag ile CSP
<meta http-equiv="Content-Security-Policy" 
      content="frame-ancestors 'self'">

// Nginx'te CSP header
add_header Content-Security-Policy "frame-ancestors 'self';" always;
Browser Desteği Karşılaştırması:
• X-Frame-Options: Eski tarayıcıları destekler, basit kullanım
• CSP frame-ancestors: Modern yaklaşım, daha esnek kontrol
• Önerilen: Her ikisini birden kullanın (defense in depth)
3. Frame Busting Scripts
JavaScript tabanlı korunma (ikincil savunma olarak):
// Basit frame busting script
if (top !== self) {
    top.location = self.location;
}

// Daha güvenli frame busting
(function() {
    if (top !== self) {
        try {
            if (top.location.hostname !== self.location.hostname) {
                throw new Error("Clickjacking detected!");
            }
        } catch (e) {
            top.location = self.location;
        }
    }
})();

// Modern frame busting
if (window.top !== window.self) {
    document.write('<div style="position:fixed;top:0;left:0;width:100%;height:100%;background:#fff;z-index:999999;">Bu sayfa frame içinde çalışmaz</div>');
    throw new Error("Frame busting activated");
}
4. Sandbox Attribute Bypass Korunması
HTML5 iframe sandbox özelliği frame busting'i devre dışı bırakabilir:
// Saldırgan sandbox kullanımı
<iframe src="https://victim.com" 
        sandbox="allow-forms allow-scripts"></iframe>
// allow-top-navigation olmadığı için frame busting çalışmaz

// Korunma: Sandbox detection
if (window.frameElement && window.frameElement.hasAttribute('sandbox')) {
    // Sandbox detect edildi, önlem al
    document.body.innerHTML = '<h1>Güvenlik Uyarısı</h1>';
}

// Alternative: Parent frame kontrolü
try {
    if (window.parent.location.href) {
        // Erişim başarılıysa aynı origin
        console.log("Same origin frame");
    }
} catch (e) {
    // Cross-origin frame detected
    window.top.location = window.location;
}
Çok Katmanlı Savunma Stratejisi:
1. Server-side headers (X-Frame-Options + CSP)
2. JavaScript frame busting
3. Sandbox detection
4. User-agent ve referrer kontrolü
5. İşlem onayları için CAPTCHA

Clickjacking Test Araçları

Clickjacking zafiyetlerini tespit etmek ve test etmek için kullanabileceğiniz araçlar ve teknikler:

Burp Suite Clickbandit

Burp Suite'in clickjacking testi için özel aracı. Otomatik olarak clickjacking proof-of-concept'i oluşturur ve iframe edilebilirlik testini yapar.

Manual Testing

Basit HTML sayfası oluşturarak manuel test. iframe src'sini hedef site olarak ayarlayıp yüklenip yüklenmediğini kontrol edin.

Online Checkers

Web tabanlı clickjacking test araçları. URL girerek hızlı kontrol sağlar ancak detaylı analiz için manuel test gerekebilir.

Browser DevTools

F12 geliştirici araçları ile header kontrolü. Network tab'ında X-Frame-Options ve CSP header'larını kontrol edin.
// Basit clickjacking test kodu
<!DOCTYPE html>
<html>
<head>
    <title>Clickjacking Test</title>
    <style>
        iframe {
            width: 800px;
            height: 600px;
            border: 2px solid red;
        }
        .overlay {
            position: absolute;
            top: 200px;
            left: 300px;
            background: yellow;
            padding: 10px;
            z-index: 999;
            opacity: 0.7;
        }
    </style>
</head>
<body>
    <h1>Clickjacking Test - TARGET_URL</h1>
    <div style="position: relative;">
        <iframe src="TARGET_URL"></iframe>
        <div class="overlay">
            Bu alan test overlay'idir
        </div>
    </div>
    <p>Eğer iframe yükleniyorsa site clickjacking'e açıktır.</p>
</body>
</html>
curl ile Header Kontrolü:
curl -I https://example.com | grep -i "x-frame-options\|content-security-policy"

Python ile Otomatik Test:
# Python clickjacking test scripti
import requests
from urllib.parse import urlparse

def test_clickjacking(url):
    try:
        response = requests.get(url)
        headers = response.headers
        
        # X-Frame-Options kontrolü
        xfo = headers.get('X-Frame-Options', '')
        
        # CSP kontrolü  
        csp = headers.get('Content-Security-Policy', '')
        
        print(f"Testing: {url}")
        print(f"X-Frame-Options: {xfo or 'Not set'}")
        print(f"CSP: {csp or 'Not set'}")
        
        # Clickjacking riski değerlendirmesi
        if not xfo and 'frame-ancestors' not in csp:
            print("🔴 VULNERABLE: Clickjacking protection not found!")
        elif xfo.upper() == 'DENY' or 'frame-ancestors \'none\'' in csp:
            print("🟢 PROTECTED: Strong clickjacking protection")
        else:
            print("🟡 PARTIAL: Some protection exists, review needed")
            
    except Exception as e:
        print(f"Error testing {url}: {e}")

# Test örneği
test_clickjacking("https://example.com")
Test Sonuçlarını Değerlendirme:
• iframe yüklenmedi: Korunma mevcut (iyi)
• iframe yüklendi: Potansiyel clickjacking riski
• Console hataları: Frame busting script'leri tespit edildi
• Blank page: CSP veya header korunması aktif

Clickjacking Güvenlik Özeti

Temel Prensipler:
• X-Frame-Options: SAMEORIGIN her zaman kullanın
• CSP frame-ancestors directive ekleyin
• Frame busting JavaScript'i ikincil savunma olarak kullanın
• Kritik işlemler için ek doğrulama (CAPTCHA, OTP) ekleyin
• Düzenli güvenlik testleri yapın
Gelişmiş Güvenlik:
• SameSite cookie attribute kullanın
• Referrer Policy header'ı yapılandırın
• Feature Policy ile iframe kısıtlamaları
• Content-Type: nosniff header'ı ekleyin
• HTTPS enforce edin (HSTS)

if (!clickjacked) { securityWin(); }