注意你的依赖:防御恶意的npm包
JFrog介绍了3个新的OSS工具来检测和防止恶意npm包的使用

现代软件项目大多由开源代码组成。问题是谁真正控制这些代码,并负责检测和修复软件供应链安全问题,在发现后成为人们关注的重要来源Log4Shell脆弱性.
在最近的发展中,高度流行颜色和伪NPM包被他们的维护者故意破坏.开发人员Marak Squires引入了一些改变,使这些包变得无用,并导致使用其中一个包的应用程序挂起。虽然引入的故障本质上是表面上的,并且造成的损害原则上仅限于迫切需要修复许多无法操作的工具,但这种情况表明了一个更深层次和更令人担忧的问题。同样容易的是,开发人员可能引入了恶意代码,这些代码将在成千上万台已知下载了错误版本的软件包的机器上执行。
令人深感不安的事实是,在许多情况下,新代码可能从存储库中提取,在项目中使用,并在机器上执行,而开发人员几乎看不到这种方式。对从公共存储库获得的代码的信任深深植根于许多包管理器中,但是这种信任可能是错误的。这个事件告诉我们,多年来建立和建立的信任是如何在某一天被打破的,因此,即使是一个强大的软件包的新版本也不能被信任。
安装npm包的潜在风险
为了说明现代开发方法中可能引入的风险,让我们来看看安装npm包的过程,看看这是如何导致应用程序无意中从npm注册表中提取恶意包的。
在项目中强制使用特定版本的npm依赖的常用方法是使用package-lock.json文件,它指定库的允许版本。我们强烈建议使用包锁。Json并尽可能指定确切的依赖版本。然而,一个鲜为人知的事实是,当前的npm安装程序-当全局安装一个包时(npm运行- g或全球) -不尊重包锁。文件中指定的依赖项将很高兴地下载任何包依赖项的最新可用版本package.json文件。这就是为什么用户发现他们的应用程序使用了劫持版本的colors包尽管他们确信自己受到package-lock.json的“保护”。
安装任何npm包(依赖项)的最新版本而不首先验证它可能是危险的,不仅因为它可能是恶意的(例如,如果包在最新版本中被劫持,就像faker和colors的情况一样),还因为它可能会破坏使用该依赖项的代码(例如,由于依赖项最新版本中的API更改)。
新发布的用于npm包的OSS工具
针对这些案例,JFrog安全研究团队发布了四个开源工具旨在检测和防止安装可能有故障的NPM包:
- package_checker:一种工具,提供指示是否可以信任给定包的特定版本。该工具寻找供应链攻击中使用的软件包的迹象,并可用于识别新发布版本的潜在风险。检查的条件包括:
- 版本号的显著差异(例如,从5.5.3跳到6.6.6,就像faker npm包的情况一样)
- 长时间未维护的包的更新
- npm中出现的版本与链接的GitHub存储库中的版本不一致,这可能表明有人隐藏了特定代码发布的事实
- 最近发布的版本,因为一个非常新的版本尚未审查,并可能包含恶意代码。
开发人员可以使用此工具在决定更新依赖项之前主动测试已使用包的新版本,或者由组织监视内部使用的所有新版本的包。
- npm-secure-installer的安全包装
npm安装,它将拒绝全局安装不包含npm-shrinkwrap锁文件。
的关键要求之一谷歌的SLSA是依赖的密封性——意味着依赖被锁定到一个不可变的引用。NPM通过使用包锁实现了这个目标。Json,在第一个文件中自动创建npm安装运行。然而,当使用npm安装全局工具时,npm不会从任何项目运行,因此不会使用任何包锁。Json文件,即使存在。值得庆幸的是,npm提供了专门为这种场景设计的shrinkwrap方法。npm-secure-installer自动执行安全方法-在执行安装之前验证包具有npm-shrinkwrap清单。
这个工具可以作为插入式的替代品npm安装以确保开发人员的工作流程。 - package_issues_history:一个实验性的工具,旨在监视有问题的包更新,以便在发现某个包版本引入破坏性更改之前找到它们。破坏/恶意更改可以以不同的方式发生,除了极端(可能是罕见的)情况外,很难为这些不会被良性更改触发的更改定义规则。似乎在一个包中被破坏或恶意更改的唯一确定的结果将是依赖于它的包出现问题。在实验代码中实现的建议方法是在版本更新后的几天内跟踪依赖于给定包的项目中产生的GitHub问题。对于一个足够受欢迎的库,依赖项目的数量可能足够大,因此由破坏性更改引起的剩余问题相对于与更改无关的“背景”问题将是重要的。在下面的图表中,colors包及其依赖关系的问题产生率明确地告诉我们哪些版本更新比其他版本更有问题。

请继续关注
我们相信这些工具是在正确的方向上迈出的一小步,它们突出了现代软件供应链面临的问题,同时也突出了解决这些问题的一些方向。除了为开发人员社区提供信息和开源工具来处理最新的软件安全威胁之外,JFrog还为开发人员和安全团队提供了先进的软件供应链安全功能JFrog x光.继续关注我们的x射线产品更新,包括高级检测恶意软件包。