本报告提供了一些建议,帮助开源软件的创建者和消费者负责任地管理软件,特别是在保护软件供应链的背景下。无论是软件的消费者还是提供商,您都是软件供应链的一部分,需要保护您使用的应用程序免受上游和下游风险的影响。在以下页面中,我们将研究
持续存在的开源安全问题
为什么开发人员需要改进以保持开源组件的更新
软件供应链管理需要软件物料清单 (SBOM)
如何防范人工智能编码工具带来的安全和 IP 合规风险
近十年来,“开源安全与风险分析”(OSSRA)报告的主要主题一直是“您知道您的代码里有什么吗?”在 2024 年,这个问题比以往任何时候都更加重要。随着开源的普及和 AI 生成代码的兴起,现在越来越多的应用程序是用第三方代码构建的。
如果不能全面了解代码中的内容,您、供应商和最终用户都无法确定软件可能包含哪些风险。保护软件供应链首先要了解代码中包含哪些开源组件,并确定它们各自的许可证、代码质量和潜在漏洞。
2024 年 OSSRA 报告已发布第九版,深入探讨了商业软件中开源安全、合规、许可和代码质量风险的现状。本报告提出研究结果的目的是帮助安全、法律、风险和开发团队更好地了解开源安全和许可风险状况。
本报告使用的数据来自 Black Duck® 审计服务团队对 2023 年 17 个行业 1,067 个商业代码库的匿名调查结果的分析。审计服务团队 20 多年来一直帮助世界各地的安全、开发和法律团队加强其安全和许可合规计划。该团队每年为我们的客户审计数千个代码库,主要目的是在并购 (M&A) 交易期间识别软件风险。
审计还提供了全面、准确的软件物料清单,涵盖了组织应用程序中的开源、第三方代码、Web 服务和应用程序编程接口 (API)。审计服务团队依靠 Black Duck KnowledgeBase™ 中的数据来识别潜在的许可证合规性和安全风险。该 KnowledgeBase 由 Black Duck 网络安全研究中心 (CyRC) 提供和整理,包含来自 31,000 多个锻造厂和存储库的 780 多万个开源组件的数据。
OSSRA 报告强调了开源在软件中的普遍性以及管理不善的潜在危险。开源是当今企业和消费者所依赖的所有应用程序的基础。有效地识别、跟踪和管理开源对于成功的软件安全计划至关重要,也是加强软件供应链安全的关键要素。
审计说明所有 Black Duck 审计都会检查开源许可证合规性。客户可以自行选择退出审计的漏洞/操作风险评估部分。2023 年,Black Duck 审计服务团队进行了 1,067 次审计。在这些审计中,88%(936 次)还进行了漏洞/操作风险评估。2024 年 OSSRA 报告中“开源漏洞和安全性”和“影响开源风险的运营因素”部分中的数据基于包含风险评估的 936 个代码库。“开源许可”部分中的数据基于所有 1,067 个代码库。
在黑鸭子审计服务团队分析的 1,067 个代码库中,有 96% 包含开源代码,这些代码库是今年 OSSRA 报告的基础数据。扫描的所有源代码和文件中,有 77% 源自开源代码。
今年,给定应用程序中开源组件的平均数量为 526 个,这是一个实际例子,表明自动化安全测试的重要性,即使不是绝对必要。手动测试对于少量组件来说可能是可行的,但对于大规模组件来说几乎是不可能的,需要使用软件组合分析 (SCA) 等自动化解决方案。与手动测试不同,自动化安全测试可以快速、一致地执行,使开发人员能够在开发过程的早期发现问题,而不会影响交付计划或生产力。
包含风险评估的代码库中,84% 包含至少一个已知开源漏洞。这些代码库中有 74% 包含高风险漏洞,与 2022 年相比有显著增长,当时只有 48% 的代码库被发现包含高风险漏洞。高风险漏洞是指那些已被积极利用、已有记录的概念验证漏洞或被归类为远程代码执行漏洞的漏洞。
2022 年至 2023 年间高风险漏洞数量增加 54%(26 个百分点),原因不一。一种可能的解释是经济衰退和随之而来的裁员,这减少了可用于查找和修补漏洞的资源数量。此外,91% 的代码库被发现包含比最新可用版本落后 10 个或更多版本的组件。简单的结论是,绝大多数开源消费者根本没有更新他们使用的组件。
49% 的代码库包含过去 24 个月内没有任何开发活动的组件,1% 的代码库包含的代码维护者更新/补丁至少落后 12 个月。
广义上,“维护者”是指那些领导开源项目的贡献者。他们可能是源代码的哪些部分进入构建或发布的最终决策者,他们可能负责所有代码审查,并以他们的名义托管小型项目的代码,他们可能对项目的方向做出最终决定。他们的日常工作可能有所不同,但可能包括审查拉取请求和其他贡献、发布新版本的软件、分类和处理安全修复以及社区管理和审核。
大多数维护人员都勤于让他们参与的开源项目保持最新状态。事实上,许多公司专门聘请人员来维护组织软件所依赖的开源项目。开源消费者也需要同样勤奋。开源消费者需要了解他们正在使用的版本,建立定期更新的节奏,并在开源方面实行软件卫生——只从拥有健康的维护者和贡献者生态系统的项目下载。
常见弱点枚举 (CWE) 和常见漏洞和暴露 (CVE) 是用于识别和分类软件中的安全弱点和漏洞的常用列表。Black Duck 安全公告 (BDSA) 是 Black Duck 专有报告,旨在为客户提供比国家漏洞数据库 (NVD) CVE 通知更及时、更详细的信息。BDSA 提供有关影响客户 SBOM 中项目的漏洞的可行建议和详细信息,以帮助确保他们全面了解开源漏洞可能带来的风险。
前十大漏洞中有八个映射到一个支柱 CWE,即CWE-707,它解决了未得到满足的安全要求,并可能导致跨站点脚本和 SQL 注入等漏洞。
如图 2 所示,CWE-707是 CWE 20、79、80、97 和 937 的支柱。CWE-707 涉及在从上游组件读取数据或将数据发送到下游组件之前未满足的安全要求。未能正确中和输入可能导致跨站点脚本 (XSS) 和 SQL 注入等漏洞。XSS 是一种常见且危险的漏洞,与本报告中重点介绍的 10 大漏洞中的大多数有关。
跨站点脚本攻击是指攻击者利用网站漏洞发送恶意、格式错误的代码(通常用 JavaScript 编写)。由于这种输入没有得到适当的中和或转义,漏洞可以操纵原本值得信赖的主机执行恶意任务。不过,大多数 XSS 攻击的最终目标不是主机本身,而是 Web 应用程序的其他用户。一旦注入恶意脚本,它就可以用来窃取敏感信息,如会话 cookie。
XSS 不仅在我们的十大漏洞列表中,而且还是 OWASP 十大列表中的漏洞之一——该报告列出了 10 个最关键的 Web 应用程序安全风险。在其列表中,OWASP 将 XSS 称为 A03:2021 – 注入。XSS 漏洞盛行的原因可以归因于对基于 Web 的应用程序的依赖增加,这是组织与客户互动以及用户相互互动的一种方式。例如,考虑有多少电子商务公司、银行、互联网服务提供商、保险公司和其他公司提供 Web 体验来与其客户和合作伙伴互动。
再次,数据清楚地表明,开发团队需要改进,以保持开源组件的更新,尤其是 jQuery 等流行的开源组件。使用较旧、更易受攻击的开源版本的后果可能非常严重。例如,审计中发现的前 10 个漏洞中排名第二的是 BDSA-2020-0686 (CVE-2020-11022),这是 jQuery 1.2 至 3.5.0 版本中的一个 XSS 漏洞。此漏洞允许将不受信任来源的 HTML(即使经过清理)传递给 jQuery 的 DOM 操作方法之一,并可能执行不受信任的代码。
jQuery 3.5.0 已修复此问题,但根据我们的数据,在扫描安全风险的代码库中,有三分之一的代码库使用的 jQuery 版本仍然容易受到此漏洞的影响。恶意数据可能被用来破坏系统,或者泄露敏感数据(密码、信用信息)。如前所述,跨站点脚本是应用程序中最常见的漏洞之一,通常使用代码注入攻击来攻击浏览器中的各种语言解释器,例如 HTML 或 JavaScript。
降低风险:安全使用 jQuery 和其他流行开源软件的技巧审计中发现的 10 个顶级开源组件全部是用 JavaScript 编写的。审计中发现的大部分漏洞也与 JavaScript 库有关,尤其是 jQuery JavaScript 库的旧版本中的漏洞。
使用最新版本的 jQuery。如本报告所示,旧版本的 jQuery 通常包含安全漏洞。
考虑订阅安全咨询服务(例如 Black Duck 安全咨询)以获取最新的漏洞信息。jQuery 中定期会发现新的安全漏洞。
使用安全编码框架来帮助您识别并避免代码中的潜在安全漏洞。
使用自动化安全测试(包括静态分析、软件组合分析和动态分析工具)来解决整个软件开发生命周期中的代码质量和安全漏洞。
jQuery 并非天生就不安全。事实上,它是一个维护良好的开源库,拥有庞大的用户、开发人员和维护者社区。但问题往往伴随着流行。根据审计结果,jQuery 是最有可能存在漏洞的组件,尽管本报告列出的每个 jQuery 漏洞都有可用的补丁。对于 jQuery 用户(事实上是所有开源用户)来说,重要的是要意识到与旧版本软件相关的潜在安全风险,并采取措施减轻这些风险。
创建并维护软件物料清单 (SBOM)。在对抗软件供应链攻击的过程中,拥有一份准确、最新的 SBOM 来清点开源组件对于评估风险以及确保代码保持高质量、合规和安全至关重要。一份全面的 SBOM 列出了应用程序中的所有开源组件以及这些组件的许可证、版本和补丁状态,这是对供应链攻击(包括使用恶意软件包的攻击)的有力防御。
随时了解最新情况。确保您有办法了解新发现的恶意程序包、恶意软件和披露的开源漏洞。查找新闻源或定期发布的公告,这些公告提供了可操作的建议和有关影响 SBOM 中开源组件的问题的详细信息。
执行代码审查。在将下载的软件纳入项目之前,请检查其代码。检查是否存在任何已知漏洞。如需进一步了解,请考虑对源代码进行静态分析,以检查是否存在未知的安全漏洞。
积极主动。组件今天没有漏洞并不意味着明天也不会有漏洞。故意恶意的软件包可能永远不会被发现为“有漏洞”。在实施之前,请注意组件的健康状况和来源,以避免将来出现安全问题。
使用自动化软件组合分析 (SCA) 工具。SCA 工具可自动识别、管理和缓解软件安全问题,并允许开发人员将精力集中在编写代码上。此类工具可以评估开源代码和第三方代码。
CWE 项目将“支柱弱点”定义为最高级别的弱点,代表与其相关的所有类/变体弱点的基础。
国家漏洞数据库 (NVD) 等公共资源是获取有关开源软件中公开披露的漏洞信息的良好开端。但任何给定的 NVD CVE 条目的报告都可能存在滞后。及时性一直是影响 NVD 公布安全漏洞数据能力的一个因素。事实上,漏洞的首次披露与其在 NVD 中发布之间通常存在显著的时间滞后,一些研究报告称,首次公布和 NVD 发布之间平均间隔一个月。
NVD 的另一个问题是它提供的漏洞数据通常不完整。NVD 中发布的许多 CVE 都不包含易受攻击的版本范围,而且通常太短而无法使用。这通常是因为没有资源可用于研究该条目。
显然,仅依赖 NVD 来获取漏洞信息是不明智的。许多商业 SCA 解决方案可以提供比 NVD 更丰富的漏洞数据,此外还可以更准确地发现问题并在必要时帮助您更快地修复问题。例如,如果您使用的是 Black Duck 的 SCA 解决方案 Black Duck,则可以利用 BDSA,这是 Black Duck 安全研究团队发现的开源漏洞的公告。这些公告通常会提前通知影响您代码库的漏洞 - 可能需要几天或几周的时间才能出现在 NVD 中。BDSA 还提供更完整的漏洞数据,提供安全洞察、技术细节和升级/补丁指南,这是当今商业上任何其他产品都无法比拟的。例如,在我们 2023 年的十大漏洞列表中,有三个来自 NVD 的没有相关 CVE 的 BDSA。
BDSA-2021-3651根据 BDSA 的说法,jQuery 的某些版本包含对被劫持域名的注释引用。这是一种安全问题,最安全的做法是删除指向被劫持域名的链接,jQuery 在 3.6.1 版中就是这么做的,因为如果用户不知道域名的状态,他们如果试图点击被劫持网站的链接,仍然可能受到未指定的攻击。虽然无法通过运行代码访问这些网站,但标记该问题还是有价值的,因为开发人员或任何有访问权限的人都可能意外点击恶意网站。
Black Duck CyRC 团队建议将此 BDSA 标记为“信息性”,当供应商提供的“修复”在代码或产品文档中以警告的形式出现时,或者当供应商拒绝 CVE 或对调查结果提出异议时,使用此标签,并将报告的漏洞视为组件中的预期/设计行为。
类别
CWE-546:可疑评论
CVSS v3.1 分数
5.10
BDSA-2014-0063这是一个较早的漏洞,最早于 2014 年 1 月被提出,与 jQuery 中因缺乏用户提供的输入验证而导致的潜在 XSS 漏洞有关。这可能允许攻击者注入任意 Web 脚本并窃取受害者的会话 cookie。
根据 BDSA,函数将 HTML 字符串解析为 DOM 节点数组。传递给此函数的事件属性中包含的任何脚本都会立即执行。如果函数调用者在将不受信任的输入传递给函数之前没有对其进行适当的清理,则可能会使函数调用者容易受到 XSS 攻击。攻击者可以通过编写恶意 HTML 来利用这一点,并将其提供给受害者。如果经过处理,则其中包含的任何 Web 脚本都将在其系统上执行。
jQuery 3.0.0-rc1中已缓解此漏洞。但是,缓解措施不会过滤恶意输入,仍将允许执行脚本。解析器的默认行为已更改,如果上下文未指定或给定为 null/undefined,则会创建一个新文档。这会延迟解析的 HTML 的执行,直到将其注入文档,从而使工具有机会在函数调用后遍历创建的 DOM 并删除不安全的内容。
类别
CWE:79:网页生成过程中输入的不当中和(“跨站点脚本”)
CAPEC-588:基于 DOM 的 XXS
CVSS v3.1 分数
8.60
BDSA-2015-0567另一个较旧的漏洞是 jQuery,它容易受到任意代码执行攻击 — 使用未打补丁的 UglifyJS 解析器的 jQuery 版本容易受到通过精心设计的 JavaScript 文件执行任意代码的攻击。最终,这可以让攻击者运行恶意代码。
该漏洞已在1.12.0和2.2.0 版本中修复。
类别
CWE 类别 A9:使用具有已知漏洞的组件
CAPEC-251:本地代码包含(常见攻击模式枚举和分类 [CAPEC] 工作提供了一个公开可用的攻击模式目录以及全面的架构和分类法)
与计算机硬件和半导体行业相关的代码库中有 88% 包含被归类为高风险的漏洞(严重程度评分为 7 或更高),紧随其后的是制造业、工业、机器人;以及零售和电子商务,分别为 87% 和 84%。
各个行业都有类似的发现。即使是最低比例的航空航天、航空、汽车、运输、物流行业也令人不安,该行业三分之一的代码库包含高风险漏洞。如图 1 所示,我们检查的每个行业代码库中都有开源;它构成了每个行业部门的大部分代码库。图 3 表明,这些代码库还包含大量已知的开源漏洞,组织未能修补这些漏洞,导致它们容易受到攻击。
有效的软件供应链管理需要许可和安全合规性。您正在使用开源组件和库来构建软件,并且知道这些组件受开源许可证的约束,但您知道这些许可证的详细信息吗?即使您的软件中有一个不合规的许可证也可能导致法律问题、利润丰厚的知识产权损失、耗时的补救工作以及产品上市延迟。
Black Duck 审计服务团队发现,在 2023 年审计的代码库中,超过一半(53%)包含存在许可证冲突的开源代码。
v3.
7.9组件包含一个声明,表明它属于公共领域,但不使用特定的公共领域许可证,例如 Unlicense 或 Creative Commons
2023 年,Black Duck 审计服务审计的 92% 的开源软件都采用了 MIT 许可证。作为允许在专有软件中重复使用的宽松许可证,MIT 许可证与其他软件许可证具有很高的兼容性和较低的风险。您可以相当肯定,如果您在软件中包含第三方组件,您很可能会找到流行的宽松许可证,例如 MIT、Apache、BSD、ISC 和 Unlicense。
需要注意的是,“低风险”等术语只是一种指导原则,不应用来决定是否使用受每个许可证约束的开源软件。例如,尽管 Apache 2 软件(通常被认为使用低风险许可证)可以包含在根据 GNU 通用公共许可证 3.0 (GPLv3) 许可的项目中,但 GPLv3 软件不能包含在 Apache 项目中。由于 Apache 软件基金会的许可理念和 GPLv3 作者对版权法的解释,在这种情况下许可证是不兼容的。最安全的策略是让开发人员咨询其公司政策和法律团队,以获得有关许可证合规性的具体指导。
2023 年的审计发现,知识共享许可是导致许可冲突的最普遍原因。仅知识共享 ShareAlike 3.0 (CC-SA 3.0) 就占到已发现许可冲突的 17%。
Black Duck 审计经常会发现“代码片段”——被复制并粘贴到源代码中的代码行。它们通常取自流行的博客网站 Stack Overflow,该网站自动根据知识共享 ShareAlike 为所有可公开访问的用户贡献内容提供许可。不幸的是,综合许可还涵盖了网站上发布的代码片段。我们说“不幸的是”,因为这些许可不适用于软件,知识共享在其常见问题解答中明确指出了这一点:“我们建议不要将知识共享许可用于软件。”在某些情况下,CC-SA 许可可以理解为具有与 GNU 公共许可类似的“病毒式”效应(即,任何从版权左派许可作品衍生的作品也必须根据相同的版权左派条款获得许可),并且可能从法律角度引起担忧。
在美国和许多其他司法管辖区,创意作品(包括软件)默认受专有版权保护。未经创作者/作者以许可证形式明确许可,任何人都不得合法使用、复制、分发或修改该软件。
即使是最友好的开源许可证也包括用户使用该软件所承担的义务。当代码库包含的开源许可证似乎与代码库的整体许可证相冲突时,就会出现潜在的许可证风险。GNU 通用公共许可证 (GPL) 是应用于开源项目的最常见的版权左派许可证。当根据 GPL 许可的代码包含在商业闭源软件中时,可能会出现冲突。
标准开源许可证的变体或定制版本可能会对被许可人提出不受欢迎的要求,并要求对可能的知识产权问题或其他影响进行法律评估。JSON 许可证是定制许可证的一个典型例子。基于宽松的 MIT 许可证,JSON 许可证增加了“软件应用于善,而非恶”的限制。这句话的模糊性使其含义有待解释,许多律师建议不要使用这种许可的软件,尤其是在并购场景中。
2023 年审计的代码库中有 31% 使用的代码要么没有可辨别的许可证,要么有自定义许可证,与去年的调查结果几乎相同。开源审计发现来自网站的代码片段并不罕见,这些网站与 Stack Overflow 不同,没有可辨别的服务条款或提及软件条款。开源代码没有许可条款的另一个常见原因是开发人员使用代码片段但未能随附代码片段的相关许可证。没有相关许可证的代码的另一个问题是人工智能辅助编码工具的使用越来越多(请参阅下一节)。
多个行业领域开源许可风险比例如此之高的原因可能包括(见图 6)
许多冲突较多的行业倾向于以本地产品的形式许可和分发其软件。许多限制性许可证专门适用于以这种方式分发的软件。冲突较少的其他行业可能会进行更多基于订阅或 SaaS 类型的部署,这些部署传统上不被视为“分发”,也不受相同许可条款的约束。
半导体和硬件公司严重依赖软件和固件,其中许多都包含开源代码(见图 1)。复杂的片上系统设计可能包含来自不同来源的数百万行代码。跟踪如此规模的许可证和义务可能具有挑战性。
开源在底层系统软件、固件、驱动程序等中非常普遍,这些是硬件产品不可或缺的部分。其中大部分都遵循 GPL 类型的“版权左派”许可,如果分发,则有严格的共享要求。
软件供应链中,公司之间以及硬件设计人员和制造商之间共享固件、驱动程序和工具,导致开源传播,而无需通过 SBOM 库存追踪来源或许可证。
使用人工智能编码建议工具引发了有关生成代码的所有权、版权和许可的问题。例如,针对GitHub、微软和 OpenAI提起的集体诉讼声称 GitHub Copilot(一种基于云的人工智能工具,可在开发人员编码时提供自动完成式建议)违反了版权法和软件许可要求。诉讼进一步声称,Copilot 建议的代码使用了许可材料,没有署名、版权声明或遵守原始许可条款。
Copilot 案凸显了使用 AI 生成代码的法律复杂性。对于软件开发人员来说,在法律或政府决定解决该问题之前,不要使用 AI 辅助编码工具显然是避免因许可或版权侵权而受到起诉的最安全方法。
想要使用 AI 辅助工具的开发人员应该谨慎行事,避免不必要的风险。至少,他们应该让组织询问 AI 工具供应商,其建议是否包括受开源许可约束的源代码,如果是,是否可以突出显示该代码或将其完全排除在建议之外。
另一种解决方案是使用可用的代码扫描程序,例如 Black Duck,它使用代码片段分析来扫描源代码并将各行代码与它们可能来自的任何开源项目进行匹配。开发团队可以识别 AI 代码助手引入的开源代码的适用许可证和后续条款。
软件供应链治理中的开源许可证管理最佳实践
对软件中的所有第三方软件组件进行彻底清点,包括开源软件和商业软件。
请注意,人工智能辅助编码工具可能会生成存在许可证违规和知识产权侵犯风险的代码。
评估每个组件的许可条款和条件,并评估它们是否与产品的预期用途兼容。
检查不同组件的许可证之间的兼容性,因为某些许可证可能彼此不兼容。
使用自动扫描工具来识别和跟踪每个组件的许可义务和限制。
实施确保持续遵守许可证的流程,包括定期扫描许可证和定期审查许可证合规程序。
为新的或不熟悉的许可证建立审查流程和工作流程。
确保法律、技术和业务利益相关者之间的有效沟通,以正确确定优先级并执行许可证审批(即公司决定某个特定组件的许可证是否可用于其产品的过程)。
记录所有许可证清理活动,包括许可证评估和合规程序,以确保合规工作的记录并方便未来的审计。
理想情况下,开源消费者只使用由强大社区支持的组件。例如,来自数百家组织的数千名开发人员每天都在改进 Linux。然而,在 Black Duck 审计服务团队检查的 936 个包含风险评估的代码库中,49% 包含过去两年没有新开发的开源代码。如果一个项目不再维护(尤其是较小的项目),则没有功能升级、代码改进,也没有发现任何安全问题得到修复。
这对于开源项目来说并非罕见问题。根据一些报告,2022 年维护的 Java 和 JavaScript 开源项目中,近 20% 在 2023 年将不再维护,这使得这些项目容易受到漏洞和攻击。开源主要是志愿贡献者和维护者的产物。虽然微软、RedHat 和谷歌等一些组织已经制定了激励计划来激励开源项目的维护和参与,但绝大多数公司却没有。当维护者停止维护一个项目时,后果之一就是安全风险增加。
在 Black Duck 审计服务团队于 2023 年检查的 936 个包含风险评估的代码库中,91% 的代码库所含组件的最新版本落后 10 个或更多版本。
开源用户不更新开源组件是有充分理由的。如果他们意识到这种情况(不幸的是,很多人没有意识到),开发团队可能会认为意外后果的风险大于应用新版本带来的好处。例如,嵌入式软件可能面临最小的漏洞风险,而这些漏洞只能从外部来源引入。
或者可能是时间/资源问题。由于许多团队已经竭尽全力构建和测试新代码,除了最关键的问题外,对现有软件的更新可能会成为较低的优先级。Black Duck“2023 年全球 DevSecOps 状况”报告发现,在对 1,000 名 IT 安全专业人士的调查中,28% 的人表示他们的组织需要长达三周的时间来修补已部署应用程序中的关键安全风险/漏洞,另有 20% 的人表示可能需要长达一个月的时间。这些数字适用于所有漏洞——专有、商业和第三方软件以及开源软件。
正如近十年的 OSSRA 报告所指出的那样,开源软件不同于商业软件——不是更差,也不是更好,而是不同——并且需要不同的技术来管理。例如,商业软件和开源软件的补丁处理方式截然不同。购买商业软件通常需要一些审核,作为供应商管理计划的一部分。另一方面,开源软件可能只是由开发人员自行决定下载。可能有一些组织护栏——例如,只使用具有宽松许可证的代码——但在许多组织中,甚至连这种指导都不存在。
所有使用商业软件的组织都熟悉“推送”到其软件中的补丁和更新,或者至少会收到供应商的通知,告知有更新(通常是紧急更新)可供下载。开源软件很少出现这种情况,因为开源软件消费者需要随时了解组件的状态,并在新版本可用时下载。
只有一个可行的解决方案可以了解您使用的开源版本。您需要一份准确、全面的开源清单,以及自动化流程来监控软件中的漏洞、升级和开源的整体健康状况。
无论是单个开发人员还是大型公司,每个人都有责任维护软件供应链安全实践,以降低风险。随着软件供应链攻击数量的增加,有效管理开源使用、组件和依赖关系对于管理风险变得更加重要。将开源纳入其产品的组织(正如本报告所示,实际上是所有组织)应主动管理开源风险,作为其安全软件开发实践的一部分。
美国网络安全和基础设施安全局于 2023 年底发布的《保护软件供应链:管理开源软件和软件物料清单的推荐做法》为软件供应链中使用开源提供了详细指南,包括
使用与内部开发组件相同的策略和流程将开源集成到产品的安全构建过程中。
安全团队通常定义有关开源的安全策略、流程和工具。理想情况下,开发人员将从预先审查的内部存储库中选择具有所需功能的组件,该存储库已通过 SCA 安全分析工具进行了初步漏洞评估,然后在开发和/或构建阶段运行进一步扫描,以尽早发现问题。
跟踪开源更新并监控问题和漏洞。
当发现漏洞时,应评估受影响的软件以确定组件的普遍性及其在产品中的使用情况。应更新该组件,或者,如果不再维护该组件,则应认真考虑寻找替代解决方案。
使用 SBOM。
了解软件中包含哪些组件对于准确、完整地管理代码至关重要。SBOM 是一种正式记录,其中包含软件中组件的详细信息和供应链关系。SBOM 可提高软件透明度并记录组件来源。在漏洞管理的背景下,SBOM 支持漏洞的识别和修复。从代码质量的角度来看,SBOM 的存在可能表明供应商在整个软件开发生命周期中都使用了安全的软件开发实践。
行政命令 (EO) 14028“改善国家网络安全”规定,可以要求组织直接向购买者提供 SBOM 或将其发布在公共网站上,并且可能要求政府和非政府方审查 SBOM,以确保软件产品符合 SBOM 的最低要素。行政命令还指示商务部和国家电信和信息管理局 (NTIA) 发布“软件物料清单 (SBOM) 的最低要素”,其中概述了 SBOM 所需的活动和数据以及满足 SBOM 要求的示例格式。SPDX 和 CycloneDX 被确定为两种最广泛使用的机器可读 SBOM 格式。2023 年中,管理和预算办公室 (OMB) 发布了备忘录 OMB-23-16,更新了早期的 OMB 备忘录,该备忘录允许联邦机构要求
根据软件关键性或其他标准制定 SBOM,具体标准由各机构确定
采用 NTIA 定义的格式之一的 SBOM
软件生产商在确保软件供应链安全以造福客户和用户方面发挥着关键作用。美国国家标准与技术研究院 (NIST) 的安全软件开发框架 (SSDF) 提出了一系列实践,作为以标准化方式安全开发软件的基准。美国政府已表示,所有直接或间接采购的软件都必须符合 NIST SSDF 认证,软件供应商很可能需要在不久的将来自我证明其遵守了 SSDF。
诸如 Black Duck SSDF 准备情况评估之类的评估工具可以确定贵组织的软件开发实践是否符合 SSDF 的实践和任务,以便您可以自信地证明您的软件开发流程符合 SSDF 标准。同样,Black Duck SBOM 服务以 Black Duck 审计服务流程为基础,对您的软件进行全面的安全审计并生成 SBOM — 对于尚不具备 SBOM 生成能力且需要基准 SBOM 的组织来说,这是一项有价值的服务。
承担监管或合同义务的软件生产商可能会收到审核 SBOM 的请求。软件消费者可能希望审核其供应商之一制作的 SBOM。在每种情况下,都需要一个在软件审核方面享有盛誉的可信赖第三方。Black Duck SBOM 审核和验证服务基于这些经过验证的流程来审核软件并确认客户制作的 SBOM 是否准确反映了供应链。
回顾报告结果
在 1,000 多个已扫描的代码库中,96% 包含开源代码
77% 的源代码和文件源自开源
53% 的代码库存在开源许可证冲突
经安全风险评估的代码库中,84% 存在漏洞;74% 存在高风险漏洞
91% 的代码库中的组件比最新版本落后 10 多个版本
无论您的组织是开发还是使用软件,几乎可以肯定它拥有开源组件。您确切知道这些组件是什么,以及它们是否会带来安全或许可风险吗?在 2024 年的世界里,96% 的代码被发现包含开源,代码的可见性需要成为优先事项。当 91% 的风险评估代码库使用的开源远远落后于当前版本时,消费者需要更好地保持其代码的更新,尤其是在流行的开源组件方面。
保持开源更新应与团队开发的代码具有同等的优先级。创建并维护 SBOM,详细说明代码中包含的内容,包括版本、许可证和出处的详细信息。设置定期升级的节奏,尤其是当您使用来自维护者频繁的热门项目的开源库时。
如果无法全面了解代码并保持主动的软件卫生实践,您的软件就会面临开源漏洞和 IP 合规性问题的潜在攻击。首先使用自动化 SCA 工具在 SDLC 早期发现安全性、代码质量和许可问题 — 因为您需要毫无疑问地了解代码中的内容。
如果您无法全面了解您的代码并保持主动的软件卫生实践,您的软件就会面临开源漏洞和 IP 合规性问题的潜在攻击。
Black Duck® 提供业界最全面、最强大、最值得信赖的应用程序安全解决方案组合。我们在帮助世界各地的组织快速保护其软件、在其开发环境中高效集成安全性以及安全地利用新技术进行创新方面拥有无与伦比的业绩记录。作为软件安全领域公认的领导者、专家和创新者,Black Duck 拥有您建立对软件的信任所需的一切。
了解更多信息,请访问 www.blackduck.com。
©2024 Black Duck Software, Inc. 保留所有权利。Black Duck 是 Black Duck Software, Inc. 在美国和其他国家/地区的商标。Black Duck 商标列表可在www.blackduck.com/company/legal.html上找到。本文提及的所有其他名称均为其各自所有者的商标或注册商标。2024 年 2 月
代码库组成应用程序或服务的代码和相关库。
二进制分析一种静态分析,用于在无法访问源代码时识别应用程序的内容。
连续水气管道常见弱点枚举 (CWE) 是社区开发的软件和硬件弱点类型列表,分为三个层级。CWE 有 600 多个类别,包括缓冲区溢出、路径/目录树遍历错误、竞争条件、跨站点脚本、硬编码密码和不安全随机数等类别。
漏洞漏洞常见漏洞和暴露 (CVE) 是公开披露的信息安全漏洞的列表。
黑鸭安全警告(BDSA)BDSA 提供有关开源漏洞的详细、及时、一致的信息,为 Black Duck 客户提供开源漏洞的早期和补充通知以及升级/补丁指南。BDSA 提供当日漏洞通知、可操作的缓解指南和解决方法信息、严重性评分、参考资料等。
软件组件开发人员可以添加到其软件中的预编写代码。软件组件可能是一种实用程序(例如日历功能)或支持整个应用程序的综合软件框架。
依赖当其他软件使用某个软件组件时(即当软件依赖于该组件时),该软件组件将成为依赖项。任何给定的应用程序或服务都可能有许多依赖项,而这些依赖项本身可能依赖于其他组件。
片段代码片段是开发人员剪切并粘贴到自己的代码中的小段可重复使用的代码。尽管软件可能只包含一段开源代码,但软件用户仍必须遵守与该代码片段相关的任何许可证。
开源许可证一组条款和条件,规定最终用户义务,包括在软件中使用开源组件(或组件代码片段)时如何使用和重新分发组件。大多数开源许可证分为两类。
许可证宽松许可证允许使用时几乎没有限制。通常,这种许可证的主要要求是将原始代码归属于原始开发者。
版权许可版权左派许可证通常包含互惠义务,规定修改版和扩展版的发布条款和条件与原始代码相同,并且必须根据请求提供包含更改的源代码。商业实体对在其软件中包含版权左派许可证的开源软件持谨慎态度,因为其使用可能会引起整个代码库的知识产权问题。
软件组成分析(SCA)一种应用程序安全工具,用于自动化开源软件管理流程。SCA 工具集成在软件开发生命周期中,用于识别代码库中的开源、提供风险管理和缓解建议以及执行许可证合规性验证。
软件物料清单 (SBOM)代码库中软件组件和依赖项的综合清单,通常由软件组成分析工具生成。正如美国国家电信和信息管理局 (National Telecommunications and Information Administration) 所言,“SBOM 应包括软件组件和依赖项的机器可读清单、有关这些组件的信息及其层次关系。”由于 SBOM 旨在跨公司和社区共享,因此拥有一致的格式(即人机可读)和一致的内容至关重要。美国政府指南目前指定两种标准作为批准格式,即软件包数据交换 (SPDX) 和 CycloneDX。
“开源安全和风险分析”报告是 Black Duck 团队的共同努力成果,包括我们的审计服务、咨询、研究、法律和营销团队的成员。他们的工作使 OSSRA 成为过去十年来开源代码质量、安全性和许可证合规性方面的领先报告。
特别感谢 Nancy Bernstein、Scott Handy、Siobhan Hunter、Matt Jacobs、Natalie Lightner、Merin McDonell、Mike McGuire、Phil Odence、Rie Sekine、Liz Samet、Jenny Stout 和 Jack Taylor 对今年报告的贡献。
在我们共同为 OSSRA 工作的九年中,Rachel Bay 展现了她令人难以置信的设计魔力。我很荣幸能够编写它。—— Fred Bals