您的浏览器禁用了JavaScript(一种计算机语言,用以实现您与网页的交互),请解除该禁用,或者联系我们。[Linux基金会]:开源软件供应链安全性 - 发现报告

开源软件供应链安全性

AI智能总结
查看更多
开源软件供应链安全性

《Linux基金会出版品 2020年2月》 引言 随着网络安全事件在规模、频率和后果上的持续增长,公共和私营部门的注意力都转向了有关组织可能采取哪些措施(如果有的话)以更好地管理今天这个现代、互联互通世界风险的问题。 软件包的组成部分。此外,由于开源软件(OSS)不仅由个人或甚至单个公司设计编写,而且通常由多个如果不是几十个独立且分布式的开发者共同完成,因此软件“供应商”的范围从爱好者到价值数十亿美元的公司。每个非常成功的开源项目都是通过一个开放框架,由自愿贡献的软件工程师建立的,他们投入自己的时间或公司的时间来改进项目。任何关于软件供应链的政策讨论都必须维护这个极其重要的开放贡献框架。 尽管无数策略、框架和“最佳实践”指南出现,其中大部分意见相左,有些甚至相互矛盾,但对于加强关于“软件供应链”的警惕性的需求,普遍观点逐渐达成共识。 但即便“软件供应链”这个术语本身也引发了一系列问题。到底什么算作“软件”?“供应商”又是谁?也许更重要的是,所谓“软件供应链”实际上究竟包括哪些内容? 现代软件开发已经比过去几十年变得更加复杂,这主要是因为其日益分散的特性。现在,组织内部编写大部分软件的情况极其罕见。相反,大多数组织利用高质量且免费的开源软件(OSS)来创建其大部分软件产品,而专有软件要么作为将各种开源软件部分粘合在一起的“胶水”,要么作为位于其上的独特服务或功能。1 已经,当时的“软件供应链”就极其复杂。再加上更多复杂的因素,供应链中存在更多技术性部分,特别是关于软件存储、检索和分析的部分,这涉及了额外的因素。在过去,软件通常是使用物理介质,如CD,在企业之间或从企业到客户之间传递,而如今,无论是开源软件(OSS)还是专有软件,更多地是存储在“存储库”中,并通过工具如项目依赖关系管理器(PDMs)等远程从互联网中检索,更常 因此,一块“软件”实际上更恰当地理解为各种不同元素的组合。 该僵尸网络代码与使用该平台开发的其它合法应用程序并存。 通常被称为更通用的“包管理器”。2 尽管应用被迅速移除,并且苹果采取了额外措施确保合法开发者能够访问到官方版本的Xcode,但这一事件凸显了在供应链内部存在的漏洞对原本高度精选的软件所构成的风险。3 因此,软件供应链可以理解为由以下部分组成: 尽管最近关于确保软件供应链安全的关注主要集中在链条的第一个环节——开发者——或最后一个环节——最终用户——但在整个链条的所有层面上都存在弱点,导致以下事件: 2016年“left-pad”依赖性问题事件 在2016年,在一场关于某个无关开源软件(OSS)包名称权归属的争议之后,一位知名开发者将其所有OSS包从npm中移除,npm是Node.js代码的分布软件注册库。总计,该开发者从npm上完全删除了273个包,但问题主要集中在其中一个包:left-pad。这是一个看似简单的包,它能右对齐文本以便输出更易读的文本。然而,由于多个至关重要的下游包依赖于它,包括在编译过程中“清理”并更新JavaScript代码的工具Babel,其突然消失导致了众多下游代码出现错误。 2015年针对Xcode的恶意代码分发进行重新包装 2015年,一家安全公司向苹果公司发出警报,称App Store中有三十九个应用正在感染iPhone和iPad。一旦被下载到受影响的设备上,这些恶意应用会连接到远程命令与控制服务器,并将敏感用户信息作为僵尸网络的一部分上传。进一步调查发现,恶意代码是通过苹果官方开发平台Xcode的“重新打包”版本被植入应用的。被称为“XcodeGhost”的类似Xcode的应用将添加 另一位开发者迅速用功能等效的包替换了消失的包,但问题仍持续了一段时间,因为下游开发者匆忙更新他们的代码,确保它们引用的是新包而不是 旧的。除了在鲜明的清晰度下突出显示开发者依赖于他们几乎没有控制的上游软件包所面临的风险之外,这一事件还揭示了一个广泛的“依赖”问题,其中那些没有意识到也没有意图依赖left-pad的开发者,也因为该软件包嵌套在上游依赖中而受到影响。 软件仓库。该软件包的名称故意设计成与/或与合法软件包“Colorama”相关联,而“Colorama”是Python仓库中下载量最高的20个软件之一。 尽管恶意软件在被发现时仅被下载了151次,但在受影响设备上清除感染需要大量努力,并突显了软件仓库对此类策略的脆弱性。6 尽管left-pad事件发生在三年前,这些相同的问题仍然存在。4 2017年Python包(PyPI)劫持 2018年“事件流”库的后门攻击 2017年,攻击者创建了与内置Python库名称“非常相似”的恶意库,而不知情的开发者下载了这些恶意库。恶意包包含与原始代码相同的代码,除了将安装脚本更改以包含恶意代码。5 2018年,最广泛使用的JavaScript库之一被后门攻击,向包中插入加密货币窃取代码。这一事件不仅因其后续影响——在发现后门的时候,event-stream库已被下载了200万次——而且其插入方式比类似的恶意事件更为复杂。 2018年Python软件包劫持 首先,后门背后的恶意行为者通过帮助受困的原开发者为event-stream软件包本身获取了合法的发布权。一旦他们获得了这样的访问权限,他们便用它向npm注册表中添加了一个无害的软件包,名为flatmap-stream,并添加了该软件包 在2018年,一个名为“Colourama”的用于窃取加密货币的Python包被发现在Python中被发现。 4. 愤怒退出:程序员未发布17行JavaScript代码,“打破了互联网”,Sean Gallagher,ArsTechnica(2016年3月24日),https:// arstechnica.com/information-technology/2016/03/rage-quit-coder-unpublished-17-lines-of-javascript-and-broke-the-internet/. 作为一个在event-stream本身中的依赖。大约一个月后,恶意行为者向flatmap-stream添加了恶意代码——因此也影响了event-stream——该恶意代码针对的是一款流行的加密货币钱包软件的用户。 Ruby代码库已被接管。一个恶意行为者已入侵了维护者的账户,变更了软件包的所有权,然后发布了后门代码。虽然尚未得到证实,原始维护者认为缺乏双因素或多因素认证(2FA或MFA),以及潜在密码重复使用,是恶意行为者能够访问其开发者账户的原因。8 分阶段攻击以及演员为获取对事件流包的发布访问权限所付出的努力,不仅显示出对新产品代码和新开发者审查方式的弱点,而且表明恶意行为者在付出此类努力时获得的回报正在增加。这表明,类似的攻击不仅会持续,而且很可能会增加频次和复杂性。7 因为像strong_password这样的依赖项被部署在广泛的多种环境中,并且通常与知名的开发者相关联,这些开发者因信誉良好而受到信任,因此能够接管此类开发者账户的价值很高。类似的攻击很可能会增加。 2019年7月对流行Ruby Gems软件包的账户接管 2018-2019 Webmin漏洞利用事件 2019年7月,一位聪明的开发者更新其代码库时,注意到其中一个依赖中缺失了changelog.md文件。受影响的包strong_password已从0.0.6更新到0.0.7,但没有解释更改内容,且GitHub上托管的代码与Ruby仓库中托管的代码存在差异。该开发者进一步调查并发现,该包已更新为包括在生产环境中执行时将联系远程URL并检索额外代码的代码。检索后,新的代码在受感染的环境中提供了远程代码执行的机会。 从2018年4月开始并在2019年8月被发现,流行的Webmin管理工具被一个未知的恶意行为者后门攻击。这种变化相对较小,但允许产生重大影响:利用后门的恶意行为者可以通过精心制作的URL向受感染的服务器发送命令,然后这些服务器会以最高级别(root)权限执行这些命令。 根据Webmin的开发者所述,2018年4月,存储Webmin源代码的服务器遭到了利用,导致恶意代码被植入。攻击者随后篡改了相关的服务器日志,使其看起来像是该文件一段时间内未更新,隐藏了 开发商通知了该软件包的原始维护者,随后发现他们与[此处有内容缺失,可能是因为原文中有一段被截断了]的账户出现了问题。 .7. 广泛使用的开源软件中包含比特币窃取后门,Dan Goodin,ArsTechnica(2018年11月26日),https://arstechnica.com/information-technology/2018/11/hacker-backdoors-widely-used-open-source-software-to-steal-bitcoin/ 从常见的检测机制(如代码比较工具)的改变。修改后的代码通过缺乏检测或额外的恶意行为一直持续到2019年8月17日,当时第三方发现后门作为0天漏洞的一部分已被发布。 未知,但据推测与软件供应链本身有关,其后果已超越技术层面: Steven Murdoch(sjmurdoch) 尽管感染已被清除,Webmin维护者采取了额外措施,但这一事件仍可作为此类软件脆弱性的另一个例子,以及它们对恶意行为者的持续价值。9 08/07/2019 06:13 我们不确定恶意代码是如何被上传到系统中的。@英国航空公司服务器,但我希望1.83亿英镑足以重新审视开发社区的决定,即构建系统应从随机的互联网陌生人那里下载代码,并在您的生产环境中运行。 2019年8月发现11个存在后门漏洞的RubyGems库 这些事件——以及其他许多类似但不太引人注目的事件——展示了当前软件包管理器和仓库使用的政策、流程和程序中固有的弱点。由于供应链中的这些要素对于现代软件开发至关重要,几乎所有组织都必须使用它们,因此它们暴露在通常超出其控制的高风险中。 2019年8月,一位开发者分析Ruby库时发现了11个被后门攻击的软件包。在每个案例中,后门允许拥有预先选择的凭证的恶意行为者在受感染的服务器上远程执行代码。受感染的软件包还允许挖掘加密货币。 最后,存在一个最终要素,它独立于软件供应链,但对于供应链至关重要:漏洞数据库。鉴于现代软件开发具有分布式和极其复杂的特性,对已部署软件中发现的漏洞进行识别、分析、修复和跟踪至关重要。然而,世界上最依赖的漏洞跟踪数据库——国家漏洞数据库(NVD), 尽管不清楚每个库是如何被感染的,但对于至少一个包来说,代码的修改是可能的,这归因于一个开发者账户被攻破。该账户曾使用过被破解的密码,并且没有使用双因素认证(2FA)或多因素认证(MFA)进行保护。10 除了上述例子之外,一些网络安全事件中确切原因仍不明确。 10. 同上。 由通用漏洞和暴露(CVE)项目支持——自身在应对现代软件开发增长、速度和复杂性方面仍面临挑战。11这些挣扎对依赖于CVE和NVD计划的开发商和公司产生了直接影响,并影响到整个软件供应链的安全性和可靠性。 这份白皮书将探讨当前影响软件供应链的安全性和可靠性问题,并确定可以进行改变的地方和方式,以全面提升其整体性能。 软件供应链的考察 开发者实践 在本文前面介绍过的图表中,开发者被列为软件供应链中的第一个环节。虽然这是正确的,但开发者也存在于供应链的每一个环节以及各个环节之间:他们是贯穿软件供应链每一部分的共同要素。 许多上述描述的供应链事件中被突出强调了。许多这些事件本可以通过涉及的开发者采用众所周知的广泛接受的安全实践来避免,例如: 开发者选择他们使用的编程语言,因此也选择了他们必须依赖的代码仓库和PDM。他们选择库、包和其他开源软件(OSS),这些成为公司完成产品的基础,这些产品最终被终端用户购买。简单来说,它们是软件供应链中不可或缺的单个元素。 •使用双因素认证或多因素认证(2FA或MFA)对