软件依赖性:全球大型攻击背后的无声杀手

122 阅读5分钟

为什么要加强管理依赖项

近年来,像Node.js中的npm和Java中的Maven这样的依赖管理器的使用更加方便,允许开发人员在他们的软件项目中包含许多小的软件包。现如今,许多软件项目包括数百甚至数千个第三方库,所有这些库都成为主软件程序的依赖项。

然而,依赖关系所产生的风险往往被忽视。将外部软件作为依赖项使用意味着依赖其开发人员正确地编写、测试和维护代码。除了这些程序的依赖关系中可能存在的安全漏洞之外,它们还可能过时,降低使用它们的软件项目的质量,甚至导致故障和停机。使用的依赖项越多,使用者面临的风险就越高。

软件依赖性:全球最大攻击背后的无声杀手

SolarWinds

针对SolarWinds的网络攻击可能是第一次全球规模的供应链攻击。Novellium组织获得了由SolarWinds产品管理的数千个网络,系统和数据的访问权限。该攻击始于 2020 年,但直到 2021 年底才被发现。

在这次攻击中,黑客将恶意代码(称为SUNBURST恶意软件)注入SolarWinds Orion系统,该系统是许多大型企业(包括美国政府机构)使用的流行IT管理系统。他们的方法不是直接入侵这些网络,而是针对Orion - 一个安全措施不那么严格的第三方,可以访问这些大型组织。

黑客渗透了SolarWinds的开发系统,并创建了Orion平台的恶意构建,创建了一个后门,允许黑客访问和冒充SolarWinds客户的用户和帐户。该恶意软件可以访问系统文件并渗透到 SolarWinds 客户的合法活动而不会被防病毒软件检测到,因为 SolarWinds 本身就是受信任的软件产品。

Log4j

Apache Log4j项目是分布广泛的开源软件之一,它为Java应用程序提供了日志记录功能。

Log4j漏洞一开始是一个bug,但后来演变成一系列安全问题,其根本原因是Log4j的Java命名和目录接口(JNDI)接口存在漏洞。

2021年,在多个软件版本中发现了CVE-2021-44228远程代码执行(RCE)漏洞。RCE缺陷是由于Log4j与JNDI交互时没有正确验证所有请求。这意味着获得日志消息访问权的攻击者可以注入恶意消息,允许在易受攻击的系统上执行任意代码。

NIST 国家漏洞数据库将 CVE-2021-44228 评为 10.0,这是通用漏洞评分系统中可能的最高严重性分数。在发现该漏洞后的几天和几周内,记录了数十万次攻击。

Kaseya

2021 年,许多托管服务提供商 (MSP) 及其客户成为 REvil Group 勒索软件攻击的受害者,导致1,000多家公司长时间停机。

攻击的重点是虚拟系统管理器(VSA),这是Kaseya开发的远程监控和管理软件包。软件中的身份验证绕过漏洞可能允许攻击者破坏VSA并通过软件控制的主机分发恶意有效负载。

该公司当时关闭了其VSA云和SaaS服务器,并向所有客户(包括使用VSA本地服务的客户)发布了安全建议。

解决软件依赖性风险的 4 个技巧

1. 理清映射依赖关系

只有在知道依赖项的位置时才能进行优化。有许多工具可以帮助进行依赖关系映射,包括专用的应用程序依赖关系管理(ADM)解决方案和自动构建工具。这些工具有助于在整个构建和部署过程中详细跟踪软件依赖关系。

映射依赖关系提供了对漏洞的可见性,并提供有关在代码中使用依赖项的位置以及如何以及何时调用依赖项的重要见解。另一个影响是对数字取证工作的影响——识别依赖关系对于理解和缓解针对复杂软件系统的网络攻击至关重要。

2. 消除不必要的依赖关系

考虑应用程序如何使用第三方库和组件非常重要。一个应用程序可能只使用广泛实用程序库的功能或特性的一小部分。另一个应用程序可能包含许多较小的组件。消除应用程序不主动使用的任何依赖项。对于那些被积极使用的依赖项,考虑如何合并依赖项,并避免将依赖项包含应用程序未使用的附加功能。

3. 使用已建立的存储库

一些环境,如Linux,Java,Ruby和Python,已经建立了自由和开源组件存储库。如包括用于JavaScript的npm,用于Java的Maven和用于Ruby的gem包管理器。开发人员可以轻松地从这些存储库下载包,并将其包含在项目构建中。

虽然这种方法可以支持更标准化的开发环境,并减少缺失、过时或不兼容依赖项的影响,但它不能绝对保证质量或安全性。即使是已建立的存储库也可能包含过时的、易受攻击的甚至恶意的软件包。

4. 扫描所有依赖项

自动化工具可以扫描第三方依赖项并识别风险,包括安全性和合规性问题。用于此目的的最常见技术是软件组合分析(SCA),它提供软件物料清单(SBOM),其中详细说明了代码中包含的直接和传递依赖项。SCA通过根据公开可用的漏洞数据库检查第三方库来检查安全问题。

此外,静态应用程序安全测试 (SAST) 可以扫描实际源代码以查找已知漏洞或存在风险的缺陷。应该认真对待来自SCA、SAST或类似工具的高优先级警报,删除或替换有问题的包。

来源:

resources.infosecinstitute.com/topic/softw…