保护您的 AI、ML 和数据科学软件供应链(网络研讨会记录)

Frank Yang

Abstract, green data imagery

访问此网络研讨会的录音 此处

主持人:我们非常高兴欢迎 Frank Yang 参加今天的网络研讨会。Frank 是 Anaconda 的首席解决方案架构师。Frank 拥有丰富的经验,为全球一些最大的金融机构设计和实施解决方案,帮助组织利用开源软件执行高价值举措,而不损害安全性和治理。现在,事不宜迟,我把时间交给 Frank,让他开始我们的研讨会。

Frank Yang:大家好,欢迎大家。

在本节中,我们将讨论保护您的 AI、机器学习和数据科学软件供应链。让我们从调查现状开始。Python 被用于各行各业的所有事物。十多年来,我们见证了 Python 的稳步崛起,过去六年一直是机器学习的事实上的语言。Python 也被许多行业和角色广泛使用。以下是我们 数据科学现状报告 中的一些发现。

我们看到 Python 被广泛应用于各个领域。从商业分析师到数据科学家、运营人员等等。Python 也被用于端到端的工作流程。过去,Python 可能被视为仅仅是一种脚本语言,你们中有些人可能还记得在将代码部署到生产环境之前,必须用 C++ 或 Java 等语言重写代码。但现在,Python 已经被接受,甚至可能被认为是首选的语言。企业使用它来执行从数据获取和探索到部署和监控的整个工作流程。

这些工作流程无处不在:在桌面和服务器、容器和虚拟机上。Python 还是其他产品的嵌入式语言。随着 PyScript 的推出,它甚至可以在浏览器中运行。

Anaconda:一家公司和一个社区

那么 Anaconda 在这个 Python 世界中扮演着什么角色?我们既是一家公司,也是一个社区。Anaconda 存在于绝大多数财富 500 强企业中。我们也拥有一个活跃的社区,拥有数千万用户。

社区对我们来说非常重要,因为创新来自这里。下一代数据科学专家也在他们的课程中使用 Anaconda 进行培训。我们也拥有数十亿次下载量,这使我们成为全球最受欢迎的数据科学平台。世界一流的组织信赖 Anaconda 作为企业级开源 Python 的首选供应商。

那么 Anaconda 做了什么?简而言之,从高层面上讲,我们简化了数据科学,从数据科学软件的安装开始。Python 拥有丰富的包生态系统,软件是建立在软件之上的。这就是我们获得越来越复杂的功能的方式。但正如这张图所示,这也造成了包之间复杂的依赖关系。

您可以想象,手动弄清楚这些依赖性约束将非常耗时且容易出错。因此,我们使用 conda(我们的包管理器)自动确定要引入哪些依赖项,并确保所有这些包及其版本相互兼容。这样,您就不必花费时间处理依赖项,而可以专注于核心数据科学任务。

[5 分钟] 现在,软件安装后,我们还促进数据科学工作流程。正如我们之前看到的,此工作流程中包含多个活动。每个活动都可能带来挑战。在 Anaconda,我们提供解决方案来帮助您克服这些障碍。我们还支持大规模部署。我们刚才看到的这张图实际上只是一个数据科学家的工作流程。

但数据科学是一项团队运动,是当今竞争中不可或缺的一部分。因此,Python 在整个基础设施中部署,用于各种用例,跨越多个部门和人员。

部署规模带来安全挑战

这种规模的部署确实带来了安全挑战。例如,如果没有合适的工具,您将如何知道谁在下载什么包?从哪里下载?此外,大规模部署为潜在攻击创造了巨大的表面积。因此,安全确实是一个令人担忧的问题。

事实上,正是由于 Python 的广泛部署,它才具有攻击性 - 因为攻击者获得的回报远大于付出的努力。从左到右(参见上图),我们看到开源获得了广泛的采用。但与此同时,开源网络攻击的数量也令人担忧地增加。事实上,2022 年,平均每天报告 72 个 CVE。CVE 是通用漏洞和披露 - 也就是安全漏洞。现在,如果我们将 72 除以 24 小时,得到的结果是每小时 3 个 CVE,或者说 **每 20 分钟就会出现一个新的安全漏洞**。

