dimis linkdump

Posts tagged ‘Clickjacking’

Clickjacking bei Facebook

März 13th, 2011

Weil’s grade extrem rumgeht: Klickt doch nicht immer alles an…

Ein kleiner Blick in den Quelltext offenbart:

Eine JavaScript-Funktion positioniert ein 2×2 Pixel großes iFrame immer direkt unter der Maus. Mit dem ersten Klick auf der Seite drückt man gleichzeitig den “Like”-Button… ohne das Video überhaupt gesehen zu haben.

Update:

Die echte Youtube-URL steht übrigens auch im Quelltext… :)

Update 2:

Andere Beispiele:

http://nakedsecurity.sophos.com/2011/03/12/japanese-tsunami-launches-whale-into-building-its-a-facebook-clickjack-scam

http://nakedsecurity.sophos.com/2011/03/12/what-is-foutube-viral-facebook-clickjacking-video-scams-explored

Es schwirrt wieder eine Meldung über einen Angriffsvektor gegen diverse Router durch die Online-Zeitschriften. Doch was steckt hinter dieser “hochgradigen” Gefahr?

Wer sich jetzt denkt: “Was schreibt der denn da fürn Quatsch?” Der möge sich doch kurz diesen Artikel durchlesen: PCWelt oder direkt bei TecChannel.

Leider hört TecChannel genau da auf, wo es interessant wird. Grundlos wie ich finde, denn wer diesen Angriff nachstellen will, schafft das auch ohne TecChannel. :)

Also, mich hat das Interessiert und deswegen hab ich es mir genauer angeschaut. Leider habe ich grade keine Fritzbox da – deswegen hab ich einfach mal mein AP zur Hilfe genommen. (Hersteller: a quip – fragt mich nicht welches Modell genau. Ist ein einfacher, 30 Euro AP).

Bei diesem AP ist es relativ einfach eine solche CSRF-Attacke durchzuführen. Einstellungen und Parameter werden über GET-Variablen übergeben. Wenn man sich mal die Seite zum Ändern aquip_passwddes Passworts anschaut  findet man, neben einigen Javascript-Funktionen, das hier links dargestellte Formular in Quelltextform.

Dort sieht man, was beim ändern des Passworts  passiert: Nachdem man die Passwörter eingegeben hat, klickt man auf Apply und löst damit ein Javascript-Event (onclick) aus, welches anschließend eine Javascript-Funktion (OnSave()) aufruft. Diese macht einige Umformungen und ruft letztendlich eine URL auf, die ungefähr so aussieht:

http://192.168.2.2/TaUpdate/twl54a.lk?ID=7&User=62656E75747A65726E616D65&OldPass=626C7562626572&Pass=647562697374646F6F66

In dieser URL sind die Werte (altes Passwort, neues Passwort,..) als Hex codiert. Indem diese URL aufgerufen wird, ändert sich das Passwort vom AP.

Jetzt muss man einen User nur noch dazu bringen, diesen Link aufzurufen oder bettet ihn einfach als Bild in eine Webseite ein – und das Passwort am Router ändert sich.

<img src=http://192.168.2.2/TaUpdate/twl54a.lk?ID=7&User=62656[..] alt=””></img>

Wenn ich also ein solches img-Tag auf it-blogger.net einbinde, ändert sich das Passwort von allen, die den gleichen AP haben ;)

Es gibt allerdings auch einige Einschränkungen:

  • Der User muss momentan auf dem Webinterface des Routers sein oder
  • er muss es in letzter Zeit mal geöffnet haben oder
  • der Router arbeitet ohne Authentifizierung
  • die IP muss bekannt sein
    Besonders einfach ist die Sache natürlich, wenn ein Router das Passwort allein durch den Aufruf einer URL ändert (wie hier). Nur wenig komplizierter wird es, wenn die eingegebenen Passwörter über POST-Variablen geändert werden. Das wird, schätze ich, bei der FritzBox der Fall sein. Aber auch hier lässt sich z.B. über JavaScript eine CSRF-Attacke ausführen.

