游戏安全实验室 首页 技术入门 查看内容

 阅读目录

时间竞争风险

发布于:2018-1-17 16:41   |    102657次阅读 作者: 管理员    |   原作者: TP

注:本文部分内容参考《网络游戏安全揭秘》-5章节游戏中的时间状态和bug“ 编写

时间竞争风险的定义:

众所周知网络游戏是大型分布式程序的先例,一个游戏,往往配置了成百上千的服务器去存储游戏玩家的各个信息,帐号信息,财产信息,邮件信息……当成千上万游戏客户端在不停向各个服务器发送大量请求时,服务器如何精准的确定每一个客户端端状态并进行同步就面临着一个很的问题——竞态条件。竞态条件游戏中漏洞的来源之一时间竞争在众多竞态导致的漏洞中又占了很大一部分了解什么是时间竞争风险之前,先来理解什么是时间竞争。

举个简单的例子:

AB有一天某小镇电影院见面,但因为疏忽,他们忘记了这小镇有2个电影院1,2,等到了约定的时间A去了电影院1B去了电影院2,结果A和B均没有等到对方,这个时候,A和B均想起来,这个小镇还有另外一个电影院,于是,A乘车去了2B又乘车去了1结果,他们有一次失之交臂。

从上面实例中可以看出,时间和顺序在里面了很大的执行作用,于是可以简单的将恰当的执行时序导致了预期的执行效果,称时间竞争带来的风险。

 

时间竞争风险:

时间竞争概念较为抽象,可以先来看几个具体的实例:

游戏你正在激励的排位厮杀最终还是因为自己一不小心,被对方一套连找到打成残血,就快要输掉这场比赛了,你心里很不甘心,这可是你的定级赛啊,于是你利用游戏漏洞,直接退出PK至选择角色不虚弱和处罚(地狱模式)此时你的中途退出不会收到游戏的处罚,你可以继续匹配定级

游戏中的技能可以在决斗场中控制对手无法移动,你与对方PK时,发现招架对方的进攻,于是,你对他使用了控制技能后,立刻强制结束进程,此时对方会被你的控制技能一直定住,除非自己认输比赛或者也强制退出游戏。

游戏了保证玩家日活跃,推出奖励丰富的日任务,但是无奈每天只能领取一次,是你可以利用漏洞,在领取任务后迅速推出游戏,然后在进入游戏后即可再次领取每日奖励 

时间竞争在游戏中风险很高,因为在弄清楚利用方式后,利用又较为简单,有可能只需要关闭下进程,就完成了一次游戏中的漏洞利用,因此时间竞争带来的游戏漏洞传播速度很快,能在短时间内造成玩家大量使用获益,破坏游戏口碑

 

时间竞争存在的原因

通过之前的定义,可总结时间竞争风险存在的直接原因是:

1. 操作指令执行次数不止一条,或指令数不止一个

2. 操作指令执行时间出现异常

客户端将不正确的操作序列发送到了服务器,异常有服务器产生,根本原因是服务器对非预期的客户端请求进行处理,导致服务器逻辑出错。

了更好的理解时间竞争导致游戏漏洞出现,举出一个案例:

游戏游戏币的充值时间线如下图所示:

如果弄清楚上述协议交互(事实上交互远比上述要复杂,上述时序图为了表达简化了大量的协议交互过程),可以很清楚发现漏洞所在,当玩家付费时,可以立刻取消付费请求,此时游戏已经将付费道具发给玩家了,那么玩家就可以无限支付,取消付款,来刷道具了。

时间竞争风险挖掘方式:

时间竞争风险挖掘核心是分析在协议交互之间的关系,确定协议间是否存在逻辑上的疏忽。可以通过协议工具很清楚的分析清楚协议交互图,在进一步分析协议交互去分析服务器校验逻辑,结合协议工具的协议屏蔽功能可以确认服务器校验逻辑是否存在问题。具体可参加下面的例子:

游戏的日常活动领取奖励时,通过协议测试工具,可以弄清楚协议交互如下:

分析清楚协议交互后,可以很清楚的看到逻辑漏洞,如果最后一条协议——“标记日常奖励已经发放,日常任务结束协议客户端没有收到,那么后续就可以再次领取日常任务。借助协议工具,直接将这条协议屏蔽,测试后果然出现可以无限刷日常的漏洞了。



*转载请注明来自游戏安全实验室(GSLAB.QQ.COM)

分享到:
踩0 赞0

收藏

上一篇:限制突破类风险

下一篇:边界条件风险

最新评论
引用 Hello_baby_Wow 2018-1-19 19:50
结合这一篇章,大概明白您前几章节的其他竞争漏洞的意思了。您能否用wep抓个实例的通信报文看一下,tks~
引用 月魂 2018-1-17 11:19
学习了(文章发表日期有点超前...)

查看全部评论(2)

B Color Image Link Quote Code Smilies

发表评论