3个隐含受信任基础设施的领域,可以导致供应链妥协

Solarwinds. 妥协 2020年12月,随后调查其构建服务将散光投向供应链攻击。这已由组织产生重新兴趣以重新评估其供应链安全姿势,以免成为下一个Solarwinds。但是Solarwinds只是最近的供应链攻击中的一个。

供应链妥协

为了更广泛地了解组织的反对,让我们来看看在2021年第一季度发生的三个主要供应链妥协。这些供应链攻击中的每一个都针对您可能或可能的不同基础设施 - 基础设施不要关注组织中的潜在目标。

1.通过软件包存储库蹲下蹲

2021年2月,研究员 Alex Birsan. 利用隐式信任开发人员拥有软件包存储库。通过查看包含私人软件包名称的公共软件存储库,Birsan能够确定Apple和Microsoft等公司对私人存储库托管的某些团队具有内部软件包。通过向公众存储库上传与较高版本号的同名包 - 一种称为“包蹲”的攻击 - Birsan能够在这些公司内部运行代码。

通过其本质,软件开发需要使用外部包装。在系统级别,这将显示为API,例如Microsoft Windows CreateProcessa..

随着我们从系统编程到脚本语言的抽象(例如NodeJS,Python和Ruby),我们开始看到可以通过相应包存储库安装的更多公共,开源,社区托管包(NPM., PYPI., 和 rubygems.)。

大多数开发人员在这些来源中的信任包并在自动构建过程中使用它们以及开发软件时使用它们。这为攻击者提供了机会 略微误导 包装作为恶意代码的递送机制。

防止包装蹲在包装签名

保证我们从合适的人员收到正确的包裹的最佳方式是一个加密签署的包,由包维护者的公钥核实。

