【AICon】 如何构建高效的 RAG 系统?RAG 技术在实际应用中遇到的挑战及应对策略?>>> 了解详情
写点什么

从 GitHub 封停开发者账号聊开源软件供应链安全性

  • 2022-06-01
  • 本文字数:3281 字

    阅读完需:约 11 分钟

从GitHub封停开发者账号聊开源软件供应链安全性

如今,不使用开源代码来构建软件几乎是不可能的。但所有这些自由软件都可能有额外的安全风险。企业正在努力解决如何最好地保护他们的开源软件供应链。但还有一个问题:许多公司甚至不知道他们有多少开放源码应用程序或者其中有什么。

 

之前发生的 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 生态系统中的企业应用。

2022-06-01 09:415626
用户头像
赵钰莹 InfoQ 主编

发布了 863 篇内容, 共 591.6 次阅读, 收获喜欢 2666 次。

关注

评论

发布
暂无评论
发现更多内容

架构师训练营第四周总结

一剑

大型互联网应用系统都采用了哪些技术和手段,解决了什么问题?

hellohuan

极客大学架构师训练营

从不可描述的服务雪崩到初探Hystrix

老胡爱分享

高可用 灾备

架构师训练营 - 第四周学习总结

hellohuan

极客大学架构师训练营

架构师训练营 - 作业 -4- 互联网产品问题与架构方案

superman

Week04作业

熊威

一题搞定static关键字

Java课代表

面试

扯淡 Spring BeanDefinition

CoderLi

Java spring 程序员 源码分析

什么是工程师思维?

尖果爱学习

思维方式

分布式系统设计 - 第四周总结

孙志平

week04 互联网架构发展学习总结

李锦

第四周课程总结

考尔菲德

通俗易懂的 Deno 入门教程

阿宝哥

typescript 大前端 deno

一个典型的大型互联网应用系统使用哪些技术方案和手段

李锦

极客大学架构师训练营

第四周作业

武鹏

瑞幸商业模式的本质与组合式创新

石云升

创业 瑞幸 组合式创新

重学 Java 设计模式:实战观察者模式「模拟类似小客车指标摇号过程,监听消息通知用户中签场景」

小傅哥

Java 设计模式 小傅哥 代码优化 观察者模式

互联网系统架构总结

周冬辉

我精心整理的 136 页 Excel 数据透视表 PDF 文件!【附获取方式】

JackTian

Python 程序员 数据分析 Excel 数据透视表

DevOps研发模式下「产品质量度量」方案实践

狂师

DevOps 研发管理 研发效能 开发流程

第四周总结

武鹏

【week04】总结

chengjing

架构师训练营作业

Hanson

架构师 第四周作业

冯凯

【科普】Scrum——从橄榄球争球到敏捷开发

禅道项目管理

Scrum 敏捷开发

架构师 第四周学习总结

冯凯

中国未来需要什么样的人才?机遇与挑战!

CECBC

CECBC 中国人才 中国脊梁 数字经济

程序员的乐趣,生成自定义二维码,5行Python代码就搞定

程序员生活志

Python 程序员 代码 二维码

给“小白”漫画+图示讲解MyBatis原理,就问香不香!

码农神说

Java mybatis

架构师训练营4周总结

Hanson

Lambda初次使用很慢?从JIT到类加载再到实现原理

Kerwin

Java Lambda 类加载 JIT

从GitHub封停开发者账号聊开源软件供应链安全性_语言 & 开发_赵钰莹_InfoQ精选文章