防止多人游戏中的人为延迟或“Lag Hacking”

信息安全 协议 拒绝服务 赌博
2021-09-06 21:24:33

有一种攻击被一些人称为“滞后黑客”,它在多人游戏中越来越受欢迎。至少有两种方法可以创建人工延迟引入人工延迟的一种方法是使用延迟开关,用户有意断开其网络电缆。另一种方法是使用大量的 syn 或 udp 数据包在游戏中造成可控且可预测的中断,从而使玩家获得不公平的优势。人工延迟攻击会影响大量多人游戏

一些游戏公司已经被他们的用户告知了这种攻击, 但是因为他们没有解决方案而忽略了这个漏洞实施这种攻击的工具构造简单、 容易获得且易于使用他们经常会欺骗源 IP 地址,使攻击难以追踪。

所以security.se,让我们想出一个解决这个问题的办法。但首先让我们谈谈游戏协议。由于减少了延迟和开销,在线游戏通常使用 UDP,但这也增加了对欺骗的敏感性。游戏协议可以使用延迟隐藏来减少“感知延迟”,但这可能会增加人为延迟的影响。多人游戏经常使用p2p架构,例如Hydra: Peer-to-Peer architecture for games,点对点容易泛滥。虚幻网络架构据可查,也容易受到这种攻击(如果我应该列出其他资源,请告诉我!)

4个回答

我看到了两种处理滞后攻击的概念路径:

  1. 惩罚滞后当检测到“人为”滞后时,驱逐违规者并强制执行禁令期。这在实践中很难做到,因为在通过滞后作弊的人和只是在互联网连接中偶尔出现打嗝的人之间需要找到一个微妙的平衡。打击自己的客户是不好的商业行为。这样的解决方案最终必然会有一个区分坏人和不幸的人的门槛。作弊者将坚持接近门槛,这可能足以获得一些战略优势。

    沿着惩罚线的一种有前途的方法是对每次延迟应用小但累积的惩罚:每当一个数据包丢失或出现迟到时,移除一个生命值,让玩家闪现,无论如何......这甚至可以集成到游戏中宇宙(例如,对于FPS将检测到的延迟转换为步枪卡纸)。这意味着拥有可靠互联网连接和大型计算机的人将处于优势 - 我相信玩家已经准备好接受这一点,因为类似的事情发生在许多其他休闲比赛的情况下(例如,如果你的爱好是滑板,你知道更好的滑板不会取代天赋,但会有所帮助,滑板手接受这一点是生活中的事实)。最终,这可能会促使 ISP 对他们的延迟进行一些工作,这对每个人都有好处,而不仅仅是游戏玩家。

  2. 不要相信客户海量网络游戏都是分布式计算他们的大多数安全问题是由于许多游戏规则,即玩家行动的世界的属性,是由客户端系统维护的。玩家自己,尤其是潜在的作弊者,对他们的机器拥有广泛的控制权。现有的对策往往效果有限,原因与软件 DRM 和防病毒软件可能失败的原因相同:这是一场军备竞赛,攻击者和防御者被锁定在快节奏的补丁和反补丁之战中,这令人厌烦并且需要昂贵的持续维护.

    通用架构响应是仅在服务器端维护游戏规则;客户端变得“瘦”,只是显示界面。不幸的是,这很难实现,因为显示性能(因此游戏体验)变得对延迟非常敏感,无论是人工的还是自然的;ADSL 链接将具有接近 50 毫秒的最小延迟,这对于普通游戏玩家的反应来说是很高的。此外,这意味着游戏服务器需要更多的 CPU 能力。但是安全优势是巨大的:当玩家诱导落后时,他天生就会惩罚自己,而不是其他人。

    在服务器上维护所有游戏状态和规则也不完全是科幻小说。早在 1980 年代后期,最早的MMO游戏之一是“CarCrash”,它是已停刊的法国杂志Jeux et Stratégie 的后代它是在Minitel 上播放的,这是另一种古老的法国技术,用户只需拥有文本终端(图形有限),没有本地计算能力;中央服务器维护游戏规则并计算每个人的屏幕更新,并且它起作用了。当时的计算机的 CPU 能力远不如今天。一个 20 MHz 的 CPU 足以被视为“超级计算机”。2013 年 35 美元的家用路由器比那个时代的大型服务器强大十倍以上。然而它奏效了。

    在服务器上维护游戏规则意味着背离游戏通常的架构方式。从历史上看,大多数游戏都是本地游戏,并通过将客户端相互连接而成为多人游戏,可能有一个中央服务器仅用作集合点。打个政治比喻,游戏通过组建联盟而成为多人游戏,但防止作弊者的安全需要联盟

当然,混合策略是可能的。核心思想是一样的:给客户端系统尽可能少的敏感数据;当你必须相信他们的某事时,用一根大棒或一根大胡萝卜让他们保持一致

