You’ve been hacked! - Der Yahoo!-Webmail-Wurm Yamanner

Die Informationen in der folgenden Beschreibung des Yahoo!-Webmail-Wurms Yamanner stammen zum Teil aus dem Whitepaper "Malicious Yahooligans" (PDF) von Symantec. Der Code des Wurms wurde u.a. auf groovin.net veröffentlicht, die von mir formatierte und kommentierte Version basiert darauf.

Yamanner nutzte eine Schwachstelle im JavaScript- und HTML-Filter von Yahoo! Mail für seine Verbreitung: Die Daten wurden einmal geprüft, dabei gefundene unerwünschte Bestandteile gelöscht, und das Ergebnis dann ohne weitere Prüfung verwendet. Schon aus dieser Beschreibung lässt sich eine Angriffstaktik ableiten: Man kombiniert den JavaScript-Code so, das nach dem Löschen von unerwünschten Bestandteilen funktionsfähiger (Schad)code übrig bleibt. Und genau so wurde der Wurm auch tatsächlich eingeschleust. Einfallstor war folgendes <img>-Tag:

<img src='http://us.i1.yimg.com/us.yimg.com/i/us/nt/ma/ma_mail_1.gif' 
   target=""onload="[Wurm-Code]">

Eigentlich sollte in den "-Zeichen hinter target ein Frame oder eine Seite als Ziel für das zu ladende Bild angegeben werden. Stattdessen folgt direkt darauf, ohne trennendes Leerzeichen, ein onload-Attribut. Der Grund für diese merkwürdige Formatierung ist Yahoo!s HTML-Filter, der target-Attribute ausfiltert. Damit ergibt sich nach dem Filtern

<img src='http://us.i1.yimg.com/us.yimg.com/i/us/nt/ma/ma_mail_1.gif' 
   onload="[Wurm-Code]">

Das ist gültiges HTML, und beim Laden wird der Wurm-Code im onload-Attribut ausgeführt. Der Yahoo!-Filter machte nur einen Durchlauf und prüfte das Tag nach dem Entfernen des target="" nicht noch einmal. Bei einem zweiten Durchlauf wäre das onload-Attribut mit dem enthaltenen Wurm-Code gefunden und gelöscht worden.

Nach dem Ausbruch des Wurm wurde die Schwachstelle natürlich behoben (und der Wurm dadurch gestoppt), und obiges Ausgangstag wird seitdem in

<img src='http://us.i1.yimg.com/us.yimg.com/i/us/nt/ma/ma_mail_1.gif' 
    onfiltered="[Wurm-Code]">

umgewandelt. Während das target-Attribut weiterhin gelöscht wird, wird das onload-Attribut durch Umwandlung in das ungültige onfiltered unbrauchbar gemacht: Der enthaltene Code wird nicht mehr ausgeführt.

Der Wurm-Code

Sobald ein Benutzer eine wurmverseuchte E-Mail in Yahoo! Webmail öffnete, wurde der Wurmcode ausgeführt. Alle Aktionen des Wurms wurden über XMLHttpRequests im Hintergrund durchgeführt. Der erste Schritt bestand darin, den aktuellen Server festzustellen. Da Yahoo! seine Webanwendungen über eine Vielzahl von Servern verteilt, musste für die XMLHttpRequests der aktuell verwendete Server ermittelt werden. Danach wurde über die "QuickBuilder"-Funktion in allen verfügbaren Verzeichnissen nach Adressen gesucht, die noch nicht im Adressbuch des Opfers gespeichert waren. Die ersten 100 gefundenen Adressen wurden daraufhin geprüft, ob sie auf @yahoo.com oder @yahoogroups.com enden (denn nur dort konnte der Wurm ja ausgeführt werden). Außerdem wurde die Adresse des Opfers und des Senders des Wurms aus den von Yahoo! ausgefüllten Formularfeldern gelesen, damit der Wurm sich nicht selbst an ein vorheriges Opfer schickt. An die für den Wurm brauchbaren Adressen wurde dann eine Kopie des Wurms geschickt: Eine der Adressen wurde in das To:-Feld eingetragen, alle anderen in das BCC:-Feld. Bevor die Mail abgeschickt werden konnte, musste der sog. 'crumb' ermittelt werden, ein zufällig erzeugter Hashwert, mit dem Yahoo! das automatische Versenden von Mails verhindert.

Nachdem der Wurmcode ausgeführt wurde, wurde der Benutzer auf eine andere Website weitergeleitet, wobei verschiedene Parameter übertragen wurden: Zum einen die gefundenen E-Mail-Adressen, zum anderen verschiedene Parameter aus der Yahoo!-URL, die vermutlich zur Tarnung der Mailadressen dienten, die dadurch in der URL-Zeile nicht mehr sichtbar waren. Auf der als Ziel dienenden Seite wurde Werbung eingeblendet, der Wurm sollte also wahrscheinlich für reichlich Traffic und damit verbunden höhere Einnahmen des Wurm-Autors sorgen.

Laut Internet Storm Center gibt es zwei Varianten des Wurms, bei der zweiten wurden Fehler korrigiert. Beide funktionierten aber aufgrund weiterer Fehler nicht so, wie vom Autor gedacht. Z.B. sollte ein Browserfenster für www.lastdata.com geöffnet werden, was aber an einem Schreibfehler (www,lastdata.com) scheiterte.

Die Folgen

Das Ziel der Weiterleitung enthielt einen Besucherzähler, so das die Infektionsrate ermittelt werden konnte. Am 11. und 12. Juni 2006 wurden ungefähr 200.000 Mail-Accounts infiziert. Danach wurde der Wurm durch eine Korrektur des JavaScript-Filters ausgerottet.


Weiter zum Wurm-Code oder zurück zur Kapitel-Startseite oder zur Doku-Startseite