【天问】周下载超过700万的NPM包ua-parser-js遭投毒攻击
/ / 点击 / 阅读耗时 8 分钟周下载超过700万的NPM包’ua-parser-js’遭投毒攻击
1. 攻击事件概览
- 北京时间2021-10-22周五晚20:15,一个周下载量超过700万的npm包
ua-parser-js
遭到投毒攻击,疑似维护者账号由于密码泄露或者被爆破而发生劫持。 - 攻击者同时发布了三个新版本
0.7.29
、0.8.0
、1.0.0
,每个版本都包含了在安装时会触发下载远程恶意脚本的代码。在恶意版本发布的四个小时后,该包作者进行了迅速响应,将原先恶意的版本移除,并发布了相对应的三个新的修补版本。
- 从攻击发生到应急响应过去了4个小时,恶意版本迅速的移除避免了更多的恶性影响发生,但在这四个小时中安装过该包的用户都有可能受到影响。
- 此次受到攻击的UAParser.js库是一个从 User-Agent中检测浏览器、引擎、操作系统、CPU以及设备的类型的javascript库。在Node.js生态中这个包被将近1000个其他第三方包依赖,造成的影响极为广泛。
2. 恶意分析
- 攻击事件发生后,奇安信星图实验室即对该恶意攻击进行了分析。我们发现在攻击者发布的恶意版本中,首先修改了
package.json
中的scripts
字段,使得该包在安装前即可触发恶意脚本的运行。
- 在恶意版本中更新了三个新文件,分别是
preinstall.js
、preinstall.bat
、prenstall.sh
,其中第一个文件即上一步中需要在安装前执行的js文件,其具体内容是: 判断系统平台为linux还是windows,如果是Windows平台即执行bat脚本,Linux平台执行shell脚本。此处值得注意的是,在windows平台下,该脚本还会下载一个木马组件,虽然脚本中下载的挖矿程序难以被windows defender发现,但是这个木马组件会被检测并阻止。
- shell脚本和bat脚本的内容一致,都是从
http://159.148.186.228/download/jsextension
下载一个名为jsextension
的可执行文件,然后使用该程序在机器上运行挖矿服务。
3. 依赖分析
- 基于天问软件空间测绘系统的监测数据,我们构建了包间依赖关系的知识图谱。在该图谱中,我们针对ua-parser-js的上一个正常版本
0.7.28
进行了具体的依赖分析: (下图仅展示部分直接关系,最中心为ua-parser-js@0.7.28
,最外围绿色为直接依赖的包,中间诸多橘黄色点为详细依赖的版本情况)
- 在nodejs生态中,共有780包中的17087个版本直接依赖于`ua-parser-js@0.7.28`。
- 如果将依赖扩展到一度的间接依赖,受到影响的版本数量将上升至110750,影响范围扩大了将近650%。(下图仅展示部分间接依赖的情况)
- 如果这些包中有一些恰好在恶意版本未修补的那4小时中更新了自己的依赖或重新安装了依赖,那都有可能会受到这次投毒事件的影响。
4. 安全建议
此次投毒事件涉及到的包’ua-parser-js’影响范围极为广泛,虽然修复响应很快,但在投毒到响应前的四个小时内,仍有被攻击的风险。基于以上信息,我们给出以下几点建议:
对于开发者:
- 如果是nodejs生态中的包维护者,请开启2FA认证
- 请注意账号密码强度,以及切勿多个网站重复使用相同密码
对于用户:
- 检查在2021年10月22日晚20:15 至10月23日0:26 期间,是否安装或更新过ua-parser-js包。
- 检查是否有组件依赖于该包。
- 检查是否有主机运行异常进程。