关于Minecraft反压测策略

oof in minecraft!
自从2014年开始,出现了一种攻击Minecraft协议的工具,俗称”压测”,虽然长的是”压力测试”的面孔,但实际上并没有任何数据可供参考。
当时,很多腐竹都遇到过这玩意,基本上没人跑得掉,直到16-15年才有人开始开发反压测——GreatFireWall
但GFW的效果也并不是很理想,依次又出了AntiAttack,AntiFakePlayer,DianAntiBot,AntiAttackRL这些压测,但是他们都有弱点,而且只有AntiAttackRL在持续更新…

现反压测的弱点

我并没有把gfw加入我的测试清单,所以这里不会有gfw的原理解析,但根据15年的数据来看,gfw的效果微乎其微(已经长期未更新)

  • AntiAttack by vlXingze
    在16年的时候的确是一款非常出名的插件,甚至被bbs加粗高亮了
    但这个插件只是耍小聪明而已。
    实际上这款插件,只需要在进入服务器之前刷新一下服务器Motd接着随机玩家ID长度就可以破了。目前也已经有压测内置了破AntiAttack的方法

  • AntiFakePlayer by jiongjionger
    这个插件坚挺了相当久,可能是jiongjionger在他的招牌上打上”机器学习”的模样。我并没有深入去deobf这个插件他的内部原理,攻破是偶然发现的
    只需要让同一ID的假人反复加入就能绕过检测,而且这个插件锁死国内IP才可以进入,大概是为了抵御国外的代理。

  • DianAntiBot by 点点永相随
    他自身就没有进行混淆,一下就能看的出来。
    内置了一个并发限制和检测玩家是否发了心跳包,只需要把心跳包加入假人即可。或许ServerCrasher都可以干掉这个玩意

  • AntiAttackRL by vlXingze
    “AntiAttack Reloaded”
    应该是目前唯一有效的一个简单的反压测插件。原理没有深入探索,但是看一下配置文件就知道了,一大堆Interval,Total5sLimit……….
    AATRL不打算详细讲(因为我还没过这玩意,实际上AATRL给我的感觉就是阉割掉机器学习的AntiFakePlayer,阈值都在这了)

总结是,这些反压测,不是长期未更新而产生奇怪的漏洞,就是耍小聪明来防御假人。以及我认为,如果想做到真正抵御假人你就不应该把防御点放在自己的服务器上
是的,CDN。但不是CloudFlare,我们需要针对MC的奇葩协议做一个玩意

策略

首先我们要记住这几个要点:

  • 不要耍小聪明
  • 要有健壮性,要可扩展
  • 反压测的目的不是为了防止服务器崩溃,而是保护玩家正常游戏

接着,我们要分析一下压测的特征:

  • 压测是通过塞假人,疯狂刷MOTD等方法进行的,而本质上都是在疯狂发包
  • 压测的假人名称是无规律的
  • 压测可以影响一段时间内服务器的人数

可以看到,第二和第三实际上都有一个例外——Motd压测。

Motd压测

因此,我们需要干掉Motd压测,这样才可以进行下面的那两步,但在这之前,我们需要分析一下Motd占资源的地方是哪里。
Motd包含的信息有:

  • 图片
  • 标语
  • 在线人数

是的,就这么少。
其实也不难看出,Motd到底是大在了哪里——图片,也就是server-icon.png
而客户端是有缓存d,也就是说你只需要发第一次图片新的IP就行了,当然你也可以定时检测一下后端的图片是否变化再更新客户端的缓存。(可以针对ColorMotd做一个List)
其次就是标语和在线人数。在线人数这点没法避免,可以把标语储存在内存中加速读取速度减少IO使用。当然,还有大家都喜欢的并发量限制,只需要针对单IP的并发即可。

假人压测

首先我们来创建一个map,对应的是IP和lvl
以及,我们来分析一下假人压测的特征:

  • 短时间内玩家数猛增
  • IP是代理IP
  • 玩家iD完全随机

掌握了特征,思路就有了.
首先,是第一个

  • 玩家数量检测
    一个正常的服务器,他的服务器人数每天都是0.
    有一天,突然在10分钟内进来了八百十个玩家,这几乎是不可能发生的事情,所以我们可以认为这是一场压测。把他Lvl+1

  • 玩家ID检测
    只有小学生才会用乱打的ID。AFP识别iD是用上了机器学习,我不会机器学习所以不在这BB,Lvl+1

  • 玩家并发检测
    哪有玩家一进来就高频发TAB,发心跳包的..
    Lvl+2

  • IP
    加进枪毙名单一个个查询, ICMP吃的加1,真有代理端口的+2

  • 心跳包
    我们的服务器不需要僵尸。

End

欢迎RSS,留言..
关于为什么假人压测的部分这么水..在发之前不小心丢掉了草稿,这一次算是水文章吧:^)