web-dev-qa-db-ja.com

信頼できるサーバーで不正なクライアントに対処するにはどうすればよいですか?

私の同僚と私は、MMO用の信頼できるサーバーを開発しています。 「不正な」クライアントの処理方法については合意できません。この場合の誤動作とは、侵害された/変更されたクライアントを示す可能性のある「奇妙な」要求を送信するクライアント、または通信ストリームに直接データを挿入する悪意のあるユーザーを意味します。

私たちの1人は、問題のある要求を中止し、クライアントのデータを保存し、クライアントの接続を強制的に閉じる(「強制終了する」)必要があると考えています。もう1つは、要求を中止し、「失敗した」応答をクライアントに返す必要があると考えています。

どちらのアプローチが最適かを判断できないため、行き詰まっています。私たちは両方とも議論を生み出しましたが、私たちのどちらかを揺さぶるのに十分なものは何もありませんでした。

参考までに、ここで検討したことがいくつかあります。

  • 切断されると、正当なユーザーに迷惑をかけますif「不正行為の検出」のコーディングを間違えます
  • クライアントを強制終了すると、「クリーンアップ」応答コードが不要になります。
  • クライアントを強制終了しないと、間違いを犯して不正なリクエストの処理を続行する可能性があります。
  • クライアントを強制終了すると、少なくとも再度ログインするまで、侵害されたクライアントが他の潜在的に悪い要求を送信するのを防ぐことができます。
  • 切断は詐欺師を阻止するのにあまり効果がないかもしれませんが、拒否応答は「兄貴が見ている」という感覚を引き出すかもしれません。

私たちの議論についてのフィードバックはありますか?どちらかを選択する理由は他にありますか?業界標準、またはベストプラクティスのコンセンサスさえありますか?

2
Xcelled
  • 「不正行為の検出」のコーディングを間違えると、接続が切断されると、正当なユーザーに迷惑がかかります。

適切なコードレビューにより、このような間違いを回避できます。

  • クライアントを強制終了すると、「クリーンアップ」応答コードが不要になります。

さらなる問題を防ぐために悪意のあるクライアントを「殺す」ことは重要ですが、個人的には、クライアント接続を「殺す」前に、悪意のあるソースに関する情報をできるだけ多く収集することをお勧めします。

  • クライアントを強制終了しないと、間違いを犯して不正なリクエストの処理を続行する可能性があります。

悪意のあるアクティビティを回避しないと、さらに悪用されるリスクがあります。

  • クライアントを強制終了すると、少なくとも再度ログインするまで、侵害されたクライアントが他の潜在的に悪い要求を送信するのを防ぐことができます。

これは最終的にはゲームのアーキテクチャと設計に依存しますが、提案されたMMOについて多くの詳細を知らなければ、このアクションは間違いなく即時の緩和策になりますが、攻撃のソースをログに記録することが重要です(日付/時間/ srcIP/dst IP /ポート/プロトコル/攻撃タイプ)インシデント対応。サイバー攻撃は避けられませんが、前述のデータを収集すると、さらなる脅威を検出、封じ込め、根絶するのに役立ちます。

2
injector