保密+完整+可用+安全,规避代码安全「马奇诺防线」,构建软件供应链整体安全


近日,在「江狐会」广州站上,极狐(GitLab) 高级解决方案架构师武让分享了如何通过三大阶段 + 四大要点,规避代码安全「马奇诺防线」,真正确保软件供应链安全。以下内容整理自本次演讲。Enjoy~

先跟大家分享一个故事

一战结束后,曾遭到德国重创的法国,为了防止德军再次入侵,举国之力,耗时 10 年、耗费 50 亿法郎,在东北边境构筑延绵数百公里的马奇诺防线,堪称军事上的一大奇迹。

然而实战中,德军并没有去死磕马奇诺防线的正面防区,他们绕道至法国北部进而长驱直入。这座“世界上最强防线”成了摆设。

现在,“马奇诺防线” 被用来比喻劳神费力而没有用处的东西。

极狐GitLab

 

代码数据作为企业核心数据资产,同样要避免 “马奇诺防线” 式的保障,那么应该如何保证代码数据安全呢?我们基于 300+ 家企业的实践经验,总结出保障代码数据安全的四大要点:

 

保密性 + 完整性 + 可用性 + 安全性

 

代码数据保密性

 

保密性即要确保数据不能够泄漏

 

近年来,国内外知名科技企业源代码泄露事件屡见不鲜,不仅对企业造成直接的经济损失,也损害了品牌形象。如何避免类似事件?极狐GitLab 提供覆盖「事前 - 事中 - 事后」三个完整阶段的代码防泄漏总体思路

 

极狐GitLab

 

「事前」主要是对整个代码仓库及代码平台进行权限控制,包括:

 

事前:注册安全 - 注册限制

 

可通过 Email 黑白名单限制账号注册:

极狐GitLab

 

 

可关闭注册,通过与企业内的 AD / LDAP / SSO 等权限系统或单点登录系统打通,不允许用户自由创建用户。

 

极狐GitLab 专业版中的 AD/LDAP 组同步、SAML 组同步等高级功能,还可以实现将第三方用户管理系统中的用户组直接同步到极狐GitLab 群组中,更便于企业管理

极狐GitLab
 

 

事前:登录安全 - 2FA 双因素认证

 

2FA 双因素认证开启后,除了用户名密码外,还需要提供第二层认证因素(比如手机验证码)才可以登录账号,能够有效防止用户在不小心丢失用户名密码的情况下,账号被恶意登录使用。

 

 

极狐GitLab

极狐GitLab

 

 

事前:网络安全 - IP 访问白名单

 

该功能限制用户在指定网络环境下才可以访问代码仓库。

 

例如企业有外包团队,那么代码需要对其开放,可通过在群组中添加公司内网或某办公区 IP 地址为 IP 访问白名单,不同群组可设置不同的 IP 访问白名单。这样,外包团队只能在指定办公区网络下才可以访问代码仓库。

 

极狐GitLab

 

 

非 IP 访问白名单网络则无法访问:

 

极狐GitLab

 

 

事前:授权安全 - 用户角色授权

 

极狐GitLab 用户角色授权功能具有高灵活性,可以根据组织或项目团队的实际情况选择以群组授权或用户授权,不同的用户角色具备不同的可执行权限。

 

详情可以查看官方文档「角色与权限」:https://docs.gitlab.cn/ee/user/permissions.html

 

极狐GitLab

 

 

在实际应用中,极狐GitLab 建议系统管理员遵循最小特权原则(Least Privilege),只给用户分配所需功能的最小权限,同时定期对用户权限进行审查,避免权限管理失控。

 

事前:提交安全 - GPG 证明提交人身份

 

GPG 或 GnuPG (GNU Privacy Guard) 是一个遵照 OpenPGP 协议的用于加密、数字签名以及认证的软件工具。

 

GPG 在代码提交中主要用来确定提交人身份,防止被恶意篡改的代码进入源代码仓库。它需要在用户本地生成一对密钥(公钥/私钥),将公钥上传到极狐GitLab 中,并在代码提交时用对应的私钥进行签名,当代码上传到极狐GitLab 服务器时,极狐GitLab 会用公钥进行验证签名是否匹配。

 

