Skip to content

Phishing mit Tabs: Tabnabbing

Einen neuen Phishing-Ansatz hat Aza Raskin, der 'Creative Lead' für Firefox, beschrieben: Indem der Titel, der Inhalt und das Favicon eines gerade nicht im Fokus liegenden Browser-Tabs geändert werden, kann dem Benutzer darin eine vertrauenswürdige Webseite vorgetäuscht werden, in der er dann womöglich seine Zugangsdaten eingibt. Aza Raskin hat das nach einer Anregung von Brian Krebs als Tabnabbing bezeichnet (vor dem Öffnen des Links bitte unten den Hinweis zur Demonstration des Angriffs lesen). Die Änderungen funktionieren auch auf einer einzelnen Seite, sofern die aus dem Fokus genommen wird, z.B. weil der Browser in den Hintergrund geschoben wird. Dort fallen sie aber natürlich eher auf.

Anlocken und Abphishen

Ein Angriff könnte folgendermaßen ablaufen: Der Phisher lockt das Opfer auf seine Seite, z.B. ein harmlos erscheinendes Forum oder Blog. Wechselt das Opfer zwischendurch den Browser-Tab, tauscht der Phisher während der Abwesenheit des Opfers den Inhalt seines Tabs gegen eine Phishing-Seite aus, was Aza Raskin mit einem Bild der Login-Seite von Google Mail demonstriert. Auch der Titel und in manchen Browsern auch das Favicon lassen sich austauschen, lediglich der URL bleibt gleich. Später findet der Benutzer die angebliche Google-Mail-Seite, denkt, er hat sie vorher irgendwann geöffnet, und versucht sich einzuloggen: Der Phisher erhält die Zugangsdaten. Damit der Angriff nicht auffällt, kann er das Opfer nach dem erfolgreichen abphishen auf die richtige Google-Mail-Seite weiterleiten.

Ziele finden

Bei welchen Websites das Opfer Benutzerkonten besitzt, kann der Phisher durch das Ausspähen der Browser-History feststellen. Aza Raskin verweist dazu als Beispiel auf seinen CSS History Miner. Je nachdem, welche für ihn interessanten Websites der Phisher dabei findet, kann er dann eine entsprechende Phishing-Seite anzeigen.

Mit etwas Aufwand kann auch geprüft werden, ob die gewünschte Website bereits in einem anderen Tab geöffnet ist, was die Erfolgswahrscheinlichkeit erhöht, da sich das Opfer dann kaum über die zufällig auftauchende Seite wundert.

Angriffe über fremde Inhalte oder XSS-Schwachstellen

Websites, die Benutzern das Einfügen eigenen JavaScript-Codes oder das Einbinden von Inhalten von fremden Servern erlauben oder XSS-Schwachstellen enthalten, können als Ausgangspunkt für einen Phishing-Angriff missbraucht werden, indem der Phisher den Code dort einfügt statt eine eigene Seite zu erstellen.

Eine Demonstration des Angriffs

Aza Raskin hat seine Beschreibung des Angriffs gleichzeitig als Demonstration präpariert: Wenn Sie die Seite mindestens 5 Sekunden verlassen, verwandelt sie sich in eine Fake-Google-Mail-Seite. Um zurück auf die Beschreibung zu kommen, müssen Sie nur irgend wo hin klicken. Außer der Demonstration hat Aza Raskin auch ein Video der Demonstration erstellt:


A New Type of Phishing Attack von Aza Raskin auf Vimeo.

Die Demonstration funktioniert je nach verwendeten Browser unterschiedlich gut. Im Firefox lassen sich sowohl Seiteninhalt als auch Favicon austauschen, in Chrome vor Version 6.0.408.1 verhinderte ein Fehler den Austausch des Favicons. In Safari und Internet Explorer lässt sich das Favicon nicht austauschen, in Opera sollte das zwar funktionieren, dabei scheint es aber teilweise Probleme zu geben.

Eitan Adler hat einen Proof-of-Concept veröffentlicht, der ohne JavaScript auskommt: Er ersetzt die komplette Seite über einen meta-refresh-Tag.

Wie funktioniert Tabnabbing?

Tabnabbing ist erschreckend einfach, wie ein Blick in den von Aza Raskin bereitgestellten JavaScript-Quelltext zeigt. Zuerst einmal werden zwei Variablen initialisiert: Ein Timer und ein Boolean-Wert, um zu prüfen, ob die Demonstration bereits ausgeführt wird (was anfangs ja nicht der Fall ist). Der Timer wird gestartet, wenn der Benutzer den Tab verlässt, was durch den onblur-Event erkannt wird. Kehrt der Benutzer zurück, wird der Timer gelöscht.

var TIMER = null;
var HAS_SWITCHED = false;

// Events
window.onblur = function(){
  TIMER = setTimeout(changeItUp, 5000);
}  

window.onfocus = function(){
  if(TIMER) clearTimeout(TIMER);
}

Der Titel lässt sich durch einfaches Überschreiben von document.title ändern, was von Aza Raskin in eine Funktion ausgelagert wurde:

