沙虫蠕虫大规模感染npm包:技术分析与防护指南

沙虫蠕虫通过感染npm包进行自我传播,窃取敏感数据并暴露私有仓库。本文详细分析其技术实现、感染特征,并提供防护措施和入侵指标,帮助开发者防范此类供应链攻击。

技术细节

恶意代码执行机制

当受感染的npm包被安装时,蠕虫的恶意代码会自动执行。它会启动一个超过3 MB大小的恶意脚本bundle.js,该脚本包含多个合法的开源工作模块:

  • 用于与AWS云服务交互的库
  • 从Google Cloud Platform环境获取元数据的GCP模块
  • TruffleHog工具函数,用于扫描各种数据源以查找敏感信息
  • 与GitHub API交互的工具

秘密数据窃取

恶意软件首先收集受害者操作系统信息,并检查环境中是否存在npm令牌和经过身份验证的GitHub用户令牌。如果不存在有效的GitHub令牌,bundle.js将终止执行。

通过GitHub令牌,恶意软件会:

  • 获取当前GitHub用户信息
  • 创建临时bash脚本/tmp/processor.sh
  • 在用户所有可访问的仓库中创建名为shai-hulud的新分支
  • 上传shai-hulud-workflow.yml工作流配置文件

工作流配置恶意行为

该工作流文件配置在每次推送时激活,会:

  • 从受害者的仓库收集秘密数据
  • 将数据双重Base64编码
  • 转发到攻击者的服务器

自我复制机制

恶意脚本获取受害者下载量最高的20个包列表,对每个包执行以下操作:

  • 下载包的tarball版本
  • 创建临时目录并解压包
  • 添加恶意bundle.js到原始包中
  • 在package.json中添加postinstall命令执行恶意脚本
  • 将包版本号增加1后重新发布到npm

秘密数据上传到GitHub

蠕虫使用TruffleHog实用程序从目标系统收集秘密:

  • 从原始仓库下载最新版本的实用程序
  • 使用AWS和GCP模块扫描秘密
  • 将收集的数据聚合到单个对象中
  • 在受害者配置文件中创建名为"Shai-Hulud"的仓库
  • 将收集的信息作为data.json文件上传

感染特征

识别特征

被修改的包包含名为package.tar的存档,这与通常包含与包本身名称匹配的存档的包不同。

初始感染包

通过研究发现,ngx-bootstrap版本18.1.4是沙虫蠕虫传播的起点。该包将恶意命令列为preinstall命令(在安装前运行),而不是其他受感染包中的postinstall命令。

受感染的库和CrowdStrike

沙虫蠕虫已感染500多个流行包,包括知名公司CrowdStrike的库:

  • @crowdstrike/commitlint版本8.1.1、8.1.2
  • @crowdstrike/falcon-shoelace版本0.4.1、0.4.2
  • @crowdstrike/foundry-js版本0.19.1、0.19.2
  • 其他多个CrowdStrike相关包

特别值得注意的是@ctrl/tinycolor库的感染,该库每周有超过200万用户下载。

预防和保护

防护建议

  • 使用专门的开源组件监控解决方案
  • 对于个人设备,推荐使用Kaspersky Premium提供多层防护
  • 对于企业设备,建议实施Kaspersky Next等综合解决方案

检测能力

Kaspersky产品将沙虫蠕虫威胁检测为HEUR:Worm.Script.Shulud.gen

应急响应措施

  1. 使用可靠的安全解决方案进行全系统扫描
  2. 审计GitHub仓库:
    • 检查名为shai-hulud的仓库
    • 查找非典型或未知的分支、拉取请求和文件
    • 审计GitHub Actions日志中包含shai-hulud的字符串
  3. 重新颁发npm和GitHub令牌、云密钥,并轮换其他秘密
  4. 清除缓存并清点npm模块
  5. 检查入侵指标,如系统中的文件或网络工件

入侵指标

文件

  • bundle.js
  • shai-hulud-workflow.yml

字符串

  • shai-hulud

哈希值

  • C96FBBE010DD4C5BFB801780856EC228
  • 78E701F42B76CCDE3F2678E548886860

网络工件

受感染的包

包括@ahmedhfarag/ngx-perfect-scrollbar、@crowdstrike/commitlint、@ctrl/tinycolor等500多个包。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计