一、网络游戏安全很有趣
一直很想知道魔兽的
游戏安全工程师是如何做游戏安全的,毫无疑问,魔兽是目前最流行的网络游戏,有着众多经验丰富的黑客在利润驱动的情况下以这款游戏的作弊技术谋生。游戏黑客的作弊技能在《网络游戏安全解密》看到部分(这是目前为止唯一的质量较高的游戏安全专门书籍),但游戏安全工程师是如何防御的就比较神秘了。咨询过一些做游戏安全的,都倾向于将防御手段隐藏起来(安全防御细节的暴露会使防御方法很快失效),因此网游安全的研究基本靠各大游戏外挂论坛提供素材了。
网络游戏安全很有意思,首先网络游戏安全代表了最高的软件技术(想想MMO可是数以十万计的用户在实时交互,多大的挑战),其次网络游戏的虚拟经济和现实经济之间存在直接的联系(想想淘宝上游戏点卡,游戏道具,游戏代练交易,多大的利益诱惑),再次网络游戏安全的重要经验可以直接适用于其他软件(通用性对安全工作者很有帮助),最后游戏安全不仅是技术问题也是法律问题,例如对游戏破坏者的法律制裁,如何平衡 玩家隐私权利和保护游戏不被破解(例如使用rooktkit技术检测玩家电脑是否有游戏破坏程序运行的方法涉及个人电脑隐私问题,安全厂商例如360也面临这样的问题,我是坚决反对侵犯玩家隐私的,无论出发点是什么,因为这种行为是不受控制的,在搜集用户敏感数据后,能否抵制住不利用其盈利的诱惑呢)。
网络游戏安全将信息安全的大多数方面的串联起来了。例如网络帐号的安全(游戏拖库),网络充值的安全,网络服务器的安全这些属于网络安全的领域;例如客户端的安全,反调试,反逆向,反Hook属于软件安全的领域;还有其他的,例如游戏欺诈(冒充工作人员骗取帐号密码,钓鱼网站,内部员工(GM的事件爆的最多)非法交易);游戏分级(儿童游戏保护,防沉迷系统)。游戏外挂的逆向分析以及外挂检测与防御就与杀毒行业非常像(想想恶意软件样本分析,游戏外挂对游戏而言就是病毒)。简单的说优秀的游戏安全工作者要既是hacker也是cracker,既要懂技术也要懂侦查。
二、游戏攻击手段很多样
博客中有介绍过手游与页游的攻击方法及相应的工具,但没有端游的(我没有端游的安全工作经历,这也是没法说自己是个游戏安全工作者的原因,私以为没做过大型端游安全的不是真正的游戏安全工程师)。从游戏的共性来说,网络游戏的本质就是客户端与服务端的数据通信,攻击的对象就是一系列的 数据,游戏安装生成的客户端数据(可执行文件PE、ELF、Mach-O,动态链接库,存档文件,资源文件),游戏运行时在进程中的数据、界面数据(显卡的数据)、时钟数据,游戏通信时从网络接口流出的数据。
我们知道游戏的攻击手段总的来说为以下几种:
1. 自动化游戏(机器人) 端游和页游中广泛存在,例如精灵对战类游戏的自动打怪外挂,手游暂未出现该类型外挂。一般是 模拟键盘鼠标对界面的操作,会同时配合 像素采集来定位游戏界面上目标的坐标或状态(例如通过采集界面显示怪物生命槽的地方的像素来确认怪物的生命状态)。
( 防御 :游戏公司一般采用以下方法来反机器人外挂,一种是加入 图片验证 (也叫图灵测试,利用只有人类才能识别的特点,但仍存在问题,例如图片库的大小和更新速度是否能抵抗图片库遍历,另一种是 对玩家特定数值进行监控 ,当超出限定范围时, 预警; 还有一种比较有争议的防御方法,就是 扫描系统中的进程和所有以窗口方式打开的程序的窗口名,看是否有使用按键精灵类的外挂 ,这种方式是侵犯用户隐私的,并且在隐藏进程与更改窗口名的情况下无效)
2. 内存修改 端游、页游,手游都存在,对 端游 和页游在单机和弱联网时代比较流行,但随着网游兴起,这种作弊手段的有效性逐渐弱化,对手游目前为主流作弊手段
( 防御 : 内存修改的防御,一般也从修改工具下手,内存修改器一般只能搜索特定格式的数据,所以要防止被搜索到的有效方法就是采用 自定义数据格式 )
3. 存档修改 同内存修改, 端游 、页游,手游都存在, 对 端游 和页游 在单机和弱联网时代比较流行,但随着网游兴起,这种作弊手段的有效性逐渐弱化,对手游目前为主流作弊手段
( 防御 : 存档修改的防御,也是从修改工具下手,通过 加密存档,包括存档格式与存档实际内容 ,使得一般的文本编辑器例如sqlite3数据库编辑器无法编辑)
4. 封包修改 网络游戏的 核心 作弊手段,分为 脱机挂 ( 不依赖于官方发布的客户端程序,由外挂完全模拟客户端去与服务器进行通信)、 内挂 (以游戏客户端程序为载体,依靠客户端程序来完成与游戏服务器的通讯)。这种类型外挂一般都先通过逆向客户端得到协议(封包)生成算法, 然后hook ws2_32.dll(windows sockets的应用程序接口)的send(),recv()函数来重写封包.
( 防御 : 封包修改的防御,最普遍的方法就是 加密数据包 ,表面上看属于密码学范畴,但实际上封包外挂的核心是通过 逆向客户端找到通信协议加密解密算法 ,从这个角度看,攻击与防御又落入单机游戏的客户端保护上了)
5.加速器 常见于对战类游戏,例如页游通过加速动画播放速度来快速对战
( 防御 : 加速器的防御一般采用事后检测防御,通过判断客户端时间是否与服务器 时间一致 来判断是否加速,并给出相应的处理)
6. 安装包Patch 常见于端游与手游这种富客户端的,例如修改App store下载的IPA包,去除掉版权保护还原加密部分,例如重打包Android的APK包,使试用版变成完整版(verycd上一堆的破解端游)( 防御 : 一般采用 反调试 :检查游戏进程是否处于调试状态、可以检查进程的标志位或利用调试器会让程序运行减慢的特点隔段读取系统时间计算时间间隔; 加壳 :对二进制文件进行加密压缩等操作,使得反编译器/反汇编器无法运行; 源码混淆;代码完整性检测 方法 )
7. runtime 攻击(API Hook) 常见于端游与手游这种富客户端的,API hook 运行中游戏进程,替换原始的动态链接库(windows上的dll,iOS上的dylib,Android上的so),例如iOS上的免费内购外挂。 可以说Hook技术是外挂的基础,是病毒的基础,是软件入侵的基础
( 防御 : 一般应对hook的外挂防御方式,就是检查游戏的客户端进程,看是否有已知作弊进程的存在,一般采取字符串匹配,一些高级的外挂会将进程隐藏起来来避开常规的检测方法,也就是常说的 rootkit ,这一技术已经由反恶意软件技术推向成熟了,当外挂完全存在于内核时,外挂检测工具是无法通过扫描进程来感知外挂,只能通过扫描内核模块来感知,但游戏一般情况下没有这么高级别的权限的,即使有最高权限,这种内核层操作也可能使得系统相对不稳定。)
8. 服务端配置漏洞 例如未上线商品配置为可购买,例如过期运营活动未及时下线
( 防御 :要提高配置的正确性,最好配合智能检测,检测配置表是否符合预设的配置规则,交叉评审配置表也是一个方法。但实际实施方案还是采用的是配错罚钱来提高正确性)
9. 游戏逻辑漏洞 设计与实现上的bug,例如游戏经济系统设计的漏洞( 经济系统失衡),比如说可以通过创建多个小号将系统赠送的初始物品转移到大号上;例如游戏中个人私密数值可以被其他玩家查看甚至修改;例如超级火爆的宠物精灵对战游戏 (魔兽都出了宠物对战,可见有多火了)就会出现新捕捉的初始精灵未初始化而在某些操作中可以大量获得物品的bug 。 而对大型网游而言,由于是分布式程序,最常见的游戏逻辑漏洞,就是分布式程序处理并发请求时由于竞态条件带来的问题。这种漏洞的利用一般会配合对服务器的拒绝服务攻击制造服务器延迟。(极限情况能暴露更多的漏洞问题)
( 防御 :最基本的方法就是充分测试, 游戏安全漏洞绝大多数都是开发编写出来的(还有一小部分是策划设计失误,运营人员配置失误),如果恰好遇到不配给高质量测试团队的项目,那就是惨不忍睹。(题外话, 陈皓 曾写过 《我们需要专职的QA吗》,他代表了一些开发对测试岗位的轻视,其实测试岗位的存在就是给开发背黑锅的,是对他们的保护),再就是配合监控预警系统。)
10. 游戏运行平台的安全问题 例如越狱iOS设备与root后的Android设备就破坏了原本的安全机制,使得设备上运行的游戏需要考虑额外的 威胁
( 防御 :对操作系统的错误,应用系统能做的不多,要更安全,只能对系统层安全措施持怀疑态度,尽可能的由自己来保护应用程序)
11. 帐号安全 属于web常见漏洞
12. 充值安全 属于web常见漏洞
13.游戏欺诈 帐号归属纠纷,冒充游戏充值网站的钓鱼网站,冒充游戏外挂(特别是号称可以刷游戏币的)的恶意软件,冒充官方工作人员骗取帐号,在游戏中发送恶意中奖信息
14. 游戏服务器的拒绝服务攻击 大并发的请求拖垮服务器
补充(2013-1-14)
15. 可预测的随机数生成算法 常见于在线扑克类博彩游戏(例如德州扑克),对这种游戏,常见的攻击手法有以下几种,一种是 线上玩家之间的勾结(这也是根据ip限制防作弊场出现的原因,另一种是 利用伪随机数的缺陷预测玩家手中的牌(提高随机率一直是安全方面工作的核心,特别是密码系统),还有一种叫 算牌器,利用统计学的原理,计算出最有效的出牌战略
16. 数据挖掘 从众多的玩家客户端挖掘出有用的游戏数据信息。挖掘出来的游戏关键资料对游戏挖掘和打金工作室非常有用的,也有利于游戏攻略网站。 例如某样道具的确切坐标及地图路线,道具获取概率等。最有名的有魔兽( 国内魔兽数据库 , Thottbot )的Thottbot插件,它会从Thottbot服务器中读取信息,然后显示出你的角色相关的有用的统计信息,例如在地图上显示给玩家要如何取得他们想要的道具,并且在地图上标出道具的出现率,当然,它在提供帮助的同时,也会将你的客户端的信息发送给Thottbot服务器用来丰富资料库。
17. 显卡攻击 通过操纵底层图像显示来破解游戏。例如 通过 显卡存储来定位 游戏界面元素 ,像C/S游戏的自动瞄准器外挂就是利用存储在显卡中的3D数据为线索去找到在游戏中所有瞄准目标的3D坐标;例如射击类游戏使墙体变成透明的外挂(作弊玩家可以看到其他墙体后面的玩家,而其他玩家看不到作弊者),就是因为所有对象的显示方式是有显卡系统来计算的(出于带宽或计算复杂度等因素的考虑是不可能由服务器来计算游戏客户端何时显示墙体和对象的),这样,通过读取显卡缓存就可以知道所有对象的位置,并在找到墙体对象后,设置墙体结构为透明。
18.换皮(游戏改装) 一般采用替换游戏客户端的图片和音乐等资源文件(游戏的资源文件也经常面临着盗用)来改变游戏的外观,汉化就属于游戏改装的一种,这种只有本地效果
19.私服 私服实现的难度非常大,因为要架设一个服务端,必须要做到通信协议的模拟,因此需要完全了解客户端实现逻辑,而客户端总会采取一系列的加密措施。
( 防御 :有效防御私服的方法还是客户端保护,与法律制裁。起码暴雪在打击私服上是非常强硬的)
总的来说,所有的攻击方法中,对客户端的攻击是最核心的攻击方法。 其中1自动化游戏与4.封包修改最广泛,6.安装包Patch 和7.runtime 攻击是外挂实现的基础(其实游戏外挂的最终形态还是从内核操纵客户端),9.游戏逻辑漏洞是绝大多数弊手段生效的主因。
三、游戏攻击产业很给力
依靠游戏攻击盈利是一条很成熟的产业链。有专业做游戏外挂制作培训的;
有专业做游戏代练(现阶段的游戏黑客们都比较聪明的选择贩卖外挂服务而不是外挂本身,理由一,卖外挂的方式会让游戏公司的安全人员通过外挂分析快速定位游戏漏洞并给予修复及相应的加固防御。理由二,卖外挂的方式会给法律投诉留下明确的证据,而代练没法诉诸法律只能封号了事。理由三,卖服务的盈利次数明显高于卖外挂。);
有专业做游戏虚拟商品交易的(虚拟物品交易引爆了RMI real money trade中间人这一专业机构,他们收购虚拟商品然后专卖给普通玩家,为不少游戏黑客提供了便利的洗钱渠道,很显然,中间人是不会关注游戏虚拟商品的来源是否合法);
有专业做游戏私服的(游戏私服很大程度上需要拿到源码,可以通过买通内部人员或社工入侵公司内外获得源码);
有专业做游戏盗号与钓鱼的;
有以游戏外挂为噱头做广告流量的;
有通过收集游戏中的数据给玩家提供有价值的游戏数据来盈利(相当于游戏攻略网);
其中较为成熟的是 游戏打金工作室,他们 先由专业人员挖掘游戏漏洞(也会配合社工内部人员拿取源码的方法),然后制作入侵工具(外挂),再通过工具在游戏中获取虚拟财产,最后通过交易中心(比如说淘宝,或独立网站)贩卖给其他玩家获利。其中好的游戏打金工作室也会提供良好的售后服务,例如封号处理(游戏管理者会有监控系统来监视作弊行为,并对情节严重者给予封号惩罚,这时候售后的重要性就出来了,售后服务者会挖掘解封流程的漏洞或买通GM进行解封)。这种工作室一般会盯上受欢迎的经济系统庞大的游戏,特别是有许多渠道能将游戏虚拟财产转出游戏换取真实货币的游戏,例如魔兽世界(WoW),在线扑克类游戏。游戏打金工作室一般会配合外挂的使用,但也有完全依靠雇佣廉价劳动力(劳动力一般来自第三世界国家)正常代练。
其中较为曲折的 游戏虚拟商品交易,eBay在2007年就宣布禁止网络游戏道具交易,但不包括中国区,国内最大的电商淘宝就支持网络游戏道具交易。
四、学习游戏外挂制作很有用
正面的来说通过学习外挂制作也能提高IT技能,例如要写一款基本的外挂(以windows平台的端游外挂为例),我们需要掌握以下技能:
第一步:.学会一种语言,VC++最好,c#也不错(c#适用于跨平台),虽然现在很多外挂都是E语言写的,不过最好还是学开发在用的语言
第二步:会简单的 分析游戏,可以使用工具分析游戏窗口,控件,进程,线程,DLL模块,内存
第三步:熟悉windows API,可以编写进程线程操作,内存读写,鼠标键盘模拟
第四步:学会用cheat engine查找动态内存基址
第五步:学会使用ollydbg来调试游戏找关键CALL 找到一些关键的功能函数入口地址,并分析出该函数的参数,就可以编写CALL代码,来直接调用游戏中的函数,让其实现自动化.
第六步:学会编写call代码
第七步:会加密解密封包
我们需要阅读以下书籍:
《C++程序设计》
《windows程序设计第5版》
《windows核心编程》
《深入浅出MFC》
《subverting the windows kernel》
《加密与解密》(重点推荐)
这样折腾一回,编程技巧,windows内核的了解也就嗖嗖的提高了。
总的来说,游戏外挂制作的基本技能是通过 逆向 工程理解 游戏客户端逻辑 ,特别是 游戏客户端与服务器通信 。 逆向,加密解密,内核 ,三板斧下来就是高手了。
五、游戏外挂防御很飘渺
要防御先得了解游戏为啥被攻击,攻击方法是什么。
为啥被攻击?对于普通玩家而言, 快速升级与 对稀有道具或购买这些道具的游戏货币的需求是最大的作弊诱因。正是这些普通玩家的需求产生了专业的供应方(打金工作室)。攻击方法在 二、游戏攻击手段很多样有介绍。
防御有法律手段也有技术手段。 法律手段一般是针对打金工作室的,一般以 破坏游戏经济为罪名起诉,其实施效果在天朝真的很不好。 技术手段有 游戏设计优化的(例如严格限制每日经济上限),也有依赖 监控系统与GM反馈后做事后代码修复(这个在页游公司最为常见),也有 事前防御的(例如加壳,代码混淆,注入检测)。
各种防御手段最好联合起来执行,技术上没法解决的时候,可以靠设计来减缓,设计难以优化时,也可以靠人力管理和法律制裁。即使都不起作用,也可以从经济学来出发,例如外挂制作的人力是远远低于游戏制作的,频繁的游戏更新都会让外挂制作者头疼导致外挂后期维护力不从心而丧失外挂使用客户。
之所以说游戏外挂防御很飘渺,那是因为游戏外挂防御的限制很多,最主要的限制是这方面的 资源投入往往不够,其次是防御涉及到多方面的配合(游戏外挂信息的反馈是否及时,游戏外挂分析人员的技术是否扎实,游戏负责人是否同意牺牲部分可玩性去换取安全性等等),最后一点就是对待使用外挂者的 惩罚不能强硬,大多数的游戏制作商都害怕得罪玩家,不能像暴雪一样严惩作弊者。