谁会受到网络攻击的影响?根据 FBI 的互联网犯罪报告,受影响最大的行业是医疗保健、制造业、政府、信息技术和金融服务行业。

让我们看看包的来源以及 **社区存储库** 的挑战。社区存储库是一个很好的资源,但有一些注意事项。

首先,好的方面。它们具有较低的准入门槛,这很好,因为它鼓励参与和创新。这就是我们在 PyPI 和 conda-forge 上找到大量包的原因。

现在,如果您运行的是商业或任务关键型工作负载,则需要牢记一些重大问题。社区存储库的质量控制很少,因为没有集中审查流程。发布也完全由作者驱动。直白地说,任何人都可以上传任何他们想要的东西。这实际上是社区存储库的本质。

这就是为什么代码和元数据质量参差不齐的原因,包括包之间可能存在的互操作性冲突。因为志愿者开发者倾向于专注于使自己的包正常工作,而不是整合到整个生态系统中。支持也是自愿的,因此如果您遇到问题并需要紧急帮助,那么您可能无法获得帮助。

在 PyPI 的情况下,实际上没有构建系统。因此,某人可能坐在家里,使用装满了恶意软件的旧台式机构建包。没有任何东西可以阻止他们上传这些包。社区存储库 - 这些免费存储库 - 也没有实施企业级安全。

这就是为什么我们在生态系统中看到许多安全事件的原因。这只是您在新闻中找到的众多例子中的一小部分。但从这几个文章中,我们可以了解到,攻击正在上升,因为它们是有效的。即使是精通安全的大公司也被入侵。这也不仅仅是小型、默默无闻的项目。PyTorch 是主要的深度学习框架之一,甚至它们也被入侵了。

随着事态的发展,攻击者变得越来越有创意。这篇文章谈到了如何使用特殊的 Unicode 字符伪装恶意代码。事实上,恶意活动的规模已经增长到如此大的程度,以至于 PyPI 曾经暂停了新用户和项目的注册,因为他们被大量的攻击所淹没。

另一个主要的社区存储库是 conda-forge,这是他们的核心开发团队发布的注意事项:“我们不建议您在包含敏感信息的環境中使用 conda-forge。conda-forge 的软件由我们的用户构建,核心开发团队无法验证或保证此软件不含恶意代码或未被篡改。如果您在非常敏感的环境中使用 conda-forge(我们不建议这样做),请从您的系统中删除这些工件。”

重要的是要注意,这个注意事项来自 conda-forge 本身。

接下来,让我们考虑市场动态。2021 年,[美国政府的] 白宫发布了一项行政命令,以提高我们国家的网络安全。这导致了 SSDF 的创建,即安全软件开发框架。这里有许多页面的文档描述了这一点。

但关键是:如果我们在公共部门工作或与 [美国] 政府做生意,那么我们将被要求遵守安全标准。

[10 分钟] 在私营部门,市场力量是责任。更具体地说,责任将被置于使用开源构建产品和服务的组织身上 - 而不是志愿者开发者或这些产品和服务的最终用户。这是因为这些组织,这些公司,拥有资源,并且 [可以] 对网络安全做些什么。

开源创新和安全合规性

情况是这样的。我们想要利用开源的创新。我们也想要遵守,或者说必须遵守安全标准。然而,社区资源库本身就表示它们不安全。社区志愿者在努力处理安全问题方面做出了非常值得称赞的努力,但社区资源库的本质——对所有人开放——使它们难以保护且容易受到攻击。恶意行为者利用了这一点。

那么我们该怎么办?如何在当今竞争激烈的环境中实现创新和安全兼得?这就是 Anaconda 的 [专业] 资源库的用武之地。[此] Anaconda 资源库由专业人士为专业人士打造。我们研究了社区资源库中的风险,并解决了这些问题。

因此,您将获得可靠的软件包,这些软件包不是质量控制较差且存在互操作性冲突的软件包,而是使用最佳实践设计并使用一致的控制措施构建的。这对您来说意味着,这些软件包彼此兼容。因此,您可以将它们混合搭配以构建您自己的独特 AI 模型和应用程序。

