如果“你永远不能信任客户端”,那么为什么像 Valve 这样的公司只依赖客户端验证呢?

信息安全 客户端
2021-09-04 20:57:00

在视频游戏中,大多数反作弊软件都是在客户端运行的(例如 PunkBuster 或 Valve Anti-Cheat)——但从不信任客户端的第一条安全规则不是吗?如果是这样,那么为什么这些公司不为视频游戏提供服务器端验证,而是继续坚持信任客户端呢?

4个回答

如果是这样,那么为什么这些公司不为视频游戏提供服务器端验证,而是继续坚持信任客户端呢?

与其说是坚持信任客户,不如说是没有其他可行的反作弊模式。和DRM一样,实际上PB之类的反作弊软件都使用了DRM的一种形式,能做的很少。

DRM 软件有适当的缓解措施,以防止客户戳太多,但它必须放在客户身上,以试图阻止客户做媒体公司不希望客户做的事情。

反作弊技术依赖于类似的方法。收集有关客户端的信息并将其发送到服务器,如果客户端被视为行为不端,则通过对特定软件进行的任何一系列检查,它都可以在服务器上被禁止。

归根结底,它归结为风险管理。是的,不要相信客户端是安全的首要原则之一。但是为了减轻发生在客户身上的风险,需要进行成本效益分析,这就是风险管理。让客户继续 bot 和作弊的成本是否值得失去想要公平和有趣游戏的客户?还是应该采取一些缓解措施?PB 和其他软件包并不是要完全阻止作弊,而是要让作弊变得更加昂贵。

还有另一种更微妙的限制客户作弊的方法(墙黑客,...),主要与仅限在线游戏有关,但不限于。这是通过不向客户端提供所有数据来实现的。例如,虚幻引擎 3 会检查演员是否在您的能见度附近,如果该检查是肯定的,服务器会向您发送确切的位置以及您的对手您的位置。也就是说,只有服务器知道游戏实例上所有参与者的所有位置、动作和动作。

这可以在虚幻引擎 3 / Client Server Model 的文档中的段落作弊中阅读,可在此处找到: https ://udn.epicgames.com/Three/ClientServerModel.html

也就是说,使用高级引擎/网络代码和客户端服务器模型,不一定需要 100% 信任客户端。服务器可以预先决定客户端应该知道什么,有效地限制了黑客攻击的可能性。更进一步,服务器可以决定它自己应该知道什么,而不是被发送伪造数据包的客户端分心或混淆。

客户端防作弊软件本身与安全性无关,它与游戏(和客户)体验有关。

因此,安全规则几乎不适用。信任客户端“在 1723 年达到 1056 像素”与信任客户端“可以将 1000 美元转移到尼日利亚”或信任客户端“可以访问 Bob 的电子邮件”非常不同。

请注意,我特别排除了金融交易,只是游戏作弊,如瞄准机器人、大头作弊等。

第一:有很多游戏使用100%服务器端验证,不信任客户端。一个例子:在线扑克

您根本不会将任何卡的价值发送给他不知道的客户。因此,即使他破解了客户端并读取了矩阵,也没有任何隐藏的东西可以揭示,也没有任何动作他无法对普通客户端进行。

但是许多现代游戏要复杂得多。以第一人称射击游戏为例。在这里,要决定你是否能看到另一个球员以及有多好并不容易。你可能会说这很容易,如果你们两个之间有一堵墙,你就看不到他了。对于这些简单的情况,现代游戏已经可以从你的视野中剔除敌方玩家,所以你不会得到他所在的位置。但是一旦敌人在一个黑暗的角落并且几乎看不见,游戏仍然需要将他的位置发送给你,所以你的图形设备可以在那里绘制他。如果您使用作弊器,将他涂成鲜艳的颜色,您可以很容易地发现他并作弊。这很难预防,

延迟或滞后:流媒体游戏的第二个大问题是滞后。如果您移动鼠标,您可以在第一人称射击游戏中快速环顾四周。但是通过 Internet 发送此命令并接收显示在屏幕上的结果将需要比本地渲染更长的时间。如果你有一个快速的互联网连接,你可以幸运地看到低于 20 毫秒的 Ping,但大多数连接可能非常不稳定,并且延迟有时会更高。一个反应缓慢的游戏会玩得非常慢,而且几乎没有乐趣。相反,许多现代游戏应用了大量的技术,如移动预测、时间扭曲等,因此您可以通过让您的游戏计算大量本地逻辑并预测其他玩家的移动来降低其他玩家的感知滞后,所以游戏感觉比实际更流畅。

硬件/开箱即用的作弊。并且总是有大量的作弊机会,而这些机会是软件无法轻易击败的。兴奋剂呢?(电子竞技中的真实事物)或者让机器人为你玩。或者在你的肩膀上安装一个网络摄像头,它可以在你的屏幕上发现敌人并告诉你他们在哪里?或者甚至像来自僵尸网络的 DDoS 攻击对你的敌方团队以干扰他们的通信?

有一些可能性可以进行服务器支持的验证。服务器可以测试游戏代码/反作弊软件的正确性,例如 DRM 保护(当然也可以被欺骗)。服务器还可以检查游戏逻辑,测量您的动作,收集有关您的行为的统计数据和数据,并将其与其他玩家和某些限制进行比较,并尝试确定您是否玩异常或是否违反任何规则......但没有这是完美的。

如果是这样,那么为什么这些公司不为视频游戏提供服务器端验证,而是继续坚持信任客户端呢?

他们是这样!

大多数在线游戏都会时不时地进行一些一致性检查。

Player32517 在 3 秒内移动了 100 个单位,这可能吗?

然而,检查每一个动作是否有效是一个巨大的计算量。

以任何射手为例:

如果您的屏幕上有太多的榴弹/敌人,您的普通游戏电脑就会开始挣扎。此负载分布到 20 台计算机。

现在想象一下,您必须在服务器上重新计算所有这些,并检查每一次移动、每一次鼠标滑动、每一次触发作弊模式的触发。实时。

正因为如此,如果你真的能跳得那么远、移动得那么快或将鼠标准确地放在敌人的头上 3 秒钟,你甚至可以时不时地检查一下,这会便宜得多,甚至根本不可能看到他在后面那面墙。

如果这一切都失败了,你仍然会收到带有视频片段的社区报告。

编辑:

感谢 Num Lock 指出这一点:

延迟不是由逻辑引起的,而是由渲染引起的。计算灯光和动画的所有矢量远大于计算是否有东西在范围内被击中。