使用 Python 和 R 进行开源安全终极指南

了解与 Python 和 R 配合使用的开源软件和工具相关的机遇和风险。探索保护开源供应链的最佳实践。

更新时间:2023 年 9 月 19 日

经以下人员审核和维护

Cheng Lee,Anaconda 首席软件工程师
Frank Yang,Anaconda 首席解决方案架构师
Leon Zhou,Anaconda 首席产品经理



开源软件 (OSS) 已成为一股强大的力量,彻底改变了组织处理数据科学和机器学习开发、协作和创新的方式。开源软件凭借其透明度、成本效益和庞大的贡献者社区等众多优势,已在各个行业得到广泛采用。但是,开源安全每天都会带来挑战和威胁,这些威胁可能会在新的安全威胁时代将胜利者与失败者区分开来。

在这个新游戏中取得成功需要采取战略性方法并愿意不断发展。随着开源的采用不断增长,组织必须了解灵活策略的重要性,这些策略可以利用开源技术的优势,谨慎地应用专有解决方案并防范潜在风险。

在您决定将哪些平台和工具纳入数据科学和机器学习技术堆栈时,务必考虑您选择使用的工具的作者和维护者如何管理开源安全。

我们创建了本指南,它将作为有关开源安全和关键注意事项的便捷参考,以确保安全的软件供应链,以及使用 Python 和 R 进行开源安全的最佳实践。如果您发现本指南有用,请将此页面添加书签并与同事分享。


我们将定义开源软件、开源软件工具和开源安全。我们将考虑使用开源软件的安全优势和挑战,并探讨在使用开源存储库、库、软件包和数据库时进行安全性的方法。最后,我们将分享使用 Anaconda、Python 和 R 构建数据科学和机器学习解决方案时的开源安全最佳实践。

目录

开源安全

让我们从基础开始。

三种开源安全方法

这两种方法的组合是您的最佳选择。

开源安全最佳实践:Python、R 和 Anaconda

Anaconda 的安全团队编制了这些建议。

询问您的开源安全提供商的问题

将这份问题清单用于与潜在提供商进行的对话。

Anaconda 的方法

值得信赖的开源软件包来源。

常见问题解答 (FAQ)

搜索量最大的问题

开源安全

让我们从基础开始,为那些正在了解开源软件以及在使用 Python、R 和开源构建应用程序时需要考虑的安全事项的人提供信息。


什么是开源软件?

对于数据科学和机器学习,开源软件是指免费向公众开放的软件存储库、软件包、库和平台,允许用户访问、使用、修改和分发源代码。

具体而言,要被视为开源软件,软件必须满足以下条件

  • 免费再分发 - 用户可以不受限制地将软件作为来自不同来源的聚合软件的组成部分进行出售或赠送。出售此类软件无需支付版税或费用。
  • 源代码 - 软件包含源代码,并允许以源代码和编译形式进行分发,并且有一个明确传达的获取源代码的选项,最好是免费提供。
  • 衍生作品 - 开源软件的许可证允许修改和衍生作品,这些作品可以在与原始软件许可证相同的条款下分发。
  • 作者源代码的完整性 - 该许可证允许分发使用修改后的源代码构建的软件。
  • 不歧视 - 该许可证不歧视个人或团体、域名或应用程序。
  • 许可证分发 - 程序权利适用于收到再分发软件的人员;无需其他许可证。
  • 许可证 - 开源软件的许可证不特定于某个产品,不会对与之一起分发的其他软件施加限制,也不会与任何特定技术或界面风格绑定。

有关详细信息,请查看 开源倡议组织的开源定义.

开源软件的例子有哪些?

由于其可访问性、灵活性以及活跃的社区支持,开源解决方案已成为许多数据科学和机器学习 (ML) 项目的基础。以下是数据科学和 ML 中使用的一些流行的开源软件工具。您可以通过 Anaconda 访问它们。

  • 1. Python 是数据科学和 ML 社区中广泛使用的编程语言。其简洁性和可读性使其成为各种任务的首选。Python 与许多用于数据操作 (例如 Pandas)、数值计算 (例如 NumPy)、机器学习 (例如 scikit-learn)、深度学习 (例如 TensorFlow、PyTorch、Keras) 和可视化 (例如 Matplotlib、Seaborn) 的开源库配合使用。
  • 2. R 是另一种流行的用于统计计算和数据分析的编程语言。它提供了大量用于数据操作、可视化和统计建模的开源软件包。一些流行的软件包包括 ggplot2、dplyr 和 caret。
  • 3. Jupyter Notebook 是一种交互式基于 Web 的工具,允许用户创建和共享结合代码、可视化和叙述文本的文档。它广泛用于探索性数据分析、数据可视化和教育目的。
  • 4. scikit-learn 是一个功能强大的 Python 机器学习库。它包括用于分类、回归、聚类等的各种算法。
  • 5. TensorFlow 和 PyTorch 是领先的用于机器学习和深度学习的开源框架。它们允许用户构建和训练用于各种任务的复杂神经网络模型,例如图像识别、自然语言处理和强化学习。
  • 6. Dask 是 Python 中的开源并行计算库。它使用熟悉的 Python API 在集群上实现大型数据集的并行处理和分布式计算。
  • 7. Pandas 是 Python 中用于数据操作和分析的强大开源库。它提供 DataFrame 和 Series 等数据结构,简化了结构化数据的处理。

