技术细节
恶意代码执行机制
当受感染的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
应急响应措施
- 使用可靠的安全解决方案进行全系统扫描
- 审计GitHub仓库:
- 检查名为shai-hulud的仓库
- 查找非典型或未知的分支、拉取请求和文件
- 审计GitHub Actions日志中包含shai-hulud的字符串
- 重新颁发npm和GitHub令牌、云密钥,并轮换其他秘密
- 清除缓存并清点npm模块
- 检查入侵指标,如系统中的文件或网络工件
入侵指标
文件
- bundle.js
- shai-hulud-workflow.yml
字符串
- shai-hulud
哈希值
- C96FBBE010DD4C5BFB801780856EC228
- 78E701F42B76CCDE3F2678E548886860
网络工件
受感染的包
包括@ahmedhfarag/ngx-perfect-scrollbar、@crowdstrike/commitlint、@ctrl/tinycolor等500多个包。