开源发展已成燎原之势。然而,在开源爆发式增长的背后,一些新的危机也悄悄地埋伏在其背后。近些年来,越来越多的企业和组织开始关注开源的安全和治理问题,而开源治理是一个庞大的工程,仅靠少数几家企业恐怕独木难支,而横向组织例如开源基金会,却能在其中能充当一个领导角色。
2022 年 7 月 21 日,由中国开源软件推进联盟主办,赛迪传媒、《软件和集成电路》杂志社联合承办,CSDN 独家直播的“第十七届开源中国开源世界高峰论坛”上,OpenSSF 基金会总经理 Brian Behlendorf 在《开源生态系统的信任和安全性》的主题演讲中表示,预计到 2026 年将有 4.2 亿个开源软件会发布,届时软件包下载量高达 2 万亿。但不幸的是,开源软件在广泛应用的同时也带来了安全的困扰。
【服务器|OpenSSF 基金会总经理 Brian Behlendorf (预计 2026 年将有 4.2 亿个开源)】以下为 Brian Behlendorf 演讲实录:
大家好,我是 Linux 基金会旗下的 OpenSSF 开源安全基金会的总经理 Brian Behlendorf,今天非常高兴能在第十七届开源中国开源世界高峰论坛上与大家交谈,我由衷地期待与大家分享开源安全方面的见解。
我将与大家分享在面对软件世界的安全难题时开源社区应该走向何方,以及目前 OpenSSF 基金会正在做的事情。
我们认为软件开源是一种必然趋势。目前市面上已有4000万种不同的开源软件组件可用,预计到 2026 年将有 4.2 亿个开源软件会发布,到那时,我们每年将有 2 万亿软件包下载。每个人都在各种各样的设备中使用大量的共享开源软件。
文章图片
开源的启蒙与发展
现在,我想让时钟倒带到更早的开源时代。
很多人都知道我曾参与了 Apache 网络服务器的启动工作,以及 Apache 软件基金会的创建。在早期所参与的事情中,有一件事与互联网起步有关。在 1995 年,Netcraft 网站每月会对每个网站进行一次调查,调研它们在运行什么软件,一直以来,像Apache这样的软件会在网站头条上请求大家运行 Apache 网络服务器来查看调查结果。
从很早的时候,公众发现 Apache 网络服务器发展得非常快,并一直在互联网上的 Web 服务器中占据主导地位。下图是我找到 1999 年的网站截图,通过这张图,我们能够衡量开源代码的传播程度,那是第一次你可以去和老板或者制定预算的人说:“看!开源软件正在生产环境中被使用,它没有被局限在某些地方。”
顺便说一下,Netcraft 网站也可以让你看到服务器软件是在哪一端运行。所以大家能够了解到大企业在运行 Apache,政府网站也在运行它,即使是梵蒂冈和欧洲的宗教机构都在运行 Apache。
所有这些机构都在运行 Apache 和其他开源软件,这确实有助于开源被加速推广,但我们很难看到 Linux、MySQL 在哪里被使用,因为这些都是在幕后的,但 Apache 在幕前。值得注意的是,受欢迎不等于安全。
在开源软件中建立信任这与英雄主义或个性无关。众所周知,Linus Torvalds 是一个了不起的程序员,而我不是一个了不起的程序员,但是我们都很感激让公众看到开源代码、让公众检查并告诉我们哪里出错了,我们也经常会检查其他人的代码,就是通过种种检查,才创造了更好的软件,同时也倾向于创造更安全的软件。因此,Apache、Linux、Perl 和所有这些开源社区都采用了贡献和项目验收过程。
相比代码社区,开源软件给众人带来了很大的便利。Apache、Linux、MySQL、PHP、Python 等这些大型项目逐渐普及,同时我们也开始看到越来越多的小项目出现,这也构建出了一个真正健康的生态系统。正是业界的共同努力才能形成一个有效的生态系统。当你去浏览 GitHub,那里有 1 亿开源软件库, 虽然有很多是重叠的,当中的许多人都在做同样的事情,不过没关系,尽管这缺乏严谨性,但开源的协作方式不仅会带来更高质量的代码,还有更安全的软件。这个被看好的模型看起来更像 SWAP 交易。很多项目都在分享并试着让大众参与进来,但有时任务只会落在一两个人的肩上,这是一种巨大的市场交换模式,我认为这让我们在安全问题上走了一条黑暗的道路,我想鼓励大家思考的是,还有另一种不同的方法。
在美国有一个民族叫阿米什人,他们在传统上会互相帮助建谷仓,同时有一种叫做谷仓饲养的系统,村子里的所有人都聚集在一起,他们每个人都会把谷仓的某一块放在上面,然后一天结束时他们会建立起一个大的支持结构,而且就在一天之内,你可以通过集体行动建造谷仓的大部分,人人齐心协力,每个人都会建造不同的地方,但行动的核心在于让很多人参与进来一起工作,在不同人的共同努力下推进事情变得更好。这样的系统构成建立在人人发挥自己的长处,这就是开源项目,非常类似于 Apache 试图构建的社区类型,也非常类似于 Linux 基金会试图建立的社区,里面有很多利益相关者,社区内也有很多人。
当涉及到软件的时候,我相信开源软件是由这些谷仓组成的,大家知道我们有基于库构建的应用程序,库是构建在操作系统上,而操作系统构建在网络栈或内核上,想想任何现代的应用,现在都是由数千个底层依赖组件组成,而在开源软件社区,你可以处理任何人的贡献,无论他们是否像 Linus Torvalds 那样有名,或者完全没有名气,但正是这些流程和组织让我们走到了一起,这让我们能够整合所有这些不同种类的贡献。
Apache 项目中的大多数人我都没有见过,直到做了很多事以后,他们才开始成为重要的贡献者,我认为这是扩大规模的关键,能够接受来自不同地方的贡献,即使你不知道它们来自哪里,他们在哪个国家。我认为这是吸引足够眼球的关键所在,在这里,能够接受很多贡献的文化,能够让想法成型。
文章图片
开源安全如何保障?
很多人问在这种情况下如何确保安全,明尼苏达大学就有这样一个组织,想在他们提交给 Linux 项目的文件代码中,携带了一个非常隐藏的国际后门,而审查代码的个人通过审查和验证的过程检测到这一点。事实上,明尼苏达大学从去年起就被禁止为 Linux 项目做出贡献,我们有了这样的社区结构和工具的组合,就有助于保持软件的安全性。
为了实现更好的开源安全,我们需要更好的基于客观测量的工具和基于代码的工具来衡量代码的可信性,通过仔细检查,运行脚本,以此来验证它是否实现了它所宣称的功能。我们需要更好的过程来鼓励开发人员进行更好的安全实践。
如今还出现了一些新类型的漏洞也说明了我们在开源领域缺乏更好的流程规范,我们需要鼓励团队共同合作,鼓励共同承担安全责任。在现代社会,现在我们面对的世界与30年前截然不同,尤其是如今,与我第一次接触开源软件的时候完全不同。现在的软件供应链被破坏,不仅意味着每一行代码的安全性。因为如果你能在上游获取代码,或者在分发路径的某个地方获取代码,如果你妥协构建服务器、妥协源代码管理系统、说服开发人员妥协并选择一个不好的依赖组件等,你可以做出各种各样的妥协,这是如今主要的开源安全问题。
把开源想象成一个供应链,你有来自开发人员和他们头脑中的代码,通过他们的IDE到开发环境,到他们与他人分享的地方,然后回到建造它的地方。最终,当它准备好打包发布时,在开发和构建过程中通过依赖项进行循环,当它到达终端消费者时,所有这些都将发挥作用。这是一个非常不正式的过程,但我认为在开源社区我们已经习以为常了,而这正是我们今天要解决的问题。
你可能听说过 Linux 基金会安全社区里发生的很多事情,有描述软件物料清单的 SPDX 标准、以云计算为基础的安全软件标准、一个叫做 CHAOSS 的社区的供应链最佳实践。而这个最佳实践真正关注的是社区健康。但我们在 OpenSSF 基金会真正做的一件事,就是启动一套专注于专注于从不同角度系统地思考供应链安全,以及如何增加严谨性、如何尽早发现并修复漏洞,并把这些修复方案推广到全世界。
它们包括专注于最佳实践的工作组,我们在那里开发了用于认证项目的最佳实践标识,确保偷别人的证书难于登天,我们为安全软件开发基础的发展课程,帮助开发人员在编写代码时像攻击者一样思考,我们还有另一个工作组,专注于改进漏洞披露过程,以及让开源社区变得更智能的指南。
关于如何发布项目,我们还有另一个工作组,致力于确定优先次序,在开源世界中有哪些软件包是被遗忘的,而这些也许是非常关键的,因为他们被很多人依赖着,但可能还没有被关注的类型。
还有识别安全威胁工作组。我们有一个安全工具工作组,专注于用工具进行自动化扫描、调试和理解软件,我们在工作小组中与主要的软件库一起工作,试图围绕 IP 和 NPM 的方式达成共同的标准,所有其他主要的工作都集中在保护所有市场软件的安全上,安全供应链完整性是 SLSA 规范的基础,就是要确保所有通过循环的东西,都进行了最高程度的质量检查和背景检查。
我们还有另一个小组叫做保护关键项目,主要致力于找出最优先的项目投入,最后是一系列附加的相关项目,比如 Sigstore 和 Alpha-Omega,有助于我们系统地理解开源世界正在发生的事情。
关于 OpenSSF 社区,我们召集了开源软件安全动员计划 ,将所有努力整合到一个整体计划中,有十种不同的工作流程,专注于改善开源世界中的软件安全状态。但这项开销也并不便宜,前两年要花费约 1.5 亿美元,尽管我们已经收到了三千万美元和相应的承诺,所以我们很高兴能与全球社区合作,共同改进开源软件。
我认为更安全的代码会让我们更有韧性,这确实能对全球社区产生积极影响,所以我真的很想找机会和所有人一起工作,共同改善中国乃至世界的软件安全状况和开放源代码。
所以,我真的很荣幸有此机会分享,希望接下来的大会精彩纷呈,祝大家一切顺利。
点击2022(第十七届)开源中国开源世界高峰论坛-CSDN直播,查看更多精彩演讲内容!
推荐阅读
- 运维|用Nginx做端口转发(反向代理)
- javaWeb|Linux基本使用
- 数据库|实时计算,连接时序数据库和核心业务
- java|ceph-msg-messager|simple 代码分析
- Linux系统|互联网最受欢迎的开源Web服务器软件——Nginx的搭建和优化
- Nginx|Nginx笔记——代理服务配置
- 服务器运维|LNMP详解(八)——Nginx动静分离实战配置
- linux|Web服务(08)——Nginx的Rewrite
- linux|Web服务(05)——Nginx的简介和安装