网络游戏安全策略

发表于2015-08-06
评论0 766浏览

想免费获取内部独家PPT资料库?观看行业大牛直播?点击加入腾讯游戏学院游戏程序行业精英群

711501594
 一、前言:

网络游戏帐号安全的最终目的是:
网络游戏玩家的帐号、密码安全和反外挂是同等重要的,如果玩家的帐号总是被盗、物品总是丢失,那么玩家就会对这款游戏失去信心了。一般一个玩家的离去 总是会牵动其他玩家一起离开,这些和一款网游的寿命(存活期)也是有着相当大的联系的。如果天天都有很多玩家喊着帐号被盗的话,对网络游戏其他玩家的心态 还是会有着很大的影响的。

网络游戏反外挂的最终目的是:
使游戏玩家只可以利用“官方网络游戏公司”提供的“游戏客户端程式”进行游戏,用户不可以借助其它游戏辅助工具(如:自动喊话机器人、内挂、外挂和脱 机外挂等)进行游戏、用户不可以修改破坏“游戏客户端程式”(保持其完整性、正确性和有效性)、用户不可以拦截修改变更“网络游戏服务器端程式”与“网络 游戏客户端程式”的所有通信数据封包、用户不可以利用游戏中存在的BUG进行以下操作“如:刷币、刷怪、吸怪、刷装备、刷等级、无敌、不死、无限血 (红)、无限内功(蓝)、不受限制PK、跨级打怪、最大攻击、隐身、穿墙、客户端程式一机多开等”。这样就保证了游戏的公平性、和谐性,从而达到从本质上 延长了一款游戏的寿命(存活期),同时也保持了游戏玩家的稳定人数和游戏公司的稳定收入。
----------------------------------------------------------------------------------------------------------
二、网络游戏安全模型介绍:

如果一款网络游戏要做到绝对的安全,就必须从以下五个大的方面来整体考虑:
1、保证网络游戏服务器数据库是安全的,不会被黑客入侵和盗取数据资料。
2、保证网络游戏公司官方网站中的所有页面都是安全的,不会被黑客挂马。
3、对黑客所使用的“溜号器”工具进行防范,保护玩家帐号、密码不被盗取。
4、网络游戏盗号木马安全防范,可以防御盗号木马和检测盗号木马。
5、网络游戏反外挂篇,这个是最主要的核心技术(内附新一代反外挂原理)。
----------------------------------------------------------------------------------------------------------
三、网络游戏安全模型原理及应用:

----------------------------------------------------------------
1、网络游戏服务器数据库是安全的,不会被黑客入侵和盗取数据资料。

  玩家的帐号和密码必须都是加密存放在数据库中的,用户名称为可逆的加密(因为这个在查询时需要还原明文)、用户密码为不可逆的加密(这个不需要 还原明文,玩家密码忘记后叫他重新设置密码就OK了)。玩家在注册或登陆游戏时,会在登陆窗口输入明文的帐号和密码,我们这里拿密码作为讲解的对象。玩家 在登陆窗口输入明文的密码后,游戏客户端把密码加密后发送(可以单字节或拆分加密,以单包或多包的形式发送给服务器)到服务器上,游戏服务器端程式接收到 密码后进行二次不可逆加密保存到数据库中。这样,就算数据库被黑客全部盗走了,也只是费库,没任何商业利用价值(因为黑客根本没得到有效的帐号和密码,他 们无法直接登陆玩家的帐号,这样玩家的帐号就是安全的,物品不会被盗)。游戏服务器也就不怕被暴库了。
----------------------------------------------------------------
2、保证网络游戏公司官方网站中的所有页面都是安全的,不会被黑客挂马。

  如果黑客拿到了网络游戏公司官方WEB服务器的权限,他们可能会采用挂马的手段(网站程序和数据库不会放在同一台主机服务器上,黑客拿不到库只 能去挂马。再说,数据库中的登陆帐号和密码都是密文,就算黑客拿到也没有用处。),使来访用户因计算机系统存在的漏洞而中马,从而盗取游戏的帐号、密码等 信息资料。我们可以采用“网页防篡改程序”(这个网页防篡改程序的设计方案我已经想好了,比较完善)来保护网页主框架代码不会被修改挂马(ARP局域网挂 马目前还是没有有效的对外防御方法,因为判断权不在我们自己这里),再就是保护好数据库防注入提权就行了(一般游戏网站服务器都是单独的,不会出现跨站种 类的入侵)。