使用方式:git commit -S -m "My commit message" 

 

极狐GitLab

 

 

事中:DLP 工具集成

 

「事中」则是需要通过 DLP 网关来保障数据安全。

 

极狐GitLab 可以与 DLP、零信任网关集成,从根本上解决了代码泄露问题。

 

极狐GitLab

 

 

如下图,不论是 OA、ERP 或极狐GitLab,所有数据都会经过 DLP(Data leakage prevention,数据泄漏防护)网关,才可以被读取到开发人员电脑上。

 

极狐GitLab

 

 

通过 DLP 网关拉取下来的代码在磁盘中是加密状态,即便通过 U盘或者其他方式发布到外网也无法直接打开,只能通过 DLP 网关信任的客户端、IDE 打开,在内存中是解密状态,可进行正常的开发工作,一旦落盘存储就又变为加密状态,从而实现数防泄漏。

 

DLP 网关虽然在代码防泄漏的效果上表现最佳,但 DLP 成本往往比较高,对使用人员的用户体验也有一定程度上的影响,所以比较适合对数据保密要求高的的企业或项目团队。

 

极狐GitLab 可以集成行业内主流的 DLP 网关如 IPGarud、绿盾等,并且可以关闭在极狐GitLab 网页上下载代码,限制获取代码的渠道,以便更好的与 DLP 工具集成,进一步提高数据保密性。

 

事后:审计事件-人员行为分析与告警

 

最后是「事后」措施。它主要是对极狐GitLab 中所发生的事件、人员行为进行记录、分析、追踪,甚至是告警,以实现对代码泄露事件的防范或追溯。

 

例如,谁在什么时间,通过什么 IP,从代码库中拉取了什么代码,拉取了多少次等,这些信息都可以记录下来。有了这些信息,则可以进行规则设置。

 

极狐GitLab

 

 

举个🌰,在 “晚上 12 点之后,早上 6 点钟之前” 这个时间段,如果有用户超过 5 次去拉取代码,判断为一个高风险的事件,触发一个邮件通知。系统管理员或指定人员可以将这个用户的状态变成冻结,阻止其访问;同时可以对该行为进行分析和追踪。

 

极狐GitLab

 

图:审计事件

极狐GitLab

 

图:审计告警

 

这里的「事后」是相对于「事中」而言的,它具有一定的延后性,但它的成本相较于「事中」的方式大幅降低,依然可以作为绝大多数企业或团队实现代码数据保密性的主要手段

 

代码数据可用性与完整性 

 

  • 可用性表示能够访问数据,并能够满足持续的用户增长;

  • 完整性表示数据不能够损坏、不能被篡改。

 

曾有企业客户在极狐GitLab 数据库上做了错误操作,致使数据库无法使用,并由于只有一个实例,没有任何备份,导致数据全部丢失,无法挽回。如何避免这种 “悲剧” ?

 

极狐GitLab 高可用扩展性架构

 

极狐GitLab 提供高可用扩展性架构,其源自全球最大代码托管平台之一的 GitLab.com 十多年的技术实践沉淀,该架构通过了全球 3000 万注册用户的检验。

 

极狐GitLab 高可用扩展性架构通过把极狐GitLab 中所有组件单独抽出来,以分布式集群的方式部署,每一个服务和组件都是多副本的,在整体架构设计上不存在单点故障,并结合负载均衡、水平伸缩、分布式架构、主从多副本机制和云原生等多种机制,实现理论上无限扩展的能力

 

极狐GitLab

 

 

极狐GitLab 提供支撑从 1000 人到 50000 人规模架构最佳实践参考和专业服务支持,为企业构建高度可靠 DevOps 研运平台保驾护航。

 

近期,极狐GitLab 正式发布《中国企业研发高效能白皮书 · 企业级软件架构篇》,基于 10 万+ 企业客户成功实践经验,为不同企业规模、集中或分布式团队,量身定制成熟的企业级软件架构方案。

