您的位置:  首页 > 技术杂谈 > 正文

供应链攻击:保护软件供应链的 6 个步骤

2022-02-28 00:00 https://my.oschina.net/u/4518172/blog/5465487 丢丢哎 次阅读 条评论

 

来源:云原生技术爱好者社区

作者:MACKENZIE

本文着眼于软件供应链攻击,它们究竟是什么,以及您可以遵循的 6 个步骤来保护您的软件供应链并限制供应链攻击的影响。

在过去几年中,我们看到软件供应链攻击大幅增加。什么是供应链攻击?这是一种网络安全攻击,攻击者将恶意代码或组件放入受信任的软件或硬件中。这种攻击的目标是能够渗透到受影响组件链下游的组织。

在最近的历史中,供应链攻击的重点一直是受损的硬件,但随着一些引人注目的事件发生,我们已经看到话题转向了软件。本文将专门研究与软件相关的供应链攻击,并使用最近的示例来展示公司可以采取哪些措施来保护自己免受此类攻击。

一、软件供应链

要理解这种类型的攻击,我们需要熟悉当今应用程序不是单一软件的概念。它们由数百个构建块、开源库和包、SaaS 工具、DevOps 系统、云基础设施等组成。这变得更加复杂,因为这些构建块中的每一个也是由许多不同的构建块构建而成的。如果您分层考虑这一点,一个软件可能有数百层深,每个组件都有依赖关系,直到您一直深入到 CPU 指令集。您经常会听到开发人员使用的一句话,“全都是乌龟”。这是一个描述无限回归问题的表达,指的是海龟无限地站在对方的背上。转化为软件,我们在软件供应链中面临的一些问题和对与软件供应链相关的无限范围问题的看法。

“世界每天都在变得越来越互联,但在安全方面,我们的行为不像它的互联”

使供应链攻击如此令人担忧的是,受其影响的组织往往无力阻止它。您可以控制源代码,可以控制您选择使用的组件和工具,但几乎无法控制他们依赖的组件和工具。如果您承认 100% 安全或“不可破解”是不可能的,那么即使您非常小心地处理软件供应链中的元素,您也永远无法消除供应链攻击的风险。但是,您可以降低风险,在本文中,我们将介绍您可以采取的 6 个步骤来限制此类攻击的风险和损害。

以下是供应链中多个攻击面的示例:

(供应链中多个攻击面的示例)

我们想要一个完全免疫的供应链,但实际上它是不存在的。

二、供应链攻击的最新例子

有许多不同类型的软件供应链攻击针对不同的组件以在组织中立足。为了更好的理解,我们将查看最近三个不同类型的此类攻击的示例。

2.1 SolarWinds - 通过具有特权访问权限的受信任系统进行攻击

(SolarWinds 供应链攻击)

如果不提及 SolarWinds 攻击,那么就无法撰写关于供应链攻击的文章。它已成为它们所代表的危险的典型代表。在 SolarWinds 的案例中,攻击使用了具有提升权限的 IT 基础设施监控. 这种攻击是最糟糕的情况之一,受感染的系统不仅被数以万计的高端客户端所使用。

例如在军队和政府内的其他领域,名为 SolarWinds Orion 的目标早在 2019 年 9 月就遭到入侵,因为该软件在网络上具有管理员级别的访问权限,所以可以随意进行软件安装。攻击者用于测试漏洞的第一批代码痕迹于 2019 年 10 月被注入。直到 2020 年 2 月,被称为 Sunburst 的恶意代码才被注入, 被注入到 Orion 软件中,并于 3 月开始部署到其 18,000 名用户。

Orion 代码中的 Sunburst 攻击为攻击者提供了进入 SolarWinds 客户的后门,其中一些受影响的客户包括国土安全部、国家商务和财政部、FireEye、微软、英特尔、思科和德勤等。

通过以 SolarWinds 软件为目标并利用安全漏洞(仍在争论中),攻击者能够访问世界上一些最受保护的组织。其中许多组织被认为是“不可入侵的”(尽管任何称职的安全专家都会告诉您这是不可能的),或者至少拥有最先进的安全保护措施。但是,通过利用他们拥有特权访问权限的部分供应链,他们能够渗透到这些不可攻击的组织中,并在很长一段时间内不被发现,从而绕过防御点。