不幸的是,大多数主要语言存储库实施 什么都没有。只有一些存储库级签名(其中存储库本身签署包),一些提供作者级签名(作者执行签名),并且更多缺少任何类型的包在某些基本校验和之外签名(其中代码通过散列算法运行,并通过哈希验证下载。

如果没有包裹签名,那么攻击这些包装问题的下一个最佳方法都在当地环境中。您可以操作内部包镜像并验证代码,然后请引导软件开发周期中使用的软件包版本。这消除了在本地镜像中不存在的包裹不正确的包中蹲下的潜力,并消除Birsan发现的版本问题,其中将自动举动新版本。

不幸的是,我们仍将确认包裹来自正确的来源的问题,但至少这消除了攻击者的低悬挂水果。希望在未来,更多语言的包裹经理将开始包含作者级签名,因此可以验证包构建。

2.通过版本控制系统进行恶意

在2021年3月,在来自Nikita Popov和Rasmus Lerdof的幌子下,两个恶意提交被推到PHP GIT储存库,这是PHP项目的两个公认贡献者。两个开发人员确认他们的SSH凭据没有受到损害。
唯一的其他答案可能是PHP项目运行的自托管Git服务器遭到泄露,并且伪装成已知成员的攻击者将恶意代码插入代码库。稍后 出来 攻击者最有可能陷入转储服务器的数据库,并获取基于HTTPS的GIT访问的用户名和密码。

版本控制系统是现代软件开发的另一个重要组成部分:校验并存储所有代码和对该代码的更改的位置。最常见的是git,但还有其他人 梅里利亚SVN.。它们现在耦合与连续集成管道的自动构建系统以及有时也进入自动部署。

在SolarWinds的情况下,猎户座构建管道是攻击者所针对的是,它们可以将它们的恶意DLL注入代码库。写入后的自动化管道仅偶尔修改,因此为攻击者提供了一个很好的位置,将自己注入软件开发生命周期。

此外,版本控制系统是必须检查任何恶意代码的位置,因此是对任何对手的基本依赖性,这些都希望损害公司的软件管道,并利用该公司用户的隐式信任。

通过签名的提交停止恶意提交

一旦服务器托管了软件存储库,遭到泄露,攻击者就可以在该计算机上与存储库上的存储库执行任何内容,如果存储库的用户未使用 签署git提交.

签名提交就像来自包存储库的作者签名软件包一样,但为各个代码更改级别带来了该身份验证。为了有效,这需要存储库的每个用户来签署其提交,这是来自用户透视图的重量。 PGP不是最直观的工具,可能需要一些用户培训来实现,但它是安全的必要权衡。

签署的提交是验证提交来自原始开发人员的唯一方法。如果您想防止伪装成开发人员,这种实施的用户培训和不便是必要的不便。这也将立即使PHP项目的存储库的基于HTTPS的提交。

经常运行审计和代码评论

但是,签名的提交不可否认缓解所有问题,作为具有存储库的受损服务器,它可以允许攻击者在提交过程中将自己注入几个位置。 git有概念 服务器端挂钩 这允许使用预接收和后收据提交对代码的各种修改。

如果服务器具有自动构建过程,因为SolarWinds Orion Server具有,这也是攻击者实现其变化的优秀场所。当构建服务器签入代码时,运行测试,并自动构建释放工件,生成许多额外的额外,可以插入恶意代码。

此外,版本控制系统通常存储手头项目的开发人员工具。这可以被攻击者利用(正如我们与今年1月的安全研究人员所看到的朝鲜集团)。他们的攻击使用了 Microsoft Visual Studio构建文件 并通过研究人员将他们置于他们的信任,以纠正恶意代码。这种排序的攻击可以很容易地转换为存储在存储库中的开发人员工具,例如将击败攻击者控制库中的恶意生锈货物文件。

防止这一点的最佳方法是运行存储库中所有更改的审核和代码审查,并在任何开发人员工具或构建自动运行代码运行的基础架构的更改中设置警报。如果开发人员没有向团队传达更改,那么它是时候仔细审查这些更改。

3.通过TLS证书进行中间人攻击

2021年1月,MIMECAST通过Microsoft了解他们的TLS证书之一的私钥是 作为Solarwinds事件的一部分妥协。根据MiMecast的情况,这一受损证书由其36,000名客户的10%用于与Microsoft 365交换到其服务建立加密连接。

TLS证书以互联网通信称为SSL证书,为Internet提供加密的骨干。许多人不知道的是,它们通常用于身份验证作为TLS握手的一部分:服务器通过提及用户可以用于验证的证书颁发机构(CA)来向客户端证明其真实性,以便验证该证书颁发机构(CA)真实性。

在浏览器的情况下,大多数用户每天通常使用TLS的情况下,来自这些CA的证书在本地存储并根据证书来自服务器的情况检查。要建立安全连接,在验证证书后,客户端将使用服务器的公钥发送加密随机数,只有服务器可以使用其私钥解密。这些私钥必须保持安全保护,以保护连接 - 否则任何人都可以在客户端和服务器之间的连接上窃听。

TLS证书的妥协是没有新的并且存在大问题,可能是加密供应链中最大的问题之一。 CAS是一个失败的单点,并且具有安全妥协的历史。主要攻击如 Diginotar Breach. 或者通过CA Certinomis进行了未经授权发布测试证书[。] COM(其中导致其 信任被Mozilla拉不幸的是一年一度的事件。

保护证书妥协

选择一个可靠的证书颁发机构,并确保您的私钥仅由您生成。 TLS 1.3为所有TLS会话提供了完美的前锋保密。这意味着即使攻击者会妥协证书,它们也无法访问使用该证书加密的任何过去的会话的数据。这是保护任何先前通信的主要特征。

不幸的是,在更频繁的证书旋转之外,没有大量的其他可以在更频繁的证书旋转中完成,以确保如果证书泄露,则在一次年内不用于中间人攻击。这就是为什么2020年,苹果,谷歌和Mozilla都宣布了一个 可信证书的一年最大证书年龄 强制服务器管理员更快地旋转证书。出于类似的原因,让我们只加密优惠 90天证书生命周期.

即使在实现内部项目和身份验证的自签名证书时,您应该遵循这些简短的证书生命周期指南。工具喜欢 Hashicorp的金库 用于管理您的证书存储和证书生命周期可以提供帮助。

结论

供应链巨大,这绝不是潜在问题的全面列表。一种 威胁建模 您组织内的练习可以为您提供更强大的弱势基础设施,通常被忽视。采取集中查看您在构建或制造过程中使用的供应商和开源软件的隐式信任关系,您可能会发现信任被取代安全性的许多领域。

分享这个