----------------------------------------------------------------
3、对黑客所使用的“溜号器”工具进行防范,保护玩家帐号、密码不被盗取。

  有些网络游戏玩家天天很小心的玩着游戏,生怕自己的游戏帐号、密码被黑客窃取去。但玩家他们明明知道自己计算机系统并没有中盗号木马,但游戏物 品就是被盗了,好东西都不意而飞了。于是玩家很是郁闷,只能把责任推到网络游戏官方提供商身上,说官方内部有人盗玩家物品或是说GM盗玩家物品等等,众说 纷纭。其实,这种情况产生的主要原因可能和黑客手中的“溜号器”工具有关系。“溜号器”工具的功能是:快速验证判断游戏登陆帐号和其同组所对应密码有效性 的功能,也叫“帐号验证器”。“溜号器”工具需要与一种数据库配合使用,数据库中保存的是网络游戏玩家帐号和对应的密码(以前盗取过的其他网络游戏的玩家 帐号和密码),这些帐号和密码是一一对应关系的,以每组为一行的形式无限向下排列(当然也可以是别的格式),这种库黑客喜欢称之为“废库”(网络上有些黑 客专门收集这种数据库)。一般,职业网络游戏玩家都喜欢玩多款网络游戏,他们为了方便记忆帐号和密码,所有游戏都使用了完全相同的帐号和密码(并且当前新 玩的网络游戏的帐号和密码也没有改变),所以黑客就采用了这种“社会工程学”的技术手段,拿曾经在其他网络游戏中丢失过的帐号和密码去盗取玩家新玩网络游 戏的帐号,这个就是玩家在当前系统没中木马还丢了帐号的原因。“溜号器”工具大体分为两种:第(1)种是针对“网络游戏公司官方网站会员登陆窗口”进行接 口的“帐号验证器”程序;第(2)种是针对“网络游戏客户端程式玩家登陆窗口”进行接口的“帐号验证器”程序。而上述两种“帐号验证器”程序又分别可以采 用“直接发送模拟封包”和“按键模拟”的方式来实现。高级点的算是“直接发送模拟封包”原理的“帐号验证器”程序,因为它只需要发送和接收关键的数据包 (只要能判断出一组帐号和密码是否有效就足够了,不需要处理太多数据包,节省网络带宽,并且验证速度快的惊人),并且可以设置多线程(根据不同环境一般可 开1-20个线程左右)去工作,免去了多开软件的麻烦。一般情况下,长年进行盗号的黑客们手中大概会有几百万个曾经盗来的游戏帐号“封信”,这些帐号来自 不同游戏的收集整理。一台计算机运行一个“帐号验证器”程序开10线程,1小时大概就可以检测1万-4万个游戏帐号是否有效,所以有很多网络游戏在公测结 束,刚刚转向正式运营时就有玩家大面积同时丢失帐号的事件就不足为奇了。

(1)、有效防范[第(1)种针对“网络游戏公司官方网站会员登陆窗口”进行接口的“帐号验证器”程序]:
先列举4种不可取的方法:
①只单纯的INPUT帐号和密码到服务器去登陆验证,这个是万万不可的。这种“封包帐号验证器”程序超级好模拟(菜鸟都会)。
②每访问或刷新一次会员登陆网页,IE缓存里就保存一段随机长度、随机密钥的“暗码”,会员登陆时会同时INPUT帐号、密码和“暗码”到服务器去登 陆验证,这种方法也是不可取的。这种“封包帐号验证器”程序只要先连接一次服务器读取“暗码”再发送帐号、密码和“暗码”到服务器去登陆验证,就可以实现 程序自动化工作了。
③采用图片识别的“验证码”,但是把“验证码”的标志位放在用户那里去发送了(也就是说,“图片验证码”显示的是“12345”,“图片验证码”的密 钥为“abcde”,只要“12345”和“abcde”对应就算验证通过了。要是把密钥“abcde”放在服务器上去验证还行,但如果是把 “12345”和“abcde”都在客户端上去发送,那就十分危险了),这种方法也是不可取的。这种“封包帐号验证器”程序只要同时INPUT帐号、密 码、“12345”和“abcde”到服务器去登陆验证,就可以实现程序自动化工作了。
④虽然把“图片验证码”的密钥放在服务器上去获取了,但如果采用简单的“图片验证码”的话,这种“封包帐号验证器”程序是一样可以做出来的,现在有“图象识别技术”,对简单“图片验证码”的识别准确率为100%。
采用上述4种技术的大型网络游戏网站的会员登陆窗口有很多(比如:现在美服魔兽世界采用的是上边第2种方法、韩国罗汉游戏采用的是上边第3种方法等等,这些简单的防御技术“帐号验证程序”可以很容易就躲避过去的,非常不安全)。
科学、有效的防御方法目前发现只有一种,那就是采用超级复杂难以识别的“图片验证码”,并且要把判断密钥保存在服务器上进行验证。像腾讯QQ的那种“图片验证码”,如果能加进去“中文”,那你就牛拉,“帐号验证器”程序估计就消失拉。

