如今,不使用开源代码来构建软件几乎是不可能的。但所有这些自由软件都可能有额外的安全风险。企业正在努力解决如何最好地保护他们的开源软件供应链。但还有一个问题:许多公司甚至不知道他们有多少开放源码应用程序或者其中有什么。
之前发生的 Log4j 安全漏洞,开源代码维护者俄乌战争期间因反俄给 node-ipc 库中添加恶意代码等事件造成了极其不好的影响,再比如 GitHub 前段时间封停了俄罗斯开发者的一些账号,理由是这些账号的使用者受雇于被美国制裁的一些公司。这种无征兆的 GitHub 账号访问限制影响到了一些开源项目的正常运行。提高开源软件供应链的安全性迫在眉睫。本期《极客有约》,我们邀请到了行业内的开源老兵、WasmEdge 的创始人和核心开发者 Michael Yuan,一起聊聊这个话题。
InfoQ:开源软件供应链到底是一条怎样的链?这条链上具体都有谁?涉及谁,每个环节大概在做什么样的事情?
Michael Yuan:做软件工程的人都希望尽量模块化,所有工具从头开发是很难的,开发者都希望尽量多通过复用来解决这个问题,开源软件就为此提供了一个很好的基础,比如 Java 的 maven,JavaScript 的 npm,这也符合开源“人人为我,我为人人”的精神。
所谓开源软件供应链大多是通过程序里面错综复杂的依赖形成的,以 npm store 为例,其能拉出一百多个安装包,这些安装包可能从来没见过也没听过,大多数人也不会仔细检查自己的依赖,这也是 Node.JS 或者说 Docker 能做出这么大生态的原因,这些安装包在大部分情况下是可以充分信任的。在这条链中,主要成员是开发者,开发者写了各种各样的模块并将其开源,但也有很多公司出于对软件版本的控制等原因会构建自己的私有仓库,这也就是既有 GitHub 又有 GitLab 的原因,开源软件供应链更像是树状结构,会有很多分叉,如果需要依赖某个包可能会搜出来很多版本,有一些是官方的,也有一些是非官方的。
InfoQ:可以举例说明整个节点上面可能面临的风险大概都是什么?
Michael Yuan:出现频率最高但又不是恶意造成的风险就是“懒”,这里可以分两种情况说明:一种是基础依赖,比如 Log4j,任何一个程序可能都会产生日志,都会用到 Log4j,但这都不是最核心的功能,因此很容易被忽视,一旦出现问题就会造成巨大影响;第二种是依赖过多导致无法立即更改或者需要的更改时间较长,Github 在这方面提供了很好的工具,其 Dependabot 可以实时检测 repo,并 keep 所有的 dependency 都能被 updated,一旦发现问题就会给你发 Email,只需要简单点击就可以进行更新,但大部分情况不是这么简单就可以解决问题的,从一个版本更新到另一个版本经常会出现一些其他问题。
当然这里面也存在一些真正有恶意的攻击,毕竟这类攻击仅需要很少的时间就可以得到巨大的收益,只需要攻击最底层的依赖就可以影响很多程序,而且这类树状结构造成其攻击入口到处都是,这类例子在企业软件攻击中比比皆是。另一种情况是通过获取项目创建者的信任成为 Commiter,然后错误修改一些依赖导致依赖其的程序出错,这也是利用了开源社区里面很多开发者经常不见面,通过邮件和 GitHub 进行协作,很难追溯到本人。
此外,很多开源项目的开发者多半没有固定的职位,并不是在哪家公司专门负责该项目的维护,因为这些软件在社区里面大多免费,企业很少雇佣专门的人员进行维护,出现问题之后也没有什么立场要求维护者必须立刻进行修复。开源发展至今虽然有了很多商业模式,但问题还是存在的,比如如何长期积累开发者并让其有动力做这件事情。
InfoQ:开源协议、开源社区、开源基金会在整个这个供应链里边扮演的是什么样的角色?
Michael Yuan:在 Node.js 生态里面有一个名为 Dash 的包,这里面其实没有任何内容,是一个空的 Package,但是每周会有 20 万次以上的下载,这是因为在 npm 的编程过程中很容易多打一个横杠,这个命令行的作用就是避免此时程序出错,类似这种东西其实应该是由基金会从根本上进行管理,这是比较好的解决方案。
对于开源社区,GitHub 虽然提供了很多工具帮助检测是否存在安全隐患,但社区里面还存在大量多年之前出现,至今都没人用过的项目,这些项目很多都是不安全的,也需要告知用户。
这里再分享下 Kubernetes 1.24 版本使用的 Sigstore, Sigstore 是一项面向软件开发人员的免费签名服务,通过实现由透明日志技术支持的加密软件签名的轻松采用,提高软件供应链的安全性。现在的这些软件,要么信任人,要么信任代码,比如谷歌签名的软件,我都信任。sigstore 也是 Linux 基金会的一个项目,这也体现了基金会对软件供应链安全的重视,将软件安全供应链变成了一个签名链,让软件可以溯源,这还是有很多用处的,而且 Linux 基金会也是大家比较信任的机构,有这样的机构背书,大家才觉得可行。
InfoQ:如何才可以降低开源安全治理的成本?
Michael Yuan:其实今天做的很多事情都是为了降低安全治理的成本,比如刚才提到的签名,信任软件的成本是非常高的,但人还是可以信任的。此外,如果我们离开现有的软件开发系统去搞新一代的开发工具是可以降低成本的,比如 WebAssembly 。以运行时为例,WebAssembly 的运行时启动之后是没有任何权限的,即便是被入侵也无法开启各种功能,如果确实需要一些功能,起运行时的时候得明确说明需要什么功能,而不是一下子全部都起来,这最大程度降低了安全风险,即便受到攻击也是在有限范围内,其实这是 Docker 特别需要的,这几年市面上也有很多试图把 Docker 做小做安全的容器,但都没有火起来,开发者很难接受一个新的运行时。
InfoQ:现在有很多基于开源软件创立的商业公司,我们如何看待这类项目的安全性?
Michael Yuan:基于上述的一些逻辑,可以得到一个推论:有商业公司支持的开源软件相对比较安全,因为商业公司一般以赚钱为目的,对自己的形象还是比较重视的,对于社区提到的问题也会第一时间解决,从软件安全的角度来说,商业公司反而更好。当然,这里面也存在问题,一旦商业公司倒闭,这个软件的后期维护怎么处理,这在美国是发生过的,但现在中国正处于这类商业公司融资的高潮,还没有迎来大量灭亡的时候,这也是为什么现如今的基础软件都在做开源,如果是闭源的,一旦公司出现问题,后果非常严重。
InfoQ:开源商业化的路径?
Michael Yuan:开源软件这么多年主要有几个商业模式。2000 年初,我们做 JBoss 的时候,红帽软件还没有找到商业模式,主要还是卖 Linux 的安装光盘,虽然这家公司 1997 年就上市了,红帽软件当时还是比较成功的,上市第一天就涨了 7 倍,但是一直没商业模式。我们当时的情况和红帽差不多,我们一直做开源软件,给客户做咨询、做部署。有一天,有人给我们办公室打电话,说要付钱购买我们的软件,我们当时都觉得特别惊讶,因为那时候没有人敢买软件,后来发现是华尔街银行。这也是创业特别坑的地方,创业里面很多想法可能都是错的,但随着时间推移就会发现原来挣钱的机会在这,那时候华尔街打电话让我们保证一旦出现问题,24 小时之内上门维护,事实上当年我们卖给了很多银行,从来没发生过问题,毕竟人家有几百上千人可以维护这个产品,不需要你帮忙,这种商业模式在当时叫做保险公司的商业模式。
今天,开源的商业模式有很多,但归根结底需要让开发者尽早把这些东西带到生产环境,提供云服务或者其他,现今的很多公司都是通过云的方式变现,而且一定要让开发者使用,才有开启下一步的机会,要是开发者不用,根本不可能有任何人付费,而开发者用了你之后,也得给出一个付费的理由,比如可以大量节省时间等。在美国,也有一些案例是部分特性需要付费,但前提是需要有足够大的开发者社区。
讲师介绍:
Michael Yuan 博士是 WasmEdge 的创始人和核心开发者,在开发和商业化开源软件方面拥有丰富的经验,Michael 是 JBoss 的早期员工,被 Red Hat 收购之后,作为产品经理见证了世界上第一个成功的开源商业模式。Michael 著有 5 本国际知名出版社出版的技术书籍。2019 年 Michael 发起了 WasmEdge 项目,提供下一代云原生和边缘计算的执行环境。
Michael 同时也是 Second State 的联合创始人。Second State 是一家开源基础软件初创公司,致力于商业化可持续地支持 WebAssembly 和 Rust 生态系统中的企业应用。
评论