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.
Trackbacks
Dipl.-Inform. Carsten Eilers am : Clickjacking - Drag&Drop-Angriffe und weitere Neuigkeiten
Vorschau anzeigen