Skip to content

Clickjacking - "Likejacking" unter die Haube geguckt

Clickjacking - was das überhaupt ist, was damit möglich ist, wie Sie es verhindern und welche Angriffe es bisher gab, wissen Sie inzwischen. In dieser Folge werden zwei mögliche Angriffe näher betrachtet, darunter das "Likejacking" bei Facebook.

Clickjacking ganz einfach

Die einfachste Möglichkeit für einen Clickjacking-Angriff besteht im Übereinanderlegen zweier Seiten, wie in diesem Beispiel. Beim Klick passiert nichts Schlimmes, es wird lediglich eine Alertbox geöffnet - allerdings nicht von der verlinkten Seite, sondern einer unsichtbar darüber gelegten.

Der Nachteil dieser "Brute-Force-Lösung": Das Clickjacking funktioniert nur, wenn sich das anzuklickende, unsichtbare Ziel genau an der Stelle befindet, an der der Benutzer auf der sichtbaren Seite klickt. Im Beispiel habe ich das durch entsprechende Positionierungsbefehle erreicht, was u.a. voraus setzt, dass das Fenster gross genug ist. Dass ist nun gerade etwas, auf dass sich im Web niemand verlassen sollte. Als Gegenmaßnahme gegen dieses Problem hat sich das "ankleben" des unsichtbaren iframes an den Mauszeiger bewährt: Egal, wo das Opfer klickt, das unsichtbare Ziel befindet sich unter dem Mauszeiger.

Clickjacking etwas aufwendiger

Als Beispiel für so einen Clickjacking-Angriff dient hier der für den "Likejacking"-Angriff auf Facebook verwendete Code, leicht zu finden über die Wall eines Opfers oder mit der Suchmaschine Ihres geringsten Misstrauens. Hier die relevanten Codeteile, auf das Notwendige gekürzt:

<div id="icontainer" 
     style="overflow:hidden; width:120px; height:40px; position:absolute; 
            filter:alpha(opacity=0); -moz-opacity:0.0; -khtml-opacity:0.0;  opacity:0.0;">

<iframe src="ziel.html" scrolling="no" frameborder="0" 
        style="border:none; overflow:hidden; width:120px; height:40px;" allowTransparency="true"></iframe>
         
</div>
    
<script>
var icontainer = document.getElementById('icontainer');    
var standardbody=(document.compatMode=="CSS1Compat")? document.documentElement : document.body
   //create reference to common "body" across doctypes

function mouseFollower(e){
    if (window.event) 
    { // for IE
        icontainer.style.top = (window.event.y-5)+standardbody.scrollTop+'px';
        icontainer.style.left = (window.event.x-5)+standardbody.scrollLeft+'px';
    } 
    else 
    {
        icontainer.style.top = (e.pageY-5)+'px';
        icontainer.style.left = (e.pageX-5)+'px';
    }
}
document.onmousemove = function(e) {
    mouseFollower(e);
}
</script>

Zuerst wird ein unsichtbares div-Tag für den iframe mit der Zielseite angelegt, das später am Mauszeiger "klebt". Danach wird dieses div-Tag über die JavaScript-Funktion mouseFollower() an den Mauszeiger "geklebt": Bei jeder Mausbewegung wird die Funktion mouseFollower() aufgerufen und die Position des div-Tag entsprechend angepasst.

Im Fall des Facebook-"Likejacking" war das Ziel (im Beispiel ziel.html) der Aufruf der Facebook-API, prinzipiell kann jeder von Social Networks oder anderen Anbietern zum Einbinden in andere Websites bereit gestellte Button oder Link als Ziel dienen. Gibt es keine weitere Abfrage o.Ä., wird dann durch das "Buttonjacking" die damit verbundene Aktion ausgelöst. Ebenso könnte z.B. eine Pay-per-Click-Werbung eingebunden werden, wie es Shlomi Narkolayev im Februar demonstriert hat.

Hier können Sie die Demo in Aktion testen, einmal mit unsichtbarem div-Tag und einmal mit sichtbarem. Beim Klick passiert nichts Schlimmes, es wird wie schon im ersten Beispiel lediglich eine Alertbox geöffnet.

Auf der Seite mit dem sichtbaren div-Tag sehen Sie, wieso nicht jeder Klick erfolgreich ist: Der Mauszeiger zeigt auf die linke obere Ecke des Tags, der klickbare Button ist natürlich ein kleines Stück innerhalb des Tags und wird nur getroffen, wenn der Mauszeiger vor dem Klick ein kleines Stück in das Tag bewegt wird. Dazu reicht aber schon ein kleiner Ruck an der Maus, wie er z.B. beim Druck auf die Maustaste entsteht. Außerdem lässt sich dieses Problem umgehen, indem der iframe so positioniert wird, dass der störende Rand außerhalb des sichtbaren Bereichs ist. Der Einfachheit halber habe ich hier darauf verzichtet.

Der Nachteil dieses Ansatzes: Egal wohin der Benutzer klickt, er klickt immer auf den unsichtbaren iframe. Die Klicks haben also keine für das Opfer sichtbare Auswirkungen - egal wohin und wie oft er klickt, anscheinend passiert nichts, und das ist doch ziemlich verdächtig. Beim obigen "Brute-Force-Ansatz" kann dagegen der Bereich, in dem die Klicks in den unsichtbaren iframe gelenkt werden, eingegrenzt werden, so dass Klicks im restlichen Bereich der Seite auf der sichtbaren Seite landen und dort dann weitere Aktionen auslösen können. Nehmen wir z.B. ein angebliches Video, das nicht startet, weil der Klick darauf auf eine andere Seite umgeleitet wird. Beim Klick auf z.B. einen Hilfe-Button reagiert die Seite aber, und damit sieht das doch sehr nach einem harmlosen Fehler aus.

