Python和R的开源安全终极指南

围绕着开源软件,以及与Python和R协同工作的工具,了解潜在的机遇和风险。

2023年9月19日更新

审查和维护人:
程·李,首席软件工程师,Anaconda
弗兰克·杨,首席解决方案架构师,Anaconda
利昂·周,高级产品经理,Anaconda

开源软件(OSS)已成为一股强大的力量,彻底改变企业处理数据科学和机器学习开发、协作和创新的方式。开源软件具有诸多优势,如透明度高、成本效益高、贡献者群体庞大。软件已在各行各业得到广泛应用。然而,开源安全每天都在带来挑战和威胁,可能会在新的安全威胁时代分出胜负。

驾驭这场新游戏,需要战略方法和发展意愿。随着开源技术得到更多人的采用,企业必须了解适应性战略的重要性,充分利用开源技术,谨慎应用专有解决方案,并防范潜在风险。

在您决定好,要将哪些平台和工具纳入数据科学和机器学习技术栈时,必须考虑,您所选择的工具的开发者和维护员,是如何管理开源安全性的。

我们创建本指南的目的,是提供方便的参考,参考内容涉及开源安全,确保软件供应链安全的关键考虑因素,以及使用Python和R实现开源安全的最佳实践。如果您觉得本指南对您有帮助,请将本页加入书签,并与同事分享。

介绍

在本指南中,我们将介绍Python和R的开源安全性。

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

目录

开源安全

让我们从最基本的问题开始。

开源安全的3种方法

这两者的结合是您的最佳选择。

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

Anaconda的安全团队整合了这些建议。

向开源安全提供商提出的问题

带着这份问题清单,与潜在提供商进行交流。

Anaconda的方法

开源包的可靠来源。

常见问题(FAQ)

搜索量最多的问题。

开源安全

让我们从基础开始,告知那些正在学习开源软件的人,使用Python、R和开源软件构建应用程序时的安全注意事项。

什么是开源软件?

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

具体来说,要成为开放源代码,软件必须满足以下条件:

  • 自由再散布-用户可以不受限制地出售或赠送软件,将其作为不同来源软件的一个组成部分。销售此类软件无需支付版税或其他费用。
  • 源代码-软件包括源代码,并允许以源代码和编译形式发布,同时提供可获得源代码的明确选项,最好是免费的。
  • 衍生作品-开放源码软件许可证允许修改,衍生作品可根据与原始软件许可证相同的条款进行分发。
  • 开发者源代码的完整性——许可证允许分发由修改过的源代码构建的软件。
  • 无算法歧视-许可证不歧视任何个人或群体、领域或应用。
  • 分发许可证-与程序相关的权限设置适用于接收重新发布的软件的人;无需额外许可证。
  • 许可证-开源软件的许可证不针对特定产品,不限制与之一起发布的其他软件,也不受任何个别技术或界面风格的限制。

欲了解更多详细信息,请查阅开源计划中的开源定义。

开源软件的例子有哪些?

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

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

这些只是大量数据科学和机器学习开源软件中的几个例子。这些工具的开源性质使数据科学家和机器学习从业人员能够利用社区的集体力量,为改进工具做出贡献。

谁使用开源软件?

任何人都可以使用开源软件。它被组织、学术界和个人广泛使用。近年来,开源软件在组织中的使用呈指数级增长,并仍在继续上升。绝大多数(97%)的应用程序使用开放源码软件。

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

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

随着开源软件使用的增加,相关的风险和漏洞也随之增多。最近,由于Solar Winds网络攻击和Log4Shell漏洞等安全漏洞,开源安全已成为每个人的担忧。近年来,我们已经看到软件中的小漏洞,是如何被犯罪企业利用,并获得巨大收益的,主要是通过勒索软件。如今,几乎所有的软件或技术都是开源的,因此维护其安全性至关重要。

什么是开源工具?

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

开源代码库是软件库、软件包和程序库的集合。它们由个人或组织精心创作,在一个中心的位置提供用户访问权限,通常是免费的。

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

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

什么是开源安全?

开源安全是指应用开源软件相关的系统、流程、工具、角色和风险。作为由社区和志愿者驱动的软件,开源软件可以在组织内部释放卓越的创新力,并在各行各业发挥重要作用。从在应用程序中使用开源软件的开发人员,到利用开源软件减轻工作压力的非技术用户,开源软件惠及的用户无处不在。开放源码可以通过多种方式嵌入到组织中,因此管理和保护这种开源软件是现代IT部门的一项重要职能。

开源软件可能很复杂。

开源软件通常依赖于其他的开源软件,即所谓的依赖关系。依赖关系可能有自己的一套依存关系,这就是传递依赖关系。成千上万开源软件包依赖成千上万其他开源软件包,形成了高度复杂的依赖关系图,如下图所示。即使是嵌入在您未明确安装的传递依赖关系中的单个漏洞,也可能会危及您的整个系统。

此外,出现漏洞时,您必须积极主动地进行管理。这可以通过漏洞扫描或使用工具来实现,这些工具可以扫描代码库和依赖关系中的已知漏洞。

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

虽然开源软件是安全的,但我们必须明白,任何软件都不可能完全避免漏洞。针对开源软件的常见网络安全攻击有很多。

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

市场上的许多安全工具都不能充分满足Python开发人员的需求,特别在数据科学和机器学习方面。例如,许多扫描工具的误报率(即虚假警报概率)和误判率(即未能检测到漏洞的概率)都很高。此外,许多扫描解决方案不提供缓解或修复建议。在企业组织内使用开源软件需要投入精力、时间和专业知识,以确保安全态势的真实性和稳定性。

开源是否安全?

这是一个复杂的问题,应在整个开源软件生态系统的背景下全面考虑。

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

供应链攻击是另一个主要考虑因素。这一风险因素并非开源软件所独有,但由于开源软件生态系统的开放性和相互关联性而被放大:准入门槛非常低,这是好事,因为它鼓励参与和促进创新,但这也带来了巨大挑战,让我们难以将恶意行为者拒之门外。

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

供应链攻击越来越多。例如,2023年5月,PyPI因恶意活动过多,而暂时中止了新用户和项目的注册。

随着开源软件生态系统的扩大和使用量的增加,潜在网络攻击的范围也在扩大。事实上,正因开放源码软件十分受欢迎,才会带来攻击,因为攻击者的回报与付出之比非常高。尽管网络攻击变得越来越普遍和复杂,但只要采取正确措施,就可以降低风险,安全实施开放源码软件。攻击和防御技术是共同发展的,因此企业必须保持警惕,积极利用当前的最佳实践和工具。

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

本质上,无法形容开源软件是否比专有软件更安全,因为两者在安全方面各有利弊。还要记住,开源是一个庞大的生态系统(例如,截至2023年9月,仅PyPI就有超过478,000个项目),不同项目的安全性有所不同。

影响安全的因素包括项目的开发和测试实践、社区参与、代码质量、对安全问题的响应速度、直接和间接的依赖关系,以及专门用于安全的资源。如果开发、维护和实施过程中采用了安全最佳实践,开源软件和专有软件就都是安全的。

开源安全

优点:
  • 透明度:开源项目是透明的,任何人都可以查看源代码,并识别潜在的安全漏洞。这种透明度可以让更多的开发人员和安全研究人员更快识别和解决安全问题。
  • 社区审计:庞大而多样化的贡献者社区可以积极参与代码审查和安全审计,从而提高软件的整体安全性。
  • 快速修补:发现漏洞时,开源社区可以快速响应,提供修补和更新,减少窗口面临的潜在攻击。
挑战:
  • 缺乏资源:一些开源项目用于安全测试和维护的资源可能有限,这可能会影响项目及时处理安全问题的能力。开源可以由很多人审核,但关键在于专业人士究竟花了多少时间对其进行审核和测试。
  • 代码质量:开源项目的代码质量可能差别很大。一些项目可能拥有高质量的代码,并采取了全面的安全措施,而另一些项目可能由于缺乏专业知识或时间限制,导致代码的安全性较低。
  • 更新机制:许多开源项目都是库或实用程序,而不是具有内置更新机制的整个应用程序。因此用户需要随时了解安全新闻,并相应地更新软件。

专有软件的安全性

优点:
  • 受控开发:专有软件由特定组织开发和维护,该组织可提供专门的安全团队和资源,来解决安全问题。
  • 受控访问:专有代码不对外公开,可降低攻击者发现和利用漏洞的风险。
  • 通知和交付:专有软件供应商通常会实施一种修补或安装机制,以促进更新的交付。
挑战:
  • 有限的代码审查:专有软件通常不对公众开放,这就限制了审查代码安全漏洞的人数。
  • 响应速度较慢:由于需要与开发团队和公司的发布时间表协调,专有软件可能需要更长的时间,来处理安全漏洞并发布更新。

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

开源安全方法

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

1.不受监管

漏洞风险最大的组织有以下特征,即开源软件不用受监管即可使用。开源软件的开放方式意味着信任由开源贡献者、开发人员和安全人员组成的社区,相信社区会采取足够的措施来防范漏洞风险。这种方法大大增加了风险,因为组织网络中的许多用户都会下载软件包,每个软件包都有不同的版本号,而漏洞是不可见的。

漏洞更频繁地进入软件供应链,问题也更容易造成严重破坏。这就导致被动应付漏洞处理,而不是从一开始就防止漏洞进入企业。

2.手动过程

为更新公司所使用的操作系统和软件包建立流程和协议,是朝着正确方向迈出的一步。然而,鉴于软件包和漏洞元数据的数量,成功管理必须保持更新的包的数量,可能很快就会变得难以应付。

3.自动化

在自动化方法中,工具与漏洞的数据库同步,以便跟踪、管理、预防和修复漏洞。开源安全的自动化方法可能是最可靠和最佳的解决方案,但前提是必须正确配置,并且依赖可信的数据,将误报率降到最低。请记住,过于严格的策略会迅速降低人们对自动化工具的信心,并导致对合法警告的忽略。

最有效的开源安全方法,是将自动流程和手动流程相结合,我们将在下一节详细介绍。

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

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

根据这些经验,我们的安全团队汇编了最佳实践,供您在用Python、R和Anaconda的开源包时使用。

管理包裹

  • 利用私有存储库:虽然可以直接从互联网上下载软件包,但企业组织会从私有存储库中受益,因为间接性有助于额外的安全检查、审计和管理。私有资源库(企业专用)还能让您拥有自己的正常运行时间,并可在云计算(SaaS)、本地部署以及物理隔离网络中实施。
  • 利用通道实现管理:包括Anaconda在内的conda生态系统将软件包组织到通道中,以便更好地管理。在您的私有存储库中,将来自不同数据源和通道的软件包组织到不同通道中。不要将来自不同数据源和通道的软件包混到一个通道中,因为这可能会带来依赖性和安全问题。如果组织内的不同团队或用例有不同的策略(例如,在沙箱中的合成数据上运行的实验代码,其安全要求可能不如生产代码严格),也可以使用通道来管理访问。
  • 在公共基础上进行标准化,并仅镜像您需要的内容:例如,仅从公共存储库镜像您打算使用的特定版本的Python。选择性减少了潜在漏洞表面积,需要进行的安全性审查数量,以及基础设施负载。此外,在库版本之间迁移代码,特别是对于复杂的企业应用程序和模型,可能是一项耗时且昂贵的工作,因此要有意识地选择版本。

包资源

每个渠道都有不同的目标和限制。您的不同团队和项目可能有不同的要求。在选择开源软件包数据源时,Anaconda的一般指导原则是使用最符合您的需求和限制的通道。以下是一些常见通道的简要概述。

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

软件包版本

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

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

支持计划表

考虑软件包的支持计划表,因为不建议使用的,或生命周期结束版本的软件包,不会再收到错误修复或安全更新——至少不会从免费社区收到。请注意,不同软件包的支持计划表可能并不完全一致。对于 Python或NumPy等关键软件包,请提前规划好日落法和迁移策略。

突破性变化

破坏性更改是指,使用旧版本软件包开发的代码,无法在该软件包的更新版本中正常运行。

如果存在破坏性更改,我们的建议是了解这些更改对现有代码的影响。有时您的应用不会使用库中已更改的部分,有时更新会完全破坏您的核心功能。一般来说,最好选择不会影响代码的最新版本,但在某些情况下,您还是需要升级,并计划额外的测试和返工。

重要更新

这些版本通常包括安全或关键错误修复。它们是确定所需软件包版本下限的重要依据。如果以后的版本中存在安全修复,则应考虑将该版本约束转移到以后的版本,以确保您能始终获得这些修复。

与其他软件包的互操作性

当您开始构建一个环境时,您会发现有许多相互依赖的软件包。不同软件包需要不同版本的依赖包,这种情况并不罕见。要找到一组满足复杂依赖关系的兼容软件包并非易事。实现这一目标的最佳方式,是利用conda找到解决方案。一旦conda成功创建了符合规范的环境,就可以开发测试用例,确保代码在该环境中正常运行。

无需追求最新版

开放源码软件生态系统发展迅速,每天都有新软件包和软件包更新提供给用户。无需在您的环境中拥有每个软件包的最新版。试图拥有所有软件包的最新版,往往会导致软件包冲突和无法解决的环境问题。我们建议在环境中设置可接受的最低版本,让conda灵活地找到最兼容的解决方案。

目标是建立一个有能力、安全和稳定的环境来开展工作。

使用环境

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

Conda让环境管理变得简单,Anaconda推荐用户使用conda作为他们的环境管理器。Conda可与Anaconda和社区代码仓库完美配合。使用conda,用户可以轻松创建和切换不同环境,并执行环境管理任务。要了解有关conda的更多信息,请查看此免费的conda基础知识课程。

为了方便用户获取conda,Anaconda提供了Miniconda,这是一个小型的引导安装程序,只包含conda、Python及其依赖项。这里的最佳做法是使用Miniconda,然后根据需要安装其他软件包。

升级或修改环境时,请执行回归测试,以确保环境变化不会给应用或模型带来意外变化。您可以克隆环境或从快照文件创建环境,以创建更改前和更改后环境,来并行运行,进行比较。

通常需要反复推敲,才能为每个项目找到合适的软件包集。对环境满意后,将软件包导出为文件,并将快照保存到版本控制系统中。除了作为备份外,这种机制还有利于可重复性操作,以及与同事协作。

依赖管理

依赖关系是软件开发的关键组成部分。重要的是,要仔细考虑您的项目中包含哪些依赖关系。以下是一些避免不必要依赖的指导方针,来帮助您减少漏洞暴露的机会:

  • 只包含您需要的依赖项。避免在项目中添加不必要的依赖项或琐碎的任务。这种依赖关系会使项目变得过度复杂,并引入不必要的风险。在您自己实现所需功能的好处与开发和维护成本之间权衡,并做出明智决策。
  • 采用可以提高代码安全性或质量的依赖项。一些安全关键领域(如密码学、输入解析器等)受益于专业知识和更高级别的审查,因此在本地很难复制。选择一个经过良好审查和维护的库,总比尝试使用自己的加密技术或输入处理要好。数值库是另一种情况,在这种情况下,坚持使用经过严格审查的版本,要优于自主开发。
  • 利用语言特性。一些编程语言,如Python,有一个“内置电池”的哲学,可提供丰富的内置工具和函数。在选择其他依赖项前,先探索语言的功能和库。当您确实需要在语言之外进行探索时,请寻找能够持续提供缺失电池的外部系统。
  • 注意传递依赖。请记住,您在项目中包含的依赖项可以有它们自己的依赖项,这些依赖项将成为项目的传递依赖项。因此,一个包可能有很大的依赖关系规模。在功能类似的多个包之间进行选择时,将依赖关系规模作为附加的决策标准。

通过遵循这些最佳解决方案,您可以最大限度地减少不必要依赖关系的引入,并降低相关风险,同时在外部库提供重要价值或满足特殊需求(如加密)时,仍然可以利用这些库。

漏洞管理

包过滤

俗话说,预防胜于治疗。您可以从可信任来源镜像,从而防御供应链攻击(如域名仿冒、星标劫持和依赖混淆)。从一开始就阻止恶意软件包进入您的组织,从而尽快安全左移并解决问题。

根据包的安全暴露(例如超过组织容许阈值的漏洞得分)来阻止包,也是一种有效的漏洞缓解措施。Anaconda Business提供了强大的过滤逻辑来帮助您筛选包。最终用户将无法访问您过滤掉的包。

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

监控与匹配

保护开源软件是一个动态持续的过程,因为新发现的漏洞可能随时出现。因此,跟上不断发展的威胁形势,并了解它如何影响您的组织对开源软件的特定实现和使用,是至关重要的。

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

根据安全漏洞信息,确定您正在所使用的开源软件中,哪些组件受到哪些漏洞影响,这一过程称为漏洞匹配。匹配可能很费力,除非您有内部开发或通过第三方开发的自动化工具,来处理这个关键任务。订阅Anaconda Business或更高层级服务的组织,在Anaconda构建的开源软件包上执行始终在线的漏洞监控和匹配。Anaconda还正在将漏洞监控和匹配扩展到conda-forge包。

监管与解释

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

  • 确保漏洞信息准确

错误正匹配可能导致不必要的后续缓解措施,造成工作浪费和工作中断,例如从包存储库中删除重要包。

请记住,国家漏洞数据库中不准确的安全漏洞并不少见,并且它超出了开源软件安全扫描器的控制。为了解决这个问题,Anaconda为Anaconda Business及更高层级服务的订阅提供了通用漏洞披露管理。在通用漏洞披露监管中,Anaconda的专家研究与Anaconda软件包相匹配的每个安全漏洞,并纠正发现的任何不准确之处。有了准确可靠的漏洞信息,客户现在可以放心解释漏洞的安全含义。

  • 解释安全漏洞

基于经过筛选的准确安全漏洞信息,组织可以通过将漏洞信息与他们使用受影响包的方式相结合,来全面评估匹配的漏洞如何影响他们。每个漏洞都是在特定情况下存在的,解释其安全含义对于帮助组织确定正确的缓解措施至关重要。

缓解

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

更新版

开源软件项目可能会发布带有安全更新的软件包的新版本,这些更新修复了软件包暴露的已知安全漏洞。使用这些软件包的新版本更新您的环境,是减轻漏洞暴露的一种方法。

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

  • 破坏性变更

当包的新版本所包含的更改多于安全修复时,例如新功能,它可能就有带来破坏性更改的风险。

破坏性更改可能会让使用旧版本包的原始功能代码失效。发生这种情况时,需要对原始代码进行重构和测试,然后将它们重新部署到使用新版本包的更新环境中。

  • 对环境的潜在连锁反应

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

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

包后向移植

包后向移植意味着将开源软件项目维护者发布的安全修复程序,移植到安全修复不覆盖的软件包早期版本。接收安全补丁的包在解决安全漏洞的同时,仍然提供完全相同的功能。后向移植通常由项目维护者以外的第三方执行,并且是在旧版本的软件包上执行的。

包后向移植不会通过传递依赖关系给环境带来破坏性变化和连锁反应。它能增强用户环境的稳定性,使他们无需采取其他更具破坏性的缓解措施,或为自己争取更多时间,来评估和准备应对这些破坏性变化。

尽管有这些优点,包后向移植仍有一个主要限制——依赖于开源软件项目维护者提供的安全修复。

  • 尽管后向移植通常不由开源软件维护人员执行,但它需要在较新版本的开源软件包中提供安全修复,以便将这些安全修复“倒回”应用到旧版本中。
  • 开源软件项目维护者对安全漏洞的反应速度不尽相同,因此提供后向移植的速度也各不相同。

2023年下半年,Anaconda安全后向移植服务的私有预览计划将面向现有Anaconda客户推出。感兴趣的客户可联系Anaconda代表,咨询如何注册。

用户代码修改

修改用户代码可能是减少开源软件安全漏洞的另一种有效方法。用户可以根据开源软件包中安全漏洞的复杂程度进行阻止:

  • 对代码使用软件包的方式实施限制,这样可以有效阻止安全漏洞。有时也可以禁用不安全的部分,例如将OpenSSL使用的算法限制为已知的安全子集。
  • 用提供相同或类似功能的其他开源软件包或自定义代码,来替换存在安全漏洞的软件包,并更新用户代码。在用备选软件包或自定义代码替换有安全漏洞的软件包时,要密切注意,不要引入其他安全漏洞或错误。

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

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

任何安全工具都无法完全取代人员和流程在安全方面的作用。安全应该是编码过程的一部分,而不是事后环节。确保您的开发人员了解与第三方软件包相关的潜在风险,精通安全编码实践,并将安全最佳实践作为其编码的一部分。在软件安全方面要积极主动,而不是被动反应。查看以下安全软件开发指南和培训材料,并根据您所在组织的实际情况,加以采用或调整。

  • 开发更安全软件的OpenSSF指南
  • 美国国家标准与技术研究院安全最佳实践
  • 美国国家标准与技术研究院免费和低成本网络安全在线内容

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

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

平台安全和功能

  • 1. 您的软件包存储库提供哪些安全功能?
  • 2. 您的平台是否提供管理监控功能,以便跟踪用户、项目和部署情况?
  • 3. 您的安全控制是云原生的吗?
  • 4. 如何识别漏洞?是自动还是手动,或者两者结合?请描述这一过程。
  • 5. 您发布安全更新和补丁的频率如何?通知客户并协助他们应用这些更新的流程是什么?
  • 6. 采取了哪些措施,来防止和检测平台上未经授权的访问或活动?