您将获得经过精选的软件包,而不是任何人都可以上传任何他们想要的东西,并且还附带 SBOM。SBOM 是软件物料清单,是新安全框架的关键组成部分。您还将获得经过验证的许可证,如果您是在商业环境中运营,这一点尤其重要。

您将获得具有 SLA 的企业支持。这意味着您将拥有一个单点联系支持,而不是试图联系您没有正式接触并且很可能从未见过的志愿者。S3C 是我们的安全软件供应链,您还将获得我们独特的漏洞洞察力。

接下来,让我们仔细看看供应链。

在 Anaconda,我们采用整体方法来保护供应链。这张图显示,软件包的生命周期中有多个阶段。而此幻灯片中的关键要点是,这些阶段中的每一个都是网络攻击的潜在入口。因此,确保链条中每一个环节的安全至关重要。

现在,让我们仔细看看并深入研究。借助 Anaconda 技术栈,我们从我们在开源领域的专业知识入手。Python、AI、机器学习和数据科学是我们的核心业务。从一开始就一直如此,因此它已成为我们 DNA 的一部分。我们是 Anaconda、Bokeh、conda、Dask、Jupyter 等项目的维护者和贡献者。而这种专业知识让我们具备了进行尽职调查和审查的能力。在这里,您可以防御放弃软件、拼写错误劫持和星盗等问题。

我们的软件包是从源代码构建的,这一点非常重要,因为源代码是可验证的起点。我们使用最佳实践构建软件包,这由专业工程师完成。我们的构建系统实现了纵深防御。这意味着我们有多个防御层:硬件、软件和多个人员。因此,这使得攻击者更难入侵我们。

我们的二进制文件在发布之前会进行分段和签名。发布后,它们将发布到由 Anaconda 管理的资源库中。换句话说,不是任何人都可以上传任何他们想要的东西。从那里,您可以镜像到您的私有资源库,它可以驻留在云端或本地。

您还可以应用自定义过滤,例如使用 CVE 阈值和许可证过滤器。这就是纯 Anaconda 技术栈的样子。

[15 分钟] 接下来,让我们看一下第三方的供应商工具进行比较。第三方供应商工具的问题在于,它们实际上只在供应链的尾端出现。这就是我们看到所有这些红色的“N/A”的原因,因为它们只是对这些早期环节不做任何处理。

典型的起点将是资源库。但资源库的问题在于,它们只有在其服务的软件包一样好。因此,如果您从社区资源库镜像软件包,而这些资源库本身就表示它们不安全,那么这并不会创建一个安全的供应链。更复杂的是,此阶段生命周期的软件处于二进制形式,很难对其进行软件组成分析;很难检查。因此,我们从不干净的地方开始,然后我们将尝试使用 CVE 扫描程序等工具进行过滤清理。

但正如我们将在接下来的几张幻灯片中看到的那样,第三方的 CVE 扫描程序不可靠。因此,这种从不干净的地方开始然后尝试进行过滤清理的一般方法将不会产生良好的结果。

那么,这是否意味着您不应该使用第三方工具?如果您已经在使用第三方工具,这是否意味着您需要重新设计整个架构?

不;这里有一个您可以使用的混合解决方案。您可以从 Anaconda 的所有安全环节中获益,如果您从我们的公共资源库镜像到您的私有第三方资源库并从那里使用软件包,那么您将拥有一个安全的供应链。

因此,Anaconda 在保护这些环节的每一个环节方面都非常谨慎。我们还希望将相同的谨慎应用于链条中的最后一个环节,即软件实际安装到您的系统上时。这就是 conda 签名验证的用武之地。

因此,conda 签名验证是我们对内容信任的实现,这是一种确保软件不受篡改且与我们在安全网络上构建的软件完全相同(无论传输介质如何)的机制。那么什么是传输介质?在大多数情况下,这将是互联网或 HTTPS。

但对于对安全性极其敏感且不信任互联网的客户,我们可以为您运送一个驱动器。具体来说,当您执行 conda install 时,将有一条明确的消息表明该软件包和元数据已由 Anaconda 签名,并且可以信任。

CVE 的重要注意事项