极狐GitLab

 

 

极狐GitLab 在数据存储方面使用了多个组件,如 PGSQL 用于存储用户信息、仓库路径等元数据、Redis可作为缓存或消息队列,因为 PGSQL 和 Redis 作为主流中间件都有自己的高可用方案,所以不少客户已经将极狐GitLab 实例中的这些组件替换为第三方的高可用组件,这是一个好事,说明大家对高可用很重视。

 

但极狐GitLab 中最核心的存储组件却不是 PGSQL 也不是 Redis,而是 Gitaly,这是GitLab 自研的组件,用于对代码仓库进行管理和指令互动,因此它的地位最重要,负载也最高。

 

因为有些企业的数据量多达 30 T 级别,使用单个磁盘或单个节点的成本很高,且性能无法保证。Gitaly Cluster 高可用 Git 仓库服务持多副本和分片,把不同的代码库分到不同的存储片上,这也是提高可用性和性能的方式。

 

 

极狐GitLab GEO 多地域部署架构

 

相较于支持 1000 人起步的高可用可扩展架构,极狐GitLab GEO 多地域部署架构则更为轻量和简单,更加适合中小型企业。

 

极狐GitLab

 

 

GEO 多地域部署架构实现一主多从,主从之间的数据实时同步

 

不同于传统数据库冷备份,RTO(Recovery Time Objective,恢复时间目标) 基本上是 24 小时,可能就丢失了一天的数据。

 

极狐GitLab GEO 多地域部署方案是热备份,即便主节点宕机,也可以把从节点处将其恢复,或提升从节点为主节点,那么丢失的数据最多是 1~2 分钟的数据。

 

所以 GEO 多地域部署的时效性和可靠性大大高于传统冷备份方式,属于准高可用,同时是灾备架构,并支持异地容灾

 

代码安全性

 

近年来,软件安全问题日趋严重,其类型也不尽相同,如勒索软件事件

1. 2021 年 2 月,起亚汽车遭勒索,黑客要求支付 1.35 亿赎金,若当天不支付,将追加至 2 亿元。

2. 2021 年 3 月,黑客组织攻陷了特斯拉摄像头供应商 Verkada,特斯拉以及美国监狱、警察局、医院和学校等 15 万个监控摄像数据遭泄露。

3. 2021 年4 月,黑客通过勒索攻击,窃取了苹果的设计蓝图,索要 5000 万美元(约 3.25 亿元)赎金。

 

还有软件漏洞和开源及第三方组件风险,据统计,国内有 90% 以上公司都使用了第三方开源代码,这个数字还在逐年增高。这些开源代码本身可能存在安全问题。

极狐GitLab

 

数据来源:漏洞知识库(CVE)&中国国家信息安全漏洞共享平台(CNVD)

 

传统软件安全主要关注软件运行过程中的安全,一般是在软件发布、交付前后对软件应用的安全进行测试和评估。鉴于以上种种,传统软件安全测试和评估已经无法定义现阶段的软件安全了。软件供应链安全,应需而生。

1

什么是软件供应链安全?

“供应链” 一词来源于制造业。如何评估一辆汽车是否安全?

 

  • 首先,上游提供的发动机、玻璃、刹车片等部件本身必须安全,必须通过汽车企业的测评和检测;

  • 其次,汽车生产链条必须规范,比如说丰田主推精益生产,保证汽车制造环节安全可靠;

  • 最后,汽车到达消费者手上,还需要定期到 4S 店进行保养,保障汽车安全。

 

软件供应链安全与制造业供应链安全如出一辙。

 

在软件领域的供应链是指的是软件从开发到交付的全过程,软件的供应链安全是软件安全威胁的源头

 

在 CNCF 的《软件供应链安全白皮书》中,强调了分层防御实践的重要性,并提供了从以下五个维度来提升软件供应链安全的整体方法。

 

极狐GitLab

 

2

如何实现软件供应链安全?

SDL(安全开发生命周期):重量、高成本、低效率

 

SDL 是过去 20 年中普遍使用的一种方式。

 

