[转]网络游戏安全小议(端游/页游/手游)

墨水心_Len | 2013-01-14 11:02

关于游戏安全这块,貌似讨论的较少啊。

今早逛博客,瞄到此文,拿来分享。

原文来至:[link href="http://danqingdani.blog.163.com/blog/static/186094195201309112412385/?newFollowBlog"]碳基体[/link]

一、网络游戏安全很有趣

  一直很想知道魔兽的游戏安全工程师是如何做游戏安全的,毫无疑问,魔兽是目前最流行的网络游戏,有着众多经验丰富的黑客在利润驱动的情况下以这款游戏的外挂作弊技术谋生,游戏黑客的作弊技能在《网络游戏安全解密》这本书里有提到(这是目前为止唯一的质量较高的游戏安全专门书籍),但游戏安全工程师是如何防御的就比较神秘了。咨询过一些做游戏安全的,都倾向于将防御手段隐藏起来,因此在游戏安全研究上基本靠游戏黑客提供资料。

   网络游戏安全很有意思,首先网络游戏安全代表了最高的软件技术(想想MMO可是数以十万计的用户在实时交互,多大的挑战),其次网络游戏的虚拟经济和现实经济之间存在直接的联系(想想淘宝上游戏点卡,游戏道具,游戏代练交易,多大的利益诱惑),再次网络游戏安全的重要经验可以直接适用于其他软件(通用性对安全工作者很有帮助),最后游戏安全不仅是技术问题也是法律问题,例如对游戏破坏者的法律制裁,如何平衡玩家隐私权利以及如何保护游戏不被破解(例如使用rooktkit技术检测玩家电脑是否有游戏破坏程序运行的方法涉及个人电脑隐私问题,当然这点也是杀毒软件面临的问题)。

   网络游戏安全将信息安全的大多数方面的串联起来了。例如网络帐号的安全(游戏拖库),网络充值的安全,网络服务器的安全这些属于网络安全的领域;例如客户端的安全,反调试,反逆向,反Hook属于软件安全的领域;还有其他的,例如游戏欺诈(冒充工作内容骗取帐号密码,钓鱼网站,帐号纠纷),内部员工(GM的事件爆的最多)非法交易,游戏分级(儿童游戏保护,防沉迷系统)。游戏外挂的逆向分析以及外挂检测与防御就与杀毒行业非常像(想想恶意软件样本分析,游戏外挂对游戏而言就是病毒)。简单的说优秀的游戏安全工作者要既是hacker也是cracker,既要懂技术也要懂侦查。

二、游戏攻击手段很多样

   博客中有介绍过手游与页游的攻击方法及相应的工具,但没有端游的(我没有端游的安全工作经历,这也是没法说自己是个游戏安全工作者的原因,我觉得没做过端游安全的不是真正的游戏安全工程师),从游戏的共性来说,网络游戏的本质就是客户端与服务端的数据通信,攻击的对象就是一系列的数据,游戏安装生成的客户端数据(可执行文件,动态链接库,存档文件,资源文件),游戏运行时在进程中的数据、界面数据、时钟数据,游戏通信时从网络接口流出的数据,

   我们知道游戏的攻击手段(外挂)总的来说为以下几种:

1. 自动化游戏 端游和页游中广泛存在,例如精灵对战类游戏的自动打怪外挂,手游暂未出现该类型外挂

2. 内存修改 端游、页游,手游都存在,对端游和页游在单机和弱联网时代比较流行,但随着网游的大方向,这种作弊手段的有效性逐渐弱化,对手游目前为主流作弊手段

3.存档修改 同内存修改,端游、页游,手游都存在,对端游和页游在单机和弱联网时代比较流行,但随着网游的大方向,这种作弊手段的有效性逐渐弱化,对手游目前为主流作弊手段

4.封包修改 网络游戏的核心作弊手段,分为脱机挂(不依赖于官方发布的客户端程序,由外挂完全模拟客户端去与服务器进行通信)、内挂(以游戏客户端程序为载体,依靠客户端程序来完成与游戏服务器的通讯),私服(与脱机挂相反,是完全模拟了官方服务器)。这种类型外挂一般都先通过逆向客户端得到协议(封包)生成算法,然后hook ws2_32.dll(windows sockets的应用程序接口)的send(),receive()函数来重写封包.

5.加速器 常见与对战类游戏,例如页游通过加速动画播放速度来快速对战

6.安装包Patch 常见于端游与手游这种富客户端的,例如修改App store下载的IPA包,去除掉版权保护还原加密部分,例如重打包Android的APK包,使试用版变成完整版(verycd上一堆的破解端游)

7.runtime 攻击(API Hook) 常见于端游与手游这种富客户端的,API hook 运行中游戏进程,替换原始的动态链接库(windows上的dll,iOS上的dylib,Android上的so),例如iOS上的免费内购外挂。

8.服务端配置漏洞 例如未上线商品配置为可购买,例如过期运营活动未及时下线

