这不是一个虚构的故事。几年前一家做人工智能算法的创业公司,一位程序员在GitHub上创建了一个公开仓库,把公司核心算法的部分代码上传了上去。他上传的原因是"想在家里继续调试,方便从任何地方访问"。他犯的错误是:把仓库设成了公开。三天后,竞争对手的一位工程师在搜索相关技术关键词时发现了这个仓库,下载了全部代码。三个月后,竞品发布了一款功能几乎完全相同的产品。

这个案子有几个值得深思的细节。首要,这位程序员不是故意的。他没有想要泄露公司机密,他上传代码纯粹是为了方便自己在家加班。他甚至觉得"只上传了一部分,核心参数没传,应该没关系"。但实际上,竞争对手从上传的代码中不仅还原了算法结构,还通过代码中的注释和变量命名推断出了部分核心参数。

第二,公司的安全系统没有阻止他。他使用的是自己的GitHub个人账号,不是公司的企业版GitHub。公司的网络监控只关注内网流量和USB设备,没有监控通过浏览器上传到外部平台的行为。当他把代码拖拽到GitHub网页上时,公司的安全系统没有任何反应。

第三,发现问题已经晚了。代码上传三天后被竞争对手发现,但上传当天就有人下载了。公司在两个月后才在一次行业交流中无意发现对方的算法和自己的太像了,经过技术比对后才确认代码已经泄露。这时代码已经被下载了超过两百次,追踪谁下载了、下载后做了什么,几乎不可能。

这个案例给技术团队提了几个非常实际的警示。

警示一:企业应该使用企业版的代码托管平台,而禁止员工使用个人账号管理公司代码。企业版有更完善的权限管理、访问审计、第三方集成安全审核。更重要的是,企业版可以设置默认仓库为私有,员工不需要每次都手动选择公开或私有。

警示二:对离职或休假期间的不正常代码访问行为要做监控。如果有人在非工作时间登录代码仓库、在非工作日提交代码、或者使用非公司IP登录访问仓库,这些行为都应该触发告警。那位程序员在大半夜从自己家里上传代码到GitHub,如果公司有异常行为监控,这个行为很可能被识别出来。

警示三:技术人员的保密意识培训要有针对性。通用性的培训对技术人员的效果有限,因为他们面对的风险场景和销售人员完全不同。对技术人员的培训应该包括:开源社区的使用规范、代码托管的安全设置、技术博客和技术论坛的发布准则、对待技术面试中可能遇到的"技术交流"和"信息试探"之间的区别。

警示四:代码审查不仅仅是检查代码质量,也要检查代码中是否包含了不应该出现的敏感信息。很多公司在代码审查流程中只关注功能实现是否合理、性能是否达标,很少有人专门检查代码中的注释是否泄露了商业信息、配置文件是否包含了服务器地址和密码、测试数据是否包含了客户信息。

最后做一个简单但重要的建议:技术团队可以在每次代码提交前运行一个自动化脚本,扫描代码中是否包含敏感关键词——公司名、客户名、内部项目代号、服务器IP地址、密码和密钥。这个脚本写起来不复杂,但能有效防止"无意中"把敏感信息提交到代码仓库。

北京企密安信息安全技术有限公司
技术服务咨询:010-63711822 / jess@baomiwang.com