因此,我们已经保护了我们链条中的每一个环节。但即使如此,软件也可能存在漏洞,其中一些漏洞将是安全漏洞。这就是 CVE 的意义所在。CVE 代表常见漏洞和披露,它是识别和编目安全漏洞的一种方式。我们从美国国家标准与技术研究院的国家漏洞数据库 (NVD) 开始,并执行我们内部的整理流程。

此流程的目的是完善 CVE 数据,以便我们可以为您提供准确的 CVE 报告。此流程的关键组成部分是人工整理。这是 Anaconda 工程师审查软件包及其关联 CVE 的地方。

您可能想知道,为什么是人工创建?为什么不自动执行整个过程?为了回答这个问题,让我们看几个例子。

因此,我们在这里左侧看到了来自 NIST NVD 的数据,结果发现这些数据是错误的。换句话说,存在数据质量问题。

因此,Anaconda 在右侧所做的是,首先,我们清除了 Python,因为它不受 CVE 的影响。我们添加了评论,解释了我们得出此结论的方式。我们还包括引用以支持我们的结论。

此信息很有用,因为如果您需要进行安全例外来引入 Python(您将需要这样做,因为 Python 是核心语言本身),那么拥有此信息将有助于您正确记录和证明您的安全覆盖。

在本例中,NIST NVD 并没有错误。但它们也不是完全正确的。这是因为 Anaconda 反向移植了一个补丁。换句话说,您从 Anaconda 获得的 libxml2 版本实际上并不暴露于 CVE。因此,这是一个我们能够提供独特洞察力的例子,因为我们实际上正在构建软件包。

[20 分钟] 因此,我们刚刚看到的两个例子是相当详细的例子,但它们是误报如何发生的例子。误报是错误的警报。这些误报似乎只是一个噪音,但实际上,它们确实会产生现实世界的影响。根据我们与客户资源库合作的经验,我们发现,审查误报需要花费大量时间,轻松达到 33 周。这相当于超过半年的生产力损失。

此外,我们还必须考虑心理学和用户行为。如果我们不断发出错误的警报,人们会感到警报疲劳并忽略我们。正如伊索寓言中关于狼来了的男孩告诉我们的那样,当真正发生不好的事情时,这将是一个问题。好消息是,借助 Anaconda 的 CVE 整理功能,我们为您消除了这些负担。

误报:盲点和错误的安全感

您在 CVE 中会发现的另一类问题是误报。当安全扫描结果显示干净时,这并不是因为没有问题,而是因为无法检测到问题。这是危险的,因为它会造成错误的安全感。我们的研究发现,即使是最流行的第三方 CVE 工具也不能正确扫描已编译的软件包。

那么什么是已编译的软件包?这些是使用 C++ 和 Fortran 等语言构建的库。一些例子包括 NumPy、pandas、PyTorch 和 TensorFlow。这些软件包是 AI、机器学习和数据科学的重要组成部分。因此,无法正确扫描此类软件包是一个非常重要的安全盲点。

那么为什么二进制文件难以扫描呢?原因是,为了使源代码转换为可调用库或可执行二进制文件,它必须经过一系列转换:编译、链接和剥离。而这一系列转换并非绝对可逆的。

例如,当您剥离一个符号名称时(符号名称可以是函数名称),该删除是最终的。一旦它消失了,它就消失了。因此,转换并非绝对可逆。这就是为什么很难确切地知道二进制文件包含什么内容的原因。

直观地,在左侧,源代码是人类可读的。但在右侧,这就是二进制文件的样子。正如您可以想象的那样,检查它并试图找出其中可能嵌入的恶意软件或安全漏洞很具有挑战性。

事实上,一些第三方 CVE 扫描程序甚至不尝试查看这些二进制文件内部,因此它们只进行浅层扫描。更高级的扫描程序可能使用启发式方法。启发式方法是根据经验得出的推测,但推测毕竟只是推测。这就是我们看到第三方 CVE 扫描程序性能不佳的原因。

那么 Anaconda 如何处理这个问题呢?我们实际上通过从供应链的更上游开始,如我们所见,从源代码构建软件包,从而绕过了这种逆向转换问题。换句话说,我们确切地知道用于生成哪个二进制文件的源代码,因此可以明确地识别该二进制文件中的组件。