(如果你明白玩家应该像牛群一样被对待,那么……这确实是事实。你不希望你的牛不开心,但你也不会让它们选择他们的行走方向和步伐.)


编辑:只是在等待我的茶冷却一点时获得了洞察力。一个游戏架构可能包括几个(可能几十个)遍布全球的合作“可信”服务器,它们像今天的游戏客户端一样“玩游戏”。每个游戏玩家都将连接到一个“附近”(在网络意义上)的服务器,以便具有低延迟,允许上面概述的仅显示策略。如果 ISP 自己可以参与交易(每个 ISP 将在自己的基础设施中托管一些服务器),那么这在商业方面可能是有意义的。

舌头只有部分在脸颊上,我建议 Xbox Live 已经有控制来限制延迟开关造成的损害。我将引导我内心的 Schneier 说,在技术控制可能难以实施的地方,反应性和社会控制是完全有效的选择:

  • 将玩家标记为“避免” - 使您不太可能再次与他们匹配
  • 提出“系统篡改”投诉 - 使他们的帐户有可能被撤销

在我经常玩的游戏“使命召唤:战争世界”中,这已被证明是针对“mod”黑客的一套有效控制措施。我看到的一个困难是滞后切换很难证明。与使用 noclip 在空中飞行的人不同,看到有时似乎对他们有所帮助的迟钝连接的无辜玩家并不罕见。

考虑任意示例:

服务器为每个玩家保留一堆数据,其中包含玩家的位置和收到此更新的时间。服务器期望每 10 毫秒更新一次,因为它是在客户端中以这种方式编程的。收到的每个更新都会与之前的更新进行检查。

假设服务器正在接受玩家的 X 和 Y 坐标,并且游戏只允许每次更新时 X 和 Y 更改 1.0(因为这是玩家的最大速度)。如果当前时间为 0.00,当前玩家的位置在 (1.0,1.0),则在当前时间 0.01 时最大更新位置可能是 (2.0,2.0)。我们可能不得不在此定位中允许一些误差范围,例如 +-(0.1,0.1)。

然而,UDP 数据包将被丢弃,并且服务器将必须计算给定当前更新的播放器可接受的限制。如果在上一段中,更新被删除,并且玩家还发送了一个时间 = 0.02 和位置 (2.0,2.0) 的新更新,这将是一个合法的更新。如果无法达到更改坐标的时间,服务器将检查并标记不真实的更新,在此示例中,在下一次更新中移动到 (1000.0,1000.0)。

由于服务器期望每 10 毫秒更新一次,因此它需要对其未接收到的丢弃数据包进行可接受的限制。限制可能是 100 毫秒,如果服务器在该时间范围内没有收到更新,我们可以认为存在一些延迟。一旦这种延迟消失,服务器将告诉玩家他们当前的位置,以便他们可以开始发送新的更新。

这种滞后不应该影响其他玩家,因为这不是他们的问题。看到游戏中的其他玩家因为落后而“传送”周围是非常令人沮丧的。延迟会发生,这始终是我在电子游戏中死去的原因。

如果检测到延迟尖峰或任何术语,服务器应该简单地开始将玩家的子弹静音 x 秒。不是敌人玩家的故障网络问题导致他输了。

如果在比赛中持续出现滞后尖峰,则继续提高掉落子弹的时间延迟。在玩家帐户上记录这些东西。记录其他信息,例如当玩家在附近时是否会发生这种情况,距离等等,以便在需要时可以调查玩家。如果在没有人的空旷场地中从来没有发生过……为什么?我知道网络在战斗中会更多地参与进来,但如果总是在他开枪前 0.5 秒,因为他跑到一块岩石后面启动他的延迟开关,然后攻击,这些东西就会变得非常明显。

如果你的网络不好,那么你会说好的,我的网络不好,但我喜欢这个游戏,所以我意识到我可能会失去一些子弹......足够公平。那将被接受。网络不好的人知道他们的网络不好。因为尖峰而踢不是一个答案,除非它是整个客户端连接到服务器生命周期的连续尖峰。

至于滞后黑客,最终他将不得不公平竞争。子弹的长期损失将意味着他不会使用黑客。如果有的话,它会变成一个逃跑的工具,这将进一步暴露他正在黑客攻击。一个糟糕的网络玩家不会意识到他正在落后和失去子弹。

最后,客户端的网络如此糟糕,是因为它是一个糟糕的网络连接吗?发送电子邮件说:“您的网络出现混乱迹象,请寻求您的 ISP 支持以调查可能的线路问题。这是礼貌警告,不是作弊标志,但它确实会影响我们的服务器和游戏,所以您可能会与遇到类似问题的其他人一起排队,以公平对待我们正在努力提供的优质服务的竞争者。”