マルチプレイヤーゲームでIDのなりすましを防ぐにはどうすればよいですか?


9

クライアントがIPアドレスを偽装し、他のクライアントをだましてサーバーにだましていることを考えています。そのようなもの。(私はこれについてあまり知らないので、これが完全に間違っている場合は、私を修正してください。)

これを防ぐにはどうすればよいですか?リアルタイムゲームなので、暗号化を使用する場合は、RC4のような高速で安全なものを使用します。サーバーがクライアントに提供するキーでパケットデータを暗号化する必要がありますか?

違いがある場合は、UDPを使用しています。

回答:


8

1つの可能な解決策は、TCP + TLSを使用してユーザーを認証することです。次に、同じチャネル内で、Diffie-Hellmanなどを使用して対称鍵をネゴシエートします。最後に、RC4のような対称アルゴリズムを使用して、各UDPパケットを暗号化します。

技術的には、SRPなどを使用する場合、TCP + TLSを使用して対称キーをネゴシエートする必要はありません。クリーンなDiffie-HellmanはMITM攻撃に対して脆弱であることを覚えておいてください。

さらに進んで、UDPパケットのカスタムSEQフィールドを使用して(信頼できるUDPの形式を使用している場合)、カウンターモードの暗号化の形式を実装することができます。ここで、各パケットのネゴシエートされたキーにSEQ番号を追加します。既知のプレーンテキスト攻撃を仕掛けるのをはるかに困難にします。

サーバーが自由にキーを渡せるようにしないでください。「スプーフィング」サーバーは、独自のキーと同じくらい簡単に渡すことができます。暗号化スキーム全体の目的を打ち破る。唯一の確実な方法は、TLSまたは相互知識(パスワード/ハッシュなど)を使用することです。


これによりどのような脆弱性が解消されるかを正確に説明できますか?IPスプーフィングなどについて聞いたことがありますが、そのトピックについては教育を受けていません
liamzebedee

@ LiamE-p GameDevは、セキュリティについてのクラッシュコースの場所ではありません。また、私はそれを手渡す時間もありません。基本的に、SRPとTLS(どちらか)は、オンラインバンキングのウェブサイトと同じくらい安全でなければなりません。さらに詳しい説明が必要な場合は、Security SEのWebサイトで確認してください。
ジョナサンディキンソン2011

これは間違いなくセキュリティSEに関するトピックです。そこに移行するmodのフラグを立てます。
ロリー・アルソップ、2011

8

ハッキングには遠い(2年前)経歴があり、これまでに解読するのが最も難しいパケット(および私が使用することを提案するもの)は、Jonathan Dickinsonが簡単に説明した対称キー暗号化方式を使用しています。彼も言及したように、TCP + TLSを使用する必要があります。しかし、彼はカウンターシーケンスを言った。

プログラマーの「ハックプルーフ」システムが、プログラミングの知識と1年目の代数論理なしで解読できる奇妙な数え上げシステムを持っているため、簡単になりすまされている時代に出くわしました。適切な順次方式を選択する限り、ターゲットは期待どおりにデータを受信する必要があります。つまり、最も安全な操作にはTCPを使用する必要があります。

「私の経験」に戻ると、私が見つけたシステムの1つは素晴らしく機能しています。送信時間と予想時間に基づく順次方式。パケットは常に適切な順序で受信される必要があるため、最初にクライアントプログラムをハッキングしないと、パケットが送信されるタイミングと予想されるタイミング(あるパケットと別のパケット)を予測できなかったため、パケットを偽装することはほぼ不可能でした。

短い答え

つまり、各パケット構造には、ミリ秒まで送信されたときのタイムスタンプも含まれます。それはいまいましいシンプルで、時間が別の時間の前か後かを確認するのは本当に簡単です。これが意味をなす理由は、サーバーが認証のための時間なしに、スプーフィングで順番どおりにパケットを受信する可能性があるためです。

これは明らかに唯一の逐次的な方法ではなく、どの方法でも最高の方法です。それが非常にうまく機能するのは、私が見つけたものの1つにすぎません。TCP + TLSと組み合わせると、多くの問題が発生することはありません。


ゲームの問題は、ミリ秒未満のレベルで発生することです。
ジョナサンディキンソン

@JonathanDickinsonそれは真実です。ただし、UDPを使用し、特にTCPを使用する場合は、ミリ秒未満のオペレーションや数ミリ秒のオペレーションでも推測航法アルゴリズムを使用する必要があります。これは、スピード、ビジュアル、そして舞台裏などを支援するためのものです。(主に速度関連)
ジョシュアヘッジ

6
結局のところ、それはゲームであり、死光線衛星制御システムではないでしょう。+1
ジョナサンディキンソン

4

個人的には、早すぎることはしません。ジョナサンが推奨しているようにパケットを暗号化したとしても、私の兄弟のようなハッカーは暗号化される前にパケットデータにアクセスするだけです。悪意のあるユーザーが侵入を望んでいる場合、侵入者が侵入します。

これで問題は解決しましたが、インディーズの開発者が悪意のあるユーザーが与える可能性のある被害を最小限に抑える方法があります。おそらく送信パケットを暗号化する必要がありますが、これは特定の種類の攻撃のみを阻止します。だまされて、今では「ハッキングの証拠」であると考えてはいけません。本当にハッカーをオフにするには、クライアントにゲームを変えるようなコントロールをできるだけ与えないようにします。これらの大きなMMOの1つは、クライアントがサーバーに獲得したXPを伝えることを可能にするために使用されました。そこで何が起こったと思いますか?それをしないでください。クライアントに、クリーチャーにスーパースペルをキャストすることをサーバーに通知し、サーバーにアクションを解決させ、クリーチャーが死んだときにXPを追加させます。クライアントは、コマンドを送信および受信でき、予測を行うことができる(必要な場合)薄い、ダムのない端末でなければなりません。ゲームやクライアントによって送信されたコマンドに反応します。

大規模なゲーム会社は、VACPunkBusterなどに加えて上記のものを使用して、既知のハッカーが支払い中の顧客を妨害し続けるのを防ぎます。これらのセキュリティ対策の仕組みはかなり秘密にされていますが、私はそれらが使用する1つの方法を知っています。現在実行中のアプリケーションをスキャンし、既知のハックのリストと比較します。不正行為を見つけたら、VAC / PunkBusterで保護されたサーバーに参加できなくなります。

関連:サーバー上のゲームロジック!良いまたは悪い?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.