开源项目是如何让这个世界更安全的?

在前不久的上海外滩大会上,蚂蚁资深技术专家、Kata Containers 创始人王旭向参会者分享了开源、开放协作与软件安全可信的话题,本文根据演讲内容编辑整理而成。

 

今天,我想在这里和大家探讨开源与安全的话题。在过去,人们一直有一些疑问:开源是否比闭源更安全?开源项目如何保证自己的安全?如何通过开源社区促进业界改善安全性?

 

这里,我将以 Kata Containers 项目以及蚂蚁基础设施团队的实践为例,对这些问题做一些探讨,来看看社区和业界是怎么做的。

 

开源项目如何保证安全性?

首先是开源比闭源更安全吗?

 

你可能从哪里听说过:开源软件相比闭源软件的一个优越性在于,开源软件更安全。

 

开源运动的一位颇具话题性的早期领军人物 Eric S·Raymond,在他的著作《大教堂与集市》中写道:

 

“在一群足够多的 beta 测试者与共同开发者的情况下,几乎所有问题都可以被快速定位,并且由某个人迅速解决。”

 

“有些所谓安全系统,只有在其不为人所知时才是安全的,当心这些虚假的隐秘性。”

 

这些论点几乎是无可辩驳的。然而,争论就在于——开源是否意味着更多专业的 review,更多的人看到代码甚至是发现漏洞了,他们是否会第一时间来帮助开源项目改善质量而非第一时间利用漏洞进行入侵?开源项目是如何第一时间处理漏洞的?

 

下面让我们来看一个例子。

 

这是 Kata Contaienrs 项目的 VMT 流程图,描述了项目漏洞事件响应团队接收到安全报告后是如何处理的。

 

 

所谓 VMT,是 Vulnerability Management Team,这是一个应对安全事件的“特权”工作组,成熟的、社区化的开源项目都有这样一个核心团队。当安全研究人员发现在他们的研究中发现项目存在安全漏洞的时候,会向 VMT 工作组发出报告,而 VMT 收到之后,会在寻求修复方案的同时,对问题进行评估、去权威机构分配 CVE 编号,在 patch merge 之后,还需要确保主要用户的安全,然后再对外公开修复信息。

 

这里的一个关键点是,开源项目 VMT 团队和安全人员的配合。只有规范运作的开源项目和白帽子们良好互动,才能真的做到第一时间修复漏洞、保护用户,而不是放出 0-day 漏洞。这中间的响应流程,即使对于“开源”软件,也是不开放的。

 

所以,这里我们的结论是——不是你把代码放在 GitHub 上开源了,安全就随之而来了,你要有吸引安全人员的活跃社区和可以响应问题的机制。这里我们知道,有些个人化的开源项目是没有这样的响应机制的,这样的开源项目并没有让用户得到安全,相反,一旦有大量用户使用,得到的是很多惊险。

 

VMT 机制保证了开源项目本身的安全,那么,在一个庞大的开源社区,比如云原生社区,它由数量繁多的开源项目组成生态,关于社区的整体安全性,还会有哪些有趣的互动呢。

 

如何提升开源社区的安全水位

开源的一个便利之处就是,如果你觉得哪里不够好,可以自己去弥补。在云原生  landscape 里,搜一下安全相关的品类,立刻可以得到一大片的开源安全组件或工具:

 

 

需要说明的是,这些项目不是预先设计的目标,而是社区互动产生的结果。它们反映了一个自组织生态里的演化规律,而不是操作守则。在开源协作里,这样的项目会自然的涌现出来。

 

这里,我想以 Kata Containers 为例,来介绍下如何开发一个开源项目并融入社区。

 

首先我先来简单介绍一下 Kata Containers——

 

Kata Containers 首先是一个容器运行时引擎,在生态中的位置和 runc 是一致的。但是,和 runc 不同的是,Kata 用轻量级虚拟化技术来做隔离,这个强隔离带来的不仅是安全隔离,也包括性能隔离和故障隔离。

 

不过我要强调的一点是,Kata 仍然是一个容器引擎,在系统中是完全对等替换 runc 的,对云原生应用来说,它是完全透明的,即使从性能和开销角度说,我们也已经对它进行了很多轻量化的改造。

 

所以,我们说,它同时兼有虚拟机和容器两者的优点,secure as VM, fast as containers。

 

三年来,Kata Containers 最让我感到骄傲的,是通过开源社区,我们撬动了社区里的其他大玩家,提升了整个云原生世界的安全水位,利用开放协作提升了云原生领域的安全性、改善了社区的信任。

 