IT赋能和治理
  • 7. 是否有基于角色的用户访问控制?能否按开发阶段限制访问权限;例如,能否控制谁能部署项目?
  • 8. 你们是否提供发布权限?
  • 9. 是否有针对操作或部署的审批工作流,使开发和部署流程更加可控?
  • 10. 能否提供平台上用户活动的审计日志和详细日志?
确保软件供应链的安全
  • 11. 如何确保平台上开源软件包的真实性和完整性?
  • 12. 在项目中所使用的包中,是否有扫描漏洞和潜在恶意软件的功能?
  • 13. 我可以使用您的平台创建审计日志吗?
  • 14. 平台和您的团队能提供哪些灾难恢复支持?
  • 15. 能否提供有关平台历史正常运行时间和宕机的信息,以及为尽量减少服务中断而采取的措施?
开源贡献
  • 16. 您是否为开源社区做出贡献?请描述您的组织如何参与开源生态系统。

Anaconda的方法

有了Anaconda,您可以从一开始就确保软件供应链的安全。我们为您的Python和R开发人员提供安全、可信的软件包,并具有防止恶意软件包进入您的管道的功能。我们还为您提供阻止风险软件所需的安全控制,以及管理功能和支持,该功能即便对于最大的团队而言也是必要的。

  • 通用漏洞披露管理: Anaconda对通用漏洞披露的改进采用人工处理的方法,可提供准确的报告,消除错误警报带来的负担。
  • 策略过滤: 我们的策略控制可以让您的团队在开始编码时就做好安全措施,而不是事后才对威胁做出反应。
  • 用户访问控制: 利用我们的令牌系统控制对私有软件包和私有频道的访问,确保只有特定的个人和团体才能访问。
  • 软件材料清单(SBOM): Anaconda可提供软件构件清单。
  • 企业级支持: 从排除操作错误到构建自定义conda包,均可获得Python和R专家的支持。
准备好开始了吗?
   联系我们     >   
常见问题
开源是否更安全?

开源软件的安全性是一个复杂的话题,取决于各种因素。虽然开源软件具备有助于提高安全性的固有优势,但它的安全性不一定比闭源(专有)软件高。安全性取决于社区的参与,项目的开发实践,以及用于安全审计和维护的可用资源。
具有安全意识的组织应仔细评估任何软件,无论是开源软件还是专有软件;并考虑项目的声誉、开发团队的响应能力以及现有的安全实践。无论软件的来源如何,定期更新、正确配置和遵守安全最佳实践都是至关重要的。

为什么开源更安全?

开源并不一定比专有软件更安全,但它确实有其优势。开源软件之所以常被认为更安全,有以下几个原因,主要是透明度、社区参与和对安全问题的快速反应。
开源软件通常被认为更安全的原因:

  • 开源软件提供源代码访问权限,允许任何人检查和审查源代码。
  • 开源软件得到了众多贡献者的支持。
  • 安全漏洞可以通过补丁和更新快速解决。
  • 开源软件允许用户定制代码,以满足特定的安全要求。
  • 开源项目中的安全讨论一般都是在社区参与下公开进行的。
  • 通过社区的反馈、错误报告和贡献,开源软件可以不断改进。

不过,值得注意的是,开源软件的安全性并不能仅靠其开放性来保证。使用开源软件也会面临挑战和潜在风险,例如漏洞通过依赖关系引入,代码存在质量问题,恶意行为者可能利用常用软件包。

开源项目比专有项目更安全还是更不安全?

与专有软件相比,开源项目的安全性并没有本质上的优劣之分;它取决于各种因素和每个软件项目的具体情况。开源软件和专有软件都能以不同的安全级别进行开发和维护,而且各具优势和挑战。
开源项目更加透明,可由社区检查,并得到社区快速修补和更新的支持。不过,开源项目用于安全测试和维护的资源有限,而且不同项目的代码质量也可能不同。
专有软件是由组织开发和维护的,因此可以有专门的安全团队和受控访问。这意味着专有代码不公开,可能会混淆攻击面。不过,专有解决方案的代码审查有限,因此不对公众开放。此外,解决安全漏洞需要与开发团队协调,这意味着公司的反应可能会很慢。

