web-dev-qa-db-ja.com

「クライアントを信用できない」場合、Valveなどの企業がクライアント側の検証のみに依存するのはなぜですか?

ビデオゲームでは、ほとんどのanticheatソフトウェアはクライアントサイドで実行されます(PunkBusterやValve Anti-Cheatなど)。もしそうなら、なぜこれらの企業はビデオゲームのサーバー側検証を提供せず、クライアントを信頼することを主張し続けるのでしょうか?

36
user189790

もしそうなら、なぜこれらの企業はビデオゲームのサーバー側の検証を提供せず、クライアントを信頼することを主張し続けるのでしょうか?

それはクライアントを信頼することを主張することではなく、他に実行可能なアンチチートモデルがないことです。 DRMのように、そして実際には、PBのようなチート対策ソフトウェアはDRMの形式を使用しており、実行できることはほとんどありません。

DRMソフトウェアは、クライアントが過剰に突入しないようにするための緩和策を講じていますが、メディア企業がクライアントに望まないことをクライアントが実行しないようにするには、クライアントに適用する必要があります。

アンチチート技術は、同様の方法論に依存しています。クライアントに関する情報が収集され、サーバーに送信されます。特定のソフトウェアに対して行われた一連のチェックを通じて、クライアントが動作に問題があると見なされた場合は、サーバーで禁止できます。

結局のところ、それはリスク管理にかかっています。はい、クライアントがセキュリティの最初の原則の1つであることを信頼しないでください。しかし、クライアントで発生するリスクを軽減するために、リスク管理とは何かである費用便益分析があります。クライアントにボットを続けさせ、公正で楽しいゲームを望んでいる顧客を失う価値があるのか​​?あるいは、いくつかの緩和策を講じるべきでしょうか? PBやその他のソフトウェアパッケージは、不正行為を完全に止めるためのものではありませんが、不正行為をより高価にすることを目指しています。

また、クライアントをチートに制限するもう1つのより巧妙な方法(ウォールハックなど)もあり、主にオンラインのみのゲームに関係していますが、これに限定されません。これは、クライアント側にすべてのデータを供給しないことによって実現されます。たとえば、アンリアルエンジン3は、俳優があなたの視界の近くにあるかどうかをチェックします。このチェックが正の場合、サーバーはあなたに正確な位置と相手のYOURSを送信します。つまり、サーバーのみが、ゲームインスタンス上のすべてのアクターのすべての位置、アクション、および動きを認識しています。

これは、不正行為の段落のアンリアルエンジン3 /クライアントサーバーモデルのドキュメントで読むことができます。 https://udn.epicgames.com/Three/ClientServerModel.html

つまり、高度なエンジン/ネットワークコードとクライアントサーバーモデルでは、クライアントを100%信頼する必要はありません。サーバーは、クライアントが知っておくべきことを事前に決定でき、ハッキングの可能性を効果的に制限します。さらに進むと、サーバーは、偽造されたパケットを送信するクライアントに気を取られたり混乱したりすることなく、自分自身が何を知っているべきかを決定できます。

47
h4ckNinja

クライアント側のアンチヒートソフトウェア自体は、セキュリティに関するものではなく、ゲームプレイ(および顧客)のエクスペリエンスに関するものです。

したがって、セキュリティルールはほとんど適用されません。クライアントを信頼することは、「ヒットピクセル1056 x 1723」を信頼することと、「1000ドルをNigeraに送金できる」こと、またはクライアントが「ボブのメールにアクセスできること」を信頼することとは大きく異なります。

私は特に金融取引を除外していることに注意してください。エイムボットや大きなヘッドチートなどのゲームプレイチートだけです。

21

最初: 100%サーバー側の検証を使用し、クライアントを信頼しないゲームはたくさんあります。一例:オンラインポーカー

あなたは単に彼が知ることができないどんなカードの価値もクライアントに送らないでください。したがって、彼がクライアントをハッキングしてマトリックスを読み取ったとしても、明らかにできるものは何も隠されておらず、通常のクライアントでは実行できなかったような動きはありません。

しかし、最近のゲームの多くはもっと複雑です。たとえば一人称シューティングゲーム。ここでは、他のプレイヤーを見ることができるかどうか、またどれほど良いかを判断するのは簡単ではありません。簡単なことかもしれませんが、2人の間に壁があると、彼は見えません。そして、これらの単純なケースでは、現代のゲームはすでにあなたの視点から敵プレイヤーを殺すことができるので、あなたは彼がいる位置を得ることができません。しかし、敵が暗いコーナーにいて、かろうじて見えるだけで、ゲームはまだあなたに自分の位置を送信する必要があります。そのため、グラフィックスデバイスが彼をそこにペイントできます。彼を明るい色に塗るチートを使うと、彼を簡単に見つけてチートすることができます。これを防ぐのは困難です。影で暗い色で彼を描くロジックは、優れたグラフィックスを備えたゲームでは非常に複雑なので、サーバーで画像をレンダリングして最終的な画像のみを送信すると、不正行為が非常に困難になりますが、サーバー上に大量のリソースが必要になり、LAGの深刻な問題が発生します。

