【天问】Node.CuteBoi:大规模供应链挖矿攻击持续追踪
/ / 点击 / 阅读耗时 16 分钟一、引言
2022年5月至7月,npm生态中发生了一起大规模供应链挖矿软件投毒的事件,攻击者在这两个月内上传了2,500多个含挖矿程序的npm包。攻击者实现了npm账号注册和包发布流程的完全自动化,同时也绕过了npm的双因子认证防御机制。奇安信星图实验室在持续监测npm生态过程中捕获到了这些含有挖矿程序的npm包,通过深入分析,我们挖掘出了攻击者自动化发布npm包的手段和原理。截止2022年7月12日,我们发现该攻击者已累计上传了2,520个含有挖矿程序的npm包,且该攻击活动还在持续活跃中。
二、恶意包发布时间线
以下描述中时间均为(UTC+0)时区,与北京时间有8小时时差。
1. 攻击者初次发布阶段
2022年5月24日至6月4日
- 攻击者上传第一个包
eazyminer-fsdjufhsdjf
,并接连发布了三个版本:0.1.9
,0.1.90
,0.1.91
。
2. 攻击者手动测试发布阶段
2022年6月23日02时左右
攻击者共计上传了10个包, 此时上传时间间隔较久,且包含非随机化字符串的包名称 ,所以疑似攻击者进行手动测试。
3. 持续自动化发布阶段
- 在第三阶段,攻击者开始尝试自动化上传npm包,这些包几乎都是同时上传,上传时间间隔只有几秒。
日期 | 上传数量 | 上传方式 |
---|---|---|
2022年6月24日 | 7 | 自动化发布 |
2022年6月25日 | 6 | 自动化发布 |
2022年6月26日 | 143 | 自动化发布 |
2022年6月27日 | 144 | 自动化发布 |
2022年6月28日 | 189 | 自动化发布 |
2022年6月29日 | 85 | 自动化发布 |
2022年6月30日 | 694 | 自动化发布 |
2022年7月11日 | 1238 | 自动化发布 |
其中比较有趣的是,在 checkmarx披露此次攻击事件后,攻击者将7月11日发布的包内bugs字段和homepage字段均改为了checkmarx披露该攻击时使用的github仓库地址。这两个地址无法在npmjs.com中查询该包时显示,所以普通用户很难看到,可以说是攻击者对checkmarx报告的一种回应。
此外,所有后续自动化发布的npm包中均包含了
water
这个关键词和H.K.Brandsma
这个作者声明。有关自动化发布包的方法,我们通过分析这些发布包的上传者邮箱域名,发现了一个名为
knowledgemd.com
的域名,这个域名是临时邮箱服务提供商mail.tm提供的临时邮箱地址的默认域名。该服务可以提供一次性电子邮件地址,无需任何注册过程并且为接收邮件提供API接口,攻击利用该特性实现了npm账户注册、npm包发布,npm双因子认证绕过等操作的自动化,使得大规模自动化上传npm包成为可能。部分攻击者上传包使用的npm账号及关联邮箱如下图所示:
三、 相关细节
1. 矿机唤醒
根据我们安全研究人员的分析,攻击者发布的这些npm包在安装过程中并不会直接启动挖矿程序。并且,npm包中也没有相关代码可以直接启动这些挖矿程序。但是通过对这2,520个包的下载量进行分析后,我们发现了利用这些包进行挖矿活动的线索。直至7月11日被npm官方删除之前,攻击者第一次上传的npm包
eazyminer-fsdjufhsdjf
有13,000多次下载。查看其具体下载量发现在6月19、20、21这三天都有明显的大量下载,如下图所示。由此我们推断,攻击者先是在6月4日手动上传了一个包,过了大约两周时间,确定该包依然存活后,在6月19日对其进行了调用控制,大量的进行下载安装,并激活挖矿程序。之后攻击者确定此方法可行,并在后续几周内上传了其他两千多个同样的包,以待后续使用。除此之外,我们推断攻击者的目标可能是一些自动化构建服务,这些服务会自动安装npm包。值得思考的是,既然这些包不能直接启动挖矿程序,那一定有一个控制器来控制这些挖矿程序的启动。我们可以合理推断,攻击者对于某些服务拥有有限的权限,可以执行一定的代码、指令来启动挖矿程序,但是具体挖矿程序的加载需要通过
npm install
这种方式来安装到目的主机环境中,所以就产生了这种挖矿程序和启动程序分离的情况,这在一定程度上也能绕过一些动态检测的方法。除了唯一一个被唤醒过的npm包(
eazyminer-fsdjufhsdjf
),攻击者在6月30日之前发布的npm包的下载量大多都在100-200这个区间内,通过分析了6月30日那天新上传至npm的其他包的下载量,我们发现56%的包下载量都在100次以下,说明这些npm包有可能处于一种“低激活状态”,即有限地使用目标服务的计算资源,通过扩大规模来提高攻击者的挖矿算力。
2. 新增的域名
除去checkmarx报告中提及的域名外,在7月11这一天上传的包,我们发现上传者邮箱域名均为
bsbvans.com.br
, 该域名为临时邮箱mail[.]gw的默认域名。
3. 攻击者关联的GitHub仓库
通过在GitHub检索攻击者第一次上传包的名称
eazyminer-fsdjufhsdjf
,我们发现了攻击者用于启动挖矿程序的测试代码,如果在已经安装了该包的服务器上运行这段代码会激活挖矿程序。除此之外,我们也发现了攻击者用于批量制作含有挖矿程序npm包的母版程序和自动化操作的项目。其中自动化部分主要是用于注册各个平台账号,使用临时邮箱的API来绕过双因子认证。在代码中我们看到了攻击者有自动化注册Replit平台操作,所以我们推测Replit服务有可能是此次攻击者的目标之一。
在进行进一步挖掘之后,我们发现了以下几个GitHub账号都有关联关系,且都为新注册账号,很可能是与攻击者相关的测试账号。
4. 攻击者使用GitHub Action自动化发布大量npm包
GitHub用户fivembojufkarz2k21使用GitHub Action自动化发布了大量npm包,每一次Action执行时,将会同步执行100多个包的发布任务,如下图所示,可以看到上一次的执行时间与7月11日大量发布包的时间吻合。
在 closer.py中,攻击者使用Python实现了自动化注册npm账号,自动化设置npm token, 并通过该token进行包的发布,从而实现自动大量发布npm包。
四、结语
- 此次攻击事件展现了利用npm供应链生态进行大规模自动化挖矿的攻击模式。虽然我们无从得知攻击者具体的攻击方式和受害的目标主机,但基于现有证据,我们推测攻击目标很可能是一些容器环境、自动化构建等在线服务,相关服务提供商应该及时检查自身涉及npm自动化构建服务、容器服务等的运行状态,排查是否存在和该代理矿池IP(130.162.52[.]80)的可疑连接,及时排查安全风险。于此同时,相关服务提供商应对自己部署的自动化服务进行合理的权限限制和必要的安全监测,避免被类似攻击者滥用。在本次攻击事件中,天问软件供应链监测平台进行了及时预警,发现了该攻击者的攻击行为,并为广大国内外用户提供了安全风险情报。
IOCs
涉及的域名和IP
130.162.52[.]80 (代理矿池地址)
bsbvans[.]com[.]br (上传npm包账号的邮箱域名,以下相同)
knowledgemd.com
scpulse[.]com
idots[.]cf
fisch[.]ml
Nordalts[.]ml
挖矿程序sha1
- e22a630f3d3c7a78dbb47f44343b49059f98a251 (Windows PE)
- c72dce5b747261a658a46d977a0b37ca628571f2 (Linux ELF)