新型NPM包利用QR码获取Cookie的恶意软件
字数 2515 2025-10-14 00:33:59

教学文档:新型恶意NPM包“fezbox”攻击链深度分析

文档概述

本文档旨在深度剖析一种新型的网络攻击手法。该手法结合了恶意开源软件包(NPM)QR码隐写术反向字符串混淆 等技术,实现了对用户Cookie等敏感信息的窃取。攻击样本为名为“fezbox”的NPM包。本文将从攻击流程、技术细节、创新点及防御建议四个方面进行详尽阐述。

一、 攻击流程总览

整个攻击链是一个多阶段(Multi-stage)过程,环环相扣,旨在规避安全检测。

  1. 投毒阶段:攻击者将恶意包“fezbox”发布到官方NPM仓库,并伪装成实用的工具库。
  2. 分发与感染:用户(开发者)在不知情的情况下下载并安装了该恶意包(累计下载327次)。当包含该包的应用程序运行时,恶意代码被激活。
  3. 环境检测:恶意代码首先检测自身是否运行在开发环境中。这是一种反分析、反沙箱的规避技术。
  4. 载荷获取:如果不在开发环境,代码会从一个经过混淆的URL下载一张包含高密度QR码的JPG图片。
  5. 载荷解析与执行:恶意包内置了解析功能,能够从QR码中提取出第二阶段的、经过混淆的恶意JavaScript代码。
  6. 数据窃取与外传:第二阶段的代码窃取用户的Cookie、用户名和密码,并通过HTTPS POST请求将数据发送到攻击者控制的服务器(C2)。

二、 关键技术细节分解

1. 恶意包与初始载荷

  • 载体: NPM包 fezbox,版本 1.3.0
  • 恶意代码位置: 位于包内的 dist/fezbox.cjs 文件中。
  • 代码混淆: 初始代码经过压缩,但格式化后可读性增强,表明攻击者并未使用高强度加密,重点在于后续的隐蔽性。

2. 环境检测规避技术

  • 目的: 避免在安全研究人员、沙箱或测试环境中暴露恶意行为。
  • 实现: 代码中包含条件判断语句,检查 process.env.NODE_ENV 等环境变量。只有当应用运行在生产环境时,恶意载荷才会在延迟120秒后触发,增加了被发现和分析的难度。

3. 字符串反向混淆

  • 目的: 绕过基于正则表达式或静态分析的自动化安全扫描工具。这些工具通常会查找以 http://https:// 开头的明显恶意URL。
  • 实例: 代码中存储的字符串 "ffe7cdb1b812207f702f07671c18c25b/v676757112qerutca/egami/moc.yraniduolc.ser//:sptth" 反转后才是真实的URL:
    • 反转后URLhxxps://res[.]cloudinary[.]com/dhuenbqsq/image/upload/v1755767716/b52c81c176720f07f702218b1bdc7eff_h7f6pn.jpg
  • 同样技术用于关键字: 在第二阶段代码中,关键字如 password 被反向存储为 drowssap,以躲避简单的字符串匹配。

4. QR码作为隐写术载体

  • 传统隐写术: 将信息隐藏于图片的像素数据、文件元数据等不易察觉的位置。
  • 本攻击的创新
    • 高密度QR码: 攻击者专门生成了一个数据承载量远超普通二维码的高密度QR码,普通手机摄像头难以识别,旨在仅供机器(恶意代码)解析,而非人类。
    • 隐蔽通信信道: 从网络流量角度看,受感染设备只是向一个合法的图片托管服务(如Cloudinary)发起了一个普通的图片下载请求。这种流量极易被误判为正常业务流量,从而绕过网络代理和防火墙的检测。

5. 第二阶段载荷与数据窃取

  • 功能: 从QR码中解析出的JavaScript代码专门用于窃取浏览器环境中的敏感数据。
  • 窃取目标
    • document.cookie: 获取会话Cookie,可能直接导致账户劫持。
    • usernamepassword: 尝试窃取表单中的用户名和密码字段。
  • 数据外传
    • C2服务器https://my-nest-app-production[.]up[.]railway[.]app/users
    • 条件触发: 仅在成功窃取到用户名和密码后,才通过HTTPS POST请求发送数据。否则静默退出,减少不必要的网络活动以降低暴露风险。