function setTitle(text){ document.title = text; }

Der Code zum Ändern des Favicons stammt aus dem Repository von Ajax Patterns (Favicon.js), die genaue Wirkungsweise soll hier nicht weiter interessieren.

favicon = {
  set: [...]

  get: [...]
};

Den Austausch des Tab-Inhalts hat Aza Raskin in der Funktion createShield() zusammengefasst. Zuerst wird ein div-Element erzeugt, dass später die Phishing-Seite aufnimmt. Die eigentliche Phishing-Seite besteht in der Demonstration aus einem Bild, ein Phisher würde hier eine HTML-Seite einfügen. Bevor das Bild ausgegeben wird, werden in der Demonstration der bisherige Titel und das bisherige Favicon gesichert. Die eigentliche Ausgabe der Phishing-Seite erfolgt mit den Anweisungen div.appendChild(img); zum Einfügen des img-Tags in das div-Element und document.body.appendChild(div); zum Einfügen des so vorbereiteten div-Elements in die eigentliche Seite. Dort überdeckt es dann die bisherigen Seiteninhalte.

function createShield(){
  div = document.createElement("div");
  div.style.position = "fixed";
  div.style.top = 0;
  div.style.left = 0;
  div.style.backgroundColor = "white";
  div.style.width = "100%";
  div.style.height = "100%";
  div.style.textAlign = "center";
  document.body.style.overflow = "hidden";
  
  img = document.createElement("img");
  img.style.paddingTop = "15px";
  img.src = "http://img.skitch.com/20100524-b639xgwegpdej3cepch2387ene.png";
  
  var oldTitle = document.title;
  var oldFavicon = favicon.get() ¦¦ "/favicon.ico";
  
  div.appendChild(img);
  document.body.appendChild(div);
  img.onclick = function(){
    div.parentNode.removeChild(div);
    document.body.style.overflow = "auto";
    setTitle(oldTitle);  
    favicon.set(oldFavicon)
  }
}

Der onclick-Event dient dazu, die durchgeführten Änderungen nach einem Klick wieder aufzuheben, damit die Beschreibung wieder sichtbar wird. Ein Phisher wird darauf i.A. verzichten und das Opfer stattdessen nach dem abphishen der Zugangsdaten auf die echte Seite weiterleiten.

Damit sind die Vorbereitungen abgeschlossen und die Demonstration kann starten: Wurde sie noch nicht durchgeführt, werden der Seiteninhalt, der Titel und das Favicon ausgetauscht und die durchgeführte Demonstration im Boolean-Wert notiert. Das sorgt dafür, dass die Demonstration nur einmal durchgeführt wird und man nicht jedes Mal erneut auf der "Phishing-Seite" landet, nachdem man den Tab mit der Beschreibung verlassen hat. Ein Phisher würde darauf natürlich ebenso wie auf die Restaurierung der Startseite verzichten.

function changeItUp(){
  if( HAS_SWITCHED == false ){
    createShield("https://mail.google.com");
    setTitle( "Gmail: Email from Google");    
    favicon.set("https://mail.google.com/favicon.ico");
    HAS_SWITCHED = true;    
  }
}

Die Funktion changeItUp() wird aufgerufen, wenn der Timer abgelaufen ist. Ein Phisher würde darin nur die Funktionen zum Austausch des Seiteninhalts, Titels und Favivons aufrufen:

function changeItUp(){
    createShield("https://mail.google.com");
    setTitle( "Gmail: Email from Google");    
    favicon.set("https://mail.google.com/favicon.ico");
}

Das ist erschreckend einfach, oder?

Gegenmaßnahmen

Aza Raskin schlägt als Gegenmaßnahme den kommenden Firefox Account Manager vor. Die Firefox-Erweiterung NoScript schützt ab Version 1.9.9.82 vor Tabnabbing, indem Refreshs in Tabs verhindert werden, solange die sich nicht im Fokus befinden, und erst ausgeführt werden, wenn der Benutzer sie wieder fokussiert hat. Für andere Browser gibt es keinen Schutz, dort müssen Sie darauf achten, ob der Inhalt eines Tabs zum angezeigten URL passt. Sicherer ist es, vor dem Besuch von für Phisher interessanten Seiten alle Tabs und Fenster zu schließen und die Seite dann in einem neuen Fenster aufzurufen.

Soviel vorerst zum Tabnabbing, auf das ich aber schon bald in einem anderen Zusammenhang zurückkommen werde. In der nächsten Folge geht es um "Das Einschleusen von Schadcode über mehr oder weniger harmlose Websites" oder kürzer: Drive-by-Infektionen.

Carsten Eilers

Trackbacks

Dipl.-Inform. Carsten Eilers am : Clickjacking - Drag&Drop-Angriffe und weitere Neuigkeiten

Vorschau anzeigen
In der vorherigen Folge erfuhren Sie, wie sich über Clickjacking Texte in Textfelder einfügen lassen. Ein Angreifer kann so Formulare auf fremden Seiten mit Texten seiner Wahl füllen. Es ist aber auch möglich, Texte von fremd