开源软件 (OSS) 已成为一股强大的力量,彻底改变了组织进行数据科学和机器学习开发、协作与创新的方式。凭借透明度、成本效益和庞大的贡献者社区等诸多优势,开源软件已在各行各业得到广泛采用。然而,开源安全每天都面临着挑战和威胁,这可能会在新安全威胁时代将胜利者与失败者区分开来。
驾驭这场新游戏需要战略性的方法和不断演变的意愿。随着开源的日益普及,组织必须理解可调整策略的重要性,这些策略既能利用开源技术的强大功能,又能谨慎应用专有解决方案,并防范潜在风险。
当您决定在数据科学和机器学习技术堆栈中包含哪些平台和工具时,重要的是要考虑您选择使用的工具的作者和维护者如何管理开源安全。
我们创建本指南旨在为您提供有关开源安全以及确保安全软件供应链的关键注意事项,以及使用 Python 和 R 进行开源安全的最佳实践的实用参考。如果您觉得本指南有帮助,请将此页面加入书签并与同事分享。
简介
我们将定义开源软件、开源软件工具和开源安全。我们将考虑使用开源软件的安全优势和挑战,并探讨在使用开源仓库、库、包和数据库时采取的安全方法。最后,我们将分享在使用 Anaconda、Python 和 R 构建数据科学和机器学习解决方案时,开源安全的最佳实践。
目录
开源安全
让我们从基础知识开始,以便告知那些正在学习开源软件以及在使用 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 在单一平台上集中访问数千种开源工具,并提供付费访问以增强安全性、治理和合规性功能。

图注:Anaconda 在 6 年期间的包下载数据。
随着开源软件使用量的增加,相关的风险和漏洞也在增加。由于像 SolarWinds 网络攻击和 Log4Shell 漏洞这样的事件,开源安全已成为每个人关注的问题。近年来,我们已经看到,软件中的微小漏洞如何被犯罪企业利用以获取巨大利益,主要是通过勒索软件。如今,开源为几乎每一件软件或技术提供支持,因此维护其安全性至关重要。
什么是开源工具?
开源工具包括仓库、包和库——所有这些都是开源软件生态系统的基本组成部分。它们在促进协作、知识共享以及各种应用程序和项目的开发中起着至关重要的作用。
开源仓库是软件仓库、包和库的集合。它们由个人或组织策划,并在中心位置提供给用户访问,通常是免费的。
在编程的上下文中,包或库是可重用代码模块、函数或类的集合,用于解决特定问题。它们提供预先编写的代码,开发人员可以将其合并到他们的项目中,从而节省时间和精力。包和库通常作为开源软件分发,允许开发人员根据许可证条款使用、修改和再分发它们。示例包括 Python 中的 NumPy、Pandas、TensorFlow 和 scikit-learn,它们为数值计算、数据处理、机器学习等提供功能。
开源生态系统对于促进软件开发社区内的创新和协作至关重要。它允许开发人员在彼此的工作基础上构建,鼓励透明度,并有助于普及对强大工具和技术的访问。开源项目为包括数据科学、机器学习、Web 开发和许多其他领域在内的各个领域的增长和进步做出了重大贡献。
什么是开源安全?
开源安全是指与应用开源软件相关的系统、流程、工具、角色和风险。作为社区和志愿者驱动的软件,开源在组织内部可以释放的创新方面是无与伦比的,并且已成为每个行业的工具。从开发人员在其应用程序中使用开源,到非技术用户利用该技术来简化他们的工作,开源无处不在。由于开源可以嵌入到组织的多种方式,因此管理和保护此软件是现代 IT 部门的重要职能。
开源软件可能很复杂。
OSS 通常依赖于其他 OSS,称为依赖项。依赖项也可能具有自己的依赖项,称为传递依赖项。成千上万的 OSS 包依赖于成千上万的其他 OSS 包,从而形成高度复杂的依赖关系图,如下所示。单个漏洞——即使是嵌入在您未显式安装的传递依赖项中的漏洞——也可能危及您的整个系统。

