注意你的依赖:防御恶意的npm包
JFrog引入了3个新的OSS工具,用于检测和防止恶意npm包的使用

现代软件项目大多由开放源代码组成。谁真正控制这些代码,并负责检测和修复的问题软件供应链安全问题,在被发现后成为人们关注的重要来源Log4Shell脆弱性.
在最近的发展中,非常受欢迎颜色和假NPM包被他们的维护者故意破坏了.开发人员Marak Squires引入的更改使这些包变得无用,并导致使用其中一个包的应用程序挂起。虽然引入的故障本质上是表面的,造成的损害在原则上仅限于修复大量无法操作的工具的紧急需要,但这个场景展示了一个更深层次和更令人担忧的问题。同样容易的是,开发人员也可能引入恶意代码,这些代码将在数十万台已知下载了错误版本的软件包的机器上执行。
令人深感不安的事实是,在许多情况下,新代码可能会从存储库中提取出来,在项目中使用,并在机器上执行,而开发人员几乎看不到这种方式。对从公共存储库获得的代码的信任深深植根于许多包管理器中,但是这种信任可能是错位的。这一事件向我们表明,多年来建立起来的信任是如何在某一天被打破的,因此,即使是一个健壮的软件包的新版本也不能被信任。
npm包安装的潜在风险
为了说明在现代开发方法中可能引入的风险,让我们检查一下安装npm包的过程,看看这是如何导致应用程序无意中从npm注册表中提取恶意包的。
在项目中强制使用特定版本的npm依赖的常用方法是使用package-lock.json文件,该文件指定库允许的版本。我们强烈推荐使用包锁。Json,并尽可能指定确切的依赖项版本。然而,一个鲜为人知的事实是,当前的npm安装程序在全局安装一个包时(npm运行- g或全球)—不支持包锁。Json文件,并将愉快地下载任何包依赖项的最新可用版本,根据在package.json文件。这就是为什么用户发现他们的应用程序使用了被劫持的颜色包尽管他们确信自己受到package-lock.json的“保护”。
在没有首先验证的情况下安装任何npm包(依赖)的最新版本可能是危险的,不仅因为它可能是恶意的(例如,如果包在其最新版本中被劫持,如faker和colors的情况),还因为它可能破坏使用依赖的代码(例如,由于依赖的最新版本中的API更改)。
用于npm包的新发布的OSS工具
针对这些情况,JFrog安全研究团队发表了文章三种OSS工具旨在检测和防止可能有问题的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提供了专门为这种场景设计的收缩包装方法。npm-secure-installer自动化安全方法—在执行安装之前验证包是否具有npm-shrinkwrap清单。
这个工具可以用来代替npm安装为了保护开发人员的工作流程。 - package_issues_history:一种试验性工具,旨在监视有问题的包更新,以便在发现某个包版本引入了破坏性更改之前找到它们。破坏性的/恶意的更改可以以不同的方式发生,除了极端(可能很少)的情况外,很难为此类更改定义一个不会被良性更改触发的规则。似乎包中的破坏或恶意更改的唯一确定结果将是依赖于它的包出现问题。在实验代码中实现的建议方法是在版本更新后的几天内跟踪依赖于给定包的项目中产生的GitHub问题。对于一个足够流行的库,相关项目的数量可能足够大,以至于由突破性更改导致的剩余问题相对于与更改无关的“背景”问题来说将非常重要。在下面的图表中,颜色包及其依赖项的问题生成率明确地告诉了一些重要的信息,即哪个版本更新比其他版本更新问题更多。

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