供应链核爆:朝鲜黑客26个npm恶意包背后的隐写术与死信投递

华盟原创文章投稿奖励计划

当你的npm install下载的不仅是代码,还有一套完整的国家级监控套件——Pastebin上的计算机科学论文里,隐写着通往平壤的命令通道。

2026年3月,网络安全研究机构Socket与kmsec.uk联合披露了一起令人不寒而栗的供应链攻击事件:隶属于朝鲜Lazarus组织旗下、以"Contagious Interview"( contagiousinterview)著称的黑客组织Famous Chollima,在npm官方仓库中植入了26个高度伪装的恶意包。这一波攻击不仅展示了APT组织在供应链攻击领域的技术迭代,更开创性地将**隐写术(Steganography)死信投递(Dead Drop Resolver)**机制引入开源软件生态,对全球开发者社区构成了前所未有的威胁。

事件全貌:国家级APT的npm渗透阴影

此次被发现的恶意集群被安全研究人员命名为**"StegaBin"**战役,其核心攻击目标直指软件开发人员群体。攻击者深谙开发者心理与工作流程,精心构造了一系列看似合法的开发工具包,涵盖了从身份验证、中间件配置到测试框架的各个领域。

与以往"Contagious Interview"活动中直接托管在Bitbucket上的恶意脚本相比,此次攻击呈现出明显的技术升级特征。攻击者首次将Vercel无服务器平台作为C2(命令与控制)基础设施的托管点,在31个独立部署上构建了分布式控制网络。这种架构选择不仅提供了天然的CDN加速与全球节点覆盖,更重要的是利用了Vercel作为合法云服务的信誉,大幅降低了触发安全警报的概率。

更令安全分析师警惕的是,此次攻击展现出的供应链投毒精确制导能力。26个恶意包并非随机散布,而是针对开发者在构建现代Web应用时最依赖的技术栈进行定向伪装——从Express、Fastify、Hapi等主流Node.js框架,到bcrypt、lodash等基础依赖库,再到Kafka、MQTT等消息中间件,构成了几乎无死角的包围网。

攻击技术深析:Pastebin隐写术如何实现"死信投递"

攻击链第一阶段:Typosquatting与第一印象欺骗

所有26个恶意包均采用了**Typosquatting(域名抢注式攻击)**策略。攻击者故意使用与知名npm包极为相似的名称——例如bcryptance之于bcryptloadash-lint之于lodashzoddle之于zod——这就是技术社区中臭名昭著的"拼写错误陷阱"。

更具迷惑性的是,这些恶意包在package.json显式声明了它们冒充的合法包作为依赖。这种设计具有双重目的:一方面,安装这些恶意包时会自动拉取真实的依赖,确保项目功能表面正常;另一方面,当开发者检查依赖树时,会看到合法的依赖关系,从而降低戒备心理。这是一种典型的"披着羊皮的狼"战术,利用开发者的认知惯性进行自我掩护。

攻击链第二阶段:隐写术解码器的多层嵌套

当用户执行npm install时,恶意包的install.js脚本会自动执行,启动位于vendor/scrypt-js/version.js的核心载荷。这个载荷并非直接连接C2服务器,而是执行了一套复杂的多层死信投递机制

攻击者选用了Pastebin这一公开文本分享平台作为"死信信箱"。在表面上,这些Pastebin链接指向的是关于计算机科学的"无害"学术论文——典型的学术话语与技术探讨。然而,在看似平常的文字流中,攻击者通过字符级隐写术嵌入了真正的C2服务器地址。

隐写解码的技术实现

Socket安全团队详细揭示了这一隐写机制的工作原理:

  1. 零宽字符清理:解码器首先剥离文本中的零宽Unicode字符,消除潜在的干扰。

  2. 长度标记提取:从文本开头提取一个5位数字作为长度标记。

  3. 等距字符采样:基于长度标记计算整个文本中字符的等距采样位置。

  4. 字符提取与拼接:从计算出的位置上提取字符,并将其拼接成字符串。

  5. 分隔符解析:使用|||作为分隔符、===END===作为终止标记,将提取的字符序列解析为C2域名数组。

这种设计的精妙之处在于其高隐蔽性与抗检测性。传统的静态分析和网络流量监测难以识别Pastebin上的公开文本中隐藏的恶意载荷,因为文本内容本身完全无害,解码逻辑隐藏在本地执行的JavaScript中。

攻击链第三阶段:跨平台RAT的模块化部署

解码出真正的C2地址(如ext-checkdin.vercel.app)后,恶意软件会根据受害者的操作系统(Windows/macOS/Linux)获取对应的平台特定载荷。这些载荷并非单一的可执行文件,而是一个高度模块化的远程访问木马(RAT)套件,包含九个专门设计的恶意模块:

模块代号 功能描述
vs VS Code持久化模块:通过将恶意tasks.json写入VS Code配置目录,利用runOn: "folderOpen"触发器实现每次打开项目时自动回连C2
clip 键盘记录与剪贴板窃取:具备鼠标追踪、活动窗口监控功能,每10分钟进行一次数据外传
bro 浏览器凭证窃取:Python编写的浏览器密钥库提取模块
j 加密货币钱包收割机:针对Chrome、Brave、Firefox、Opera、Edge等浏览器,以及MetaMask、Phantom、Coinbase Wallet等主流钱包扩展,macOS上还额外窃取iCloud钥匙串
z 文件系统枚举与模式匹配窃取:根据预定义的文件模式窃取敏感文档
n 实时远程控制模块:通过WebSocket连接103.106.67.63:1247建立持久连接,支持实时命令执行与FTP数据外传
truffle 敏感信息扫描下载合法的TruffleHog工具,逆向利用其能力发现开发者密钥与秘密
git Git与SSH凭证窃取:窃取.ssh目录文件、提取Git凭证、扫描代码仓库
sched 持久化重部署:重新部署核心载荷,确保持久驻留

这种模块化的设计理念,体现了APT组织**"按需加载、功能解耦"**的典型攻击工程学思维。每个模块可以独立更新与分发,降低了整体暴露风险,同时提供了灵活的功能扩展能力。

恶意包清单:26个潜伏的威胁

以下是本次披露的全部26个恶意npm包列表。请开发团队立即排查项目依赖中是否存在以下包名:

argonist@0.41.0 bcryptance@6.5.2 bee-quarl@2.1.2 bubble-core@6.26.2 corstoken@2.14.7 daytonjs@1.11.20 ether-lint@5.9.4 expressjs-lint@5.3.2 fastify-lint@5.8.0 formmiderable@3.5.7 hapi-lint@19.1.2 iosysredis@5.13.2 jslint-config@10.22.2 jsnwebapptoken@8.40.2 kafkajs-lint@2.21.3 loadash-lint@4.17.24 mqttoken@5.40.2 prism-lint@7.4.2 promanage@6.0.21 sequelization@6.40.2 typoriem@0.4.17 undicy-lint@7.23.1 uuindex@13.1.0 vitetest-lint@4.1.21 windowston@3.19.2 zoddle@4.4.2 

所有包均包含vendor/scrypt-js/version.js路径的恶意文件,这是检测的关键指标之一。

防护与应对:在供应链战场中建立防线

1. 依赖安全审计

  • 使用供应链安全工具:集成Socket、Snyk、Sonatype等供应链安全平台进行实时的依赖风险评估
  • 锁定依赖版本:通过package-lock.jsonyarn.lock锁定依赖,防止间接依赖的恶意更新
  • 定期扫描与审计:建立CI/CD管道中的自动化依赖安全扫描流程

2. 针对隐写术攻击的静态分析

  • 深度代码审查:关注installpostinstall等生命周期脚本,警惕从Pastebin、Gist等公共平台动态获取内容的代码逻辑
  • 网络流量监控:监控开发环境的出站连接,尤其关注指向文本分享平台后的异常解码行为
  • 沙箱运行:在隔离环境中首次运行新引入的依赖,观察其网络行为与文件系统访问

3. 开发者安全意识培养

  • Typosquatting警觉:在引入新依赖时,仔细核对包名拼写,通过官方文档确认正确的npm包名称
  • 依赖树可视化:使用npm ls或可视化工具定期审查项目的依赖树,识别异常或可疑的依赖项
  • 最小化权限原则:限制开发环境的网络访问权限,减少恶意软件的传播与控制能力

4. 事件响应准备

  • 建立资产清单:维护关键项目的依赖清单,在供应链攻击事件发生时能够快速定位受影响系统
  • 隔离与取证:一旦发现依赖的安全问题,立即隔离相关环境,保留日志与镜像供取证分析
  • 快速修复流程:建立依赖替换与版本回滚的紧急响应能力

结语

StegaBin战役清晰地表明,国家级APT组织正在将复杂的攻击技术——隐写术、死信投递、模块化RAT——系统性地引入开源软件供应链战场。这已经不是简单的"投毒"行为,而是对抗机器检测与人类审查的高级持久化攻击工程

对于每一位开发者而言,信任链的构建不能再仅仅建立在包名称的"熟悉感"或下载量的"从众心理"之上。在这个代码即基础设施的时代,每一次npm install都应该像打开一封来自陌生人的邮件一样——保持警觉、验证来源、隔离运行。

供应链安全,本质上是一场信任与验证的博弈。当攻击者开始使用学术论文隐藏指挥通道时,我们的防御策略也必须升级到"过于谨慎"才是恰当的程度。


本文基于Socket安全团队与kmsec.uk的研究报告整理,技术细节援引自公开发表的安全分析。供应链安全需要社区共建,请在排查后向团队传达本文信息。

本文来源黑白之道,经授权后由华盟君发布,观点不代表华盟网的立场,转载请联系原作者。

发表回复