Kata 创立之前的虚拟化容器技术的发展并不快。2015年上半年,我们就开源了 hyperContainer 和 runV,Intel 也同时开源了clear containers。不过,当时我们的影响还是非常有限的,想加入 CNCF 都被拒之门外,但我们还是在 Kubernetes 社区里制造了一些影响。比如在 2016 年的时候,我们和 Kubernetes node 团队一起推动了 CRI 接口,来抽象化容器引擎。

 

2017年9月份,我在一个会议上遇到当时 Intel OTC 的时任 GM,也是Intel 的 SSP VP, Imad Sousou,我们决定一起合作一个开源项目,在基金会的帮助下,我们一起工作了三个月,最终在2017年12月的 KubeCon 大会前一天,发布了 Kata Containers 这个项目。

 

随后的故事可以用峰回路转来形容,在2018年上半年,也就是紧接着 Kata 发布之后的下一次 KubeCon,Google 发布了 gVisor 安全容器项目,再之后半年,在2018年 AWS 发布了轻量虚拟化 VMMFireCracker,并引用了 Kata Containers 项目来做对比。而在这之间的2018年中,Google 推动 containerd 改进了 Shim API,来进一步让安全容器可以和 runC 一起被支持,随后这个被称为 shim-v2 的 API 也得到了 CRI-O 的支持,加上 RuntimeClass 和其他一些改进,可以说,2018年是安全容器的爆发年。

 

今天,Kata 拥有了不小的用户社区,得到了 RedHat,SuSE 和 Ubuntu 三大主流 distro 的支持,也在很多不同行业进入了生产之中,不仅我们蚂蚁、阿里用上了,百度的 Kata 案例也在去年的 OpenInfra Summit 上得到了超级用户大奖,在今年10月19日的 OpenInfraSummit 大会上,我在 Keynote 里正式宣布 Kata Containers 1.x在12个稳定发布之后,正式发布2.0版本。不仅 Kata,Google GKE 的用户还可以用上 gVisor,它帮助用户躲过了前不久的 CVE-2020-14386 漏洞。

 

可以说,开源的力量就在于此——代码只是它对世界的影响力的冰山一角,在水面之下的那些开放协作和互动,让社区的用户受益,得到了更多的好项目,让社区向更好的方向发展。

 

基金会如何让开源世界更安全?

要想促进整个开源世界的安全,开源社区的治理组织不能不提。其中,基金会不仅可以接纳安全项目,还可以安全为目的建立基金会,将天南海北的开发者聚集到一起,攻克共同的安全课题,也是开源安全的重要一环。

 

让我们以 Linux 旗下的机密计算联盟 CCC 为例来说明,蚂蚁通过将项目捐献给 CCC、参与这样的组织从而对开源社区的安全作出贡献。

 

在数据安全和隐私保护越来越受到重视的今天,机密计算(Confidential Computing)是一个具备广泛应用前景的前沿技术领域,可信执行环境(Trusted Execution Environment)作为其重要分支,受到业界科技巨头的重视。

 

机密计算联盟就是在这样的背景下诞生的,CNCF 中国区总监 Keith Chan 告诉我们:CCC 的任务和目标之一是在公有云上实现机密计算,这样我们可以做到以前无法做到的事情,其中比较典型的就是在云上运行敏感数据的计算,机密计算将作为安全体系的核心手段来保护这些敏感数据。

 

要实现这一目标并不容易,因为机密计算仍然处于早期,业界鲜有应用,几家企业各自推进自己的研发应用,但难以对业界形成示范效应。因此需要基金会这样的组织来推进这一过程。

 

CCC 希望通过开源开发的原则聚集全世界的人一起来共建机密计算的技术和平台,具体的做法包括:

  • 定义机密计算,并通过开源的方法让全世界的人可以参与,构建生态圈,加快提高市场的接受度和采用率;

  • 通过开源的方法简化企业对机密计算应用的开发和管理;

  • 定义一些基础的服务和框架,并让开发者能够放心地采用这些技术。

 

作为 CCC 关键成员的蚂蚁集团也将捐赠 Occlum LibOS,这是来自中国的第一个机密计算开源项目,也是目前易用性最好的机密计算 LibOS。

 

 

通过将其捐赠给基金会,Occlum 将成为社区主导的开源项目,将吸引更多业界专家共建,并将和社区其它开源项目合作,如与 HyperLedger 的 avalon 项目的合作,在更广泛的应用场景中落地。

 

