我到底是怎么被“炸房挂“轰炸掉线的?

炸房挂?

众所周知,在一些吃鸡类、MOBA对战类游戏中,我们经常都会遇到一些”神仙局”,比如在吃鸡,FPS类游戏中经常遇到”枪枪爆头”,在MOBA类游戏中遇到各种对手的技能零CD无限释放,这类型的外挂,都是利用模拟鼠标键盘,或者是截取Sock和API内容,将其修改达到效果的。

而另外一类的外挂,就是关键的对战时刻,直接让玩家网络卡顿甚至掉线了;或者在游戏刚开始的时候,直接让所有玩家掉线,然后通过控制攻击的停止时间,更快地重新连接到战斗服中,比如在吃鸡游戏里面,如果游戏刚开始的时候,大家都掉线了,然后60秒后再重连回去,首先重连成功的玩家(一般是开外挂的玩家,因为他可以控制停止时间),将可以轻易地将周边的落地玩家击杀,从而获利。这类外挂统称为“炸房挂”,这就是今天主要的话题。

游戏中的UDP协议

在即时多人对战类的游戏里面,通常都会使用UDP协议直接让多个玩家连接到同一局战斗服务器中(同一局对战/副本,会分配到相同的公网IP地址和端口),所以恶意玩家(开挂)是可以轻易地获取到具体的对战服务器地址和端口的。

我到底是怎么被“炸房挂“轰炸掉线的?

DDoS攻击与UDP

常见的DDoS攻击手段,主要分为两种类型:

1. 控制外部大量的肉机,使用脚本,让这些肉机使用脚本,直接攻击目标服务器。

2. 仅需要控制少量的肉机,通过访问互联网的公共服务,然后通过修改源地址,对目标服务器进行分布式的反射攻击。

我到底是怎么被“炸房挂“轰炸掉线的?

我们来对比一下TCP和UDP的协议包结构:

我到底是怎么被“炸房挂“轰炸掉线的?

我们可以发现,在UDP的业务流中,并不像TCP那样,有多个字段维度可以检测的。

所以总结一下,UDP的主要特点是:

1. 无连接

2. 源IP容易伪造(有很多运营商是不会检测源地址是否是自己分配的),难溯源

3. 攻击成本低

Azure防护方案

所以,针对这些攻击,我们有5种主要的防护思路:

1. 服务器白名单、黑名单

只允许业务目的端口,屏蔽常见的反射源端口。

2. 地理位置过滤

针对业务用户的地理位置特性,在遇到UDP反射攻击时,优先从用户量最少地理位置的源IP进行封禁阻断,直到将异常地理位置的源IP请求全部封禁,使流量降至服务器可处理的范围之内,可有效减轻干扰流量。

3. 基于IP和端口的限速

通过对源IP、源端口、目标IP、目标端口的多种搭配组合进行限速控制,实现灵活有效的防护策略,降低业务影响范围。

4. 流量异常波动抑制算法

对正常的业务流量进行学习建模,当某类异常流量出现快速突增的波动时,自动判断哪些是异常从而进行限速/封禁,以避免对正常流量造成影响。

5. 指纹(水印)过滤

协商好特定的水印算法,在客户端发包的时候带上水印字段,然后通过水印过滤识别正常还是攻击流量。

而这5种防护的思路,Azure都能提供对应的防护方案。

1. Network Security Group

2. Azure Firewall

3. 高级定制防护

4. Azure DDoS Standard Plan

5. 高级定制防护

我们大致总结为三道主要的防线:

第一道防线:Azure DDoS Standard Plan

启用Azure DDoS标准防护,阻挡大部分的3-4层攻击。

我到底是怎么被“炸房挂“轰炸掉线的?

第二道防线:添加水印

在手机客户端发送每条信息中都嵌入了水印,而攻击的报文没有携带水印,Azure可以通过这些水印进行过滤,只有携带水印的报文,才会到达后端游戏服务器,从而达到防护的效果。

我到底是怎么被“炸房挂“轰炸掉线的?

第三道防线:基于端口的速率限制

我们不能保障水印方案可以100%抵挡所有DDoS流量,所以当DDoS仍然可以到达后端服务器的时候,我们可以通过限制每个端口的速率,以牺牲一局游戏的代价(作废处理),来换取整台服务器上的其他游戏房间的正常运行。

我到底是怎么被“炸房挂“轰炸掉线的?


我到底是怎么被“炸房挂“轰炸掉线的?

上一篇:固态硬盘集体爆发 四大厂商齐发布


下一篇:DAY1 打卡cs144 斯坦福计算机网络