2.2 Codecov - 通过软件部署和测试工具进行攻击

(CodeCov 供应链攻击)

接下来,我们将研究软件部署工具中的攻击,特别是 CI/CD 环境。如果您不熟悉 CI/CD(持续集成/持续部署)流程,我可以进一步进行解释,它是一个可以在软件自动部署之前进行自动测试的过程。这已成为软件供应链的基本组成部分,组织利用许多不同的工具来测试他们的软件,这通常发生在每次将新代码推送到代码存储库的生产分支(以及其他分支)时。

Codecov 再次被成千上万的客户使用,这是一种代码覆盖工具,可让用户了解在 CI 环境中测试了多少应用程序。由于此工具位于 CI 环境中,因此它可以访问应用程序在测试时使用的机密(或凭据)。例如,它需要访问数据库、第三方服务和代码存储库,以便测试应用程序。

在 Codecov 的例子中,攻击者首先能够访问 Codecov 的私有代码库,并将恶意代码注入到他们的源代码中。这个恶意代码只有一行,做了一些非常简单的事情:它获取 CI 环境中的机密(例如 git 令牌)并将它们发送到攻击者的远程服务器。或者更简单地说,它将用于构建和测试应用程序的凭据提供给攻击者。这允许攻击者访问许多 Codecov 客户的私有代码存储库,包括 Twilio Rapid7、HashiCorp 和 Monday.com 等。私有代码存储库已成为攻击者的高价值目标,因为它们通常包含包括机密在内的敏感信息。在某些情况下,通过正确的访问,攻击者甚至可以使用这些令牌注入恶意代码。

2.3 EventStream - 通过软件依赖进行攻击

(开源依赖供应链攻击)

在最近一次供应链攻击的最后一个示例中,我们将研究开源依赖项。几乎所有现代软件应用程序都使用开源依赖项。Synopsys 的一项研究表明,91% 的现代应用程序实际上是开源代码。能够使用这个开源代码非常有帮助,因为这意味着工程师不需要为他们构建的每个应用程序重新设计组件,而是可以专注于它们的独特价值。如果攻击者可以破坏下游依赖项,那么他们就可以实现初始访问的关键步骤。

EventStream 就是一个很好的例子。这个包是一个工具包,可以让流在 Node.js 中更容易实现,它非常受欢迎,被数以百万计的应用程序使用。但是,这个 EventStream 本身有依赖项,包括一个名为 Flatmap 的模块。在这种情况下,攻击者伪装成 FlatMap 的维护者并最终获得了开源模块的所有权。攻击者随后将恶意代码注入模块,将其变成攻击下游用户的武器。它还为他们提供了进入 EventStream 并最终进入 EventStream 用户的后门。因此,攻击者能够通过破坏依赖项的依赖项来访问目标用户。

三、如何防止供应链攻击

现在我们了解了供应链攻击可能发生的一些不同方式,让我们看看我们如何加强我们的供应链并保护自己免受攻击。这些类型的攻击的困难在于,虽然您可以采取措施保护自己,但很多时候您仅仅是一名乘客而已。

3.1 仅在您的应用程序中使用受信任的依赖项

在选择在您的应用程序中使用哪些依赖项和模块时,您必须确保您使用的软件:

  • 维护良好,持续跟踪更新记录,这可确保对发现的任何漏洞进行研究并更新补丁。它还降低了恶意维护者注入恶意代码的风险。

  • 拼写错误!有一种称为类型占用的攻击,其中恶意行为者会拼错流行的开源依赖项,通常,该模块将执行与原始模块相同的工作,因此不会引起怀疑,但具有额外的好处恶意代码也是如此。

3.2 扫描开源软件的已知漏洞

开源扫描或 OSS 软件(如 Snyk 或 WhiteSource)是强化供应链的基础。该软件将搜索您的软件包使用的依赖项,并将它们与易受攻击的软件包和版本的广泛数据库进行比较,以查看您的应用程序是否存在任何已知漏洞。如果某个依赖项存在已知漏洞,尤其是被归类为严重漏洞的漏洞,那么在许多情况下,这些包甚至可以自动将其更新到最新的安全版本。但是,如果没有可用的更新,那么使用不同的模块或包非常重要,因为这表明该软件不再维护。

