Frei nach der Devise „know your enemy“ möchte ich in diesem Post etwas auf weniger offensichtliche Möglichkeiten eingehen, wie mit CSRF attackiert werden kann. CSRF selbst habe ich übrigens hier genauer erklärt.
1) Feststellen, ob ein Benutzer bestimmte Seiten besucht hat
Es gibt ja bereits seit längerem die getComputedStyle-Technik. Dabei werden Links auf einer Webseite platziert und mittels Javascript ausgelesen, ob diese Links :visited sind. Alter Hut, genauer hier erklärt. Diese Technik ist allerdings in neueren Browsern nicht mehr möglich, die diese das Auslesen des Link-Status verbieten. Trotz allem gibt es noch eine Möglichkeit, um die es hier gehen soll. War der Benutzer bereits auf einer Webseite X, hat er die Bilder dieser Seite in seinem Browsercache. Was muss der Angreifer tun?
- Er sucht sich ein etwas größeres Bild einer Website aus, von der er wissen will, ob sein Opfer auf dieser Page war – In Zeiten von youporn kann das interessante Rückschlüsse ziehen.
- Er platziert dieses Bild mittels Javascript unsichtbar auf seiner Seite attacker.com und misst die Zeit, bis das Bild vollständig geladen wurden – Der Javascript onload-Handler machts möglich. Wenn das Bild nun in windeseile das onload-Eregnis auslöst, kann der Angreifer sichergehen, dass es sich im Browsercache des Opfers befunden haben muss.
var starttime = (new Date).getTime(); var i = document.createElement("img"); i.src = "http://files.youporn.com/images/logoblack.png"; i.onload = function() { var delay = (new Date).getTime() - starttime; alert("image loaded in " + delay + "msec"); } i.onerror = function() { alert("You have not visited this page"); }
2) CSRF DDoS-Attacken
Eine Distributed Denial of Service – Attacke bezeichnet das überschwemmen eines Servers mit Requests von mehreren Rechnern aus. Gerade ist das Thema auch aktuell, da radikale Wikileaks-Anhänger mastercard.com, paypal und weitere Seiten angreifen, die Wikileaks die Konten gesperrt hatten. Nun stelle man sich vor, der Angreifer möchte eine gewisse Seite drastisch verlangsamen oder sogar unerreichbar machen. Dabei muss er folgendes tun.
- Er sucht nach einem Aufruf, der viele Berechnungen auf Seiten des Opfer-Servers hervorruft. Denkbar wäre dazu etwa eine Volltextsuche in einem Forum über alle Kategorien.
- Diese URL platziert er dann beispielsweise in einem Scipt-Tag auf seiner Webseite und verbreitet diese in einem beliebten IRC-Channel oder an sonstigen prominenten Plätzen im Interet
- Die Besucher seiner Seite lösen im Hintergrund nun unbemerkt einen Request aus, der die rechenintensive Opfer-Seite aufuruft und somit einiges an Last erzeugt
<img src="funny-picture.png" /> <script src="http://www.victim.com/this/url/does/a/lot/of/calcultion.php"></script>
3) Informationen über das Intranet eines Users herausbekommen
Was wäre nun, wenn wir die unter 1) und 2) aufgelisteten Techniken verwenden, um Infos über das Intranet eines Users herauszukriegen? Wenn wir es also schaffen, Menschen auf unsere Seite zu lotsen, die an ihrem Arbeitsplatz sitzen und an diesem auch Zugang zum Firmen-Intranet haben, könnten wir ein paar hilfreiche Informationen herauskriegen. Typische Intranet-URLs sind bspw. 10.10.10.10. Wir requesten also in einem script-Tag ein paar typische Intranet-URLs und analysieren die Antwort. So lässt sich im Erfolgsfall zumindest mal der verwendete Server herausfinden – könnte ja ein veralteter Apache oder IIS mit vielen Sicherheitslücken sein. Wertvolle Informationen für den Angreifer für einen eventuellen späteren Angriff.