如下图,华为内部有一套安全红线,包括了安全基线、规范标准指导书、各种各样的扫描工具,每个项目研发流程需要遵循这一套机制,运行各种审核,各种节点确认,来保证产品和项目交付安全,可想而知其成本之高和效率之低。

 

 

极狐GitLab

 

极狐GitLab

DevSecOps:轻量、低成本、高效率

 

DevSecOps 相较于 SDL ,成本更低,效率更高。

 

DevSecOps 在软件开发过程的每个阶段集成安全测试的实践,它包括鼓励开发人员、安全专家和运营团队之间协作的工具和流程,以构建既高效又安全的软件。DevSecOps 带来了文化转型,使安全成为开发软件的每个人的共同责任。

 

这个机制是如何运转的呢?

 

极狐GitLab 将安全扫描集成到 DevOps 工作流中,通过流水线自动化执行,将安全实践融入软件开发的每个阶段,在代码上线前,就能够帮助用户更高效地发现问题、追踪问题,更低成本地解决问题。

 

  • 完整性:内置 7 种类型安全扫描,覆盖软件全生命周期,配置简单,开箱即用。

  • 统一性:统一管理界面,安全规则、漏洞报告、漏洞追溯、任务分配,开展端到端的安全实践。

  • 领先性:Gartner、Forrester 等全球知名测评机构给予高度评价,在 DevOps 产品中处于领先水平。

  • 高性能:契合敏捷项目管理机制,能够与 DevOps 结合,支持大规模用户的高并发检测。

  • 可扩展:可以接入不同的商业化安全产品及解决方案,如 Black Duck、Fortify 等。

 

极狐GitLab

 

 

以往工作流程中,安全工程师测试后,将漏洞报告发送到工作群,请研发工程师逐个修改。但研发工程师只看到了漏洞,而具体的漏洞所在的位置等信息全然不知,修复起来十分低效和繁琐。

 

极狐GitLab 提供的漏洞详情和报告如下图,清晰展示了漏洞所在项目、在哪个文件的第几行、漏洞级别等信息;针对需要修复的漏洞,安全工程师一键「创建议题」,研发工程师即可 “对症下药” 开始追溯和修复漏洞,高效明了

 

极狐GitLab

 

 

那么,极狐GitLab 到底是怎么真正把安全问题左移到开发阶段,并且强制要求开发人员去解决呢?

 

这里用到安全策略和安全门禁设置

 

如下图例子,在这个项目中,要求 SAST 静态应用测试不允许超过 1 个严重漏洞,依赖扫描不能超过 2 个高等级漏洞,如果超过了,代码则不允许被合并或发布。设置了这样的安全策略后,研发人员就必须遵守,否则代码合不上去。

 

极狐GitLab

 

 

但如果真的有紧急的事情,或是发版迫在眉睫,客户催得很紧,怎么办?可以通过评审人员人工确认,共同担责。

 

代码数据安全的思考

 

对于代码数据安全,除了上面提到的一些措施,还有哪些方式可以提升代码数据的安全性?这里列出一些方案,供大家参考和思考:

 

  • 堡垒机:通过审计方式对运维人员进行控制和追溯,防止运维人员对代码数据造成威胁;

  • 分级部署:把涉及企业机密与核心的代码,单独放一个极狐GitLab 的实例,并通过各式手段加强安全保护能力;

  • 网络隔离:常见于金融行业,在内网下部署,并有严格的网络访问策略;

  • 专用设备:在指定的设备上进行数据访问;

  • 备份加密:防止备份文件被拿走后使用;

  • 安全意识培养:人员安全意识与能力培训。

 

极狐GitLab

 

 

大家可以发现,对于数据安全需要考虑的事情、能做的事情实在是太多了。所以我们常说没有 100% 的安全。安全是一场博弈,需要综合考虑可能造成的损失成本与保障安全的成本,来决定采用何种安全措施。不可一叶障目,也不可矫枉过正,唯有先事虑事、因地制宜才可在有限的资源下获取最大化的安全。

 

极狐GitLab