DELAYまたはLAG:ストリーミングゲームの2番目の大きな問題はラグです。マウスを動かすと、一人称視点のシューティングゲームで非常に速く見回すことができます。ただし、このコマンドをインターネット経由で送信し、結果を画面に表示するには、ローカルでレンダリングするよりも時間がかかります。高速インターネット接続を使用している場合、Pingが20ミリ秒未満の場合は幸運ですが、ほとんどの接続が非常に不安定になり、遅延が時々高くなることがあります。ゆっくりと反応するゲームは、ひどく遅くプレイされ、まったく面白くありません。それどころか、最近の多くのゲームでは、移動予測やタイムワープなどの多くの手法を適用しているため、ゲームにローカルロジックを多く計算させ、他のプレーヤーの移動を予測することで、他のプレーヤーの知覚ラグを下げることができます。実際よりも流動的に感じます。

ハードウェア/箱から出して不正行為を行うそして、ソフトウェアで簡単に打ち負かすことができない不正行為を行う機会は常にたくさんあります。ドーピングはどうですか? (eスポーツの本物)またはロボットにあなたのために遊ばせます。または、肩越しにウェブカメラを使用すると、画面上の敵を見つけてどこにいるかがわかりますか?または、敵チームのボットネットからDDoS攻撃などの攻撃を行って、通信を妨害しますか?

サーバーがサポートする検証を行うにはいくつかの可能性があります。サーバーは、DRM保護などのゲームコード/アンチチートソフトウェアの正当性をテストできます(もちろん、なりすましも可能です)。サーバーはまた、ゲームロジックをチェックし、動きを測定し、行動に関する統計とデータを収集し、それを他のプレイヤーや特定の制限と比較して、異常なプレイをしているか、ルールを破っているかを判断することができます...これは完璧です。

18
Falco

もしそうなら、なぜこれらの企業はビデオゲームのサーバー側の検証を提供せず、クライアントを信頼することを主張し続けるのでしょうか?

そうです!

ほとんどのオンラインゲームでは、時々整合性チェックが行われます。

Player32517が3秒で100ユニット移動しました、それは可能ですか?

ただし、すべての移動が有効かどうかを確認することは、膨大な量の計算です。

たとえば、シューティングゲームを見てみましょう。

画面にグラネードや敵が多すぎると、平均的なゲーム用PCは苦労し始めます。この負荷は20台のコンピューターに分散されます。

サーバー上で再びをすべて計算し、すべての動き、すべてのマウススワイプ、不正行為パターンのすべての発火トリガーを確認する必要があると想像してください。リアルタイムで。

これらすべてのため、時々チェックする方がずっと安く、あるいはまったく可能です。もしあなたが本当にそこまでジャンプできたなら、素早く動かしたり、マウスを敵の頭の上に3秒間正確に置いてから、後ろに見えたりするでしょう。その壁。

それでもうまくいかない場合でも、コミュニティのレポートにビデオ映像が含まれています。

編集:

それを指摘してくれたNum Lockに感謝します。

ラグはロジックによって引き起こされるのではなく、レンダリングによって引き起こされます。ライトとアニメーションのすべてのベクトルを計算することは、何かがヒットする範囲内にあるかどうかを計算するよりもはるかに大きくなります。

16
N. Nowak

ここで取り上げる要素は2つあります。

まず、クライアント側のチート検出がチート防止の唯一の要素になることはめったにありません。一部のゲームのサーバーソフトウェアも配布されるため、リバースエンジニアリングにさらされるのを防ぐために、サーバー側のチート検出ソフトウェアは完全には配布されない場合があります。実行している可能性があるサーバーコードと、内部で実行されている可能性があるサーバーコードから、サーバー側のチート検出の欠如を推測することはできません。また、企業は同様の理由でアンチチートソリューションについて話し合うことをためらう場合があります。あいまいさは、堅牢なソリューションに加えて悪いことではありません。

しかし、ゲームはプレイヤーのスキルに依存しているため、クライアント側のチート検出も必要です。つまり、不正行為は、ハードウェア、入力、ソフトウェアなど、さまざまなレベルで発生する可能性があります。ソフトウェアは単に最も便利で正確なものであり、熟練したロボットから身を守るためにできることはほとんどありません。ソフトウェアベースの不正行為を防ぐためには、クライアントに常駐モニターがあり、それを検出できる可能性があります。

