Sicherheit: Flashspiel -> Highscore Liste



  • Hallo Leute.

    Folgendes Problem:
    Wir haben ein Spiel in Flash entwickelt und nun geht es darum eine Online Highscore Liste zu machen. Das Problem dabei ist, dass wir eine Manipulation der Highscore Liste verhindern wollen.

    Die Flash Anwendung schickt nun einen http Request eine ein PHP script indem die Userdaten und der Score stehen. Das laesst sich aber viel zu leicht manipulieren. Deshalb haben wir die User Daten + Salt gehasht und den hash ebenfalls mitgeschickt und das PHP Script hat anhand der User Daten wieder den hash ermittelt und verglichen ob die beiden hashes gleich sind.

    Das funktioniert aber leider auch nicht, da die SWF Dateien leider zu unsicher sind und dekompiliert werden koennen. Und so ist dann unser aktueller Hash Algorithmus geknackt worden und das war sehr aergerlich...

    Die eigentliche Frage ist: gibt es eine Moeglichkeit den Datenaustausch zwischen Flash Anwendung und Webscript sicherer zu gestalten? Ich nehme zwar nicht an, dass das moeglich ist - aber fragen kostet nichts 🙂

    Wie machen es andere Anbieter von Flash Spielen? Gibt es da eine Standard Prozedur?

    Eigentlich ist das ja nicht nur auf Flash limitiert sondern eigentlich fuer alle online highscore listen relevant...

    Danke schonmal.



  • https oO?

    achso ja ich gehe mal davon aus da du doch nicht nur den weg vom client zum server meisnt oder :p



  • PRIEST schrieb:

    https oO?

    achso ja ich gehe mal davon aus da du doch nicht nur den weg vom client zum server meisnt oder :p

    Es geht darum, dass der Client den Highscore kennt (und wir gehen mal davon aus dass er den richtigen kennt, was leider nicht immer gegeben ist) und diesen will er nun online stellen.

    Ein einfacher Request an den Server reicht dabei nicht, da den ja jeder auch selber absetzen koennte und sich 9999999mio Punkte eintragen kann.

    Das Problem ist, dass kein schluesselaustausch stattfinden kann, da der client nichts privates hat. alle daten die der client kennt sind quasi oeffentlich zugaenglich.



  • Shade Of Mine schrieb:

    PRIEST schrieb:

    https oO?

    achso ja ich gehe mal davon aus da du doch nicht nur den weg vom client zum server meisnt oder :p

    Es geht darum, dass der Client den Highscore kennt (und wir gehen mal davon aus dass er den richtigen kennt, was leider nicht immer gegeben ist) und diesen will er nun online stellen.

    Ein einfacher Request an den Server reicht dabei nicht, da den ja jeder auch selber absetzen koennte und sich 9999999mio Punkte eintragen kann.

    Das Problem ist, dass kein schluesselaustausch stattfinden kann, da der client nichts privates hat. alle daten die der client kennt sind quasi oeffentlich zugaenglich.

    Spiele machen das normal so, dass der Server überprüft ob das Ergebnis stimmen kann, oder gleich selber berechnet.
    Aber was hält mich davon ab dein Spiel per Memory-Scan zu analysieren und sobald ich die Speicheradresse der Highscore habe überschreibe ich die mit einem Wert meiner Wahl und lasse mich Game Over gehen?



  • Frag doch mal TGGC der hat doch schon einige Minigames mit Online-Highscore geschrieben.



  • Memory-Hacker schrieb:

    Spiele machen das normal so, dass der Server überprüft ob das Ergebnis stimmen kann, oder gleich selber berechnet.

    Es geht um Flash Spiele, ich kann ja nicht gut die ganze Zeit mich mit dem Server syncen...

    Aber was hält mich davon ab dein Spiel per Memory-Scan zu analysieren und sobald ich die Speicheradresse der Highscore habe überschreibe ich die mit einem Wert meiner Wahl und lasse mich Game Over gehen?

    Nichts, habe ich aber auch schon geschrieben.

    Und genau darum geht es eben -> wie kann ich das so sicher wie moeglich machen?



  • meine idee wäre, eine andere variable mitlaufen zu lassen, und immer bei highscore+=x passiert auch andereVar=(andereVar+3623*x)%65536
    und die andere schickste dann auch mit. kannste dann auch leicht die andereVar gegen die highscore prüfen, ob das sein kann. denn du hast mit modulo-arithmetik weniger probleme als der hacker.
    und dann lustig weiter kinkerlitzchen reinmachen, bei jedem levelup auch level*level dazumachen und den endlevel auch schicken. die andereVar mit (std::time(NULL)/1024)*5 initialisieren, damit der hacker öfters mal was andere zu sehen kriegt. bei sachen, die im spielablauf einfach geschehen müssen, was nachen, also wenn der elfenthron am ende von level8 erobert wird, mal schnell andereVar+=24. und dritte und vierte variablen nehmen, das lowest bit der spielermützenfarbe bietet sich natürlich an. ist alles nicht sicher, und spekuliert nur drauf, daß der hacker einfach die lust verliert.

    oder das ganz bis zu ende denken und *alle* inputs während des spiels, die irgendwie den spielverlauf beeinflussen, und den initial seed mitschicken und es fix auf dem server nachspielen. oder erstmal nur auf dem server speichern und ein externer pc darf nachts die spiele nachspielen und gemogelte highscores wieder rauslöschen.

    generell nicht sofort ungüötige sachen löschen oder ablehnen, sondern erstmal eintragen und verzögert löschen. damit der hacker auch schon beim probieren wahnsinnig wird. oder bei hackangriffen (mehr als 5 fehler in der letzten stunde von dieser ip) diese ip auf unbereinigte highscoreliste schalten.



  • spielstart: der client fordert eine session id vom server an. der server merkt sich, wann er die session gestartet hat.

    spielende: der client überträgt seine punktzahl samt session key. der server macht eine grobe plausibilitätsprüfung - 999 mio punkte in 5 minuten kann man so verhindern. danach wird der key ungültig.



  • sitzungsschlüssel schrieb:

    spielstart: der client fordert eine session id vom server an. der server merkt sich, wann er die session gestartet hat.

    Geht nicht, da der Angreifer sich dann ja selber beliebig Sitzungsschluessel besorgen kann 😉

    @volkard:
    die Idee mit highscores auf mehrere arten zu zaehlen gefaellt mir.

    verspaetetes loeschen muss ich mal abklaeren ob das zulaessig ist, aber generell waere das natuerlich sehr nice wenn der hacker seinen highscore wirklich sieht und immer ne halbe stunde warten muss oder so bis er weiss ob er erfolg hatte...



  • TGGC-Fan schrieb:

    Frag doch mal TGGC der hat doch schon einige Minigames mit Online-Highscore geschrieben.

    Hab ich doch schon gehackt.
    http://www.c-plusplus.net/forum/viewtopic-var-p-is-966170.html#966170

    Shade Of Mine schrieb:

    @volkard:
    die Idee mit highscores auf mehrere arten zu zaehlen gefaellt mir.

    verspaetetes loeschen muss ich mal abklaeren ob das zulaessig ist, aber generell waere das natuerlich sehr nice wenn der hacker seinen highscore wirklich sieht und immer ne halbe stunde warten muss oder so bis er weiss ob er erfolg hatte...

    Ja, eigentlich kannst du es nur kompliziert machen, aber du darfst halt keine Schwachstelle haben wo man nur ein bisschen eingreifen muss und schon ist es gehackt (siehe mein Hack oben).
    Ganz sicher geht nicht, vorallem bei dekompilierbarem Code. Ich hab auch schon mal überlegt, wie man sowas unknackbar machen kann, bin aber zu keinem Ergebniss gekommen, also findet auch kein anderer eine Lösung. :p



  • Shade Of Mine schrieb:

    sitzungsschlüssel schrieb:

    spielstart: der client fordert eine session id vom server an. der server merkt sich, wann er die session gestartet hat.

    Geht nicht, da der Angreifer sich dann ja selber beliebig Sitzungsschluessel besorgen kann 😉

    das stimmt natürlich. aber du kannst die plausibilität der punktzahl prüfen. und wenn man nur plausible highscores eintragen kann, wirds für ein scriptkiddy schnell langweilig.



  • die sache ist ganz einfach, den ganzen input aufzeichnen und mit an den server schicken, dann simuliert der server das einmal kurz durch und errechnet selbst den highscore

    dass sich niemand ein cheat toll schreibt (z.b. pc zeit verlangsamt um schneller reagieren zu koennen) kannst du eh nicht garantieren.



  • rapso schrieb:

    die sache ist ganz einfach, den ganzen input aufzeichnen und mit an den server schicken, dann simuliert der server das einmal kurz durch und errechnet selbst den highscore

    Danke.

    Genau das haben wir jetzt implementiert und dazu ein Ticket System, dass man auch wirklich immer die PHP Seite aufrufen muss auf der das Flash Spiel ausgeliefert wird.

    Bin gespannt welche Resultate das bringt. Haette naemlich nie gedacht was die Leute bei so dummen Flash Spielen fuer Aufwand zu knacken rein stecken...



  • Shade Of Mine schrieb:

    Bin gespannt welche Resultate das bringt. Haette naemlich nie gedacht was die Leute bei so dummen Flash Spielen fuer Aufwand zu knacken rein stecken...

    Wieso nicht? Gibt doch auf der anderen Seite auch genug Kontrollfreaks, die viel Aufwand bei so dummen Flash Spielen reinstecken.



  • GNU-Fan schrieb:

    Shade Of Mine schrieb:

    Bin gespannt welche Resultate das bringt. Haette naemlich nie gedacht was die Leute bei so dummen Flash Spielen fuer Aufwand zu knacken rein stecken...

    Wieso nicht?

    weil das ziel eines spieles spass sein sollte und nicht betruegen, denn so schaffen es einige wenige der massen diesen zu nehmen.

    @Shade Of Mine
    ich hoffe auf einen bericht 😉



  • Naja, es gibt ja immer wege es auszuhebeln.

    Bei TGGCs super geschütztem Mars Lander (als Beispiel) kann man ja z.B einfach nen Bot schreiben, der alle möglichen Zeitpunkte zum Bremsen ausprobiert und den besten dann automatisch ermittelt.
    Also wenn du schon was gegen das Cheaten der Ergebnisse tun willst, solltest du dir auch was gegen Bots ausdenken.
    (Wenn das Spiel wirklich erfolgreich wird, wird es auch bald Bots geben die es automatisch spielen (wie in Diablo2 WoW, diverse Shooter, Autorennen etc.) und besser sind als jeder Mensch, insbesondere wenn es auf schnelle Reaktionen ankommt.



  • MisterX schrieb:

    Naja, es gibt ja immer wege es auszuhebeln.

    Bei TGGCs super geschütztem Mars Lander (als Beispiel) kann man ja z.B einfach nen Bot schreiben, der alle möglichen Zeitpunkte zum Bremsen ausprobiert und den besten dann automatisch ermittelt.
    Also wenn du schon was gegen das Cheaten der Ergebnisse tun willst, solltest du dir auch was gegen Bots ausdenken.
    (Wenn das Spiel wirklich erfolgreich wird, wird es auch bald Bots geben die es automatisch spielen (wie in Diablo2 WoW, diverse Shooter, Autorennen etc.) und besser sind als jeder Mensch, insbesondere wenn es auf schnelle Reaktionen ankommt.

    Ich halte das Problem der Bots im Moment bei Spilen sogar für schlimmer als das "normale" cheaten. Weil:
    1. Es ist deutlich schwerer zu erkenen
    2. Es ist deutlich schwerer was dagegen zu tun
    3. Es frustriert normale meschliche Spieler mehr von nem Bot in den Highscores verdrängt zu werden, als von einem offensichtlichen cheat.
    (Wenn alle in nem bestimmten Spiel 1-200 Punkte haben und einer hat 99999999 ist das als Cheat sofort zu erkennen. Ob die, die 200 Punkte haben nen Bot eingeetzt haben ist nicht so leicht zu erkennen)



  • Die normalen Spieler spielen halt normal und die Hacker spielen halt anderes und nen Bot zu schreiben kann ja auch ganz interessant sein.



  • hehehe schrieb:

    Die normalen Spieler spielen halt normal und die Hacker spielen halt anderes und nen Bot zu schreiben kann ja auch ganz interessant sein.

    das sehen die meisten anders. sie sehen im exploiter nur den cheater mit kleinem penis und niederen beweggründen.

    ich habe z. b. in mmorpgs nach einer weile auch immer mehr spaß daran exploits zu suchen als das eigentlich spiel zu spielen. der vorteil den ich dabei eventuell gegenüber anderen spielern erlange, ist nebensächlich. es geht nicht ums gewinnen, es geht ums können.
    wie viel mehr gehirnschmalz und skill muss man auf aufbringen, um ein spiel um eine million goldstücke zu betrügen, als sie sich wie jeder andere mühsam zusammen zu ergrinden? das ist der reiz daran.

    das manipulieren des highscores in shade of mines kleinem spielchen war bis jetzt völlig uninteressant (außer vielleicht für dumme scriptkiddies). jetzt nicht mehr, wo er versucht schlauer zu sein als der cheater.



  • exploiter schrieb:

    das manipulieren des highscores in shade of mines kleinem spielchen war bis jetzt völlig uninteressant (außer vielleicht für dumme scriptkiddies). jetzt nicht mehr, wo er versucht schlauer zu sein als der cheater.

    es war aber auch uninterresant ein paar hundert scriptkiddies anzugehen. wenn jetzt jemand viel muehe investiert, lohnt sich auch eine anzeige gegen diese person aufzusetzen.


Anmelden zum Antworten