此外,您必须主动管理出现的漏洞。这可以通过漏洞扫描或使用可以扫描您的代码库和依赖项以查找已知漏洞的工具来完成。
为了提高安全性,漏洞扫描必须与其他功能相结合,例如安全身份验证、策略过滤器和用户访问控制,这些功能使数据科学和 IT 领导者能够删除对已知易受攻击的软件包和仓库的访问。
虽然开源软件可以是安全的,但必须理解,没有软件是完全不会受到漏洞影响的。存在许多 常见的开源软件网络安全攻击。
定期安全审计、随时了解安全公告以及及时应用安全补丁将有助于降低潜在风险。此外,您可以通过遵循行业安全标准和最佳实践来补充开源软件的安全性,我们将在本指南的下一节中介绍这些标准和最佳实践。
市场上的许多安全工具不能充分满足 Python 开发人员的需求,尤其是在数据科学和机器学习领域。例如,许多扫描器具有很高的误报率(即,虚假警报)和漏报率(即,未能检测到漏洞)。此外,许多扫描解决方案不提供缓解或补救建议。在整个企业组织中使用 OSS 需要承诺、时间和专业知识,以确保您的安全态势的保真度和稳定性。
开源安全吗?
这是一个复杂的话题,应在整个 OSS 生态系统的背景下进行整体考虑。
与任何软件一样,开源也可能存在安全漏洞。软件漏洞是指在代码中发现的安全缺陷、故障或弱点。目前,NIST 国家漏洞数据库每天报告 70 多个新漏洞,它们是需要考虑的重大风险因素。例如,Equifax 因安全漏洞导致数百万敏感消费者记录泄露,被联邦贸易委员会处以 $7 亿美元罚款 。此漏洞是由于 Apache Struts(一种流行的开源 Web 应用程序框架)中的漏洞 CVE-2017-5638 造成的。
供应链攻击是另一个主要考虑因素。这种风险因素并非开源软件独有,但由于 OSS 生态系统的开放性和互连性而被放大:准入门槛非常低,这很好,因为它鼓励参与并促进创新,但也使得将恶意行为者拒之门外非常具有挑战性。
供应链攻击的特点是将恶意代码注入到软件包中,以进一步危害链中的依赖系统。域名抢注和 依赖混淆是此类攻击的两个示例,其中恶意代码伪装成合法包;这些攻击有时还会使用诸如 混淆和 加密等技术来逃避检测。您可以在这篇博客文章中了解更多信息:5 种常见的开源软件网络安全攻击。
供应链攻击正在增加。例如,在 2023 年 5 月,由于恶意活动量过大,PyPI 暂时暂停了新用户和项目的注册。
随着 OSS 生态系统的扩展和使用量的增长,潜在网络攻击的范围也在扩大。事实上,正是因为 OSS 的普及程度,它才对攻击者具有吸引力——因为攻击者的回报与努力比率很高。即使网络攻击变得越来越普遍和复杂,也可以通过采取正确的措施来降低风险并安全地实施 OSS。攻击和防御技术共同发展,因此组织必须保持警惕,并积极利用当前的最佳实践和工具。
开源比专有软件更安全吗?
开源在本质上并不比专有软件更安全或更不安全,因为它们在安全性方面都具有优点和缺点。另请记住,开源是一个庞大的生态系统(例如,截至 2023 年 9 月,仅 PyPI 就有超过 478,000 个项目),并且安全性可能因项目而异。
影响安全性的因素包括项目的开发和测试实践、社区参与度、代码质量、对安全问题的响应速度、直接和传递依赖项以及致力于安全性的资源。如果使用安全最佳实践进行开发、维护和实施,则开源软件和专有软件都可以是安全的。
开源安全
优势
- 透明度:开源项目是透明的,允许任何人查看源代码并识别潜在的安全漏洞。这种透明度可以促使更广泛的开发人员和安全研究人员社区更快地识别和解决安全问题。
- 社区审计:庞大而多元化的贡献者社区可以积极参与代码审查和安全审计,这可以提高软件的整体安全性。
- 快速修补:当发现漏洞时,开源社区可以快速响应并提供补丁和更新,从而减少暴露于潜在攻击的时间窗口。
挑战
- 资源匮乏:一些开源项目可能在安全测试和维护方面的资源有限,这可能会影响他们及时解决安全问题的能力。开源可以由许多人审查,但关键是有知识的人员实际花费多少时间进行审计和测试。
- 代码质量:开源项目中的代码质量可能差异很大。一些项目可能具有高质量的代码和完善的安全措施,而另一些项目可能由于缺乏专业知识或时间限制而代码安全性较低。
- 更新机制:许多开源项目是库或实用程序,而不是具有内置更新机制的完整应用程序,因此用户有责任及时了解任何安全新闻并相应地更新软件。
专有软件安全
优势
- 受控开发:专有软件由特定组织开发和维护,该组织可以提供专门的安全团队和资源来解决安全问题。
- 受控访问:专有代码不是公开可用的,这可能会降低攻击者查找和利用漏洞的风险。
- 通知和交付:专有软件供应商通常实施补丁或安装机制,以方便更新的交付。
挑战
- 有限的代码审查:专有软件通常不公开接受审查,这限制了可以审查代码中安全缺陷的人数。
- 响应速度较慢:由于需要与开发团队和公司的发布计划进行协调,专有软件可能需要更长的时间才能解决安全漏洞并发布更新。
组织应仔细评估他们使用的和开发的任何软件的安全实践,无论它是开源的还是专有的。定期更新、安全审计、漏洞扫描以及遵守安全最佳实践对于维护任何软件解决方案的安全性至关重要。
开源安全方法
一般来说,开源安全有三种方法
1. 无监督
允许不受监管地使用 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 还使组织能够根据各种标准创建允许列表和阻止列表。例如,您可以创建规则来过滤掉通用漏洞评分系统 (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 软件包。