这些只是可用于数据科学和机器学习的众多开源软件的几个示例。这些工具的开源性质使数据科学家和机器学习从业人员能够利用社区的集体努力,并为工具本身的改进做出贡献。

谁在使用开源软件?

任何人都可以使用开源软件,它被组织、学者和个人广泛使用。近年来,组织中 OSS 的使用呈指数级增长,并将继续增长。大多数 (97%) 应用程序使用开源软件

我们正在实时看到开源软件的使用量不断增加,Anaconda 软件包下载量从 2017 年的 6.72 亿次稳定增长到 2022 年的 75 亿次。Anaconda 在一个平台上提供对数千种开源工具的集中访问,并提供付费访问以增强安全性、治理和合规性功能。

Green graph on a black background that depicts the increase in Anaconda’s package downloads over a 6-year period, with the trend moving up and to the right. Total downloads by year are: 672 million package downloads in 2017, 1.5 billion in 2018, 2.9 billion in 2019; 4.4 billion in 2020; 6.1 billion in 2021; and 7.5 billion in 2022.

标题:Anaconda 的软件包下载数据跨越 6 年。

随着开源软件的使用量不断增加,与之相关的风险和漏洞也随之增多。由于像SolarWinds 网络攻击Log4Shell漏洞这样的安全事件,开源安全近来备受关注。近年来,我们已经见识到软件中微小的漏洞如何被犯罪集团利用,并通过勒索软件获取巨额利益。如今,开源几乎驱动着每一段软件或技术,因此维护其安全性至关重要。

什么是开源工具?

开源工具包括存储库、包和库,这些都是开源软件生态系统中的基本组成部分。它们在促进协作、知识共享以及各种应用程序和项目的开发中发挥着至关重要的作用。

开源存储库是软件存储库、包和库的集合。它们由个人或组织维护,并在中心位置提供给用户访问,通常无需付费。

在编程方面,包或库是一组可重用的代码模块、函数或类,用于解决特定问题。它们提供预先编写的代码,开发人员可以将其整合到自己的项目中,从而节省时间和精力。包和库通常以开源软件的形式发布,允许开发人员根据许可条款使用、修改和重新发布它们。例如,Python 中的 NumPy、Pandas、TensorFlow 和 scikit-learn,它们提供了数值计算、数据操作、机器学习等功能。

开源生态系统对于促进软件开发社区的创新和协作至关重要。它允许开发人员在彼此的工作基础上进行构建,鼓励透明度,并帮助实现对强大工具和技术的民主化访问。开源项目对数据科学、机器学习、网络开发等各个领域的增长和发展做出了重大贡献。

什么是开源安全?

开源安全是指与应用开源软件相关的系统、流程、工具、角色和风险。作为社区驱动和志愿者驱动的软件,开源在组织内部能够释放出的创新能力无与伦比,并且已成为各个行业的工具。从开发人员在应用程序中使用开源,到非技术用户利用该技术来简化工作,开源无处不在。由于开源可以以多种方式嵌入到组织中,因此管理和保护此类软件是现代 IT 部门的关键职能。

开源软件可能很复杂。

OSS 通常依赖于其他 OSS,称为依赖项。依赖项也可能具有自己的依赖项,称为传递依赖项。数十万个 OSS 包依赖于数十万个其他 OSS 包,从而形成一个高度复杂的依赖关系图,如下所示。即使是嵌入在您未明确安装的传递依赖项中的单个漏洞,也可能危及整个系统。

Various open-source packages and versions—including NumPy, SciPy, Pandas, Matplotlib, Spyder, and others—are shown as circles, with a complex web of lines connecting the dependencies for each package and version. The lines depicting dependencies are so many and so dense that it is difficult to trace each dependency visually. The image shows the complexity of hundreds of thousands of open-source packages relying on hundreds of thousands of other packages, resulting in a highly complex dependency graph.

此外,您必须主动管理漏洞的出现。这可以通过漏洞扫描来实现,或者使用可以扫描您的代码库和依赖项以查找已知漏洞的工具。

为了提高安全性,漏洞扫描必须与其他功能相结合,例如安全身份验证、策略过滤器和用户访问控制,这些功能使数据科学和 IT 领导者能够删除对已知易受攻击的软件包和存储库的访问权限。

虽然开源软件可以很安全,但必须了解,没有软件是完全不受漏洞影响的。有许多常见的开源软件网络安全攻击

定期进行安全审计、了解安全公告并及时应用安全补丁将有助于缓解潜在风险。此外,您可以通过遵循行业安全标准和最佳实践来补充开源软件的安全性,我们在本指南的下一部分中将对此进行介绍。

