【纪实】直面攻击:解构一场Minecraft压测

版权声明
本文原文为演示文稿,此为演示录音文字版,亦在Bilibili发布

用于演示的PPT.pdf可下载使用

前言

与针对Web服务的CC攻击类似,客户端Bot压测是一种专门针对Minecraft服务器,特别是软件的攻击方式。处理完一名假玩家的请求耗费的计算资源比处理一次HTTP请求多得多,而大部分Minecraft服务器配置相比网页服务器高不了多少,这就导致Bot压测能轻易打穿一个服务器。
幻灯片1.PNG
幻灯片2.PNG

为了拆解一场客户端Bot压测攻击,我们采集了我服某次攻击的监控数据并进行了分析。
(由于我们找遍了互联网也没有找到一家专门提供Minecraft服务器压测的商家,没法复现这样一场攻击,所以以下内容与普遍特征可能存在差异。)

攻击流程

这场攻击有一个试探性的开始,我们称为先导段。在这个阶段,会有大约10个Bot连接到服务器。它们全部来自于同一个IP地址,推测这个IP地址就是试探服务器。与此同时,这10个Bot的用户名都是完全随机的字母、数字组合。它们进入服务器后立即退出。
幻灯片5.PNG

接下来真正的攻击才会开始,我们称为甲段。正常无防护的服务器此时会大量报错。在这个阶段,压测调度服务器指挥约1000台肉鸡向服务器发起连接。它们的用户名依旧是随机生成的,一个IP对应一个用户名,不断连接服务器。因为服务器玩家数量有限,所以绝大多数无法成功加入,或被AntiBot程序监测到并处理掉。
幻灯片6.PNG
幻灯片7.PNG

当甲段攻击陷入瓶颈限制时,乙段攻击随即开始。甲段中的Bot会集体退出或停止请求服务器,并重新生成用户名,再次进入服务器。此时,它们使用的用户名均为模仿玩家用户名生成的字符串,可能是字典组合而成,用于绕过服务端检测。值得注意的是,Bot会以尽可能大的视距向服务器请求区块文件,以此增加服务器负载。这些请求的目标区块几乎全部超出正常可加载范围,在Bot客户端位置±3000m以内。
幻灯片8.PNG

持续数十秒后,在玩家队列等待进服的Bot逐渐减少,Bot会以客户端主动中断方式结束连接,推测有攻击方的干预。这个过程被称为收束段。一场攻击到这里就结束了,整个过程时长不超过5分钟。
幻灯片9.PNG

对策(普适版)

Minecraft压测诞生已有数年。绝大多数主流的登录插件都内置了AntiBot功能,之前也提到了AntiBot在拦截假玩家方面的用处。装备了AntiBot功能的服务器,会通过分析玩家来路、行为特征自动开启、关闭警戒功能。有些AntiBot插件还能提供验证码,快速筛选客户端。

我们注意到,参与此次攻击的IP地址有超过98%是海外地址。所以,服务器可以通过封禁海外访问的方式来有效筛选机器人。不过,不建议封禁港澳台以及特定美国城市的IP地址,因为许多Serverlist服务的探针都搭建在那里。
幻灯片12.PNG

服务器还可以尽可能开启正版验证或第三方认证,并限制未登录或离线玩家在服务器内的移动。这样可以针对性地缓解Bot刷取区块的问题。
幻灯片13.PNG

如果可能,甚至可以直接启用白名单功能。对于正版服务器,仅特定玩家可进。对于离线服务器,仅注册玩家可进。对于IP地址白名单,仅特定地区玩家可进。此方法过滤效率很高,但影响玩家体验,特别是新玩家,可能需要管理员手动过白。
幻灯片14.PNG

还有一种非常聪明的解决方案。如果知道试探服务器,可以特别地封禁这台服务器的访问,使它误认为服务器已崩溃,主动停止攻击。

对策(进阶版)

接下来还有几种技术解决方案,它们几乎能完美过滤所有机器人,但需要和您的服务商的配合。

目前绝大多数机房都配备了防火墙,如傲盾、华为等的安全产品。请注意,这里使用防火墙的方法与防护DDoS有所不同,压测带宽不大,但需要针对性阻断。对于使用傲盾的机房,推荐配合流量牵引使用,可以联系您的服务商定制防护策略。对于华为网安产品,您可以使用内置的功能进行AI训练,并在每次压测后指导防火墙进行复习,达到更好的防护效果。详细的配置方式您可以参考您的产品的使用说明书。不过,绝大多数Minecraft服务器都是基于云的架构,此方法仅适用于托管服务器或自建计算机柜。
幻灯片16.PNG

我们注意到,由于这些Bot都预设了攻击的目标,所以与人类玩家不同,它们不用请求MOTD列表。(后期注:通过大量请求MOTD达到攻击目标的攻击方式这里不讨论,这种攻击方式可以通过分布式边缘节点缓存转发解决。)可以通过预设防火墙配置,在请求MOTD时将IP标记为人类玩家,然后放行。没有请求直接进入服务器的IP地址标记为机器人。请注意,IP地址列表在一次攻击结束后需要清空,不能反复使用,以免影响质量。
幻灯片17.PNG

同时,压测机器人全部为未注册玩家,尽管它们默认为旁观模式,可以自由移动,但也可以通过登录间隙减小它们的影响。常见的方法是通过虚拟化多开服务器,创建登录服。不过,我们建议使用硬件隔离,即直接创建两台服务器的互通。对于基于云的服务器,可以创建多台计算节点,搭配一台带宽足够大的出口服务器使用。这样,玩家登录后传送到源站服务器,未登录的Bot都会被阻断在登录服。就算登录服被压测崩溃,源站也能完好无损。不过,要增加一台服务器,专门用来应对绝大多数时候不会出现的压测,对于小型服务器服主并不值得。
幻灯片18.PNG

也有更加暴力的解决方案。服务器运营方可以向玩家发送认证Mod,然后在登录时调用认证功能。为了防止玩家滥用Mod,可以给每位玩家创建特定的密钥对,或者使用FIDO2等令牌技术,实现针对性认证。这种方式可以100%解决压测问题,但缺点也显而易见,非常麻烦,新玩家接受度低,适用于私有服务器和管理员认证。
幻灯片19.PNG

参考文献

幻灯片20.PNG

制作人员

幻灯片21.PNG

无标签
文章目录