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

教学文档:新型NPM恶意软件“Fezbox”利用QR码进行Cookie窃取的技术分析

文档摘要
本文档深入剖析了一款名为“Fezbox”的恶意NPM包。该包采用了一种结合了代码混淆、环境感知、反向字符串隐写和QR码隐写术的复合型攻击链,旨在从Web浏览器中窃取用户的Cookie认证凭证。此案例代表了软件供应链攻击和C2通信隐蔽化的一种新颖演进。

一、 攻击概述

  • 攻击载体: NPM(Node Package Manager)公共仓库。
  • 恶意包名称fezbox
  • 伪装身份: 伪装成实用的JavaScript工具库。
  • 核心攻击链: 恶意NPM包 → 环境检测 → 延迟执行 → 下载含恶意QR码的图片 → 解析QR码 → 执行窃取载荷 → 外泄数据。
  • 最终目标: 窃取受感染Web应用用户的Cookie,特别是包含用户名和密码的敏感凭证。

二、 攻击流程与技术细节分解

阶段一:初始感染与潜伏
  1. 发布与传播

    • 攻击者将恶意包fezbox发布到npmjs.com。由于其伪装成正常工具,开发者可能在不知情的情况下将其作为依赖项引入项目。
    • 据统计,该包在被下架前已被下载至少327次,表明其已造成实质性影响。
  2. 恶意代码位置

    • 恶意载荷主要存在于包的 dist/fezbox.cjs 文件中。
    • 初始代码经过压缩和混淆,以增加人工代码审查的难度。
阶段二:环境检测与反分析
  1. 触发条件

    • 当引用了fezbox的Web应用运行时,恶意代码会首先检查运行环境。
    • 关键代码逻辑:通过条件判断语句检测应用是否处于开发环境(例如,NODE_ENV 变量值为 development)。
  2. 攻击者意图

    • 规避检测:这是一种高级的隐蔽策略。攻击者不希望恶意行为在开发、测试或沙箱环境中触发,以免暴露行踪。
    • 提高成功率:确保攻击只在真实的生产环境中生效,最大化攻击效果。