市场上的许多安全工具无法充分满足 Python 开发人员的需求,特别是在数据科学和机器学习领域。例如,许多扫描仪具有很高的误报率(即虚假警报)和漏报率(即未能检测到漏洞)。此外,许多扫描解决方案不提供缓解或补救建议。在整个企业组织中使用 OSS 需要承诺、时间和专业知识来确保安全态势的可靠性和稳定性。

开源安全吗?

这是一个复杂的问题,应该在 OSS 生态系统的整体背景下进行全面考虑。

与任何软件一样,开源也可能存在安全漏洞。软件漏洞是指代码中的安全缺陷、故障或弱点。目前,NIST 国家漏洞数据库每天报告 70 多个新漏洞,它们是一个需要考虑的重要风险因素。例如,由于安全漏洞导致数百万条敏感消费者记录泄露,Equifax 被联邦贸易委员会处以 7 亿美元的罚款。该漏洞是由于利用了 Apache Struts 中的漏洞CVE-2017-5638,Apache Struts 是一种流行的开源 Web 应用程序框架。

供应链攻击是另一个主要考虑因素。这个风险因素并非开源软件独有,但由于 OSS 生态系统的开放性和相互关联性而被放大:进入壁垒非常低,这对鼓励参与和促进创新很有利,但这也使得阻止恶意行为者变得非常具有挑战性。

供应链攻击的特征是将恶意代码注入软件包中,以进一步破坏链条下游的依赖系统。错字攻击依赖混淆是此类攻击的两个例子,其中恶意代码伪装成合法软件包;这些攻击有时还会使用混淆加密等技术来逃避检测。您可以在这篇博文中了解更多信息:5 种常见的开源软件网络安全攻击

供应链攻击正在上升。例如,在 2023 年 5 月,PyPI 暂时暂停了新用户和项目的注册,原因是此类恶意活动泛滥。

随着 OSS 生态系统的扩展和使用量的增长,潜在网络攻击的攻击面也在扩大。事实上,正是由于 OSS 的流行程度,才使其成为攻击的目标——因为攻击者在攻击 OSS 时,回报与努力的比率非常高。即使网络攻击变得越来越普遍和复杂,只要采取适当的措施,就可以减轻风险并安全地实施 OSS。攻击和防御技术是共同进化的,因此组织必须保持警惕,并主动利用当前的最佳实践和工具。

开源比专有软件更安全吗?

开源本身并不比专有软件更安全或更不安全,因为它们在安全性方面都具有优缺点。还要记住,开源是一个庞大的生态系统(例如,截至 2023 年 9 月,仅 PyPI 就拥有超过 478,000 个项目),安全性因项目而异。

影响安全性的因素包括项目的开发和测试实践、社区参与、代码质量、对安全问题的响应能力、直接和传递依赖项以及用于安全方面的资源。如果开源软件和专有软件在开发、维护和实施时遵循安全最佳实践,那么它们都可以很安全。

开源安全

优势

  • 透明度:开源项目是透明的,允许任何人查看源代码并识别潜在的安全漏洞。这种透明度可以使更多开发人员和安全研究人员更快速地识别和解决安全问题。
  • 社区审计:庞大而多样化的贡献者社区可以积极参与代码审查和安全审计,这可以提高软件的整体安全性。
  • 快速修补:当发现漏洞时,开源社区可以快速发布补丁和更新,减少暴露在潜在攻击中的时间窗口。

挑战

  • 资源不足:一些开源项目可能缺乏用于安全测试和维护的资源,这可能会影响它们及时解决安全问题的能力。开源可以被许多人审查,但关键在于有多少有知识的人真正花时间进行审计和测试。
  • 代码质量:开源项目中的代码质量差异很大。一些项目可能拥有高质量的代码,并采取了全面的安全措施,而另一些项目可能由于缺乏专业知识或时间限制而拥有安全性较低的代码。
  • 更新机制:许多开源项目是库或工具,而不是具有内置更新机制的完整应用程序,因此用户有责任跟上任何安全新闻并相应地更新软件。

专有软件安全

优势

  • 受控开发:专有软件由特定组织开发和维护,该组织可以提供专门的安全团队和资源来解决安全问题。
  • 受控访问:专有代码不公开,这可以降低攻击者发现和利用漏洞的风险。
  • 通知和交付:专有软件供应商通常会实施补丁或安装机制,以促进更新的交付。

挑战

  • 代码审查有限:专有软件通常不公开审查,这限制了可以审查代码以查找安全漏洞的人数。
  • 响应速度较慢:由于需要与开发团队和公司的发布计划进行协调,因此专有软件可能需要更长的时间来解决安全漏洞并发布更新。

组织应仔细评估其使用的任何软件的安全实践,无论该软件是开源还是专有软件。定期更新、安全审计、漏洞扫描以及遵守安全最佳实践对于维护任何软件解决方案的安全性至关重要。

开源安全方法

一般来说,开源安全有三种方法


1. 无监管

允许不受限制地使用 OSS 的组织面临着来自 OSS 漏洞的最大风险。开放式 OSS 方法隐式地信任开源贡献者、开发人员和安全人员的社区,认为他们会采取足够的措施来防范漏洞风险。这种方法极大地增加了风险,因为组织网络中的许多用户都会下载软件包,每个软件包都具有不同的版本号,并且漏洞是不可见的。

