开源代码无处不在。 它存在于许多专有代码库和社区项目中。 对于组织和个人来说,现在的问题不是你是否在使用开源代码,而是你在使用什么开源代码,以及使用多少。
如果你不知道软件供应链中的内容,当其中一个依赖项中的上游漏洞可能是致命的,你和你的客户就容易受到潜在的损害。 在本文档中,我们将深入探讨术语“软件供应链”的含义、为什么它很重要,以及如何通过最佳做法来帮助保护项目的供应链。
术语“软件供应链”用于指进入软件中的所有内容以及它的来源。 它是软件供应链依赖的依赖项的依赖关系和属性。 依赖项是软件运行时需要的内容。 它可以是代码、二进制文件或其他组件,也可以是这些组件的来源,例如存储库或包管理器。
它包括代码作者、贡献时间、审查安全问题的方式、已知漏洞、受支持的版本、许可证信息,以及在整个过程中的任何时候接触到它的任何内容。
供应链还包括套件中除单个应用程序外的其他部分,如生成和打包脚本或运行应用程序所依赖的基础结构的软件。
如今,软件的依赖关系非常普遍。 经常见到项目使用数百个开源依赖项来实现某种功能,而你不必亲自编写该功能。 这可能意味着大多数应用程序都包含并非你创作的代码。
第三方或开源依赖项中可能存在的漏洞多半是依赖项,因为你不能像自己编写的代码那样严格控制这些依赖项,可能会在你的供应链中产生潜在的安全风险。
如果这些依赖项中有一个存在漏洞,则很可能你也会遇到漏洞。 这可能很可怕,因为你的一个依赖项可能会发生更改,而你甚至都不知道。 即使依赖项中存在的漏洞现在不会被攻击,将来也会被攻击。
能够利用数千名开源开发者和库作者的工作成果意味着数千名陌生人可以有效地直接为你贡献生产代码。 通过产品供应链获得的产品会受到未修补漏洞、无意错误甚至对依赖项的恶意攻击的影响。
供应链的传统定义来自于制造业;它是制造和供应某物所需的过程链。 它包括规划、材料供应、制造和零售。 软件供应链类似,但不是供应材料,而是供应代码。 它不是制造,而是开发。 代码不是从地下挖矿石,而是由供应商提供,分为商业来源和开放源,而一般情况下,开源代码来自存储库。 从存储库添加代码意味着产品依赖于该代码。
举个软件供应链攻击的例子:当恶意代码被故意加入依赖项中,使用该依赖项的供应链将代码分发给受害者时,就会发生这种攻击。 供应链攻击是真实存在的。
软件供应链攻击本身很少是最终目标,但提供了一个让攻击者插入恶意软件或为将来的访问提供后门的机会。