Samstag, 17. September 2011


Topthema

Donnerstag, 24. Januar 2008 | Topthema

About Security #140: Webwürmer (3): Yamanner

(Link zum Artikel: http://www.entwickler.de/php/kolumnen/040838)
  • Teilen
  • kommentieren
  • empfehlen
  • Bookmark and Share

Die Informationen in der folgenden Beschreibung des Yahoo!-Webmail-Wurms Yamanner stammen zum Teil aus dem Whitepaper "Malicious Yahooligans" (PDF) von Symantec. 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, dass 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]">

N E U ! Security aktuell
Täglich aktuelle Security-Infos!

Das ist gültiges HTML, und beim Laden wird der Wurmcode 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 Wurmcode gefunden und gelöscht worden.

Inzwischen wurde die Schwachstelle natürlich behoben, und obiges Ausgangstag wird 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 Wurmcode

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 so genannte '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 dem 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.

About Security: Die komplette Serie

Eine Version des Wurms gibt es z.B. hier im Internet, eine von mir formatierte und kommentierte Version hier.

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, sodass 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.

Ein letztes Beispiel: Der Orkut-XSS-Wurm

Der Orkut-XSS-Wurm breitete sich im Dezember 2007 in Orkut aus. In den 'scraps' genannten Nachrichten an Freunde ist HTML erlaubt. Der Wurm sendete zuerst eine Flash-Datei als Scrap, bei deren Betrachten eine Datei mit getarnten (obfuscated) JavaScript-Code geladen wurde. Der Wurmcode fügte das Opfer dann zur Gruppe "Infectatos pelo Virus do Orkut" ("Infiziert vom Orkut-Virus") hinzu und begann, die Flash-Datei als Scrap an die Freunde des Opfers zu senden. Die Gruppe soll bis zu 655.000 Mitglieder gehabt haben, entsprechend viele Opfer hat der Wurm also gefunden.

In der nächsten Folge gibt es eine Beschreibung des Orkut-Wurms, außerdem werden die Auswirkungen verschiedener Würmer miteinander verglichen.

Wenn Sie Fragen oder Themenvorschläge haben, können Sie diese gerne an die angegebene E-Mail-Adresse senden oder im Security-Forum einbringen!

Carsten Eilers

About Security – Übersicht zum aktuellen Thema "Sichere Webanwendungen – Webwürmer"

Kommentare

Folgende Links könnten Sie auch interessieren