Mit der XMLHttpRequest-API lassen sich beliebige HTTP-Abfragen mit JavaScript erstellen. Dieses JavaScript bettet man anschließend in eine Webseite sein, die z.B. über eine XSS-Schwachstelle am Router diesem den Code unterschiebt.

<script type=”text/javascript”>
var xmlHttp = null;
xmlHttp = new XMLHttpRequest();
if (xmlHttp) {
xmlHttp.open(‘POST’, ‘index.php’, true);
xmlHttp.onreadystatechange = function () {
};
xmlHttp.setRequestHeader(‘Content-Type’, ‘application/x-www-form-urlencoded’);
xmlHttp.send(“pass=11111111&pass2=222222222222″);
}

Hier sendet das Skript die Post-Variablen “pass” und “pass2” an die index.php. Um hier z.B. das Passwort der FritzBox zu ändern, müsste man natürlich den Quelltext analysieren und die Variablen entsprechend anpassen.

Nun könnt ihr ja selbst entscheiden die hochgradig die Gefahr ist ;)

Definition Clickjacking:

Clickjacking ist eine Technik, bei der ein Computerhacker den Nutzer einer Internetseite dazu veranlasst scheinbar harmlose Mausklicks und/oder Tastatureingaben durchzuführen. Die entsprechende Internetseite wurde dabei allerdings vorher so manipuliert, dass ein unsichtbares oder nur sehr kurz sichtbares Fenster über der Stelle liegt, an der der Nutzer seine Eingaben tätigt.

wikipedia.de

Und nun ein berühmtes Video zum Thema Clickjacking (funktioniert inzwischen nicht mehr – Adobe hat reagiert):

Es gibt wahrscheinlich hunderte Arten von Clickjacking. Bei dem Video oben wird einem User ein Spiel vorgegaukelt. In Wahrheit schaltet er den Zugriff auf seine Webcam über Flash frei.

Eine andere Art hat ein User namens “MrDoug” demletzt veröffentlicht. Diese funktioniert nur im Firefox (und Chrome) und ist einfach und doch genial. Ich habe euch eine kleine Vorführung programmiert, basierend auf der Veröffentlichung von “MrDoug”:

http://it-blogger.net/files/clickjacking.htm

Man beachte dabei, dass Firefox hier einen echten Link erkennt und auch als Ziel “www.google.de” anzeigt. (links unten im Bild). Eigentlich ist der Link auch ein “echter” Link mit Ziel www.google.de. Allerdings weiß der Browser nicht, was nach dem Klick auf den Link passiert:

  1. Über Javascript wird, nach dem Klick auf den Link, die Position des Mauszeigers ermittelt. Genauer: Die Abstände des Mauszeigers nach oben und nach links.

    Clickjacking - Vorführung

    Clickjacking - Vorführung

  2. Nachach wird, auch über Javascript, ein div-Container genau an die vorher ermittelte Stelle des Mauszeigers plaziert. D.h. unter dem Mauszeiger liegt nun eine kleine Fläche (2 x 2 Pixel). Für diese kleine Fläche wurde vorher über Javascript definiert, dass sobald der Mauszeiger diese Fläche berührt, eine andere Webseite geladen wird. (Im Beispiel www.it-blogger.net).  (Ich habe die Fläche schwarz eingefärbt – d.h. sie ist am Anfang links oben sichtbar und nach den Klick, findet Ihr sie direkt unter eurem Mauszeiger. Ihr müsst genau hinschauen ;) )
  3. Da sich ja nun die kleine Fläche direkt unter unserem Mauszeiger befindet, bedeutet das für den Browser, dass www.it-blogger.net geladen werden soll. Genau das macht der Browser dann auch. Er läd www.it-blogger.net statt www.google.de – obwohl www.google.de als Linkziel angezeigt war.

Statt www.it-blogger.net könnte man natürlich auch jede Seite mit Ref-Links oder sonst irgendwas laden – die User würden das erst nach dem Klick merken.

Das Ganze funktioniert momentan im Firefox und Chrome. Opera und der IE laden brav die richtige Seite…

RSS-Feed Creative Commons License