Wie verhindere ich Identitätsspoofing in einem Multiplayer-Spiel?


9

Ich denke an Clients, die IP-Adressen fälschen und andere Clients dazu verleiten, der Server zu sein. solche Sachen. (Ich weiß nicht viel darüber. Wenn dies völlig falsch ist, korrigieren Sie mich bitte.)

Was soll ich tun, um dies zu verhindern? Da es sich um ein Echtzeitspiel handelt, würde ich bei Verwendung der Verschlüsselung etwas schnelles und sicheres wie RC4 verwenden. Soll ich Paketdaten mit einem Schlüssel verschlüsseln, den der Server dem Client gibt?

Wenn es einen Unterschied macht, verwende ich UDP.

Antworten:


8

Eine mögliche Lösung besteht darin, den Benutzer mit TCP + TLS zu authentifizieren. Verwenden Sie dann innerhalb desselben Kanals etwas wie Diffie-Hellman, um einen symmetrischen Schlüssel auszuhandeln. Schließlich verschlüsseln Sie jedes UDP-Paket mit einem symmetrischen Algorithmus wie RC4.

Sie müssen TCP + TLS technisch nicht verwenden, um den symmetrischen Schlüssel auszuhandeln, wenn Sie etwas wie SRP verwenden - denken Sie daran, dass sauberer Diffie-Hellman für einen MITM-Angriff anfällig ist .

Sie können noch weiter gehen und das benutzerdefinierte SEQ-Feld in Ihren UDP-Paketen verwenden (wenn Sie eine Form von zuverlässigem UDP verwenden), um eine Form der Gegenmodusverschlüsselung zu implementieren. Dabei fügen Sie die SEQ-Nummer dem ausgehandelten Schlüssel für jedes Paket hinzu. Dies macht es umso schwieriger, einen Angriff mit bekanntem Klartext durchzuführen.

Lassen Sie Ihren Server nicht einfach nach Belieben Schlüssel verteilen - ein "gefälschter" Server kann genauso gut seinen eigenen Schlüssel verteilen. den Zweck Ihres gesamten Verschlüsselungsschemas zunichte machen. Der einzig sichere Weg ist, entweder TLS oder gegenseitiges Wissen (wie ein Passwort / Hash) zu verwenden.


Können Sie genau beschreiben, welche Sicherheitslücken dadurch geschlossen werden? Ich habe von IP-Spoofing und dergleichen gehört, bin aber nicht über das Thema
informiert

@ LiamE-p GameDev ist nicht der Ort für einen Crashkurs über Sicherheit; Ich habe auch keine Zeit, eine zu verteilen. Grundsätzlich sollten SRP und TLS (entweder) genauso sicher sein wie Ihre Online-Banking-Website - SRP mehr noch im CTR-Modus. Wenn Sie weitere Erklärungen benötigen, wenden Sie sich an die Security SE-Website.
Jonathan Dickinson

Dies wäre definitiv ein Thema der Security SE. Ich werde einen Mod markieren, um ihn dort zu migrieren.
Rory Alsop

8

Ich habe einen fernen Hintergrund (vor 2 Jahren) im Bereich Hacking. Die schwierigsten Pakete, die jemals geknackt wurden (und was ich Ihnen vorschlage), verwenden eine symmetrische Schlüsselverschlüsselungsmethode, die Jonathan Dickinson kurz beschrieben hat. Sie sollten TCP + TLS verwenden, wie er auch erwähnt hat. Er sagte jedoch eine Gegensequenz.

Ich bin in Zeiten geraten, in denen ein "hack-Proof" -System eines Programmierers leicht gefälscht wurde, weil es ein so seltsames Zählsystem hat, dass ich es ohne Programmierkenntnisse und algebraische Logik im ersten Jahr knacken könnte. Solange Sie eine geeignete sequentielle Methode auswählen, sollte Ihr Ziel Daten genau wie erwartet empfangen. Dies bedeutet auch, dass Sie TCP für die sichersten Vorgänge verwenden sollten.