さらに、ゲームのシミュレーションは複雑です。あなたが正しく述べたように、ゲームが使用するすべてのプロトコルを正しく模倣し、チートするために適切なタイミングで任意に入力を生成できるシミュレートされたクライアントを誰かが構築することを妨げるものはほとんどありません。ただそうすることは大きな仕事です。既存のクライアントを壊そうとする方がはるかに簡単です。偽のアンチチートクライアントを構築する場合も同様です。そのため、クライアント側のセキュリティは、100%完全であるというよりは、物事を可能な限り困難にするケースです。特に、Valveは定期的にVAC=を更新して、チート開発者との継続的な戦いに参加します。

5
Danikov

他のほとんどの答えはチート防止の技術的な側面に焦点を当てています、私はそれを追加したいと思いますVACは経済的に実行不可能にすることでチートを防ぎます:

TL; DR:クライアント側のチートプロテクションが機能するのは、それをだますのに必要な労力とスキルが高く、間違いに対する罰が厳しいためです。

ハッキングには多くの試行錯誤が伴い、ソースに完全にアクセスできる場合でも、クライアントを変更していないように見せかけてクライアントを変更する方法を見つけるには、かなりの作業が必要です。そして、このすべての作業は、クライアントが更新されるたびに疑わしくなります。

一方、少しでも間違いを犯した場合、すべてのVACサーバーから永久に禁止される危険があります。

また、Valveはチートをググる方法も知っているので、ハックを配布しても意味がありません。ハッキングを見つけたら、ハッキングを使用するすべての人を見つけるための検出ロジックを追加します。これにより、ユーザーは公に入手可能なチートツールを使用することができなくなります。

1
Cephalopod

Valveはすべてに対してサーバー側の検証を行います。

すべてのクライアント入力は完全に有効です。

Valveはすでに有効なユーザーデータのチェックを行っています。たとえば、クライアントがサーバーに「Tスポーン中にいたときに、CTスポーンからSparklesを撃った」と言うことはできません。

また、何かを購入するときに、その銃を信用して購入しようとしていないことも確認します。サーバーがそれを行わなかった場合、詐欺師はピストルのラウンドでAWPを購入することになります。

不正行為は有効です

問題は、不正行為(CSGOな​​ど)が完全に有効なアクションを実行していることです(スポーンテレポートグリッチなどの無効なアクションを行う不正行為は簡単に修正できます)。問題は、不正行為者がさまざまな方法を使用して、強化された、またはコンピューターによって行われた有効な入力を入力することです。

事実、VACは、プレイヤーにチューリングテストを適用しようとしています。サーバーでさえ、決定を行うエージェントの身元を確認できません。

0
Aron

サーバー側のチェックは、クライアントによって要求された操作が正当であることを確認することです。基本的に、許可されている速度の2倍の速度で実行しようとしないようにします。

クライアント側のチェックは、その変更を行う決定がコンピュータではなく人間によって行われたことを確認しようとすることです。合法的なクライアントコマンドを作成する(したがって、サーバーで検出されない)aimbotsは許可されていません。

また、サーバー側では、大規模なデータセットの後処理を行って、プレーヤーが不正行為をしているかどうかを判断することもできますが、これは事実を調査する必要があり、常に不完全な科学です。

0
xaxxon

このようなセキュリティの課題は、情報がある場所で計算を行わなければならないことです。チート対策の計算をクライアント側で行うか、情報をサーバー側に移動して計算をそこで実行できるようにする必要があります。多くのゲームでは、すべての情報をサーバーに渡すのが非常に高くつく可能性があります。そのためには、クライアントはすべてのユーザーインタラクションとその発生時間を節約する必要があります。分析を行うためにすべての情報をサーバーに送信するのは多すぎるため、代わりに計算がクライアントに送信されます。

これで終わりではありません。多くのゲームはbothクライアント側とサーバー側のテストを実装しています。一部のテストは、すでにサーバーに送信されている情報に基づいて行うことができます。誰かがジグザグしたときにすべてのスピードハックをキャッチすることはできませんが、ゲームルールで許可されているよりもはるかに速くポイントAからポイントBに移動できた誰かをキャッチできます。

興味をそそるオプションもあります:コミットメント。クライアントは、SHA-1ハッシュなど、ユーザーとのすべてのやり取りを説明する暗号化コミットメントを提供できます。サーバーからのコマンドでは、そのハッシュを生成したデータを提供する義務があります。このパターンは、プレイヤーを正直に保つサーバーがない分散型ゲームで使用されます。クライアントは、他のクライアントが現在のデータを送信する前に、過去に行ったアクションにコミットする義務があります。これにより、1つのクライアントが履歴を書き換えることができなくなります。

0
Cort Ammon