潜在供应链攻击:pyd和py优先级问题
字数 1071 2025-08-15 21:33:12
潜在供应链攻击: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:
#!/usr/bin/python
# -*- coding: utf-8 -*-
def test():
print("输出测试。")
if __name__ == "__main__":
test()
- 编译包含恶意代码的版本为
tmp_debug.pyd:
#!/usr/bin/python
# -*- coding: utf-8 -*-
def test():
print("恶意逻辑测试。")
print("输出测试。")
if __name__ == "__main__":
test()
- 将两个文件放在同一目录,用户调用时:
import tmp_debug
tmp_debug.test()
实际执行的是.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的模块加载机制
- 对二进制模块保持警惕
- 实施多层防御措施
- 建立安全审计流程
通过综合运用技术和管理措施,可以有效降低此类攻击的风险。