漏洞更容易进入软件供应链,问题也更有可能造成破坏。这导致漏洞以被动的方式进行处理,而不是从一开始就阻止它们进入组织。

2. 手动流程

为公司中使用的操作系统和软件包建立更新流程和协议是朝着正确方向迈出的一步。但是,考虑到需要维护的软件包数量以及软件包和漏洞元数据的数量,成功地管理这些软件包可能会很快变得不堪重负。

3. 自动化

在自动化方法中,工具会与漏洞数据库同步,以进行跟踪、管理、预防和修复。自动化方法是开源安全最可靠、最佳的解决方案,但前提是配置得当,并且依赖于可信数据,并且误报率要低,当数据库和工具无法正确检测已知威胁时,就会出现误报。请记住,过于严格的策略会迅速降低对自动化工具的信心,并导致合法警告被绕过或忽略。

最有效的开源安全方法是将自动化流程和人工流程结合起来,我们在下一节中将详细介绍这种方法。

开源安全最佳实践:Python、R 和 Anaconda


十多年来,Anaconda 一直为 Python 和 R 提供对数千个开源软件包的安全访问权限。Anaconda 使数据科学从业者能够轻松访问他们需要的工具来进行创新和协作。他们可以控制环境,以及解决依赖关系。Anaconda 还为安全团队提供了所需的 IT 治理、审计和增强的安全功能,即使是在最敏感和最关键的环境中。

鉴于此经验,我们的安全团队编制了以下最佳实践,供在使用 Python、R 和 Anaconda 的开源软件包时使用。

管理软件包

  • 使用私有存储库:尽管可以从互联网直接下载软件包,但企业组织可以从私有存储库中获益,因为这种间接层可以促进额外的安全筛选、审计和治理。私有存储库(供您组织的专用使用)还使您能够拥有自己的正常运行时间,并且可以在云(SaaS)、本地以及断网网络后面实施。
  • 利用渠道来实现治理:conda 生态系统(包括 Anaconda)将软件包组织到不同的渠道中,以便更好地管理。将来自不同源渠道的软件包组织到私有存储库中的不同渠道中。不要将来自不同源渠道的软件包混合到一个渠道中,因为这可能会导致依赖关系和安全问题。渠道还可用于控制访问权限,如果组织内的不同团队或用例具有不同的策略(例如,在沙箱中运行合成数据的实验代码可能比生产代码具有更宽松的安全要求)。
  • 在通用基础上进行标准化,并且只镜像您需要的部分:例如,仅从公共存储库中镜像您打算使用的 Python 的特定版本。选择性地减少潜在漏洞的攻击面,减少您需要进行的安全审查量以及基础设施负载。此外,在库版本之间迁移代码(尤其是对于复杂的企业应用程序和模型)可能是一项耗时且昂贵的任务,因此要谨慎选择版本。

软件包来源

每个渠道都有不同的目标和约束。您的不同团队和项目可能具有不同的要求。在选择 OSS 软件包来源时,Anaconda 的一般指南是使用最符合您的需求和约束的渠道。以下是关于如何考虑一些常见渠道的简要概述。

  • Anaconda 的软件包存储库:我们旨在提供一套对数据科学和机器学习从业者有用的软件包。在我们审查的众多开源项目中,我们选择打包并为用户提供那些既可信又稳定的项目。Anaconda 拥有一支专门的工程师团队来维护和改进此存储库。我们还为这些软件包提供商业支持。
  • conda-forge:由社区支持的存储库,专注于提供广泛的软件包。通常,创建代码的开源团队会在此处维护其软件包。支持由社区志愿者尽力而为。
  • Astropy、bioconda 和 PyTorch:这些是专门的社区维护的渠道,专注于特定用例。有时使用它们需要 Anaconda 的默认软件包来满足缺失的依赖关系,有时它们是完全自包含的。这些也大多由志愿者支持。
  • Anaconda Business 是一个企业级软件包存储库,具有访问控制、审计和内容信任等功能。Anaconda Business 还使组织能够根据各种标准创建允许列表和阻止列表。例如,您可以创建规则来过滤掉 Common Vulnerability Scoring System (CVSS) 分数超过您可接受阈值的软件包,或排除许可证不符合您的法律要求的软件包。

软件包版本

许多开源项目(如 Python 的 CPython 解释器、Django 和 Nginx)都有几个并行维护的主要版本。相同 OSS 软件包的不同版本具有不同的功能、性能、安全更新和向后兼容性。

在选择软件包版本或考虑软件包更新时,我们建议评估以下标准,这些标准通常在软件包的变更日志中提供。

支持计划

考虑软件包的支持计划,因为已弃用或已停产 (EOL) 版本的软件包不再接收错误修复或安全更新,至少来自免费社区不再接收。请记住,不同软件包的支持计划可能无法完全与彼此保持一致。对于 Python 或 NumPy 等关键软件包,请提前做好停用/迁移策略的计划。

重大更改

重大更改意味着使用旧版本软件包开发的代码无法与该软件包的更新版本一起正常使用。

