谁偷了我的源代码?游戏企业代码安全从入门到精通 | 天同网事
作者按:代码泄露是最为严重的信息安全事件之一,而游戏产业又是代码泄露的重灾区。本文将从代码泄露的原因、途径和解决方案三个方面,重点阐述代码泄露控制和预防的方法。需要特别说明的是,本文虽以游戏企业为例,但是文中所阐述的各项信息安全的原则和方法均适用于所有的互联网企业。
本文共计5,602字,建议阅读时间11分钟
源代码泄露是每个互联网企业的噩梦。代码泄露轻则引发信息安全事件,重则攸关互联网公司生死存亡。而游戏行业又是源代码泄露最为高发的领域。游戏源代码一旦泄露,其后果几乎不可逆转。竞争对手通过对源代码的分析和揣摩,可以很快开发出同类游戏。甚至游戏玩家拿到源代码后可以直接开设“私服”。除了将泄露版本彻底迭代之外,权利人几乎无计可施。由于代码泄露之后的流向基本不可控,因此事后追责和打击的效果也相当有限,权利人往往陷入“边开边打,边打边开”的困局。
“传奇游戏”源代码泄露事件便是典例。1999年左右,传奇游戏后端程序遭到恶意泄露。随后,代码瞬间传遍全球,并衍生无数的私服。这些传奇私服经过长达二十年的运营,至今仍大量存在,并形成了一个市值超过五十亿、蓬勃发展的地下私服市场,甚至衍生了“私服一条龙”“私服发布站”“私服攻击小组”等产业,令人叹为观止。由于代码泄露的后果难以逆转,当时的盛大公司不得不通过向私服收取授权费用的形式进行补救。
一、游戏行业源代码泄露原因
如果我们对游戏行业代码泄露事件频发的原因做一些分析,就会发现这绝非偶然。根据我们的经验,游戏行业代码泄露事件高发的原因主要有以下三个方面:
1. 游戏产业获利巨大
有君戏言,中国互联网企业其实只有两种:卖东西的和做游戏的。此话虽是玩笑,但却不无道理。根据艾瑞统计,中国游戏产业2020年已经达到3300亿元规模。在实体产业日趋艰难的今天游戏行业堪称“暴利”。有巨额利润自然就有人以身犯险。更何况目前我国刑法对侵犯著作权犯罪仍然采取轻刑主义。无论违犯罪情节有多严重,法定最高刑最多只有10年。不恰当地说,与贩毒等罪名相比,侵犯著作权罪堪称刑法中“性价比”最高的罪名。
2. 游戏产业研发投入极高
与游戏产业早期发展情况不同,目前游戏已经成为一个高投入、高产出的行业。大型网络游戏的研发动辄需要几亿甚至十几亿的投入。由于竞争激烈,投资失败机率也很大,如果能够拿到别人家成熟游戏的代码,不仅仅可以极大缩短开发的周期,更可以免去高额的开发投入。所以有人铤而走险也就不足为奇。
3. 游戏产业需要“快”
天下武功唯快不破,与操作系统等动辄十余年生命周期的软件产品相比,游戏堪称“超级短命”。一般手游的平均生命周期只有两年,页游的平均生命周期只有几个月到一年。在这样一个快速迭代的行业中,谁能用最快的速度开发一款优质游戏,谁就能占得先机。然而,游戏的开发绝非易事,项目需要策划,IP需要授权,美术需要设计,程序需要编写,产品需要测试,参数需要平衡。每一个环节都需要投入大量的时间。所以,有些人就开始打起“别人家的代码”的主意——将别人的代码原样照搬或只做简单改动就推出一款竞品游戏,确实是一门极其划算的生意。
二、源代码泄露的途径
本文的核心目的是要解决游戏企业源代码的泄露问题,解决这一问题之前我们首先要搞清楚源代码泄露的途径。根据我们的经验,代码泄露主要通过以下几个途径:
1. 前端代码泄露
网络游戏的运行架构分为“前端+后端”两部分。游戏的前端程序指的一般是安装到客户手机或电脑中的APP或者EXE文件。由于这类程序运行在客户端因此任何游戏玩家都能接触到。侵权人可以通过反编译、逆向分析等方法获得游戏前端程序的源代码。
2. 后端代码泄露
如前所述,网络游戏的运行架构分为“前端+后端”。游戏后端指的是运行在服务器当中的游戏服务端程序,其作用是处理玩家通过游戏前端生成的交互数据。游戏玩家无法直接接触后端程序。但由于服务器直接暴露或间接暴露在互联网上存在固有的安全风险,游戏后端代码通过服务器泄露时有发生。同时,由于游戏后端多是用PHP或Java+Mysql等架构开发,一旦泄露容易被侵权人进行逆向分析。
3. 内部员工泄露
堡垒最容易从内部攻破,内部员工是游戏企业最常见的代码泄露途径。目前,很多游戏公司在信息安全方面意识非常薄弱。而很多程序员又缺乏版权意识,天然地认为其所开发的程序就是自己的作品,因而随意访问、拷贝代码的情形屡见不鲜。很多中小游戏公司甚至将代码放在局域网某一台计算机的共享盘中供人随意下载学习,这是非常可怕的做法。更有甚者,有些员工入职的目的就不是为了工作而是为了盗取权利人的代码。
以下为一起真实案例,来自笔者曾经办理过的一起侵犯著作权刑事举报的真实案件:
A公司为一款热门手游的CP,该游戏通过游戏渠道B公司发行。B公司发现该款游戏市场情况非常好,于是产生了自己开发一款类似的游戏的想法。但B公司苦于自己没有游戏开发经验,遂动起了歪脑筋。B公司派一名程序员以入职的名义加入A公司,该程序员在得到A公司游戏源代码之后就立即离职。此后,B公司通过照搬A公司代码,仅改动美术设计就“开发”了一款同类游戏并上架销售。由于B公司掌握了游戏开发和发行的双重渠道,几乎瞬间就将A公司的正版游戏挤出了市场,A公司损失惨重。
这无疑是一个悲惨的案例,但更悲惨的是,这种案例每天都在发生。
4. 通过第三方泄密
游戏代码通过第三方泄露同样是常见的泄密途径,在行业内屡见不鲜。第三方泄密的具体情形有如下几种:
(1)开发外包泄密:目前,游戏的设计、生产已经是社会化大分工的产物。有些大型网络游戏的开发周期长达几年,投入高达十几亿。很多游戏公司由于在某一个方面不具有非常强的开发能力,会选择将这一部分的开发工作外包。游戏开发外包的对象可能是某一公司,某一工作室甚至是某个自然人。这种情况下,游戏代码、美术设计、游戏策划案等商业机密很容易通过外包途径泄露。
(2)服务器托管泄密:网络游戏的运营离不开服务器的支持。但目前行业内拥有自建机房的游戏公司极少。大部分游戏公司都选择将服务器租用或托管在第三方IDC服务商处。由于服务器的最高管理权限在第三方IDC。且服务器本身就可能存在安全漏洞,因此不法分子很可能通过这些渠道获得服务器端的游戏代码。
(3)代码托管泄密:在游戏开发的过程中有时需要将代码上传至第三方平台,如代码托管平台Github,国内企业也有自建的代码托管平台。此外,开源的游戏引擎Unity和Unreal等也要求用户上传代码才能出包。这些平台与服务器托管商存在同样的安全风险,而且都或多或少地出现过涉及代码的信息安全事件。因此,互联网企业选择代码托管平台需要谨慎。
三、如何维护代码安全
正如前文所述,游戏代码一旦泄露所带来的后果几乎不可逆转,因此事后打击和追责的效果远不如事前的“未雨绸缪”。如何维护代码安全,才能让游戏代码不至于泄露,就成为维护游戏企业信息安全的关键,同时也是我们下文阐述的重点。经验证明,任何单一手段都无法解决信息安全的所有问题。信息安全需要全方位的管控方能取得较好的效果。根据信息安全领域的通行准则,游戏代码的泄露风险可以通过法律手段、技术手段加以控制。
· 法律手段:
1. 加强员工管理
对于关键岗位的员工如游戏开发、游戏策划、甚至游戏测试等,企业需要提高招聘标准,并在入职之前进行详细的背景调查。如有条件,最好与关键岗位的员工签订竞业限制协议,并密切关注其离职后的动向。
2. 尝试通过商业秘密来保护代码
著作权法上,关于何为作品一直争论不休,甚至在司法实践中,不同的法院看法也不一致。这是由于著作权采用“思想表达二分法”,而思想与表达的界限存在一定的模糊地带。因此,通过著作权来保护游戏代码有一定的局限性——游戏中有一部分内容难以被认定为“作品”或者“完整的作品”,再加上民事案件和刑事案件中对于“侵权作品”的认定标准也存在极大不同。这就使得一部分代码无法得到著作权法的保护。但将游戏源代码同时作为商业秘密进行保护、采取保密措施并全员签订保密协议,将游戏源代码同时作为商业秘密进行保护,则是非常的好补充。
3. 加强对第三方合作主体的管理
虽然游戏企业在游戏开发和运营的全生命周期中会不可避免地涉及与第三方公司的合作,但在最终选择重要供应商之前必须要对其做完整的尽职调查并签订详尽的保密协议。需要说明的是:由于信息安全领域所关注的问题与资本市场不同,因此信息安全尽职调查的侧重与一般非诉尽职调查有所区别。信息安全尽职调查范围应包括其设立时间、注册资本、投资关系、软硬件部署、历史安全事件、安全等级保护资质、专业技术人员数量和资质等方面。
4. 妥善固定权利基础
目前,游戏企业普遍对游戏权利基础的重要性认识不足,从CEO到法务均认为游戏只要做了软著登记就万事大吉,这是严重的认识误区。游戏是一个典型的复合作品,其中包括了程序、美术、音乐、故事情节等多种元素。而现有的软著登记制度仅仅将游戏视为一款软件,并没有试图去固定其中各项重要元素。且软著登记并不要求提交完整的源代码和资源文件,因此,游戏企业在被侵权之后,往往会遇到无法证明自己的权利如何产生以及何时产生的困境,甚至还会出现在游戏侵权诉讼中被侵权人反咬一口,权利人被打成侵权人的情况。鉴于此,游戏企业有必要针对所有具备可版权性的独立元素进行著作权登记,或进行在先权利证据固定以防患于未然(由于篇幅所限,游戏产品在先权利的固定方法无法在本文中展开,针对这一问题我们将在天同网事后期文章中进行专题论述,敬请关注)。
· 技术手段:
1. 坚持代码本地化
代码本地化存储是游戏企业信息安全的基本原则。任何网络平台都无法做到百分之百的安全,所以,游戏企业首先要杜绝将游戏代码上传至任何外网平台。包括代码托管平台GitHub或者游戏开源引擎平台等(有些开源游戏引擎强制要求上传代码否则无法打包,如何解决这一问题相信各位都有心得)。
有些代码托管平台会宣称自己采用了多层安全架构、多种安全措施以确保被托管代码的安全。笔者相信他们确实非常努力。但是我们要知道,几乎任何安全措施针对的都是已知漏洞,对于0day起不到防护作用,而且,这些代码托管平台本身就是一个非常大的APT渗透目标,与此同时,他们与任何互联网公司一样都存在一定程度的内部管理问题。
2. 做好局域网的安全防护
代码本地化存储仅仅是游戏企业信息安全的第一步,如果没有完整的安全机制,存储在本地的代码一样会面临泄露的风险。从风险预防角度,以下几种情况是要绝对避免的:使用弱口令、口令长期不做更改、允许匿名登陆、未做域管理、没有防火墙和IPS、允许未经许可的设备接入网络、不做MAC绑定、内部网络允许访客访问、允许任意使用U盘、生产设备允许带离公司、SVN服务器的权限开放等等。
以天同互联网团队为例,由于我们在工作过程中不可避免地要接触到委托人的源代码或敏感数据信息,为加强对该等信息的保护,我们所使用的办公网络独立于整个律所,且拥有自己单独的防火墙、服务器、NAS。黑客攻击很难穿过两层NAT。这种架构提供了良好的信息安全保障。
3. 使用代码混淆技术
所谓代码混淆,是指使用混淆工具将代码的顺序、变量和函数的名称进行无规律的变更和打乱,其目的在于提高程序被理解的难度。但需要注意的是,代码混淆并不是唯一的救命手段,代码混淆只能让代码难以理解,但不能让代码无法理解。
4. 使用蜜罐
在传统网络安全领域,蜜罐指的是在网络当中设置一个诱饵型设备并打开容易被攻击的服务和端口,诱使黑客对其进行攻击,以使得网络管理员可以尽早发现网络中正在发生的风险以保证生产设备的安全。但在代码安全语境中,蜜罐指的是在程序中安插一些特定的字符串、特定的变量名和函数名以及特定的程序功能和计算结果。由于盗取代码的侵权人一般不会去深入分析代码,所以这些特定的字符串、特定的变量名和函数名、特定的程序功能和计算结果会在侵权游戏中得以保留,成为证明我方权利基础最好的证据。
5. 选择强编译开发工具
在笔者还是程序员的时代,计算机语言被明确地划分为“编译型语言”和“解释型语言”(一不小心暴露了年龄)。例如,C++是典型的编译型语言,而VBS、JavaScript等脚本语言则是典型的解释性语言。“编译型语言”和“解释型语言”最大的区别在于“编译型语言”一旦将代码编译后很难做逆向分析,而“解释型语言”的源代码无需编译,任何人拿到代码就可以做分析。因此从代码安全的角度,“编译型语言”的安全性更好。
但随着编程语言的演变,程序开发工具变得极为灵活,从而可以拥有更多的功能和更大的可移植性。根据环境和用户要求的不同,许多语言如.Net或Java都可以被编译或者被解释,或者被处理为中间语言,所以目前“编译型语言”和“解释型语言”二者之间并不存在一道明确的界限。游戏开发过程中应尽量选择那种编译程度更强、更难被逆向分析的语言。比如,将关键代码用C++打包进SO文件当中。
6. 将资源文件加密处理
广义上的游戏代码除了程序语句之外,还包括游戏运行所需要的字串、参数等等,这些字符串和参数一般以INI、XML、LUAC等格式文件保存。游戏中的这些字符和数值虽然不是程序,但却浓缩了游戏策划的精华,需要精心的设计和无数次的调试才能得到,蕴含了巨大的商业价值。很多时候游戏的数值体系甚至比游戏程序和美工设计更值钱。但这些内容本身难以构成著作权法意义上的“作品”,为了加强对这部分内容的保护,我们可以考虑通过加密方式来处理,让侵权人拿到文件之后也无法直接获取文件内容。
结语
以上是天同互联网团队对于游戏企业代码安全问题的一些总结和思考,其中的素材来自于我们多年办理的游戏侵权案件以及我们在信息安全领域的成功实践。由于篇幅有限,很多问题未能展开论述,可能无法如题目所说的那样让读者“从入门到精通”,如读者感兴趣可以通过微信或邮件与我们进一步探讨。我们希望通过本文给互联网企业法务同行和技术同行提供一些行之有效的方法、技巧和启示,提高互联网企业对信息安全的重视程度和安全标准。最终实现一个安全、公平,没有代码泄露、没有私服的互联网竞争环境。让天下无讼!
“天同网事”栏目由邹晓晨律师主笔/主持,本栏目深入研究互联网产业中竞争领域、知识产权领域、信息安全领域的相关技术问题与法律问题,并致力于将其打造成一门全新的“边缘学科”。我们希望借此栏目与法律同行和互联网产业同行一起分享资讯,碰撞观点,传播知识经验。如您有任何想法、意见、建议,欢迎点击文末留言。
查看近期文章,请点击以下链接: