Clickjacking nedir?

SP

Kıdemli Üye
29 Eki 2018
2,714
14
587
Clickjacking nedir?

Clickjacking, kullanıcının sahte bir web sitesinde işlem yapılabilir içeriğe tıklamasına ikna edildiği arayüz tabanlı bir saldırıdır. Aşağıdaki örneği düşünün:

Bir kullanıcı, sahte bir web siteye erişir (belki de bu bir e-posta tarafından sağlanan bir bağlantıdır) ve bir ödül kazanmak için bir butona tıklar. Farkında olmadan, bir saldırgan tarafından başka bir gizli düğmeye basmak üzere kandırılmıştır ve bu da başka bir sitedeki bir hesabı ödemesine neden olmuştur. Bu bir clickjacking saldırısının örneğidir. Teknik, bir iframe içinde bir buton veya gizli bağlantı içeren görünmez, işlem yapılabilir bir web sayfasının (veya birden fazla sayfanın) dahil edilmesine dayanır. Iframe, kullanıcının beklenen sahte web sayfası içeriğinin üzerine bindirilir. Bu saldırı, kullanıcının bir butona tıklama gibi bir eylem gerçekleştirmesi gerektiğinden CSRF saldırısından farklıdır; CSRF saldırısı, kullanıcının bilgisi veya girişi olmadan tam bir isteği taklit etmeye dayanır.

4qs9sda.png


CSRF saldırılarına karşı koruma genellikle bir CSRF tokeni kullanılarak sağlanır: özel oturum, tek kullanımlık bir sayı veya nonce. Ancak clickjacking saldırıları, hedeflenen oturumun içeriği bir güvenilir web sitesinden yüklenerek ve tüm isteklerin aynı etki alanında gerçekleştirildiği için CSRF tokeniyle engellenemez. CSRF tokenleri isteklere eklenir ve normal bir oturumda olduğu gibi sunucuya iletilir. Farkı ise işlemin gizli bir iframe içinde gerçekleşmesidir.

Temel bir clickjacking saldırısı nasıl oluşturulur?

Clickjacking saldırıları, katmanları oluşturmak ve manipüle etmek için CSS kullanır. Saldırgan, hedef web sitesini bir iframe katmanı olarak sahte web sitesinin üzerine bindirir. Style etiketini ve parametreleri kullanan bir örnek:

HTML:
<head>
    <style>
        #target_website {
            position:relative;
            width:128px;
            height:128px;
            opacity:0.00001;
            z-index:2;
            }
        #decoy_website {
            position:absolute;
            width:300px;
            height:400px;
            z-index:1;
            }
    </style>
</head>
...
<body>
    <div id="decoy_website">
    ...sahte web içeriği...
    </div>
    <iframe id="target_website" src="https://vulnerable-website.com">
    </iframe>
</body>

Hedef websitesi (target_website) iframe'i, uygun genişlik (width) ve yükseklik (height) değerleri kullanılarak tarayıcı içinde sahte website ile hassas bir şekilde örtüşecek şekilde konumlandırılıyor. Mutlak (absolute) ve göreceli (relative) konum değerleri; ekran boyutu, tarayıcı türü ve platformdan bağımsız olarak hedef web sitesinin sahte içerikle doğru bir şekilde örtüşmesini sağlamak için kullanılıyor. Z-indeks, iframe ve website katmanlarının üstünlük sırasını belirliyor. Opaklık (opacity) değeri, iframe içeriğinin kullanıcıya karşı saydam olmasını sağlamak için 0.0 (veya yakın değerler) olarak tanımlanıyor. Tarayıcıda clickjacking koruması, eşik değerine dayalı iframe opaklık tespiti uygulayabilir (örneğin, Chrome'un 76. sürümü bu davranışı içerir, ancak Firefox içermez). Saldırgan, koruma davranışlarını tetiklemeyecek şekilde opaklık değerlerini seçiyor, böylece istenilen etki elde ediliyor.

Burada 1. laboratuvar yer almakta, yorumlardan ulaşabilirsiniz.

Clickbandit

Yukarıda açıklandığı gibi manuel olarak bir clickjacking kavram kanıtı oluşturabilseniz de, bu pratikte oldukça sıkıcı ve zaman alıcı olabilir. Doğada clickjacking için test yaparken, bunun yerine Burp'un Clickbandit aracını kullanmanızı öneririz. Bu araç, çerçevelenebilir sayfada istenen eylemleri gerçekleştirmek için tarayıcınızı kullanmanızı sağlar, ardından uygun bir clickjacking overlay içeren bir HTML dosyası oluşturur. Bunu, tek bir satır HTML veya CSS yazmak zorunda kalmadan birkaç saniye içinde etkileşimli bir kavram kanıtı oluşturmak için kullanabilirsiniz.