如果有重大更改,我们建议您了解这些更改对现有代码的影响。有时您的应用程序不会使用库中已更改的部分,有时更新会完全破坏您的核心功能。通常,最好选择不包含会影响您代码的更改的最新版本,但有些情况下您需要无论如何进行升级,并计划进行额外的测试和返工。

关键更新

这些通常包括安全或关键错误修复。它们是确定您所需软件包版本的较低界限的极佳来源。如果更高版本中存在安全修复,则应考虑将该版本约束移至更高版本,以确保您也始终获得这些修复。

与其他软件包的互操作性

当您开始构建环境时,您会注意到有许多相互依赖的软件包。一个软件包需要特定版本的依赖关系,而另一个软件包则需要不同版本的依赖关系,这种情况并不罕见。找到满足复杂相互依赖关系的一组兼容软件包可能并不容易。实现此目标的最佳方法是利用 conda 来找到解决方案。一旦 conda 根据您的规范成功创建了一个环境,请开发测试用例以确保您的代码在此环境中正常工作。

无需追逐最新版本

OSS 生态系统发展迅速,每天都有新的软件包和软件包更新提供给用户。没有必要,而且通常也不希望在您的环境中拥有每个软件包的最新版本。通常情况下,尝试拥有每个软件包的最新版本会导致软件包冲突以及无法解决的环境。我们建议在您的环境中设置最低可接受版本,并允许 conda 灵活地找到最兼容的解决方案。

目标是创建一个能够执行您的工作、安全且稳定的环境。

使用环境

Anaconda 建议我们的客户不要为所有项目使用一个大型环境,而是使用特定于项目甚至特定于任务的环境,以避免不同项目之间的依赖关系问题。较小的环境可以最大程度地减少潜在安全攻击的攻击面,并且创建速度更快,也更易于管理。

Conda 使环境管理变得轻而易举,Anaconda 建议我们的用户使用 conda 作为其环境管理器。Conda 与 Anaconda 和社区存储库配合良好。借助 conda,用户可以轻松创建和切换不同的环境,并执行环境管理任务。要了解有关 conda 的更多信息,请查看此免费的 conda 基础知识课程

为了使用户能够轻松获得 conda,Anaconda 提供了 Miniconda,它是一个小型引导安装程序,只包含 conda、Python 及其依赖关系。这里的最佳做法是使用 Miniconda,然后仅在需要时安装其他软件包。

在升级或修改环境时,请执行回归测试,以确保环境更改不会对您的应用程序或模型造成意外更改。您可以克隆环境或从快照文件创建环境,以创建可以并行运行以进行比较的“前后”环境。

通常需要一些迭代才能找到每个项目的最佳软件包集。当您对某个环境感到满意时,将其导出到文件,并将此快照保存在您的版本控制系统中。除了用作备份外,此机制还有助于促进可重复性和与同事的协作。

依赖关系管理

依赖关系是软件开发的重要组成部分,因此务必仔细考虑在项目中包含哪些依赖关系。以下是一些关于避免不必要的依赖关系以降低漏洞风险的指南。

  • 只包含您需要的依赖关系。避免不必要地或为了琐碎的任务将依赖关系添加到您的项目中。这些依赖关系会使您的项目膨胀,并带来不必要的风险。权衡拥有您自己的功能实现的好处与开发和维护成本,并做出明智的决定。
  • 使用可以提高代码安全性和质量的依赖关系。一些安全关键领域(如密码学、输入解析器等)从专门的知识和更严格的审查中获益,而这些知识和审查难以在本地复制。选择经过良好验证和维护的库几乎总是比尝试自己编写密码学或输入处理要好。数值库是另一种情况,坚持使用经过良好验证的版本优于自己编写的方法。
  • 利用语言特性。一些编程语言(如 Python)具有“自带电池”的理念,并提供丰富的内置工具和函数。在选择其他依赖关系之前,请先探索语言的功能和库。当您需要探索语言之外的内容时,请查找以连贯方式提供缺失电池的外部系统。
  • 注意传递依赖关系。请记住,您在项目中包含的依赖关系可能具有自己的依赖关系,这些依赖关系会成为项目的传递依赖关系。因此,一个软件包可能具有很大的依赖关系范围。在决定提供类似功能的多个软件包之间时,请将依赖关系范围的大小用作额外的决策标准。

通过遵循这些最佳实践,您可以最大程度地减少引入不必要的依赖关系并降低相关风险,同时在外部库提供重要价值或解决专门要求(如密码学)时仍然可以使用它们。

漏洞管理

软件包过滤

正如谚语所说,预防胜于治疗。通过从可信来源镜像来防御供应链攻击(如拼写错误、星盗窃和依赖关系混淆)。左移并尽早解决问题,防止恶意软件包从一开始就进入您的组织。

根据软件包的安全风险(如漏洞分数超过您组织可接受的阈值)阻止软件包也可以是一种有效的漏洞缓解措施。Anaconda Business 提供强大的过滤逻辑,可帮助您筛选软件包。最终用户将无法访问您过滤掉的软件包。