阶段三:载荷获取与隐蔽通信
  1. 延迟执行

    • 通过环境检测后,代码会设置一个120秒(2分钟)的定时器。这种延迟进一步增加了安全监控工具发现异常行为的难度。
  2. 隐蔽的C2地址获取

    • 定时器结束后,代码会读取一个经过反向处理的字符串。
    • 示例: 字符串 "ffe7cdb1b812207f702f07671c8cb25..." 实际是URL hxxps://res[.]cloudinary[.]com/.../b52c81c17...jpg 的倒序。
    • 技术要点: 将URL反向存储是为了规避基于正则表达式(如匹配http(s)://)的静态代码分析工具。这些工具无法直接识别出被处理的字符串,从而绕过了初步的安全扫描。
  3. QR码作为隐写载体

    • 代码从反转后得到的URL下载一张JPG图片,该图片包含一个高密度QR码
    • QR码特殊性
      • 数据容量超常: 其承载的数据量远超普通用于营销或网址跳转的QR码。
      • 专为机器解析设计: 普通手机摄像头难以稳定识别,表明它并非为人工扫描设计,而是专门供fezbox包内的解析代码读取。
阶段四:载荷解析与数据窃取
  1. 执行第二阶段载荷

    • fezbox包内含的QR码解析器会从图片中提取出隐藏的JavaScript代码(第二阶段载荷),该代码同样是混淆后的。
  2. 窃取逻辑

    • 载荷通过浏览器环境下的 document.cookie API 读取当前网站的所有Cookie。
    • 它会在Cookie中搜索特定的凭证信息,例如用户名(username)和密码。值得注意的是,载荷在搜索密码时,同样使用了字符串反转的混淆技巧(例如,搜索键名是 drowssap 而非 password)。
  3. 数据外泄

    • 条件传输: 只有当窃取的Cookie中同时包含用户名和密码时,载荷才会执行外泄操作。
    • 外泄方式: 通过一个HTTPS POST请求,将窃取到的数据发送到攻击者控制的C2服务器:hxxps://my-nest-app-production[.]up[.]railway[.]app/users
    • 静默退出: 如果不满足条件,载荷将不作任何操作,静默退出,这使得攻击行为更加隐蔽,难以被察觉。

三、 攻击的创新点与安全启示

  1. QR码的自动化滥用

    • 传统模式: QR码社会工程学攻击需要人工介入扫描(如虚假罚单、钓鱼问卷)。
    • Fezbox创新: 实现了机器对机器(M2M) 的通信。受感染设备自动获取、解析QR码,无需用户交互。这在攻击链中减少了一个关键环节,提高了自动化程度。
  2. 极高的通信隐蔽性

    • 在网络安全工具(如代理、防火墙)看来,受感染设备与Cloudinary(一个合法的图片CDN服务)之间的通信是正常的图片下载流量,极难与恶意C2通信关联。
    • 这利用了网络流量过滤策略的常见盲区——通常不会对图片内容进行深度检测以查找隐藏的恶意代码。
  3. 复合型规避技术

    • 该攻击综合运用了环境检测、时间延迟、字符串反转、代码混淆、QR码隐写等多种技术,形成了一个纵深防御的规避体系,大大提升了被发现的难度。

四、 防御建议与缓解措施

防御层面 具体措施
开发者/组织 1. 依赖项审计: 使用如SocketSnykGitHub Advanced Security等工具对引入的开源依赖包进行持续的安全扫描,识别隐蔽的恶意代码和可疑网络请求。
2. 最小权限原则: 严格控制NPM包的权限,避免授予不必要的网络或文件系统访问权。
3. 供应链安全: 建立软件物料清单(SBOM),清晰掌握项目中的所有组件及其来源。
安全研究员/工具 1. 增强静态分析: 改进静态分析工具,使其能够检测更高级的混淆技术,如字符串反转、Base64编码后解码执行等。
2. 动态行为监控: 在沙箱或运行时环境中监控软件的异常行为,如异常的网络连接(特别是对图片服务的非预期请求)、定时器后的敏感操作(如访问document.cookie)等。
3. 网络流量深度检测: 考虑对看似正常的图片等文件传输流量进行更深层次的内容安全检查(如隐写术分析),尽管这会带来性能开销。
普通用户 保持浏览器和操作系统更新,使用可靠的安全软件,对不明来源的二维码保持警惕。

结论
“Fezbox”恶意包是一个典型的软件供应链攻击案例,它展示了现代网络攻击的复杂性和隐蔽性。攻击者不再依赖单一技术,而是将多种规避技术组合成一条难以追踪的攻击链。此事件警示我们,必须采用多层次、纵深防御的安全策略,并借助先进的安全工具来应对日益演进的威胁。

教学文档:新型NPM恶意软件“Fezbox”利用QR码进行Cookie窃取的技术分析 文档摘要 本文档深入剖析了一款名为“Fezbox”的恶意NPM包。该包采用了一种结合了 代码混淆、环境感知、反向字符串隐写和QR码隐写术 的复合型攻击链,旨在从Web浏览器中窃取用户的Cookie认证凭证。此案例代表了软件供应链攻击和C2通信隐蔽化的一种新颖演进。 一、 攻击概述 攻击载体 : NPM(Node Package Manager)公共仓库。 恶意包名称 : fezbox 。 伪装身份 : 伪装成实用的JavaScript工具库。 核心攻击链 : 恶意NPM包 → 环境检测 → 延迟执行 → 下载含恶意QR码的图片 → 解析QR码 → 执行窃取载荷 → 外泄数据。 最终目标 : 窃取受感染Web应用用户的Cookie,特别是包含用户名和密码的敏感凭证。 二、 攻击流程与技术细节分解 阶段一:初始感染与潜伏 发布与传播 : 攻击者将恶意包 fezbox 发布到npmjs.com。由于其伪装成正常工具,开发者可能在不知情的情况下将其作为依赖项引入项目。 据统计,该包在被下架前已被下载 至少327次 ,表明其已造成实质性影响。 恶意代码位置 : 恶意载荷主要存在于包的 dist/fezbox.cjs 文件中。 初始代码经过 压缩和混淆 ,以增加人工代码审查的难度。 阶段二:环境检测与反分析 触发条件 : 当引用了 fezbox 的Web应用运行时,恶意代码会首先检查运行环境。 关键代码逻辑 :通过条件判断语句检测应用是否处于 开发环境 (例如, NODE_ENV 变量值为 development )。 攻击者意图 : 规避检测 :这是一种高级的隐蔽策略。攻击者不希望恶意行为在开发、测试或沙箱环境中触发,以免暴露行踪。 提高成功率 :确保攻击只在真实的生产环境中生效,最大化攻击效果。 阶段三:载荷获取与隐蔽通信 延迟执行 : 通过环境检测后,代码会设置一个 120秒(2分钟)的定时器 。这种延迟进一步增加了安全监控工具发现异常行为的难度。 隐蔽的C2地址获取 : 定时器结束后,代码会读取一个经过 反向处理 的字符串。 示例 : 字符串 "ffe7cdb1b812207f702f07671c8cb25..." 实际是URL hxxps://res[.]cloudinary[.]com/.../b52c81c17...jpg 的倒序。 技术要点 : 将URL反向存储是为了规避基于正则表达式(如匹配 http(s):// )的 静态代码分析工具 。这些工具无法直接识别出被处理的字符串,从而绕过了初步的安全扫描。 QR码作为隐写载体 : 代码从反转后得到的URL下载一张JPG图片,该图片包含一个 高密度QR码 。 QR码特殊性 : 数据容量超常 : 其承载的数据量远超普通用于营销或网址跳转的QR码。 专为机器解析设计 : 普通手机摄像头难以稳定识别,表明它并非为人工扫描设计,而是专门供 fezbox 包内的解析代码读取。 阶段四:载荷解析与数据窃取 执行第二阶段载荷 : fezbox 包内含的QR码解析器会从图片中提取出隐藏的JavaScript代码(第二阶段载荷),该代码同样是 混淆后 的。 窃取逻辑 : 载荷通过浏览器环境下的 document.cookie API 读取当前网站的所有Cookie。 它会在Cookie中搜索特定的凭证信息,例如用户名( username )和密码。值得注意的是,载荷在搜索密码时,同样使用了 字符串反转 的混淆技巧(例如,搜索键名是 drowssap 而非 password )。 数据外泄 : 条件传输 : 只有当窃取的Cookie中同时包含用户名和密码时,载荷才会执行外泄操作。 外泄方式 : 通过一个HTTPS POST请求,将窃取到的数据发送到攻击者控制的C2服务器: hxxps://my-nest-app-production[.]up[.]railway[.]app/users 。 静默退出 : 如果不满足条件,载荷将不作任何操作,静默退出,这使得攻击行为更加隐蔽,难以被察觉。 三、 攻击的创新点与安全启示 QR码的自动化滥用 : 传统模式 : QR码社会工程学攻击需要 人工介入扫描 (如虚假罚单、钓鱼问卷)。 Fezbox创新 : 实现了 机器对机器(M2M) 的通信。受感染设备自动获取、解析QR码,无需用户交互。这在攻击链中减少了一个关键环节,提高了自动化程度。 极高的通信隐蔽性 : 在网络安全工具(如代理、防火墙)看来,受感染设备与Cloudinary(一个合法的图片CDN服务)之间的通信是 正常的图片下载流量 ,极难与恶意C2通信关联。 这利用了网络流量过滤策略的常见盲区——通常不会对图片内容进行深度检测以查找隐藏的恶意代码。 复合型规避技术 : 该攻击综合运用了 环境检测、时间延迟、字符串反转、代码混淆、QR码隐写 等多种技术,形成了一个纵深防御的规避体系,大大提升了被发现的难度。 四、 防御建议与缓解措施 | 防御层面 | 具体措施 | | :--- | :--- | | 开发者/组织 | 1. 依赖项审计 : 使用如 Socket 、 Snyk 、 GitHub Advanced Security 等工具对引入的开源依赖包进行持续的安全扫描,识别隐蔽的恶意代码和可疑网络请求。 2. 最小权限原则 : 严格控制NPM包的权限,避免授予不必要的网络或文件系统访问权。 3. 供应链安全 : 建立软件物料清单(SBOM),清晰掌握项目中的所有组件及其来源。 | | 安全研究员/工具 | 1. 增强静态分析 : 改进静态分析工具,使其能够检测更高级的混淆技术,如字符串反转、Base64编码后解码执行等。 2. 动态行为监控 : 在沙箱或运行时环境中监控软件的异常行为,如异常的网络连接(特别是对图片服务的非预期请求)、定时器后的敏感操作(如访问 document.cookie )等。 3. 网络流量深度检测 : 考虑对看似正常的图片等文件传输流量进行更深层次的内容安全检查(如隐写术分析),尽管这会带来性能开销。 | | 普通用户 | 保持浏览器和操作系统更新,使用可靠的安全软件,对不明来源的二维码保持警惕。 | 结论 : “Fezbox”恶意包是一个典型的软件供应链攻击案例,它展示了现代网络攻击的复杂性和隐蔽性。攻击者不再依赖单一技术,而是将多种规避技术组合成一条难以追踪的攻击链。此事件警示我们,必须采用多层次、纵深防御的安全策略,并借助先进的安全工具来应对日益演进的威胁。