潜在供应链攻击:pyd和py优先级问题
字数 1071 2025-08-15 21:33:12

潜在供应链攻击:Python中.pyd和.py文件的优先级问题

1. 问题概述

Cython工具可以将Python代码编译为.pyd文件(Windows平台)或.so文件(Unix平台),这种编译后的文件具有以下特性:

  1. 执行优先级高于同名的.py文件
  2. 难以直接阅读(只能反汇编)
  3. 在IDE中查看代码时会被忽略(如PyCharm会跳转到.py文件)

这种特性可能被利用进行供应链攻击,攻击者可以:

  • 发布包含恶意.pyd文件的合法Python包
  • 在用户环境中放置恶意.pyd文件
  • 利用优先级特性覆盖正常的.py文件功能

2. 技术细节

2.1 优先级机制

当Python解释器遇到import module时,查找顺序如下:

  1. 首先查找module.pyd(Windows)或module.so(Unix)
  2. 如果找不到,再查找module.py
  3. 如果还找不到,继续其他搜索路径

2.2 攻击演示

攻击者可以:

  1. 创建合法Python文件tmp_debug.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
def test():
    print("输出测试。")
    
if __name__ == "__main__":
    test()
  1. 编译包含恶意代码的版本为tmp_debug.pyd
#!/usr/bin/python
# -*- coding: utf-8 -*-
def test():
    print("恶意逻辑测试。")
    print("输出测试。")
    
if __name__ == "__main__":
    test()
  1. 将两个文件放在同一目录,用户调用时:
import tmp_debug
tmp_debug.test()

实际执行的是.pyd中的恶意代码,但IDE会显示.py文件的内容。

3. 防御措施

3.1 针对开发者的建议

  1. 重新编译验证

    • 如果可能,从可信源码重新编译所有.pyd文件
    • 确保编译环境安全
  2. 完整性校验

    • 对关键.pyd文件进行哈希校验
    • 与官方发布版本进行对比
  3. 安全审计

    • 对第三方库中的.pyd文件进行反汇编检查
    • 特别关注与安全相关的模块

3.2 针对系统管理员的建议

  1. 文件系统监控

    • 监控关键目录中.pyd文件的创建和修改
    • 设置适当的文件权限
  2. 依赖管理

    • 使用虚拟环境隔离项目依赖
    • 定期更新和审计依赖项
  3. 安全工具

    • 使用静态分析工具扫描.pyd文件
    • 部署EDR解决方案监控异常行为

4. 检测方法

  1. 手动检测

    • 删除可疑.pyd文件后测试功能是否正常
    • 比较不同环境中相同模块的行为
  2. 工具检测

    • 使用dumpbin(Windows)或objdump(Linux)反汇编.pyd文件
    • 使用strings命令查看文件中可打印字符串
  3. 行为监控

    • 监控Python进程的异常网络连接
    • 检查异常文件操作

5. 总结

.pyd文件的优先级特性虽然提高了性能,但也带来了供应链攻击的风险。开发者和管理员需要:

  1. 了解Python的模块加载机制
  2. 对二进制模块保持警惕
  3. 实施多层防御措施
  4. 建立安全审计流程

通过综合运用技术和管理措施,可以有效降低此类攻击的风险。

潜在供应链攻击:Python中.pyd和.py文件的优先级问题 1. 问题概述 Cython工具可以将Python代码编译为.pyd文件(Windows平台)或.so文件(Unix平台),这种编译后的文件具有以下特性: 执行优先级高于同名的.py文件 难以直接阅读(只能反汇编) 在IDE中查看代码时会被忽略(如PyCharm会跳转到.py文件) 这种特性可能被利用进行供应链攻击,攻击者可以: 发布包含恶意.pyd文件的合法Python包 在用户环境中放置恶意.pyd文件 利用优先级特性覆盖正常的.py文件功能 2. 技术细节 2.1 优先级机制 当Python解释器遇到 import module 时,查找顺序如下: 首先查找 module.pyd (Windows)或 module.so (Unix) 如果找不到,再查找 module.py 如果还找不到,继续其他搜索路径 2.2 攻击演示 攻击者可以: 创建合法Python文件 tmp_debug.py : 编译包含恶意代码的版本为 tmp_debug.pyd : 将两个文件放在同一目录,用户调用时: 实际执行的是.pyd中的恶意代码,但IDE会显示.py文件的内容。 3. 防御措施 3.1 针对开发者的建议 重新编译验证 : 如果可能,从可信源码重新编译所有.pyd文件 确保编译环境安全 完整性校验 : 对关键.pyd文件进行哈希校验 与官方发布版本进行对比 安全审计 : 对第三方库中的.pyd文件进行反汇编检查 特别关注与安全相关的模块 3.2 针对系统管理员的建议 文件系统监控 : 监控关键目录中.pyd文件的创建和修改 设置适当的文件权限 依赖管理 : 使用虚拟环境隔离项目依赖 定期更新和审计依赖项 安全工具 : 使用静态分析工具扫描.pyd文件 部署EDR解决方案监控异常行为 4. 检测方法 手动检测 : 删除可疑.pyd文件后测试功能是否正常 比较不同环境中相同模块的行为 工具检测 : 使用 dumpbin (Windows)或 objdump (Linux)反汇编.pyd文件 使用 strings 命令查看文件中可打印字符串 行为监控 : 监控Python进程的异常网络连接 检查异常文件操作 5. 总结 .pyd文件的优先级特性虽然提高了性能,但也带来了供应链攻击的风险。开发者和管理员需要: 了解Python的模块加载机制 对二进制模块保持警惕 实施多层防御措施 建立安全审计流程 通过综合运用技术和管理措施,可以有效降低此类攻击的风险。