(2)、有效防范[第(2)种针对“网络游戏客户端程式玩家登陆窗口”进行接口的“帐号验证器”程序]:
这种程序的检测机制也比较简单,方法很多。比如:
①检测登陆连接的速度和登陆帐号的数量(不可能有那么大的正常的局域网络使用同一个IP,1小时内就连续验证登陆几千或几万个帐号)。同一个IP非常快的在不停的登陆不同的帐号(错的多,对的及少),这样很可能就有问题。
②判断包的结构和顺序,如果同一个IP总是连续发送相同结构的包,并且只做简短的连接后(验证了帐号的有效性后)就断开了,这样很可能就有问题。
③判断包的结构和顺序,如果同一个IP总是连续发送相同结构的包,并且只做简短的连接后(验证了帐号的有效性,还读取了人物名称、等级、区服等,就是没有打怪或移动操作)就断开了,这样很可能就有问题。
④还可以利用后文“反外挂技术”中的“溢出”、“注入”和“灵活可执行代码”等技术进行先检测“网络游戏客户端程式”的正确性与完整性后,再执行登陆游戏等操作,这种方法就可以把所有“帐号验证器”程序拦截到门外了。
----------------------------------------------------------------
4、网络游戏盗号木马安全防范,可以防御盗号木马和检测盗号木马。

  网络游戏盗号木马一般分为三种实现技术,分别为:①键盘截取、②内存截取、③封包截取。防御木马的话对于游戏自身来讲就有很大的难度了,因为“ 网络游戏客户端程式”是运行在用户计算机上的,黑客想去破坏安全保护或绕过安全保护太容易了。再牛的保护也会被KISS掉或被绕过。“网络游戏客户端程式 ”唯一能做的就是尽力保护自己,保护自己的句柄不被其它程序获得、保护自己的内存不被其它程序访问,保护自己的通信封包不被其它程序截取、保护自己调用的 API不被其它程序HOOK。这些最好都是采用驱动去实现,内核的东西使用好了,效果还是不错的,最起码能难处绝大部分黑客。
网络游戏盗号木马一般获得到玩家的帐号和密码后,都会把盗取的数据信息以“HTTP包”的形式发送到黑客的收信服务器上进行保存,如果这个包发不出 去,其实就可以保护住玩家的帐号了,我们可以从这里下手来保护玩家的帐号。网络游戏盗号木马发送的封包数据格式十分的单一,比较好判断。只要我们游戏启动 后,能把其它连接网络的程序拦截下来,把通讯地址提取出来进行分析就可以了。我们还可以在“网络游戏服务器”上建立一个黑名单表,把用户系统中通信的地址 都拦截下来进行对比也是可以的。一般一款网络游戏有100个有效的盗号木马就已经很多了,我们给每个盗号木马发10个通信地址,这样我们游戏服务器黑名单 表中也就是1千条左右的数据,信息量不是很大。我们再加一个临时地址存储表,保存一些可疑的通信地址,然后采用程序或人工去判断是否该入黑名单库就OK 了。当我们发现用户玩家系统中有木马时,给玩家一个提示,这样感觉挺好的。如果可以准确判断用户计算机中存在盗号木马,并且发现盗号木马已经成功盗取了玩 家帐号的话,我们“网络游戏服务器端”可以去主动帮玩家把密码重设,同时提示玩家帐号存在不安全因素,需要重新设置一个新的密码。判断网络游戏盗号木马的 方法还有很多种,在这里就不一一列举了。
还可以使用软键盘输入、二级密码、物品交易密码、仓库密码、物品丢弃密码、口令卡、保护卡、手机短信验证、U盘保护卡等方法去保护游戏玩家的帐户。
如果和游戏捆绑发布一个木马检测工具也未尝不可,只是需要去花一些人力和时间去维护升级。