Clickjacking ile önceden doldurulmuş form girişi

Bazı form doldurma ve gönderme işlemi gerektiren web siteleri, gönderimden önce form girişlerinin GET parametreleri kullanılarak önceden doldurulmasına izin verir. Diğer web siteleri ise form göndermeden önce metin isteyebilir. GET değerleri URL'nin bir parçası olduğu için hedef URL, saldırganın seçtiği değerleri içerecek şekilde değiştirilebilir ve şeffaf "gönder" butonu sahte siteye bindirilir, temel clickjacking örneğinde olduğu gibi.

Burada 2. laboratuvar yer almakta, yorumlardan ulaşabilirsiniz.


Frame busting scriptleri

Clickjacking saldırıları web sitelerinin çerçevelenebildiği her durumda mümkündür. Bu nedenle, önleyici teknikler web siteleri için çerçeve oluşturma özelliğini kısıtlamaya dayanmaktadır. Web tarayıcısı tarafından uygulanan yaygın bir istemci taraflı koruma yöntemi, frame busting veya frame breaking scriptlerinin kullanılmasıdır. Bu scriptler, özel tarayıcı JavaScript eklentileri veya uzantıları olan NoScript gibi araçlar aracılığıyla uygulanabilir. Scriptler genellikle aşağıdaki davranışları gerçekleştirecek şekilde tasarlanır:
  1. geçerli uygulama penceresinin ana veya üst pencere olup olmadığını kontrol eder ve zorlar,
  2. bütün çerçeveleri görünür yapar,
  3. görünmez çerçevelere tıklamayı engeller,
  4. potansiyel clickjacking saldırılarını engeller ve kullanıcıya bildirir.
Frame busting teknikleri genellikle tarayıcı ve platforma özgüdür ve HTML'in esnekliği nedeniyle saldırganlar tarafından genellikle atlatılabilirler. Frame busting, JavaScript tabanlı olduğu için tarayıcının güvenlik ayarları, işlemelerini engelleyebilir veya hatta tarayıcı JavaScript'i desteklemeyebilir. Frame buster'cılara karşı etkili bir saldırgan çözümü, HTML5 iframe sandbox özniteliğini kullanmaktır. Bu öznitelik, allow-forms veya allow-scripts değerleri ile ayarlandığında ve allow-top-navigation değeri çıkarıldığında, frame busting scripti etkisiz hale getirilebilir çünkü iframe, kendisinin en üst pencere olup olmadığını kontrol edemeyeceği için frame buster komut dosyası etkisiz hale getirilebilir:

HTML:
<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms"></iframe>

allow-forms ve allow-scripts değerleri, belirtilen işlemlere iframe içinde izin verirken, üst düzey gezinmeyi devre dışı bırakır. Bu, hedeflenen sitenin içinde işlevselliğe izin verirken frame busting davranışlarını engeller.

Burada 3. laboratuvar yer almakta, yorumlardan ulaşabilirsiniz.


Clickjacking ile DOM XSS saldırısını birleştirme

Bugüne kadar clickjacking'i bağımsız bir saldırı olarak inceledik. Tarihsel olarak, clickjacking, Facebook sayfasındaki beğenileri artırmak gibi davranışları gerçekleştirmek için kullanılmıştır. Ancak clickjacking'in gerçek etkisi, DOM XSS saldırısı gibi başka bir saldırıyı taşıyıcı olarak kullanıldığında ortaya çıkar. Bu birleştirilmiş saldırının uygulanması, saldırganın ilk olarak XSS saldırısını tanımladığı varsayıldığında nispeten basittir. XSS açığı, daha sonra iframe hedef URL'siyle birleştirilir, böylece kullanıcı düğmeye veya bağlantıya tıklar ve sonuç olarak DOM XSS saldırısı yürütülür.

Burada 4. laboratuvar yer almakta, yorumlardan ulaşabilirsiniz.


Çok aşamalı clickjacking

Saldırganın bir hedef web sitesine girişleri manipüle etmesi birden fazla işlemi gerektirebilir. Örneğin, bir saldırgan, bir kullanıcıyı bir perakende web sitesinden bir şey satın almaya kandırmak isteyebilir, bu nedenle sipariş verilmeden önce ürünlerin alışveriş sepetine eklenmesi gereklidir. Bu tür işlemler, saldırgan tarafından birden çok bölüm veya iframe kullanılarak gerçekleştirilebilir. Bu tür saldırılar, etkili ve gizli olabilmeleri için saldırgan tarafından dikkatli bir hassasiyet ve özen gerektirir.

Burada 5. laboratuvar yer almakta, yorumlardan ulaşabilirsiniz.


Clickjacking saldırıları nasıl önlenir?

Önceki kısımlarda sıkça karşılaşılan bir tarayıcı tarafı önleme mekanizması olan "frame busting" scriptlerini ele aldık. Ancak saldırganların bu korumaları genellikle atlatması kolay olabilir. Bu nedenle, tarayıcı iframe kullanımını kısıtlayan ve clickjacking'e karşı önlem alan sunucu tarafı protokolleri geliştirilmiştir.
Clickjacking, tarayıcı tarafında gerçekleşen bir davranıştır ve başarı ya da başarısızlık, tarayıcı işlevselliğine ve geçerli web standartlarına ve en iyi uygulamalara uyumluluğa bağlıdır. Sunucu tarafı clickjacking önlemesi, iframe gibi bileşenlerin kullanımı üzerine kısıtlamaların tanımlanması ve iletişimin sağlanmasıyla gerçekleştirilir. Ancak bu önlemlerin uygulanması, tarayıcıların bu kısıtlamalara uyması ve bunları zorlamasıyla mümkündür. Sunucu tarafı clickjacking koruması için iki mekanizma X-Frame-Options ve Content Security Policy'dir.


X-Frame-Options

X-Frame-Options başlangıçta Internet Explorer 8'de resmi olmayan bir yanıt başlığı olarak tanıtılmış ve daha sonra diğer tarayıcılar tarafından hızla benimsenmiştir. Bu başlık, web sitesi sahibine iframe veya nesnelerin kullanımı üzerinde kontrol sağlar, böylece bir web sayfasının bir çerçeve içinde gösterilmesi deny yönergesiyle engellenebilir:

HTTP:
X-Frame-Options: deny

Alternatif olarak, çerçeveleme aynı kök (origin) olarak sınırlanabilir, bunun için "sameorigin" yönergesi kullanılabilir:

HTTP:
X-Frame-Options: sameorigin

veya allow-from yönergesini kullanarak adlandırılmış bir web sitesine yönlendirebilirsiniz:

HTTP:
X-Frame-Options: allow-from https://normal-website.com
X-Frame-Options tarayıcılarda tutarlı bir şekilde uygulanmamaktadır (örneğin, Chrome 76 veya Safari 12'de "allow-from" yönergesi desteklenmemektedir). Bununla birlikte, doğru bir şekilde uygulandığında ve çok katmanlı bir savunma stratejisi olarak Content Security Policy ile birleştirildiğinde, clickjacking saldırılarına karşı etkili koruma sağlayabilir.

Content Security Policy (CSP)

Content Security Policy (İçerik Güvenliği Politikası), XSS ve clickjacking gibi saldırılara karşı önlem ve tespit mekanizması sağlayan bir koruma yöntemidir. CSP genellikle web sunucusunda aşağıdaki şekilde dönen bir başlık olarak uygulanır:

HTTP:
Content-Security-Policy: policy

Burada "policy" bir dizi politika yönergesini noktalı virgüllerle ayrılmış bir dize olarak ifade eder. CSP, istemci tarayıcısına tarayıcının zararlı davranışları tespit etmek ve engellemek için uygulayabileceği web kaynaklarının izin verilen kaynakları hakkında bilgi sağlar.
Önerilen clickjacking koruması, uygulamanın İçerik Güvenlik Politikası'na "frame-ancestors" yönergesini eklemektir. "frame-ancestors" yönergesinin 'none' değeri, X-Frame-Options'daki "deny" yönergesi ile benzer davranışa sahiptir. "frame-ancestors" yönergesinin 'self' değeri ise X-Frame-Options'daki "sameorigin" yönergesine genel olarak eşdeğerdir. Aşağıdaki CSP, çerçeveleri sadece aynı alan adına izin verir:


HTTP:
Content-Security-Policy: frame-ancestors 'self';

Alternatif olarak, çerçeveleme belirli sitelerle sınırlandırılabilir:

HTTP:
Content-Security-Policy: frame-ancestors normal-website.com;

Clickjacking ve XSS saldırılarına karşı etkili olabilmek için, İçerik Güvenlik Politikaları (CSP) dikkatli bir şekilde geliştirilmeli, uygulanmalı ve test edilmelidir. Aynı zamanda, çok katmanlı bir savunma stratejisinin bir parçası olarak kullanılmalıdır.

Lab 1: CSRF token korumasıyla temel clickjacking

Bu laboratuvar giriş özelliği ve CSRF tokeniyle korunan bir hesap silme butonu içerir. Kullanıcı, sahte bir web sitede "click" kelimesini görüntüleyen öğeye tıklamalı.

Laboratuvarı çözmek için, hesap sayfasını çerçeveleyen ve kullanıcıyı hesabını silmesi için kandıran bir HTML oluşturun. Hesap silindiğinde laboratuvar çözülmüş olur.

wiener kullanıcı adı ve peter şifresi ile giriş yapabilirsiniz.

Not: Kurban, Chrome tarayıcısını kullanacak, bu yüzden saldırıyı Chrome'da test edin.

Lab linki:
https://portswigger.net/web-security/clickjacking/lab-basic-csrf-protected

Lab 2: URL parametresinden önceden doldurulmuş form giriş verileri ile clickjacking

Bu laboratuvar, CSRF token korumasıyla temel clickjacking örneğini genişletir. Laboratuvarın amacı, bir URL parametresini kullanarak bir formu önceden doldurarak kullanıcının e-posta adresini değiştirmektir ve kullanıcının yanlışlıkla "Update email" butonuna tıklamasını sağlamaktır.

Laboratuvarı çözmek için, hesap sayfasını çerçeveleyen ve kullanıcıyı "Click me" tuzağına tıklayarak e-posta adresini güncellemesi için kandıran bir HTML oluşturun. E-posta adresi değiştirildiğinde laboratuvar çözülmüş olur.

wiener kullanıcı adı ve peter şifresi ile giriş yapabilirsiniz.

Not: Kurban, Chrome tarayıcısını kullanacak, bu yüzden saldırıyı Chrome'da test edin.

Lab linki:
https://portswigger.net/web-security/clickjacking/lab-prefilled-form-input

Lab 3: Frame buster scriptiyle clickjacking

Bu laboratuvar, web sitenin çerçevelenmesini önleyen "frame buster" ile korunmaktadır. Frame buster'ı aşabilir ve kullanıcıların e-posta adresini değiştiren bir clickjacking saldırısı gerçekleştirebilir misiniz?

Laboratuvarı çözmek için, hesap sayfasını çerçeveleyen ve kullanıcıyı "Click me" tuzağına tıklayarak e-posta adresini değiştirmesi için kandıran bir HTML oluşturun. E-posta adresi değiştirildiğinde laboratuvar çözülmüş olur.

wiener kullanıcı adı ve peter şifresi ile giriş yapabilirsiniz.

Not: Kurban, Chrome tarayıcısını kullanacak, bu yüzden saldırıyı Chrome'da test edin.

Lab linki:
https://portswigger.net/web-security/clickjacking/lab-frame-buster-script

Lab 4: Clickjacking zafiyetini kullanarak DOM tabanlı XSS'yi tetikleme

Bu laboratuvar, bir tıklama ile tetiklenen bir XSS zafiyeti içerir. Kullanıcıyı "Click me" düğmesine tıklamaya kandıran bir clickjacking saldırısı oluşturun ve bu şekilde print() işlemini çağırın.

Not: Kurban, Chrome tarayıcısını kullanacak, bu yüzden saldırıyı Chrome'da test edin.

Lab linki:
https://portswigger.net/web-security/clickjacking/lab-exploiting-to-trigger-dom-based-xss

Lab 5: Çok aşamalı clickjacking

Bu laboratuvar, CSRF tokeniyle korunan bazı hesap işlevselliğine ve aynı zamanda clickjackinge karşı koruma için bir onay iletişim kutusuna sahiptir. Bu labı çözmek için kullanıcıyı "Click me first" ve "Click me next" tuzak eylemlerine tıklayarak delete account butonuna ve onay iletişim kutusuna tıklamaya kandıran bir saldırı oluşturun. Bu lab için iki öğe kullanmanız gerekecektir.

wiener kullanıcı adı ve peter şifresi ile giriş yapabilirsiniz.

Lab linki:
https://portswigger.net/web-security/clickjacking/lab-multistep
 

therealgoko

Yeni üye
10 Nis 2020
13
2
Günlerdir açığını aradığım bir web sitesinde sadece clickjacking açığına rastlamak birazcık can sıkıncı oldu aradığım bu değildi. Anlatımınız çok başarılı teşekkürler.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.