三、 攻击的创新点与演变趋势

  1. 自动化QR码滥用: 与传统需要人工扫描二维码的社会工程学攻击不同,此攻击实现了设备到QR码再到C2的全程自动化通信,无需用户交互,效率更高,更隐蔽。
  2. 供应链攻击的精细化: 攻击目标直接指向软件供应链(NPM)。利用开源生态的信任,通过一个看似正常的依赖包作为攻击起点。
  3. 隐蔽通信模式: 将C2指令隐藏在QR码中,并通过图片CDN进行传输,为传统的C2通信提供了一种新的、难以被察觉的伪装形式。

四、 防御与缓解建议

针对开发人员与组织:

  1. 软件供应链安全

    • 依赖项审计: 在引入任何第三方库前,使用自动化工具(如Socket, Snyk, npm audit)对包进行安全扫描,分析其行为模式(网络访问、文件操作等)。
    • 最小权限原则: 定期审查package.json,移除不必要的依赖。
    • 依赖锁定: 使用 package-lock.jsonyarn.lock 锁定依赖版本,防止恶意更新被自动引入。
  2. 运行时保护

    • 安全监控: 在生产环境中部署安全监控方案,检测异常的出站网络连接(尤其是向未知域名或图片CDN发送敏感数据的请求)。
    • 代码审查: 对关键应用的第三方依赖代码进行定期或抽样审查。
  3. 纵深防御

    • 网络层过滤: 虽然HTTPS流量内容不可见,但防火墙或代理可以基于目标域名进行过滤和告警。
    • 保持更新: 及时更新所有软件和依赖,以便在恶意包被曝光后能及时从项目中移除。

总结
“fezbox”恶意包事件清晰地展示了现代网络攻击的复杂性和隐蔽性。攻击者正不断融合多种技术(供应链攻击、混淆、隐写术)来绕过传统防御措施。防御方必须采取一种多层次、纵深防御的安全策略,尤其要重视软件供应链的安全管理,才能有效应对此类高级威胁。