(1)、防范使用“①键盘截取”技术的木马:
“检查键盘钩子”或“像腾讯QQ那样,用驱动把键盘消息重新处理”。

(2)、防范使用“②内存截取”技术的木马:
保护“网络游戏客户端程式”自身句柄,帐号以及其它信息不要在内存中保存明文,帐号信息不要长时间在内存中保存,保存的地址需要用动态的(指针保存动态地址),保护“网络游戏客户端程式”自身内存不被其他程序所访问,同时检测“保护”是否失效。

(3)、防范使用“③封包截取”技术的木马:
“检查通信时所使用的API是否被HOOK,还有这个API内部所调用的其它函数有没有被HOOK。”。如果可以把通信做的底层些更好。

(4)、防御玩家“密码保护资料”被盗取的方法:
现在有部分“网络游戏盗号木马”不但可以盗取游戏帐号和密码等信息资料,它还可以盗取玩家在会员网站上找回密码时的会员登陆帐号以及“密码保护资料”等信息资料。这时,我们要在会员登陆窗口中的明显位置显示出“警告”提示信息。

(5)、同一个游戏帐号使用不同IP同时(重复)登陆时,这个帐号肯定有问题。可以把帐户直接锁上,提示玩家到帐号不安全,需要重新激活或给客服打电话。
----------------------------------------------------------------
5、网络游戏反外挂篇,这个是最主要的核心技术(内附新一代反外挂原理)。

  开发一款网络游戏的脱机外挂,最难突破的就是模拟到把一个帐号成功登陆进游戏中,并且保证稳定不掉线。为什么这么说呢?为什么只有登陆难呢?难 道自动智能模拟玩家游戏就不难吗?其实也难,只是相对登陆成功游戏要简单的多了(因为通信封包加密是随机的、是混乱的,而进行游戏的代码结构是固定的)。 因为只要突破了登陆的通信封包加密,后边一切的通信封包加密就都解决了(一般同一款游戏都是采用同一种模式去加密解密封包的)。那我们为什么不能把游戏的 功能拆分开,每个模块采用不同的算法呢?是工作量很大,但为了长期打算,设计出来一个独特的框架还是有必要的,只要一个框架出来,以后再开发其他网络游戏 采用这种标准就可以了。比如把登陆、打怪、交易、买卖、法术、吃药、不同地图等都分开,采用不同的原理去加密,然后设置一个标记,只要可以识别这个标记就 可以了。还可以在游戏一小段时间后,把标记改变,实现服务器动态控制标记等。当然,所有的加密算法也是灵活的,他们的密钥也是由服务器随机发送给客户端 的。网络游戏通信的数据封包在加密上要尽量的随机、复杂、多变。比如多层无顺序加密处理、服务器随机发送加密的密钥、需要用到哪个加解密算法时,现去把算 法写入到内存中,然后再去执行运算操作等等。

  因为“游戏外挂”再智能也没有人类智能,它们无法处理复杂性的对话,所以一般“游戏外挂”都设置有“遇见GM就下线或报警”的功能。我们游戏公 司可以利用这个特点来实现反外挂,先取一些外挂遇见GM后的反映特征(人工分析外挂原理),随机向“平凡在线、连续打怪和做任务的人物”附近初始化一个真 实的会移动的GM人物,然后看玩家的反映,最后取一个概率来判断玩家是否使用了外挂。因为这种方法目前没有游戏所采用,所以效率很高,值得借鉴。

  游戏动态实时保护功能(如NP),这种技术可以实时保护“网络游戏客户端程式”,用来反外挂、反木马、反调试等。“游戏动态实时保护程序”是与 “网络游戏客户端主程式”合二为一的,它主要负责保护和监视可疑的行为,它会与“网络游戏服务器端主程式”做定时通信效验,看“游戏动态实时保护程序”是 否被破坏或失效。

  加大“网络游戏客户端程式”的逆向难度。加一个强壳并不是什么好的方法,越强的壳,越容易出兼容性的问题,不稳定。所以需要把一些反加载、反逆 向、反跟踪、反调试、断点(软、硬、内存)检测、构造异常转向、花指令、代码混淆、数据加密和API函数加密等技术直接写入到“网络游戏客户端程式”内部 代码中,然后外边再加一个UPX压缩壳就可以了。这样就大大增加了游戏的破解逆向难度,从而保护了游戏自身。因为网络游戏要连接网络通信的,不可以停止太 久(停止太久会掉线),由于要分析“网络游戏客户端程式”就要躲避过程序内部所制造的所有干扰,如果干扰足够复杂、足够多的话,外挂作者就很难顺利调试游 戏了(没调试完游戏就掉线退出了,游戏服务器端就与游戏客户端断开连接了)。如果游戏某些其他主要功能的代码部分也都加上这些干扰,那么就会使外挂开发人 员在分析时花去大量的时间,甚至无法成功分析游戏。如果外挂程序作者试图去直接修改“网络游戏客户端主程式”文件代码的话,只要我们的“游戏动态实时保护 程序”足够强大,与“网络游戏客户端主程式”结合的足够紧密,那么外挂程序作者就无法躲避“游戏动态实时保护程序”的验证,也就只能放弃该款网络游戏外挂 的开发。因为开发络游戏外挂是需要很大成本的,分析难度过大或是后期外挂更新难度过大的话,他们一般不会对这样的网络游戏下手,他们感觉没利润可途。

  新一代反外挂理念设计原理:“增加随机性的可执行代码”在“网络游戏客户端主程式”内部运行,可以叫“动态游戏更新”,也可以叫“动态游戏补丁 ”。这种技术是我所想出来的(未公开),并且目前没有任何网络游戏所采用。这种技术使用在反外挂中是最理想的,也是最有效的,可以说很难有哪款游戏外挂可 以躲避过这种技术的检测。现在不会存在这种游戏外挂、以后也很难存在这种游戏外挂。如果这种技术运用恰倒好处的话,它不但可以反内外、反脱机外挂、反游戏 帐号验证器、反机器人喊话程序,还可以实现随时更新游戏客户端程式,给游戏客户端程式打补丁等。这种技术的主要原理是:从“网络游戏服务器端”发送出来一 段编辑好的十六进制可执行数据代码,“网络游戏客户端”接收到这段可执行代码后执行它,把执行后的结果发送给“网络游戏服务器端”,最后由“网络游戏服务 器端”判断所返回的结果是否正确。所发送的这段十六进制可执行数据代码主要由两部分组成,第1部分为检测代码,第2部分为返回结果。其中,检测代码为“程 序员编辑的任意代码,目的是检测玩家计算机中的任何信息。比如检测当前网络游戏客户端主程式文件大小、检测当前网络游戏客户端主程式某处内存代码标志、发 送当前程序到游戏服务器看是什么外挂、检测当前网络游戏客户端主程式文件完整性等,想检测什么就检测什么,随机性很强”,返回结果为“把每一步骤的检测都 做一个结果标志,然后把结果标志综合返回给网络游戏服务器进行判断。这些结果标志一般都只是随本次检测代码执行一次,是任意构造的内容和格式,随机性很 强,游戏外挂根本就无法智能计算出应该返回给网络游戏服务器端什么数据,这样就非常高效的检测出外挂程序了”。那么“网络游戏客户端程式”怎么执行“网络 游戏服务器端”发来的“可以执行代码”呢?方法有很多种,这里只介绍两种简单的。第一种是“溢出”,第二种是“注入”。“溢出”只能是溢出自身的进程,而 “注入”的对象可以是自身进程、也可以是系统进程。把“溢出”与“注入”用在反外挂中,相比之下,“溢出”是最最隐蔽、最最高明的执行方法。因为,外挂开 发作者怎么都想不到游戏中的某个正常功能的函数内部的代码没有做内存越界访问判断是为了执行“反外挂检测代码”时使用的(如果外挂开发作者知道网络游戏使 用这种技术来检测外挂,他们绝对远离这款游戏,他们还会称呼这种反外挂技术为“史上最变态反外挂技术,没有有效应付对策”)。当然,不可能没有应付对策 的,方法只有一个,那就是虚拟机。放心,不会有人去开发这种虚拟机的。想开发这种虚拟机可不是几十人、几十年就能够开发得出来的。

  当然,还有很多方法可以去有效的反外挂,防御外挂的,在这里就不一一列举了。如果哪款网络游戏把我上边说表述的技术都实现了的话,那么这款网络游戏可以说就是比较安全的了,业界肯定不会再出现他的外挂了。

  反外挂必须要有外挂分析研究组,在网络上搜集以有的外挂程序和信息,然后去做出相应的对策。

原文链接

著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

游戏学院公众号二维码
腾讯游戏学院
微信公众号

提供更专业的游戏知识学习平台