什么是网络安全中的开源情报?

网络安全中的开源情报 (OSINT) 是指,从公开来源收集和分析信息,以深入了解潜在的安全威胁、漏洞或风险的过程。对于网络安全专业人员和威胁情报分析师来说,开源情报是一种宝贵的工具,来帮助他们收集有关潜在对手、漏洞或安全事件的相关数据。开源情报的数据来源包括可公开访问的网站、社交媒体平台、在线论坛、公共数据库、新闻文章等。
网络安全开源情报的主要方面包括威胁情报、漏洞研究、数字足迹分析、威胁行为者特征分析、声誉监测、事件响应和取证,以及合规和监管情报。

什么是开源安全测试方法手册?

开源安全测试方法手册(OSSTMM)是对计算机系统、网络和应用程序进行安全测试和分析的框架。它是一本全面、实用的指南,为评估安全措施和识别各种IT环境中的潜在漏洞提供了结构化方法。开源安全测试方法手册是一个开源项目,由安全和开放方法研究所 (ISECOM) 开发和维护。
开源安全测试方法手册的设计具有适应性和灵活性,使安全测试人员能够根据特定环境和测试场景调整方法。它强调,通过多种测试技术和工具,来全面了解目标安全状况是非常重要的。
安全专业人员、渗透测试员和组织在进行安全评估和渗透测试练习时,将开源安全测试方法手册作为参考和指南。通过遵循开源安全测试方法手册的方法,他们可以在潜在安全漏洞被恶意行为者利用前,识别并解决它们,从而增强系统和应用程序的安全性。

什么是开源软件安全法案?

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

如何确保开源容器的安全性?

要确保开源容器的安全性,就必须实施一整套最佳实践和安全措施,以保护容器化应用程序及其运行的基础架构。由于具有可移植性和可扩展性,容器已成为打包和部署应用程序的一种流行方式。但是,如果管理不当,它们也会带来安全挑战。
确保开源容器安全的关键步骤包括:使用可信的基础映像、保持容器更新、启用映像签名、确保容器注册中心安全、限制权限、实施网络分段、监控容器活动、实施互联网安全中心(CIS)基准、隔离敏感数据、进行持续安全测试、实施运行时保护、确保容器编排(如Kubernetes)安全、教育开发人员和运营团队,以及制定明确的事件响应计划。

是否有开源安全基金会?

是的,有开源安全基金会(OpenSSF)。开源安全基金会是一项合作计划,旨在通过整合行业成果和资源,来提高开源软件的安全性。基金会于2020年8月在Linux基金会的牵头下成立。
其他有用的开源资源包括:

  • 《开发更安全软件的简明指南》
  • 美国国家标准与技术研究院最佳安全实践
  • 美国国家标准与技术研究院免费和低成本网络安全在线内容
什么是开源安全扫描器?

开源安全扫描器是一种软件工具,可帮助识别计算机系统、应用程序、网络或代码库中的安全漏洞。其中一些扫描器是开源的,免费向公众开放,任何人都可以访问和审查它们的源代码。还有一些扫描器以开源软件为目标,但其本身并非开源软件。
安全扫描器对于开发人员、系统管理员和安全专业人员来说非常重要,因为它们有助于发现和减轻软件或基础设施中潜在的安全风险。然而,仅靠安全扫描是不够的。团队必须将漏洞扫描与支持高水平安全的手动操作相结合。
Anaconda是一家开源软件和增强安全服务提供商,它将安全和IT治理能力以及自动扫描和人工筛选相结合,帮助用户快速解决漏洞问题。Anaconda用户可以利用Anaconda从国家漏洞数据库(NVD)、社区报告以及Anaconda专门的Python和R专家团队中整理出来的数据,排除包含漏洞的软件包和软件源。

开源软件有哪些安全风险?

开源软件具有许多优势,包括透明度、社区协作和成本效益。然而,它也伴随着一定的安全风险,团队应该意识到这些风险,并从被动应对转变为主动解决。
一些主要的开源安全风险包括依赖漏洞、缺乏支持和更新、代码质量问题、供应链风险、复杂性和庞大代码库带来的巨大攻击面、对问题缺乏责任感、许可证合规性、配置错误、补丁延迟以及网络钓鱼和作者冒充。了解更多信息,请参阅博客文章:5种针对开源软件的常见网络安全攻击。

   |    备案号:京ICP备09015132号-1047