JA_NPM

NPM 洪水案例研究:“掉进兔子洞寻找茶”

At 西吉尼,过去一年来我们一直忙于实施一个全面的系统,监控公共开源软件包注册表中是否存在可疑活动或固有恶意代码。

该基础设施使我们能够实时分析每天发布的所有软件包。此外,它还使我们能够监控异常的用户行为。

虽然软件包注册表中存在恶意代码是众所周知的,还有一些奇怪或不寻常的行为,这些注册表的常规用户完全没有注意到。即使对于我们这些密切关注这些行为的人来说,也很难找到此类行为的原因或解释。

Xygeni 团队的特点就是我们面对问题时的坚持,所以我们对此进行了更深入的研究。

一切都始于统计数据的飙升

正如我之前提到的,作为我们基础设施的一部分,我们监控公共开源包注册表中的许多活动指标。

三月底,我的同事卡门(Carmen)发出了警报。我们开始观察到 NPM 上发布的包的数量。 经过初步审查,我们发现这种偏差主要是由于相对较少的用户的包发布率突然飙升造成的。

这促使我们检查了平台内的流程及其相关数据。幸运的是,我们的检查确定数据似乎是正确的,但这也有点令人费解!

经过进一步检查,我们发现这些软件包有几个共同的特征:

  • 发布者都是新创建的用户,最多不超过一两个月。
  • 这些软件包的名称似乎是随机的,可能是使用字典生成的。我们可以找到名称奇怪的软件包,例如 huge_mite-微笑茶, erick-mangut94-sukiwir, exotic_reptile-appteadev or obvious_tuna-appteadev。我们将在附录中列出我们发现的一些资产示例。
  • 这些包裹的内容非常相似,通常是相同的。

在此背景下,我们观察到其中一个包中包含一个 Python 脚本, 可能是偶然,它似乎用于自动发布包。

NPM

解开网络

其中一些出版商上个月的出版活动按照以下时间线图进行:

 

npm 攻击

以下是我们可以分享的与此事件相关的完整统计数据:

npm 检查

对这些用户相关的某些软件包进行单独审查后,没有发现任何相关结果。这促使我们分析所有这些软件包的整体情况,寻找可能为这一成功提供线索的模式。

毕竟,我们有大量的包需要分析:

npm 攻击 2

这些是我们可以从分析中强调的要点:

  • 许多 NPM 软件包是相互关联的。有些软件包被引用为其他软件包的依赖项。
  • 尽管这些软件包很奇怪,可能没人知道它们的存在,但有些软件包每周的下载量却很高。很难接受普通用户会想要下载这样的软件包 0mc03esisd
  • 有些有关联的存储库。有时这些存储库的所有者似乎是虚假账户,类似于 npm 上的账户。

注意:用户会分批上传附加包,因此提供的数据可能会略有不同。

npm 攻击 2

这是相关存储库之一的示例。它包含一些已发布软件包的代码。还有一些其他文件,例如 茶.yaml 文件中。

与演员见面

很难确定这是由一位作者还是多位合作者完成的。不过,我们确实有一些证据可以缩小这一活动的来源范围:

  • 语言:代码中的某些注释采用印尼语。
npm 攻击 3
  • 位置:相关存储库的某些所有者表明其位于印度尼西亚。
  • 我们通过 GitHub 上的活动元数据可以识别的位置也指向印度尼西亚。
NPM_JA

五点茶

鉴于印度尼西亚曾是英国殖民地,喝茶再合适不过了。不过,这里的茶相当特别。

你还记得吗? 茶.yaml 我们一开始看到的文件是什么?当时我们并没有展示它们的内容,但它看起来像这样:

npm 攻击 4

这些文件似乎与 茶礼仪。但它到底是什么?我们到达了 https://tea.xyz/blog/250k-grant-for-open-source-developers,谈论目的:

Tea 正在通过解决长期存在的开源开发者报酬不足问题来撼动数字世界。解决这个问题比以往任何时候都更加紧迫,这就是为什么我们决定在协议发布前部署 250 万美元的赠款。这一初始阶段旨在支持对开源软件生态系统产生重大影响的开源项目的维护者,以及在 Tea 协议激励测试网之前 TeaRank 超过 30 的开源项目维护者。”

根据茶协议文档: 

“要在 tea 协议上注册一个项目,需要一个 tea.yaml 文件,该文件作为项目的章程,用于管理项目的贡献者数量和执行某些行动所需的投票数。”

 

在访问茶叶网络后,我们试图找到一个我们怀疑名声被夸大的软件包。我们找到了它:

这似乎解释了这里发生的事情:某些用户通过虚假的知名度来夸大他们的开源项目,以劫持 teaRank 并获得茶协会提供的好处。毕竟,金钱是最古老的驱动力,与性一样。 

结论和最后的想法

虽然没有在这些 NPM 软件包中发现恶意代码的证据,而且他们可能不打算让任何人使用它们,但它们可能违反了 NPM、GitHub 或茶叶协会的多项服务条款 (TOS)。然而,这超出了我们的工作范围(尽管他们已收到通知,并将采取他们认为适当的行动)。这些平台的滥用将在某种程度上影响我们和我们的组织。

很明显的是,任何看似无害的开源软件包都可能隐藏着难以理解的行为,除非具备完整的背景信息。

作为一名开发人员,我发现手动控制我们开发和维护的应用程序中使用的所有开源软件包并保证一定程度的可靠性是一项挑战。如果没有自动化控制工具的帮助,这项任务可能会耗费我们团队无数的时间。

总是可以选择视而不见,相信开源领域是安全的地方。幸运的是,我相信这种心态如今并不十分普遍;这种情况实际上无害,但我们最近经历了一起更为严重的事件, XZ 后门,而且还没有 唯一的.

如果您已经读到这里,我希望您已经喜欢上了这个奇怪事件的所有复杂之处。别忘了花几分钟看看 Xygeni 能为您组织的安全性做出什么贡献。

附录:列出最终文章中要包含的相关资产

NPM 根据已发布的包数量显示更多相关用户: vndra、wanzaty、artknight404、seblakkuah、Mikrositer、kellyman17

以下是相关软件包的一个小样本: mikrositer、cryndex、arts-dao、seblakkuah、vndrabnb、vndrave、depfif、depsik、depeit、depnin、Dopon、kellymanteasproject。

一些包含 tea.yml 文件的相关 GitHub 存储库:

sca-tools-软件-成分分析工具
确定软件风险的优先级、进行补救并加以保护
7-day免费试用
无需信用卡

保护您的软件开发和交付

使用 Xygeni 产品套件