9.游戏逻辑漏洞 例如游戏经济系统设计的漏洞(经济系统失衡),比如说可以通过创建多个小号将系统赠送的初始物品转移到大号上;例如游戏中个人私密数值可以被其他玩家查看甚至修改;例如超级火爆的宠物精灵对战游戏(魔兽都出了宠物对战,可见有多火了)就会出现新捕捉的初始精灵未初始化而在某些操作中大量获得物品。。其实游戏的安全漏洞绝大多数都是开发编写出来的(还有一小部分是策划设计失误,运营人员配置失误),如果恰好遇到不配给高质量测试团队的项目,那就是惨不忍睹(题外话,陈皓 曾写过《我们需要专职的QA吗》,他代表了一些开发对测试岗位的轻视,其实测试岗位的存在就是给开发背黑锅的,是对他们的保护)

10.游戏运行平台的安全问题 例如越狱iOS设备与root后的Android设备就破坏了原本的安全机制,使得设备上运行的游戏需要考虑额外的威胁

11.帐号安全 属于web常见漏洞

12.充值安全 属于web常见漏洞

13.游戏欺诈 帐号归属纠纷,冒充游戏充值网站的钓鱼网站,冒充游戏外挂(特别是号称可以刷游戏币的)的恶意软件,冒充官方工作人员骗取帐号,在游戏中发送恶意中奖信息

14.游戏服务器的拒绝服务攻击 大并发的请求拖垮服务器

其中 4.封包修改最广泛,6.安装包Patch 和7.runtime 攻击最据技术含量(其实游戏外挂的最终形态还是从内核操纵客户端)

三、游戏攻击产业很给力

  依靠游戏攻击盈利是一条很成熟的产业链,有专业做游戏外挂制作培训的,有专业做游戏代练或游戏虚拟物品交易的(现阶段的游戏黑客们都比较聪明的选择贩卖外挂服务而不是外挂本身,理由一,卖外挂的方式会让游戏公司的安全人员通过外挂分析快速定位游戏漏洞并给予修复及相应的加固防御。理由二,卖外挂的方式会给法律投诉留下明确的证据,而代练没法诉诸法律只能封号了事。理由三,卖服务的盈利次数明显高于卖外挂。)有专业做游戏私服的(游戏私服很大程度上需要拿到源码,可以通过买通内部人员或社工入侵公司内外获得源码),有专业做游戏盗号与钓鱼的,有以游戏外挂为噱头做广告流量的。

其中较为成熟的就是游戏打金工作室,他们先由专业人员挖掘游戏漏洞(也会配合社工内部人员拿取源码的方法),然后制作入侵工具(外挂),再通过工具在游戏中获取虚拟财产,最后通过交易中心(比如说淘宝,或独立网站)贩卖给其他玩家获利。其中好的游戏打金工作室也会提供良好的售后服务,例如封号处理(游戏管理者会有监控系统来监视作弊行为,并对情节严重者给予封号惩罚,这时候售后的重要性就出来了,售后服务者会挖掘解封流程的漏洞或买通GM进行解封)。这些工作室一般会盯上受欢迎的经济系统庞大的游戏,特别是有许多渠道能将游戏虚拟财产转出游戏换取真实货币的游戏,例如魔兽世界(WoW),在线扑克类游戏。

四、学习游戏外挂制作很有用

  正面的来说通过学习外挂制作也能提高it技能,例如要写一款基本的外挂(以端游外挂为例),我们需要掌握以下技能

第一步:.学会一种语言,vc++最好,c#也不错(c#适用于跨平台),虽然现在很多外挂都是E语言写的,不过最好还是学开发在用的语言

第二步:会简单的分析游戏,可以使用工具分析游戏窗口,控件,进程,线程,DLL模块,内存

第三步:熟悉windows API,可以编写进程线程操作,内存读写,鼠标键盘模拟

第四步:学会用cheat engine查找动态内存基址

第五步:学会使用ollydbg来调试游戏找关键CALL 找到一些关键的功能函数入口地址,并分析出该函数的参数,就可以编写CALL代码,来直接调用游戏中的函数,让其实现自动化.

第六步:学会编写call代码

第七步:会加密解密封包

我们需要阅读以下书籍

《C++程序设计》

《windows程序设计第5版》

《windows核心编程》

《深入浅出MFC》

《subverting the windows kernel》

这样折腾一回,编程技巧,windows内核的了解也就嗖嗖的提高了。

五、游戏外挂防御很飘渺

要防御先得了解游戏为啥被攻击,攻击方法是什么。为啥被攻击?对于普通玩家而言,快速升级与对稀有道具或购买这些道具的游戏货币的需求是最大的作弊诱因。正是这些普通玩家的需求产生了专业的供应方(打金工作室)。攻击方法在二、游戏攻击手段很多样有介绍。

防御有法律手段也有技术手段。法律手段一般是针对打金工作室的,一般以破坏游戏经济为罪名起诉,其实施效果在天朝真的很不好。技术手段有游戏设计优化的(例如严格限制每日经济上限),也有依赖监控系统与GM反馈后做事后代码修复(这个在页游公司最为常见),也有事前防御的(例如加壳,代码混淆,注入检测)。

之所以说游戏外挂防御很飘渺,是因为游戏外挂防御的限制很多,最主要的限制是这方面的资源投入往往不够,其次是防御涉及到多方面的配合(游戏外挂信息的反馈是否及时,游戏外挂分析人员的技术是否扎实,游戏负责人是否同意牺牲部分可玩性去换取安全性等等)。