教学文档:新型恶意NPM包“fezbox”攻击链深度分析 文档概述 本文档旨在深度剖析一种新型的网络攻击手法。该手法结合了 恶意开源软件包(NPM) 、 QR码隐写术 和 反向字符串混淆 等技术,实现了对用户Cookie等敏感信息的窃取。攻击样本为名为“fezbox”的NPM包。本文将从攻击流程、技术细节、创新点及防御建议四个方面进行详尽阐述。 一、 攻击流程总览 整个攻击链是一个多阶段(Multi-stage)过程,环环相扣,旨在规避安全检测。 投毒阶段 :攻击者将恶意包“fezbox”发布到官方NPM仓库,并伪装成实用的工具库。 分发与感染 :用户(开发者)在不知情的情况下下载并安装了该恶意包(累计下载327次)。当包含该包的应用程序运行时,恶意代码被激活。 环境检测 :恶意代码首先检测自身是否运行在开发环境中。这是一种反分析、反沙箱的规避技术。 载荷获取 :如果不在开发环境,代码会从一个经过混淆的URL下载一张包含高密度QR码的JPG图片。 载荷解析与执行 :恶意包内置了解析功能,能够从QR码中提取出第二阶段的、经过混淆的恶意JavaScript代码。 数据窃取与外传 :第二阶段的代码窃取用户的Cookie、用户名和密码,并通过HTTPS POST请求将数据发送到攻击者控制的服务器(C2)。 二、 关键技术细节分解 1. 恶意包与初始载荷 载体 : NPM包 fezbox ,版本 1.3.0 。 恶意代码位置 : 位于包内的 dist/fezbox.cjs 文件中。 代码混淆 : 初始代码经过压缩,但格式化后可读性增强,表明攻击者并未使用高强度加密,重点在于后续的隐蔽性。 2. 环境检测规避技术 目的 : 避免在安全研究人员、沙箱或测试环境中暴露恶意行为。 实现 : 代码中包含条件判断语句,检查 process.env.NODE_ENV 等环境变量。只有当应用运行在 生产环境 时,恶意载荷才会在延迟120秒后触发,增加了被发现和分析的难度。 3. 字符串反向混淆 目的 : 绕过基于正则表达式或静态分析的自动化安全扫描工具。这些工具通常会查找以 http:// 或 https:// 开头的明显恶意URL。 实例 : 代码中存储的字符串 "ffe7cdb1b812207f702f07671c18c25b/v676757112qerutca/egami/moc.yraniduolc.ser//:sptth" 反转后才是真实的URL: 反转后URL : hxxps://res[.]cloudinary[.]com/dhuenbqsq/image/upload/v1755767716/b52c81c176720f07f702218b1bdc7eff_h7f6pn.jpg 同样技术用于关键字 : 在第二阶段代码中,关键字如 password 被反向存储为 drowssap ,以躲避简单的字符串匹配。 4. QR码作为隐写术载体 传统隐写术 : 将信息隐藏于图片的像素数据、文件元数据等不易察觉的位置。 本攻击的创新 : 高密度QR码 : 攻击者专门生成了一个数据承载量远超普通二维码的高密度QR码,普通手机摄像头难以识别,旨在 仅供机器(恶意代码)解析 ,而非人类。 隐蔽通信信道 : 从网络流量角度看,受感染设备只是向一个合法的图片托管服务(如Cloudinary)发起了一个普通的图片下载请求。这种流量极易被误判为正常业务流量,从而绕过网络代理和防火墙的检测。 5. 第二阶段载荷与数据窃取 功能 : 从QR码中解析出的JavaScript代码专门用于窃取浏览器环境中的敏感数据。 窃取目标 : document.cookie : 获取会话Cookie,可能直接导致账户劫持。 username 和 password : 尝试窃取表单中的用户名和密码字段。 数据外传 : C2服务器 : https://my-nest-app-production[.]up[.]railway[.]app/users 条件触发 : 仅在成功窃取到用户名和密码后,才通过HTTPS POST请求发送数据。否则静默退出,减少不必要的网络活动以降低暴露风险。 三、 攻击的创新点与演变趋势 自动化QR码滥用 : 与传统需要人工扫描二维码的社会工程学攻击不同,此攻击实现了 设备到QR码再到C2 的全程自动化通信,无需用户交互,效率更高,更隐蔽。 供应链攻击的精细化 : 攻击目标直接指向软件供应链(NPM)。利用开源生态的信任,通过一个看似正常的依赖包作为攻击起点。 隐蔽通信模式 : 将C2指令隐藏在QR码中,并通过图片CDN进行传输,为传统的C2通信提供了一种新的、难以被察觉的伪装形式。 四、 防御与缓解建议 针对开发人员与组织: 软件供应链安全 : 依赖项审计 : 在引入任何第三方库前,使用自动化工具(如Socket, Snyk, npm audit)对包进行安全扫描,分析其行为模式(网络访问、文件操作等)。 最小权限原则 : 定期审查 package.json ,移除不必要的依赖。 依赖锁定 : 使用 package-lock.json 或 yarn.lock 锁定依赖版本,防止恶意更新被自动引入。 运行时保护 : 安全监控 : 在生产环境中部署安全监控方案,检测异常的出站网络连接(尤其是向未知域名或图片CDN发送敏感数据的请求)。 代码审查 : 对关键应用的第三方依赖代码进行定期或抽样审查。 纵深防御 : 网络层过滤 : 虽然HTTPS流量内容不可见,但防火墙或代理可以基于目标域名进行过滤和告警。 保持更新 : 及时更新所有软件和依赖,以便在恶意包被曝光后能及时从项目中移除。 总结 “fezbox”恶意包事件清晰地展示了现代网络攻击的复杂性和隐蔽性。攻击者正不断融合多种技术(供应链攻击、混淆、隐写术)来绕过传统防御措施。防御方必须采取一种多层次、纵深防御的安全策略,尤其要重视软件供应链的安全管理,才能有效应对此类高级威胁。