3.3 智能修补(通常不是立即)

如果您曾经阅读过安全文章,通常您会在其中看到一条说明,告诉您定期更新或修补系统。这当然是有道理的,您需要最新版本,以便确保发现的任何漏洞都不再是威胁。虽然这是真的,但这并不意味着您应该立即更新。这听起来可能违反直觉,但如果我们看看本文中的所有示例,它们的一个相似之处是如果用户没有立即更新,他们就不会受到影响。现在,在你对着屏幕大喊大叫之前,我不是主张我们不打补丁,或者不定期打补丁,但我们需要对此进行思考,不要盲目修复漏洞。

来自 Snyk 的开发者倡导者 Liran Tal 表示,发现、报告和修补漏洞大约需要 60 天的时间。

这与本文给出的示例一致。因此,考虑到这一点,您需要创建一个智能补丁策略,如果在相关系统中发现安全漏洞,您将立即更新到最新版本,否则请遵循初始等待期。

3.4 细分您的网络

如果攻击者可以通过供应链攻击访问您的组织,他们将希望快速进入您网络的不同区域。网络分段是在发生攻击时限制爆炸半径的有效方法。它是指将一个较大的网络划分为较小的子网络,它们之间的互连性有限。通过控制各个子网络之间的流量并限制攻击者的横向移动,网络分段可防止未经授权的用户访问组织的数据。对网络进行分段的一些常见方法包括:

  • VLAN 网络分段:这涉及在具有 VLAN 或子网的网络中创建分段,使用 IP 地址进行分区。

  • 防火墙分段:网段内的防火墙限制攻击面并防止威胁传播。由于这种方法需要数千条防火墙规则,因此给系统带来了相当大的复杂性和成本。

  • 使用软件定义网络进行分段:基于 SDN 的网络分段支持更高的自动化和可编程性。但是,它较少关注安全可见性,而更多地关注网络策略实施。

  • 微分段:该技术使用主机工作负载来实施分段网络,并使用白名单模型来阻止除允许之外的所有流量。

3.5 实现高级认证和最小权限

安全中有一个概念叫做零信任。这意味着仅仅因为某人拥有身份验证凭据,我们仍然不信任他们。这方面的示例包括使用多因素身份验证和限制可以访问系统的 IP 地址。在供应链攻击中,我们希望限制攻击者最终拥有的信任程度,使用零信任原则实施强身份验证,以阻止攻击者的追踪。

确保我们使用最少访问原则也很重要,这意味着用户和服务对额外数据和服务的访问量只有最低限度。因为攻击者可以从受信任的系统发起攻击,通常即使使用零信任原则,我们也无法完全检测和阻止他们,但是,我们可以限制他们可以访问的信息量。

3.6 确保你的仓库没有密钥

通过这些类型的攻击瞄准代码存储库和备份服务器已成为攻击者的经典策略。这正是 Codecov 攻击者针对 git 存储库的情况。这是因为这些是为攻击者寻找凭据以验证自己并深入组织的完美初始访问点。我们必须确保这些系统没有攻击者可以使用的敏感信息。

一个简单的事实是,即使我们采取一切预防措施并实施最佳实践,我们也无法始终防止供应链攻击,因此我们必须确保不会给攻击者留下任何礼物。使用像 GitGuardian 这样的秘密扫描工具是必不可少的,他们将对存储库进行完整的历史扫描,包括它们的历史记录,并继续实时扫描,以确保您在这些 git 存储库中永远不会有任何密钥。

四、总结

供应链攻击一直在急剧增加,一个简单的事实是,没有人能幸免于难。用于构建应用程序的分布式架构为攻击者提供了绝佳机会,可以同时针对数百甚至数千个组织。这一转变彻底改变了攻击者的经济状况,与针对单个公司相比,他们现在可以分配更多的资源来针对供应链。

虽然不可能没有成为供应链攻击受害者的风险,但我们可以实施一些最佳实践来降低成为受害者的风险以及在攻击期间造成的潜在损害。

展开阅读全文
  • 0
    感动
  • 0
    路过
  • 0
    高兴
  • 0
    难过
  • 0
    搞笑
  • 0
    无聊
  • 0
    愤怒
  • 0
    同情
热度排行
友情链接