请记住,自动过滤可能会在过滤掉业务关键软件包时导致中断。根据您实际使用软件的方式评估组织的风险非常重要。在某些情况下,最合适的做法可能是覆盖一般的过滤规则并进行安全例外。如果是这样,则必须适当地管理例外情况(例如,通过设置审查日期)。

监控和匹配

保护开源软件是一个动态且持续的过程,因为新发现的漏洞可能随时出现。因此,必须紧跟不断变化的威胁态势,并了解它如何影响您组织对 OSS 的特定实施和使用。

美国国家标准与技术研究院 (NIST) 维护和发布国家漏洞数据库 (NVD),其中包含有关安全漏洞的条目,包括可能影响 OSS 的漏洞。NVD 中的每个漏洞条目都包含重要信息,包括通用漏洞和暴露 (CVE) 标识符 (ID)、描述、严重性、已知受影响的软件配置等等。

在给定安全漏洞信息的情况下,确定您正在使用的 OSS 的哪些组件受到哪些漏洞的影响的过程称为漏洞匹配。除非您拥有内部开发或通过第三方开发的自动化工具来处理此关键任务,否则匹配可能是一个费力的过程。订阅了 Anaconda Business 及更高版本的用户,其由 Anaconda 构建的 OSS 软件包始终会进行漏洞监控和匹配。Anaconda 还正在扩展对 conda-forge 软件包的漏洞监控和匹配。

整理和解释

当安全漏洞监控和匹配报告表明软件包受到一个或多个已知漏洞的影响时,接下来有两个关键步骤

  • 确保漏洞信息准确

误报可能会导致不必要的后续缓解措施,造成浪费工作和工作中断,例如从软件包存储库中删除必需的软件包。

请记住,NVD 中不准确的安全漏洞条目并不少见,并且不受 OSS 安全扫描程序控制。为了解决这个问题,Anaconda 为 Anaconda Business 及更高版本的订阅提供 CVE 整理服务。在 CVE 整理过程中,Anaconda 的专家会研究与 Anaconda 软件包匹配的每个安全漏洞,并纠正发现的任何不准确之处。凭借准确可靠的漏洞信息,客户现在可以自信地解释漏洞的安全影响。

  • 解释安全漏洞

基于整理后的准确安全漏洞信息,组织可以结合漏洞信息及其对受影响软件包的使用方式,全面评估匹配到的漏洞可能对其造成的影响。每个漏洞都是特定于环境的,对其安全影响的解释对于帮助组织确定正确的缓解措施至关重要。

缓解

有各种方法可以缓解安全漏洞。组织可能需要在不同情况下采取不同的缓解措施。

更新版本

OSS 项目可能会发布软件包的更新版本,其中包含安全更新,这些更新可以修复他们暴露的已知安全漏洞。使用这些软件包的更新版本更新您的环境是缓解漏洞暴露的一种方法。

作为缓解漏洞的一种方法,软件包更新有其自身的复杂性

  • 可能的重大更改

当软件包的更新版本包含除了安全修复之外的更改(例如新功能)时,它可能会存在带来重大更改的风险。

重大更改可能会使使用旧版本软件包的原本可运行的代码失效。发生这种情况时,需要在将它们重新部署到具有软件包更新版本的更新环境之前,对原始代码进行重构和测试。

  • 对环境的潜在连锁影响

如果需要安全更新的软件包具有依赖项(也称为传递依赖项),则这些传递依赖项中的一些可能需要升级到更新版本才能使安全更新生效。更新其中一些传递依赖项可能会导致进一步的软件包更新。

Conda 作为软件包和环境管理工具,能够管理上述连锁效应。但是,值得指出的是,看似简单的“单个软件包更新”可能会对整个环境带来重大变化。因此,在重新部署更新后的环境之前,必须对其进行彻底测试。

软件包回溯

软件包回溯是指将 OSS 项目维护人员发布的安全修复程序移植到安全修复程序未涵盖的软件包的早期版本。接受安全回溯的软件包仍然提供完全相同的功能,同时解决了安全漏洞。回溯通常由项目维护人员以外的第三方执行,并且是在软件包的旧版本上执行的。

软件包回溯不会通过传递依赖项对环境带来重大更改和连锁影响。它为用户提供了更高的环境稳定性,因此他们不需要诉诸其他更具破坏性的缓解措施,或者他们可以给自己更多时间来评估和为这些破坏性更改做好准备。

尽管有这些好处,但软件包回溯确实有一个主要限制——软件包回溯依赖于 OSS 项目维护人员提供的安全修复程序的可用性。

  • 尽管通常不由 OSS 维护人员执行,但回溯需要在 OSS 软件包的更新版本中提供安全修复程序,以便这些安全修复程序可以回溯到旧版本。
  • OSS 项目维护人员对安全漏洞的响应速度各不相同,因此回溯的可用速度也会有所不同。

Anaconda 安全回溯服务的私人预览计划将于 2023 年下半年向现有 Anaconda 客户提供。有兴趣的客户可以联系其 Anaconda 代表以了解如何注册。

用户代码修改

