我到底是怎么被"炸房挂"轰炸掉线的?
炸房挂?
众所周知,在一些吃鸡类、MOBA对战类游戏中,我们经常都会遇到一些”神仙局”,比如在吃鸡,FPS类游戏中经常遇到”枪枪爆头”,在MOBA类游戏中遇到各种对手的技能零CD无限释放,这类型的外挂,都是利用模拟鼠标键盘,或者是截取Sock和API内容,将其修改达到效果的。
而另外一类的外挂,就是关键的对战时刻,直接让玩家网络卡顿甚至掉线了;或者在游戏刚开始的时候,直接让所有玩家掉线,然后通过控制攻击的停止时间,更快地重新连接到战斗服中,比如在吃鸡游戏里面,如果游戏刚开始的时候,大家都掉线了,然后60秒后再重连回去,首先重连成功的玩家(一般是开外挂的玩家,因为他可以控制停止时间),将可以轻易地将周边的落地玩家击杀,从而获利。这类外挂统称为“炸房挂”,这就是今天主要的话题。
游戏中的UDP协议
在即时多人对战类的游戏里面,通常都会使用UDP协议直接让多个玩家连接到同一局战斗服务器中(同一局对战/副本,会分配到相同的公网IP地址和端口),所以恶意玩家(开挂)是可以轻易地获取到具体的对战服务器地址和端口的。
DDoS攻击与UDP
常见的DDoS攻击手段,主要分为两种类型:
- 控制外部大量的肉机,使用脚本,让这些肉机使用脚本,直接攻击目标服务器。
- 仅需要控制少量的肉机,通过访问互联网的公共服务,然后通过修改源地址,对目标服务器进行分布式的反射攻击。
我们来对比一下TCP和UDP的协议包结构:
我们可以发现,在UDP的业务流中,并不像TCP那样,有多个字段维度可以检测的。
所以总结一下,UDP的主要特点是:
- 无连接
- 源IP容易伪造(有很多运营商是不会检测源地址是否是自己分配的),难溯源
- 攻击成本低
Azure防护方案
所以,针对这些攻击,我们有5种主要的防护思路:
1. 服务器白名单、黑名单
只允许业务目的端口,屏蔽常见的反射源端口。
2. 地理位置过滤
针对业务用户的地理位置特性,在遇到UDP反射攻击时,优先从用户量最少地理位置的源IP进行封禁阻断,直到将异常地理位置的源IP请求全部封禁,使流量降至服务器可处理的范围之内,可有效减轻干扰流量。
3. 基于IP和端口的限速
通过对源IP、源端口、目标IP、目标端口的多种搭配组合进行限速控制,实现灵活有效的防护策略,降低业务影响范围。
4. 流量异常波动抑制算法
对正常的业务流量进行学习建模,当某类异常流量出现快速突增的波动时,自动判断哪些是异常从而进行限速/封禁,以避免对正常流量造成影响。
5. 指纹(水印)过滤
协商好特定的水印算法,在客户端发包的时候带上水印字段,然后通过水印过滤识别正常还是攻击流量。
而这5种防护的思路,Azure都能提供对应的防护方案。
- Network Security Group
- Azure Firewall
- 高级定制防护
- Azure DDoS Standard Plan
- 高级定制防护
我们大致总结为三道主要的防线:
第一道防线:Azure DDoS Standard Plan
启用Azure DDoS标准防护,阻挡大部分的3-4层攻击。
第二道防线:添加水印
在手机客户端发送每条信息中都嵌入了水印,而攻击的报文没有携带水印,Azure可以通过这些水印进行过滤,只有携带水印的报文,才会到达后端游戏服务器,从而达到防护的效果。
第三道防线:基于端口的速率限制
我们不能保障水印方案可以100%抵挡所有DDoS流量,所以当DDoS仍然可以到达后端服务器的时候,我们可以通过限制每个端口的速率,以牺牲一局游戏的代价(作废处理),来换取整台服务器上的其他游戏房间的正常运行。