另外,不仅仅是 Occlum,蚂蚁集团还正式开源了 KubeTEE,解决机密计算在集群中的问题,还有正在研发中的 HyperEnclave,解决TEE部署环境问题。这些机密计算的组件,也是蚂蚁对提升整个社区和业界的安全性所做的努力。

 

正是有开发者、组织、业界机构的共同努力,才让开源项目和社区更加安全,而更安全的开源社区,也将让整个世界变得更加安全。

 

Kata Container 延伸阅读

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 以下是几个 C 语言开源项目的推荐: 1. Linux 内核:Linux 内核是一个开源的操作系统内核,是许多 Linux 发行版的基础。它的代码库是用 C 语言写的,非常庞大和复杂,同时也是学习操作系统内核的绝佳资源。 2. OpenSSL:OpenSSL 是一个开源的加密库,提供了许多安全协议和加密算法,比如 SSL/TLS 和 AES。它的代码库是用 C 语言写的,非常成熟和稳定。 3. SQLite:SQLite 是一个轻量级的嵌入式数据库,非常适合嵌入到各种应用程序中。它的代码库也是用 C 语言写的,非常简单易懂,同时也是学习数据库开发的好材料。 4. nginx:nginx 是一个高性能的 Web 服务器和反向代理服务器,它的代码库也是用 C 语言写的。nginx 的设计和实现非常优秀,非常值得学习。 5. Git:Git 是一个分布式版本控制系统,用于管理源代码和文本文件的变。它的代码库也是用 C 语言写的,非常复杂但也非常值得学习,尤其是对于想要深入了解版本控制系统的人来说。 以上这些 C 语言开源项目都是非常优秀的,它们的代码库也是非常庞大而复杂,适合学习 C 语言和系统编程。 ### 回答2: 以下是我推荐的几个C语言开源项目: 1. Linux内核:Linux是一个基于UNIX的操作系统,其内核完全由C语言编写。Linux内核是一个庞大而强大的开源项目,由世界各地的开发者贡献代码和功能。 2. GNU工具集:GNU工具集是一组基于C语言的命令行工具,如GNU C编译器(GCC),GNU调试器(GDB),GNU Make等。这些工具广泛用于开发和编译C语言程序。 3. SQLite:SQLite是一个轻量级的嵌入式关系型数据库引擎,被广泛用于各种应用程序的存储和管理数据。SQLite完全由C语言编写,具有高性能、稳定性和可靠性。 4. FFmpeg:FFmpeg是一个强大的多媒体处理工具,可以处理音频和视频文件的编解码、转码、流媒体等。它是一个跨平台的开源项目,使用C语言编写。 5. Redis:Redis是一个高性能的键值存储数据库,被广泛应用于缓存、消息队列、实时统计等场景。Redis的服务器端是用C语言编写的,具有非常高的性能和可扩展性。 这些项目都是C语言开源项目中的重要代表,通过参与这些项目的开发和使用,可以提高对C语言的掌握和理解,并且了解开源社区的协作和经验分享。 ### 回答3: 以下是几个推荐的C语言开源项目: 1. Linux内核:Linux内核是一个开源的操作系统内核,由Linus Torvalds开发。它是许多Linux发行版的基础,包括Ubuntu和Debian。该项目提供了一个完整的操作系统系统,包括进程管理、文件系统、设备驱动、网络协议栈等。 2. SQLite:SQLite是一个轻量级的嵌入式数据库引擎,功能强大且易于使用。它支持所有常见的SQL语法,适用于移动应用、网站和桌面应用的数据存储需求。SQLite的源代码非常简洁,易于理解和修改。 3. FFmpeg:FFmpeg是一个跨平台的多媒体处理框架,可以用于录制、转码、流媒体播放和编辑等多种多媒体操作。它支持多种音频和视频格式,并具有高度定制化的功能。 4. Redis:Redis是一个内存数据结构存储系统,可以用作数据库、缓存和消息队列。它具有高性能和低延迟的特点,并支持多种数据结构,如键值对、列表、哈希表等。 5. Git:Git是一个分布式版本控制系统,由Linus Torvalds开发,广泛用于软件开发项目。它具有强大的分支管理和合并功能,并且支持非线性开发工作流程。 这些项目都是C语言开发的,具有广泛的应用领域,并且具有活跃的开发和维护社区,可以为开发者提供很好的学习和参与的机会。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值