【天问】TEA: NPM生态再度陷入垃圾软件包困境

引言

​ 在刚刚结束的2024第二个季度中,npm生态仍然是开源生态软件供应链攻击发生的重灾区。除了各类复杂的恶意攻击之外,我们还监测到了一起对整个生态产生的影响的垃圾包投放事件。此次所发布的垃圾软件包数量庞大,对npm生态日常运行带来了的额外的负担,并增加了潜在风险发生的可能性。

​ 天问供应链威胁监测模块是奇安信技术研究星图实验室研发的“天问”软件供应链安全分析平台的子模块,”天问“分析平台对Python、npm等主流的开发生态进行了长期、持续的监测,发现了大量的恶意包和攻击行为。

详细分析

​ 此次事件中的垃圾包均与Tea协议有关,这是一个基于 Coinbase 的第二层区块链 Base 构建Web3 协议,其目的是促进开源软件生态的发展,为开源项目的维护者提供激励。然而这一激励却被不正当使用,导致各大开源平台都受到垃圾软件包的困扰,其中npm生态尤为严重。早在2023年3月,npm生态中就已经发生了一次重大的垃圾包污染事件P2Pshink,而在2024年4月,根据我们长期的监测趋势发现npm生态中软件包又出现一次激增的情况。

正常情况下, npm生态的软件包每日的新发布数量在2万个上下浮动,并且明显呈现出和工作日和周末的循环。一旦异常增加发生,表明npm生态中又遭受了大规模滥用的情况。 我们对这一时间段中异常发布的软件包进行了分析,发现这些软件包中都包含一个 tea.yaml 的文件,该文件用于标识一个开源项目加入Tea协议的激励计划。通过维护开源项目,维护者可以从Tea官方获取程度不等的分数,并兑换为其他形式的数字货币奖励,然而这一激励却被不正常使用,攻击者通过在开源生态中大规模发布软件包的形式来获利。

​ 我们分析了过去4个月时间中发布在npm生态的软件包中包含文件的情况,发现69662个 npm 包中都存在有这个明显的标志,其发布趋势如下图,在4月19日这一天,发布数量就超过4000个,对npm生态造成了不可避免的污染。

在这些软件包中都明显的包含了tea.yaml标识文件。例如,在npm包ayogasteros-tea中的tea.yaml 文件中就声明了多个哈希值,以用来标识维护者的身份。

​由于Tea协议的激励机制不仅限于发布开源生态的项目或者软件包,其更重要的计算方式是 teaRank。 这是一种由pageRank 改良而来的算法,用于衡量一个开源项目在开源生态中的重要程度,并评定一个分数。 如此一来, 软件包之间的依赖关系也成为一个提高开源项目影响力的重要因素。所以在npm生态中,恶意的滥用者还通过发布垃圾软件包构建了一个自成体系巨型依赖互联网络,以提高软件包的权重。

​例如,发布在 npm命名空间@zittertea之下的发布的2万多个软件包之间都存在互联依赖关联的情况, 而这些软件包中并没有明显的包含tea.yaml 文件,这也给判定是否是一个滥用Tea协议的垃圾软件包带来了一定的困难。

​根据Phylum的评估,在2024年第二季度,npm生态中垃圾软件包的估计值达到了25.5%。这也就意味着,在短短几个月时间内,超过50万个垃圾软件包被发布在npm生态中。而在首次上传到npm生态中的软件包中(不计算版本更新),大约7个中有5个都是由Tea协议导致的垃圾软件包。这表明着npm生态已经被严重滥用,这种污染不仅对开源生态的稳定性和安全性造成危害,并且对于未来使用开源生态语料进行AI训练的数据带来了污染的风险。

总结

在最近的npm生态系统中,由Tea协议引发的垃圾包污染事件产生了巨大影响。尽管npm官方正在积极维护并删除这些恶意软件包,但污染问题依然在持续发生。与此同时,Tea官方团队已调整其激励规则,力求避免类似不正当获取激励的行为,但仍难以从根源上彻底解决这一问题。相关的垃圾软件包投放不仅限于npm生态,其他生态如Pypi、RubyGems也均受到影响,并且这种垃圾软件包的发布正在发生,我们将持续跟进监测各个开源生态的软件包发布情况。