BungeeCord和Minecraft:安全问题和危险

蹦极简介



BungeeCord是一种代理服务器,允许游戏项目将多个Minecraft服务器结合在一起,并能够在它们之间快速切换玩家。



在本文中,我将分享我对内核的经验,讨论使用该内核的服务器上的安全性问题,并给出一些简单的技巧,这些技巧可能有助于防止此类服务器被黑客入侵。



简要介绍一下BungeeCord最常用的地方:



  • 具有多种游戏模式的服务器(包括具有迷你游戏的服务器)
  • 高负载和需要在线分发的服务器
  • 使用基于BotFilter的防御bot攻击的服务器(此类服务器的特征是登录时进行“丢弃检查”或验证码)


图片



此类服务器最常见的漏洞:



  • 对代理服务器命令的不受控制的访问
  • 授权服务器绕过
  • 欺骗玩家数据
  • 登台服务器模块中的漏洞


怎么运行的



由BungeeCord管理的大多数项目都是以下服务器链(可以位于至少一个具有不同端口的IP上,甚至可以位于世界不同地区的计算机上)。



代理



第一阶段-实际上,这是服务器本身,玩家与之相连。他没有生成点或游戏世界-他的任务是将连接重定向到下一个阶段。



似乎这里的一切都很简单-但不是。



重定向本身就是它的主要魅力,同时也是这个阶段的问题-服务器不仅将播放器重定向到另一个IP,而且还充当中间服务器的角色。

简而言之,播放器发送的所有命令,所有同步数据包,聊天中的每条消息都首先在此处处理。



这如何威胁我们?



让我用一个假设的示例进行说明:我们的开发人员Drygok英勇地做着自己,对服务器的权利接近最大。他使用自己的授权系统完美地保护了自己的帐户-复杂的密码,两步验证,甚至绑定到提供商的特定IP地址范围,之后他就放心地离开了服务器,但是10分钟后,所有玩家都“飞出”并且服务器停止了运行因为有人代表他们执行了/ end命令



发生了什么?很简单:一个未知的人以我们开发人员的昵称进入游戏,然后忽略服务器的登录请求,输入一个由代理服务器本身处理的命令,这意味着即使是未经授权的用户也无法阻止它。



图片



怎么预防?



防止这种情况的最简单方法是在此阶段禁用所有内部内核命令并重置任何权限。即使对于开发人员。特别是对于开发人员。



授权服务器



链中的第二阶段是玩家注册并登录的服务器。



在这里,我们的用户将首先感受到其几何脚下方的立体立方体地面。



通常,此阶段的服务器如下所示:



  • 空旷世界无尽空间中的一小块土地,玩家在成功(或不成功)授权之前就站立
  • 基本插件:

    SkinsRestorer - , , -

    ( , )

    , ( )

    , ( AI , , .)

    ,

    AutoSaveWorld

  • 缺乏对权利的控制
  • 缺乏针对内核漏洞或游戏本身的保护系统


图片



此阶段的主要问题是玩家的紧急权利。很少有人配置它们,因为只有授权的播放器才能使用它们,并且在授权播放器后,它们会立即重定向到下一个阶段。



这如何威胁我们?



在某些情况下,玩家可以在授权后阻止重定向到另一台服务器:通常,该服务器的内核或插件会阻止与游戏服务器的快速重新连接。因此,当成功授权后播放器立即重新连接时,下一阶段的服务器可能会拒绝连接,并且授权播放器将保留在授权服务器上。



此外,拥有较高权限的播放器会悄悄地学习在我们国家/地区安装的插件列表(/插件),然后通过拥有自己的权限来学习其功能,从而开始自己的黑手事业。



我将举两个我个人不止一次见过的例子。



第一个例子。访问ASW。



自动保存世界对于任何服务器来说,都是一个非常有用且同时危险的插件。在我重述时,它具有以下功能:



  • 自动拯救世界
  • 自动世界备份
  • 根据指定的设置清洁世界
  • 在不重新启动游戏服务器的情况下连接,重新启动和断开插件(/ asw pmanager)
  • 启动,停止和控制生成的进程(/ asw进程)


我们对该列表的最后一项感兴趣。



不,这不是错误。在大量服务器上,确实存在一个插件,可让您使用适当的访问权限启动任何进程,某些服务器在此阶段将其提供给所有玩家。



在这种情况下,某些问题/asw process start QQHABR rm -rf / (请勿执行此命令!)将是最少的问题。我认为没有必要告诉“爆竹”如何访问终端。



例子二。无害的SkinsRestorer。



皮肤恢复器是在大量服务器上使用的非常流行的插件。它主要用于恢复由于使用代理皮肤而丢失的皮肤,但是它也可以安装自己的皮肤。这个机会是一个潜在的漏洞。



使用/ skin命令,您不仅可以使用其昵称加载其他玩家的皮肤,还可以通过指定图像地址(/ skin URL)来设置自己的皮肤。该团队的危险在于,最初假定玩家有权使用它(并且不仅在权利配置不正确的情况下,例如在ASW的情况下)。



如何使用?将图像上传到指定地址是常规的GET请求。来自服务器本身的请求。



有许多可供进一步使用的选项-从对封闭的API的调用(例如,发出捐赠)开始,为某些IP地址提供对它的访问,以常规的泛滥结尾。



图片



怎么预防?



您可以通过限制播放器的权限(建议在任何服务器上执行此操作)来防止此情况,禁止除授权和注册命令之外的所有可能命令,并禁止通过URL安装自己的皮肤(我建议在所有服务器上执行此操作)



枢纽



集线器-玩家选择游戏服务器和模式的公共空间



图片



大多数情况下,集线器(如主游戏服务器)对于每台服务器都是唯一的,但是某些安全性问题对他们来说是相同的。



直接连接



通过直接连接到该服务器(连接到其IP),播放器可以绕过先前的阶段,包括授权



这如何威胁我们?



跳过授权阶段后,播放器可以使用昵称进行连接的用户的所有权利



怎么预防?



大多数服务器核心具有内置设置,可以在不使用BungeeCord的情况下阻止连接。例如spigot.yml中的Spigot:



settings:
bungeecord: true


如果使用此设置,请务必阅读下一段!



欺骗玩家数据



几乎所有阻止直接连接到服务器的服务器核心(包括Spigot)都存在一个活动漏洞,该漏洞与通过其自己的BungeeCord服务器替换玩家数据有关:玩家将其代理服务器重定向到我们的主游戏服务器,因此该核心游戏服务器确定BungeeCord用于连接并信任从其传输的所有数据(在这种情况下,不检查代理IP与服务器IP是否匹配)



这如何威胁我们?



通常,以下内容以这种方式替换:播放器的IP(绕过会话并获得对他人帐户的访问权限)和UUID(由某些插件和服务器本身用来标识播放器,绕过权限控制并访问其他播放器的权限)。



使用BungeeCord时,您需要自己修复它,否则它可能使攻击者不仅可以访问播放器帐户,而且可以访问管理员的功能!



怎么预防?



防止这种情况的最简单方法是关闭不必要的第三方连接端口,并且=>绕过代理服务器连接到服务器的任何可能性。



建议关闭所有服务器的所有端口(主BungeeCord服务器除外)以进行外部连接!



游戏服务器



具有自己模式的游戏服务器。以上所有都是相关的。



All Articles