我们无需依赖启发式方法,也不需要猜测。我们将该组件列表与我们精心策划的 CVE 数据库进行交叉引用,并生成准确的 CVE 报告。因此,这实际上是 Anaconda 的一项独特价值主张,因为我们从软件包生命周期的最初阶段就开始着手,确保每个环节的安全,并从初始阶段到安装的整个过程中跟踪每个环节。这就是我们能够保证您对软件包来源的信心,并为您提供独特的安全见解的方式。

您可以做些什么:最佳实践

以上是对 Anaconda 功能的概述。接下来,让我们谈谈您可以做些什么。

[25 分钟]以下是一些最佳实践。

1. 保护整个链并左移。 这张幻灯片上有两个习语。第一个是“链条的强度取决于最薄弱的环节”。而且环节不是可替代的。人们经常犯的一个错误是,认为一个强链接可以弥补弱链接。这实际上是一个常见的错误。

一个具体的例子就是代码库。您可以购买最昂贵、最精致的代码库,但代码库的价值取决于它提供的软件包。因此,如果您使用您的高级代码库从不受信任的来源进行镜像,那么这并不会创建一个安全的供应链。这会让您容易受到攻击。因此,一个强链接实际上不可能弥补弱链接。这就是为什么确保链条中每个环节的安全至关重要。

另一个习语是“预防胜于治疗”。您在这里右侧看到的是一个被入侵的系统,它包含大量部署。清理被入侵的系统既费时又昂贵,更不用说违规本身的影响了,这可能包括数据丢失和声誉受损。因此,我们要做的是回到供应链中的早期环节,并采取预防措施——换句话说,从一开始就防止这种情况发生。这就是我们所说的“左移”。

2. 用纵深防御来应对不完美。 现实情况是,安全工具存在漏洞。我们已经做了很多研究,并且一直在继续研究,我们还没有找到一个没有缺陷的 CVE 扫描器。那么您该怎么办?一个策略是通过组装互补的工具来降低风险。

这有时被称为“瑞士奶酪模型”。那么如何识别互补工具呢?您需要了解细微差别。例如,CVE 扫描器是通用的还是专门的?通用 CVE 扫描器的优点是,它们可以为多种不同类型的工件提供广泛的覆盖范围。但是,它们的准确性也并不高。

使用 Anaconda 的 CVE 解决方案,我们的专业领域和重点是 Python。这包括所有这些对人工智能、机器学习和数据科学至关重要的复杂编译软件包。因此,您需要了解不同工具的优缺点,才能弄清楚它们如何互补。

还需要注意的是,供应链是一个非常热门的话题,市场上有很多营销和炒作。因此,您必须成为一个有辨识力的消费者。例如,如果某个供应商推销一款声称可以保护您的供应链的工具,您需要了解:该供应商在供应链中的作用和有效范围是什么?例如,如果他们只提供 CVE 工具,但没有构建软件包,那么他们如何知道软件包是否已修补?

如果他们不知道软件包是否已修补,那么他们如何为您提供准确的 CVE 报告?同样,如果供应商不管理 CI/CD 系统(这是用于构建软件包的系统),那么他们将如何保护它?如果一个人不是流程的一部分,他们如何保护它?

因此,在您评估市场上的各种工具并设计安全人工智能架构时,这些是您需要了解的答案的一些关键问题。

关键要点

随着人工智能变得越来越重要,保护其供应链也变得越来越重要。这不仅是因为人工智能的重要用例,还因为随着 Python 部署的增长,潜在攻击的攻击面也会随之扩大。因此,保护您的 Python 组件供应链变得越来越重要。

世界一流的组织信任 Anaconda 作为最佳解决方案。因此,请利用 Anaconda,因为我们提供的是人工智能的可靠构建块——这样您就可以专注于您的战略差异化。

就是这样。我们希望本课程对您有所帮助。如果您想了解更多信息,请联系我们。感谢您的收看。

联系专家

联系我们的专家,为您的 AI 之旅找到解决方案。

联系专家