这是有史以来最大范围的一次源代码泄露。微软、Adobe、联想、AMD、高通、联发科、通用电气、任天堂、迪士尼、华为、海思等50家科技公司都卷入了近期披露的源代码泄露事件。
对于公司产品而言,源代码就是生命的化身,掌握了其编写方式,就可以复制出一个相同的程序,或通过阅读源代码找到程序的漏洞并进行任意攻击。一旦源代码遭泄露,潜在的危害巨大。因此,企业面临源码泄露事件时,是否应该反思当下自身的源码保护够不够完善?
起因疑似使用配置操作不当的Devops工具
此次大规模源码泄露事件是由Bank Security的安全研究人员发现的,遭泄露的源码被发布在GitLab上一个公开存储库中,并被标记为 “exconfidential” (绝密),以及 “Confidential & Proprietary”(保密&专有),该存储库中大约包含了超过50家公司的源码。
一名瑞士软件开发工程师上传了这些存储库,然后在自己的Twitter账号上发布了获取链接。尽管他已经尽量删除代码,并联系相关涉事公司,但是因为这些源代码公之于众,任何人都可以访问,这为网络攻击者找到漏洞、窃取企业机密信息埋下了隐患。
何以造成如此大规模的源码泄露事件?
起因疑似是因为使用了错误配置的Devops工具公开源代码。配置不当造成的安全事件也不在少数。亚马逊AWS S3存储桶一配置不当造成大规模的数据泄露事件想必大家也都还记得。当然源码泄露也还有其他原因,比如黑客攻击、员工操作失误等。比如近期曝光的任天堂因遭受黑客攻击而导致源码泄露。
此外,员工的操作失误造成的事件,比如大疆的源码泄露。2019年,大疆前员工泄露公司源代码,深圳法院以侵犯商业秘密罪判处大疆前员工有期徒刑六个月,并处罚金20万人民币。而这些泄露出去的代码,已用于该公司农业无人机产品,具有实用性。尽管大疆公司采取了合理的保密措施,但该次事件依然给大疆造成经济损失116.4万元人民币。
游戏领域更是源码泄露的重灾区。除了任天堂的源码泄露事件,2019年Valve发生了重大泄露事件,有人泄露了《CS:GO》和《军团要塞2》的源代码,并提供下载链接。负责对《军团要塞2》进行志愿维护的玩家社区已经无限期关停。
2019 年 4 月,B站整个网站后台工程源码泄露,并且“不少用户密码被硬编码在代码里面,谁都可以用。”当日B站股价跌 3.27%。虽然很快被封禁,B站也已经报警处理,但有不少网友克隆了代码库,隐患已经埋下。
企业应该如何保护源代码?
源代码对企业的重要性不言而喻,因此加强源代码保护至关重要。可以从源代码本身、内部企业人员权限和做好监控审计等三方面着手,进一步加强企业重要源代码的安全性。
一、对源码进行分级,确保和明确重要源码的保护措施
企业内部源码具有优先层级,明确哪些核心代码需要被保护。明确源码重要性分级后,可对重要源码进行加密,打造核心数据管理平台。目前对源码加密的办法有两种:一种是物理性的“源码加密”,一种是软件性的源码加密。
物理性“源码加密”就是指截断外网,封掉U口或者锁定机箱,让开发者处于一种封闭的状态。这种方法是可以达到效果的,弊端就是如若封掉U口,对于员工的工作使用会造成很大的影响,大大降低了工作的效率。
软件性的源码加密是指通过软件对源码进行保护。目前市面上最流行的源码加密软件机制是一种对开发人员的操作环境进行加密的软件,不用对任何硬件做修改,开发人员的源码只能存放在公司范围里,拿不出加密的空间。如果想要拿出文件的话则需走审批流程。
二、精细化访问控制,对于员工的权限进行限制
尽管公司做好源码加密措施,但是仍然防不住内部员工造成的安全风险。比如大疆前员工泄漏源码被判刑则是一个案例。
对于外部的威胁,确实可以利用技术来防御。但是对于内部的“人”的因素一方面需要限制员工的访问权限或者虚拟化访问,另一方提高员工的安全意识和产权意识。
从安全技术上进行数据管理,如数据加密、数据防泄漏、数据溯源、访问权限管控等。同时,进行分权管理,划分数据等级加密存储,员工等级不同,访问权限就不同,一般员工不能接触到核心数据,尽可能降低核心数据泄露的风险。
在员工在入职时,应签署保密协议和竞业禁止协议。其中包括公司现有的、以及正在开发或构想之中的包括源码在内的所有产品技术开发信息,员工不得私自对外透露。
加强员工保密意识以及相关法律意识,权责分明,让员工了解一旦泄密事件发生自身需要背负的法律责任。或者通过企业文化教育,让员工了解源码数据对企业发展的重要性,同时提高安全防护意识。
三、做好监控和安全审计
企业应配合管理制度、保密协议、审计日志,确保有据可查、有据可依。现在大部分客户对于软件产品的安全考量基本集中开发后期,在测试阶段引入。常用的软件风险评估、漏洞扫描、渗透测试等都是在软件开发完成后进行。
通常这个阶段预留的时间非常少,不仅修复的难度高,修复、测试的成本极高,而且存在大量的漏洞错报和误报的情况。当通过后期测试发现问题后,人工进行代码审查去查找漏洞所在代码位置时,往往效率低、准确率低、无法定位具体问题代码行。
因此,企业应从开发早期进行安全介入,做好安全审计,快速精准地定位问题代码行,对漏洞进行实时管理,从源码层级上进行安全保护,防止因配置不当、软件编写存在bug等问题造成的源码泄露。