2010 - Die Entwicklung geht weiter...

Alles bisherigen Angriffe basierten auf den Entdeckungen von Jeremiah Grossman und Robert "RSnake" Hansen bzw. waren Variationen der von ihnen und z.B. Guy Aharonovsky vorgestellten Demos. Auch das in der vorigen Folge vorgestellte und oben näher beschriebene "Likejacking" bzw. "Buttonjacking" ist nichts weiter als so eine Variation.

Im März hat Lavakumar Kuppan das 'Bypassing CSRF protections with ClickJacking and HTTP Parameter Pollution' beschrieben. Damit ist es möglich, in JSP- und teilweise ASP.NET-Anwendungen den über zufällige Token-Werte implementierten Schutz vor Cross-Site Request Forgery zu umgehen.

Im April hat Paul Stone von Context Information Security auf der Sicherheitskonferenz BLACK HAT EUROPE 2010 einige neue Clickjacking-Angriffe vorgestellt. Dabei hat er z.B. Text in ein Text-Feld eingefügt, Inhalte ausgespäht und über iframes geprüft, ob ein Benutzer auf einer bestimmten Website eingeloggt ist. Zu seiner Präsentation gibt es ein Whitepaper und ein Clickjacking Tool.

Diese neuen Entwicklungen sind das Thema der nächsten Folge - hier auf ceilers-news.de!

Carsten Eilers

Update 13.5.2015
Aus Anlass des 5jährigen Blog-Jubiläums habe ich alle Clickjacking-Artikel zusammengefasst, überarbeitet, ergänzt und auf den aktuellen Stand gebracht. Das Ergebnis ist ein (natürlich kostenloses) eBook im ePub- und PDF-Format: 5 Jahre Blog - Als Special: "Clickjacking"-eBook
Ende des Updates vom 13.5.2015


Übersicht über alle Artikel zum Thema

Clickjacking - Angriffe auf Seiten ohne Schwachstellen
Clickjacking - Auch komplizierte Aktionen sind möglich
Clickjacking - Framebuster oder HTTP-Header verhindern Angriffe
Der Angriff der Clickjacking-Würmer, "Likejacking" und "Buttonjacking"
Clickjacking - "Likejacking" unter die Haube geguckt
Clickjacking - The next Generation
Clickjacking - Drag&Drop-Angriffe und weitere Neuigkeiten
Cookiejacking - Keksdiebe im Internet Explorer
Likejacking - Facebook im Visier der Cyberkriminellen
Clickjacking - Gute und Schlechte Nachrichten
Standpunkt: Clickjacking gegen Flash, urchin.js und Duqu - nichts als Wiederholungen!
Neue Angriffe auf Webanwendungen über Clickjacking und Cookies
Clickjacking-Angriffe verhindern - der aktuelle Stand der Dinge
Clickjacking: Cross Origin Resource Jacking und ein Clickjacking-BeEF-PlugIn
Clickjacking: "Zaubertricks" ermöglichen Likejacking und mehr
Dieses und Jenes zum Clickjacking
5 Jahre Blog - Als Special: "Clickjacking"-eBook

Trackbacks

Dipl.-Inform. Carsten Eilers am : Warum Sie ihre Website auf Schwachstellen testen sollten

"Warum Sie ihre Website auf Schwachstellen testen sollten" vollständig lesen
Ist Ihre Website sicher? Sind Sie sich da wirklich ganz sicher? Wenn nicht, ist jetzt eine gute Gelegenheit, Server und Anwendungen auf Schwachstellen zu testen. Bevor es andere tun und Sie womöglich erst aus der Presse erfahren, dass Ihre ei

Dipl.-Inform. Carsten Eilers am : Präsentationen und Links zu meinen #wtc11-Vorträgen sind online

"Präsentationen und Links zu meinen #wtc11-Vorträgen sind online" vollständig lesen
Ich habe soeben die Präsentationen zu meinen Vorträgen auf der WebTech Conference hochgeladen. Sie finden Sie auf www.ceilers-it.de/konferenzen/ sowie auch hier: Client Security im Web 2.0 und mit HTML5 Beschreibung: Schwachstel

entwickler.de am : PingBack

"PingBack" vollständig lesen

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

chrisweb am :

Man könnte das Script erweitern sodass, der erste klick des Benutzers den Like ausführt (indem der Klick vom unsichtbaren div welcher am Mauszeiger klebt abgefangen wird), zusätzlich dazu entfernt das Javascript dieses unsichtbare div, damit der nächste Klick die gewünschte Aktion ausführt, somit würde der Benutzer nur denken er hat sein Ziel beim klicken verfehlt oder sein Klick wurde wegen eines Laggs nicht ausgeführt.

Carsten Eilers am :

Genau.

Wer wundert sich schon über einen Klick, der nicht funktioniert hat, wenn danach alle andere funktionieren?

Die Steigerung wäre dann, das Likejacking über XSS in irgend eine normale, vertrauenswürdige Seite einzufügen und nach dem Abfangen des Klicks den kompletten XSS-Code zu löschen. Über den einen nicht funktionierenden Klick macht sich dann bestimmt keiner große Gedanken.

Kommentar schreiben

Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
BBCode-Formatierung erlaubt

Kommentare werden erst nach redaktioneller Prüfung freigeschaltet!