Zurück auf dem Weg zu "In meinen Erfahrungen" funktioniert ein System, das ich gefunden habe, fantastisch. Eine sequentielle Methode, die auf der gesendeten Zeit und der erwarteten Zeit basiert. Da die Pakete immer in der richtigen Reihenfolge empfangen werden müssen, war es fast unmöglich, ein Paket zu fälschen, da ich nie vorhersagen konnte, wann ein Paket gesendet werden würde und wann es erwartet wurde (zwischen einem Paket und einem anderen), ohne zuerst das Client-Programm zu hacken.

Die kurze Antwort

Kurz gesagt: Jede Paketstruktur hätte auch einen Zeitstempel, wie wenn er auf die Millisekunde heruntergesendet wurde. Das ist verdammt einfach und es ist wirklich einfach zu überprüfen, ob eine Zeit vor / nach einer anderen Zeit liegt. Der Grund, warum dies so sinnvoll ist, liegt darin, dass der Server möglicherweise weiterhin Pakete in der Reihenfolge des Spoofings empfängt, ohne dass Zeit für die Authentifizierung bleibt.

Dies ist offensichtlich nicht die einzige sequentielle Methode oder sogar die beste einer Methode. Ich habe nur festgestellt, dass es sehr gut funktioniert. In Kombination mit TCP + TLS sollten Sie nicht zu viele Probleme haben.


Das Problem bei Spielen ist, dass Dinge im Sub-Millisekunden-Bereich passieren.
Jonathan Dickinson

@ JonathanDickinson Das ist völlig richtig. Bei Verwendung von UDP und insbesondere bei Verwendung von TCP sollten Dead-Reckoning-Algorithmen für Sub-Millisekunden- und sogar viele Millisekunden-Operationen verwendet werden. Das soll natürlich die Geschwindigkeit, die Grafik und einige Dinge hinter den Kulissen verbessern. (meistens geschwindigkeitsbezogen)
Joshua Hedges

6
Ich denke am Ende des Tages ist es ein Spiel und kein Todesstrahl-Satellitensteuerungssystem. +1
Jonathan Dickinson

4

Persönlich würde ich nicht zu früh über Bord gehen. Selbst wenn Sie Ihre Pakete verschlüsseln, wie es Jonathan empfiehlt, greifen Hacker wie mein Bruder nur auf die Paketdaten zu, bevor sie verschlüsselt werden. Wenn böswillige Benutzer mitmachen möchten, finden sie einen Weg hinein.

Jetzt, da dies nicht mehr möglich ist, gibt es für Indie-Entwickler Möglichkeiten, den Schaden zu minimieren, den böswillige Benutzer anrichten können. Sie sollten wahrscheinlich Ihre ausgehenden Pakete verschlüsseln, aber das wird nur bestimmte Arten von Angriffen stoppen. Machen Sie sich keine Gedanken darüber, dass es jetzt "hackfest" ist. Um Hacker wirklich auszuschalten, geben Sie den Clients so wenig bahnbrechende Kontrolle wie möglich. In einem dieser großen MMOs konnten die Clients dem Server mitteilen, wie viel XP sie verdient haben. Ratet mal, was dort passiert ist? Tu das nicht. Lassen Sie den Client dem Server mitteilen, dass er einen Superzauber auf die Kreatur wirken möchte, und lassen Sie den Server die Aktion auflösen und die EP hinzufügen, wenn die Kreatur tot ist. Die Clients sollten dünne, dumme Terminals sein, die Befehle senden und empfangen können und bei Bedarf Vorhersagen treffen können.das Spiel und reagieren auf Befehle von den Clients gesendet.

Große Spielefirmen verwenden die oben genannten Funktionen zusätzlich zu VAC oder PunkBuster , um zu verhindern, dass bekannte Hacker weiterhin zahlende Kunden stören. Wie diese Sicherheitsmaßnahmen funktionieren, wird ziemlich geheim gehalten, aber ich kenne eine Methode, die sie verwenden: Sie scannen derzeit laufende Anwendungen und vergleichen diese mit Listen bekannter Hacks. Sobald Sie beim Schummeln erwischt wurden, können Sie keinen VAC / PunkBuster-gesicherten Servern beitreten.

Verwandte: Spielelogik auf dem Server! Gut oder schlecht?

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.