新的 npm 恶意软件已被发现通过使用 Windows 系统上的合法密码恢复工具从 Google Chrome 网络浏览器窃取凭据。此外,该恶意软件侦听来自攻击者 C2 服务器的传入连接并提供高级功能,例如屏幕和摄像头访问、目录列表、文件查找、文件上传和 shell 命令执行。正如 BleepingComputer 所见,自 2018 年以来,已识别的软件包一直位于 npm 注册表中,截至撰写本文时,其总下载量已超过 2,000 次。今天,ReversingLabs 的研究人员披露了他们对两个恶意 npm 包的发现,这些包可以秘密地从 Chrome 网络浏览器中窃取密码。这些软件包是由 ReversingLabs 的采用机器学习算法的 Titanium Platform 静态分析引擎发现的。但是,该报告的主要重点是包含核心恶意软件功能的 nodejs_net_server。该恶意软件的目标是 Windows 机器以窃取用户凭据,并为攻击者设置持久的远程后门以进行监视活动。
为了促进其凭据窃取活动,恶意软件(特别是“nodejs_net_server”)使用适用于 Windows 的合法 ChromePass 免费软件实用程序。 ChromePass 是 Windows 系统的密码恢复工具,旨在从用户的 Chrome 网络浏览器中提取密码:该实用程序打包在 npm 包中,带有神秘或误导性的名称,例如 a.exe。迄今为止,“nodejs_net_server”已经发布了 12 个版本,最新的 1.1.2 未压缩大小约为 40 MB。但是,在更高版本中,可以看到恶意软件会启动 TeamViewer.exe 以避免引发危险信号。迄今为止捕获的大多数恶意 npm 包都依赖于域名抢注或依赖混淆来感染开发人员。但是,这些包的情况并非如此,目前还不知道这些包是如何获得如此多的下载量的。
“我们不清楚作者是如何欺骗用户安装软件包的。但是我们可以在软件包统计页面上看到下载活动。” ReversingLabs 的首席软件架构师兼联合创始人 Tomislav Pericin 在接受电子邮件采访时告诉 BleepingComputer:“我们已经联系 NPM 取下包裹。我们仍在等待他们的安全团队做出回应。” GitHub 发言人告诉 BleepingComputer:“我们根据 npm 对恶意软件的可接受使用政策删除了该软件包,如其开源条款中所述。”有趣的是,一旦开发人员安装了该软件包,它就会尝试通过滥用众所周知的 npm 配置选项“bin”在 Windows 机器上获得持久性。包的清单文件 package.json 中的“bin”选项旨在劫持流行的“jstest”包,如果它预先安装在开发人员的机器上。 “jstest”是一个跨平台的 JavaScript 测试框架,迄今已下载超过 36,000 次——这意味着 NodeJS 开发人员很有可能拥有它。但是,预装“jstest”绝不是恶意包运行的先决条件。它的存在只是帮助恶意软件在受感染的机器上实现持久性:
“无需安装 JSTest 即可进行此攻击。如果已经分配了命令 'jstest',则包安装会劫持该命令。” “运行该命令将确保恶意软件获得持久性并执行后门功能,”Pericin 进一步告诉 BleepingComputer。恶意软件加载的“jstest”文件试图覆盖现有“jstest”符号链接的内容,并进一步添加另一个 JS 文件(“test.js”)作为现在可以持久运行的 Windows 服务。这个新添加的 Windows 服务打开了 7353 端口,攻击者可以连接到该端口并执行各种监视活动,包括: 至于 temptesttempfile,该包最小,只有两个文件,并且仅实现了 nodejs_net_server 的远程 shell 功能,使其看起来像顾名思义,一个测试包。出人意料的是,某些版本的 nodejs_net_server 包含从 Chrome 中提取的带有恶意软件作者的用户名和明文密码的文本文件。 “与包含密码恢复工具的版本相关的有趣事实是,包作者不小心发布了他们自己存储的登录凭据。”
“看来 NPM 存储库中已发布的 1.1.1 和 1.1.2 版本包含在作者的个人计算机上测试 ChromePass 工具的结果。” ReversingLabs 逆向工程师 Karlo Zanki 在一篇博客文章中说:“这些登录凭据存储在与名为“a.exe”的密码恢复工具位于同一文件夹中的“a.txt”文件中。 Zanki 的观察也得到了 BleepingComputer 的证实,我们注意到两个文件 a.txt 和 b.txt 带有明文凭据,位于上述版本的“nodejs_net_server”中。在过去几个月中,对包括 npm、PyPI 和 RubyGems 在内的开源生态系统的攻击稳步增长。随着最近有关持续依赖劫持攻击充斥着开源存储库的报道,这个问题不会很快消失。 ReversingLabs 认为,了解软件内部的内容或拥有软件物料清单 (SBOM) 是防御这些供应链攻击的关键步骤。 “了解包依赖树或软件物料清单已成为防御软件供应链攻击的关键部分。”
“在安装之前应该仔细检查每个组件,否则恶意代码可能会被忽视。” Pericin 在接受 BleepingComputer 采访时总结道:“我们还没有看到恶意存储库包嵌入到最终发布映像中,但这似乎只是时间问题。”更新:2021 年 7 月 22 日美国东部时间上午 1:25:添加了 npm 母公司 GitHub 的声明,发布后收到。