修改用户代码可能是缓解 OSS 安全漏洞的另一种有效方法。根据 OSS 软件包中安全漏洞的复杂程度,用户可以

  • 对代码如何使用软件包实施限制,因为这可能会有效地阻止安全漏洞。有时也可以禁用不安全的部分,例如,通过将 OpenSSL 使用的算法限制在已知的安全子集内。
  • 用替代的 OSS 软件包或提供相同或类似功能的自定义代码替换存在安全漏洞的软件包,并相应地更新用户代码。在用替代方案或自定义代码替换有漏洞的软件包时,请注意不要引入其他安全漏洞或错误。

与软件包更新一样,用户代码修改需要在部署之前进行广泛测试。

培训您的开发人员并采用安全编码实践

没有任何安全工具可以完全取代人在安全方面发挥的作用。安全应该是编码过程的一部分,而不是事后才考虑的。确保您的开发人员了解使用第三方软件包的潜在风险,精通安全编码实践,并将安全最佳实践作为其编码的一部分。在软件安全方面要积极主动,而不是被动。查看以下安全软件开发指南和培训材料,并将其采用或调整以适应您的组织。

询问您的开源安全提供商的问题


向潜在的技术提供商提出这些问题,以更好地了解他们对开源安全功能、IT 支持和治理以及软件供应链安全性的方法。

平台安全和功能

  • 1. 您的软件包存储库提供了哪些安全功能?
  • 2. 您的平台是否提供管理监控,以便我可以跟踪用户、项目和部署?
  • 3. 您的安全控制是云原生的吗?
  • 4. 您如何识别漏洞?是自动的还是手动的,或者两者兼而有之?描述该过程。
  • 5. 您多久发布一次安全更新和补丁?通知客户并帮助他们应用这些更新的过程是什么?
  • 6. 平台上有哪些措施来防止和检测未经授权的访问或活动?

IT 支持和治理

  • 7. 是否有基于角色的用户访问控制?我可以根据开发阶段限制访问权限吗?例如,我可以控制谁可以部署项目吗?
  • 8. 您是否提供发布权限?
  • 9. 是否有针对某些操作或部署的审批流程,以允许更受控制的开发和部署过程?
  • 10. 您是否可以提供对审计日志和平台上用户活动的详细日志的访问权限?

软件供应链安全

  • 11. 您如何确保平台上提供的开源软件包的真实性和完整性?
  • 12. 是否有功能可以扫描项目中使用的软件包中的漏洞和潜在恶意软件?
  • 13. 我可以使用您的平台创建审计日志吗?
  • 14. 平台和您的团队提供什么类型的灾难恢复支持?
  • 15. 您是否可以提供有关平台的历史正常运行时间和任何停机事件的信息,以及为最大限度地减少服务中断而采取的措施?

开源贡献

  • 16. 您是否为开源社区做出贡献?描述您的组织如何参与开源生态系统。

Anaconda 的方法


使用 Anaconda,您可以从一开始就保护您的软件供应链。我们为您的 Python 和 R 开发人员提供安全可靠的软件包,并具有将恶意软件包排除在管道之外的功能。我们还提供您阻止风险软件所需的安全性控制以及即使对于最大的团队也需要的治理功能和支持。

  • CVE 整理:Anaconda 的人工整理方法可以对 CVE 进行细化,提供准确的报告,消除误报的负担。
  • 策略过滤器:我们的策略控制允许您的团队从一开始就实施安全措施,而不是在事后才对威胁做出反应。
  • 用户访问控制:利用我们的令牌系统来控制对私有软件包和通道的访问权限,确保只有特定个人和群体可以访问。
  • 软件物料清单 (SBOM):Anaconda 提供您的软件组件的清单。
  • 企业级支持:从 Python 和 R 专家那里获得支持,从排除操作错误到构建自定义 conda 软件包。

准备开始了吗?

常见问题解答

开源软件更安全吗?

开源软件的安全性是一个复杂的话题,取决于各种因素。虽然开源软件具有固有的优势,可以促进其安全性,但它并不比闭源(专有)软件更安全或更不安全。安全性取决于社区的参与度、项目的开发实践以及用于安全审计和维护的资源。

注重安全的组织应仔细评估任何软件,无论是开源软件还是专有软件,并考虑项目的声誉、开发团队的响应能力以及已实施的安全实践。无论软件的来源如何,定期更新、适当的配置以及遵守安全最佳实践都是必不可少的。

开源软件并不一定比专有软件更安全;但是,它确实有一些优势。开源软件通常被认为更安全,主要是因为它的透明度、社区参与度以及对安全问题的快速响应。

OSS 通常被认为更安全的原因

  • OSS 提供对源代码的访问权限,允许任何人检查和查看它。
  • OSS 受广大而多元的贡献者社区的支持。
  • 可以使用补丁和更新快速解决安全漏洞。
  • OSS 允许用户自定义其代码以满足特定的安全要求。
  • 开源项目中的安全讨论通常公开进行,并有社区参与。
  • 开源软件通过社区的反馈、错误报告和贡献,不断改进。

