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!
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
Vorschau anzeigen
Dipl.-Inform. Carsten Eilers am : Präsentationen und Links zu meinen #wtc11-Vorträgen sind online
Vorschau anzeigen
entwickler.de am : PingBack
Die Anzeige des Inhaltes dieses Trackbacks ist leider nicht möglich.