安全界对漏洞的定义为:在硬件、软件、系统等具体实现或者系统安全策略上存在的缺陷,从而使攻击者能够达到于某种破坏效果。游戏安全漏洞属于常规漏洞的子类,常规漏洞的分类如下图所示:
通过以上的漏洞分类图可知游戏漏洞属于常规软件漏洞一种分类。
以漏洞的实现原理为依据,可将游戏安全漏洞划分成3大类,分别为:游戏逻辑漏洞、协议稳定性漏洞、服务端校验疏忽漏洞。
1.1游戏逻辑漏洞介绍
游戏逻辑漏洞也就是传统的外挂功能漏洞,通过修改客户端游戏实现外挂功能,例如无敌、秒怪等功能。该类型漏洞和游戏开发时网络架构有关,并不是所有游戏都能挖掘到该类型的漏洞。游戏逻辑漏洞于游戏客户端实现,通过修改代码、修改数据、调用游戏函数等方式实现漏洞功能。
游戏逻辑漏洞与游戏网络交互关系密切,如果游戏绝大部分逻辑于服务器实现,客户端只是同步结果,则此类型的游戏逻辑安全性较好,能够实现的游戏逻辑漏洞较少。例如:盛大的传奇、网易的梦幻西游等游戏属于强联网的游戏,游戏绝大部分逻辑于服务器实现,游戏自身逻辑安全性较好,从而导致能够实现的游戏逻辑漏洞非常有限。
如果游戏逻辑于客户端实现,则该游戏能够实现很多逻辑漏洞,例如:酷跑游戏属于弱联网游戏,游戏每局过程中玩家可在无网络状况下操作游戏,酷跑存在大量的游戏逻辑漏洞,已出现的外挂功能包括:修改分数加成暴分、修改宠物坐骑属性暴分、无敌功能等。
挖掘游戏逻辑漏洞需要提前了解游戏的网络类型,实时交互的强联网游戏整体逻辑安全性较好,弱联网的游戏逻辑安全性较差。
1.2游戏协议稳定性漏洞介绍
协议稳定性漏洞是指构造畸形协议导致协议处理方在处理协议时出现崩溃的漏洞。该类型漏洞理论上与游戏类型或者服务端网络架构没关系,所有游戏都有可能存在这类漏洞。比如曾经出现过的某游戏PK场掉线外挂就是修改技能数据导致技能使用协议中技能等级字段异常导致的崩溃。这种畸形协议可以是直接构造畸形协议发送,也可以是修改游戏中的数据或者代码导致游戏处理逻辑自动构造畸形协议。
协议稳定性漏洞挖掘过程实际就是畸形协议构造的过程,而畸形协议字段的构造可考虑通过Fuzz工具的思想实现。Fuzz工具的核心可能就是对各种边缘值的总结过程,比如包含:最大值、最小值、0、-1、最大值/2、该类型数据有效值(例如把怪物A的UID换成怪不B的UID)、该类型数据无效值(例如把UID换成随机数)、浮点型数据等等各种情况。
1.3服务端校验疏忽漏洞定义
服务端校验疏忽漏洞是指服务端校验不严或者校验逻辑在客户端的漏洞。该漏洞通常通过修改协议字段实现相关功能。
服务器校验疏忽型漏洞与服务器针对游戏逻辑校验息息相关。此类型漏洞与游戏类型及网络架构无关,只依赖游戏开发人员的逻辑严谨性。例如网易梦话西游安全性很好,但可实现瞬移的漏洞;例如酷跑游戏实时PVP道具模式可通过发包的方式实现无限道具漏洞,利用该功能玩家无限使用道具,由于服务器未对玩家使用道具合法性进行判断导致无限使用道具功能出现。