但是,重要的是要注意,开源软件的安全性不能仅仅通过其开放性来保证。使用开源软件也存在挑战和潜在风险,例如通过依赖项引入的漏洞、代码质量问题以及恶意行为者利用流行软件包的可能性。

开源项目与专有项目的安全性本身并不比对方更好或更差;它取决于各种因素和每个软件项目的具体情况。开源软件和专有软件都可以以不同的安全级别进行开发和维护,并且各有优缺点。

开源项目更加透明,社区可检查,并得到社区快速修补和更新的支持。然而,开源项目的安全测试和维护资源有限,代码质量因项目而异。

专有软件由组织开发和维护,因此可以拥有专门的安全团队和受控访问,这意味着专有代码不会公开,这可能会模糊攻击面。但是,专有解决方案的代码审查有限,因此不公开评论。此外,需要与开发团队协调以解决安全漏洞,这意味着公司响应可能很慢。

网络安全中的开源情报 (OSINT) 指的是从公开来源收集和分析信息,以洞察潜在的安全威胁、漏洞或风险的过程。OSINT 对于网络安全专业人员和威胁情报分析师来说是一个有价值的工具,因为它可以帮助他们收集有关潜在对手、漏洞或安全事件的相关数据。OSINT 数据的来源可以包括公开可访问的网站、社交媒体平台、在线论坛、公共数据库、新闻文章等。

网络安全中开源情报的关键方面包括威胁情报、漏洞研究、数字足迹分析、威胁行为者画像、声誉监控、事件响应和取证以及合规和监管情报。

开源安全测试方法手册 (OSSTMM) 是一个用于对计算机系统、网络和应用程序进行安全测试和分析的框架。它是一个全面且实用的指南,为评估安全措施和识别各种 IT 环境中潜在漏洞提供了结构化方法。OSSTMM 是一个开源项目,由安全与开放方法研究院 (ISECOM) 开发和维护。

OSSTMM 旨在具有适应性和灵活性,允许安全测试人员根据具体环境和测试场景定制方法。它强调使用多种测试技术和工具来全面了解目标的安全态势的重要性。

安全专业人员、渗透测试人员和组织在进行安全评估和渗透测试练习时,将 OSSTMM 作为参考和指南。通过遵循 OSSTMM 方法,他们可以通过识别和解决潜在的安全漏洞来增强其系统和应用程序的安全性,从而防止恶意行为者利用这些漏洞。

2023 年保障开源软件法案 (S.917)》是一项于 2023 年 3 月在美国参议院提出的法案。该法案的主要目标是提高联邦机构和部门使用的开源软件的安全性。《保障开源软件法案》的关键目标包括开源软件清单、安全审查和指南、漏洞识别以及协调和报告。

确保开源容器安全涉及实施一套全面的最佳实践和安全措施,以保护容器化应用程序及其运行的底层基础设施。容器因其可移植性和可扩展性而成为打包和部署应用程序的流行方式。但是,如果管理不当,它们也可能带来安全挑战。

确保开源容器安全的关键步骤包括:使用受信任的基本映像、保持容器更新、启用映像签名、保护容器注册表、限制权限、实施网络隔离、监控容器活动、实施互联网安全中心 (CIS) 基准、隔离敏感数据、进行持续安全测试、实施运行时保护、确保容器编排 (例如 Kubernetes) 安全性、教育开发人员和运营团队,并制定明确的事件响应计划。

是的,有一个名为开源安全基金会 (OpenSSF) 的开源安全基金会。OpenSSF 是一项协作倡议,旨在通过整合行业努力和资源来提高开源软件的安全性。它于 2020 年 8 月在 Linux 基金会下启动。

其他有用的开源资源包括

开源安全扫描器是一种软件工具,可以帮助识别计算机系统、应用程序、网络或代码库中的安全漏洞和弱点。其中一些扫描器是开源的,并免费向公众提供,任何人都可以访问和查看其源代码。其他扫描器针对开源软件,但本身并非 OSS。

安全扫描器对开发人员、系统管理员和安全专业人员来说很有价值,因为它们有助于发现和减轻其软件或基础设施中潜在的安全风险。但是,仅进行安全扫描是不够的。团队必须将漏洞扫描与支持高安全级别的手动实践相结合。

Anaconda 作为一家开源软件和增强安全提供商,结合使用安全和 IT 治理功能以及自动化扫描和人工整理,帮助用户快速解决漏洞。Anaconda 用户可以使用 Anaconda 的数据(从国家漏洞数据库 (NVD)、社区报告和 Anaconda 专门的 Python 和 R 专家团队收集)来排除包含漏洞的软件包和存储库。

开源软件提供了许多优势,包括透明度、社区协作和成本效益。但是,它也存在一些安全风险,团队应该意识到这些风险,并从被动转向主动解决这些风险。

一些主要的开源安全风险包括依赖项漏洞、缺乏支持和更新、代码质量问题、供应链风险、来自广泛代码库的复杂性和大型攻击面、缺乏对问题负责、许可证合规性、错误配置、延迟修补以及网络钓鱼和作者冒充。在本文中了解更多信息,开源软件的 5 种常见网络安全攻击