Page 36 - 《软件学报》2026年第7期
P. 36
胡明哲 等: Python 软件包库中 C/C++外部语言调用的安全性分析 2721
为共计 15 种漏洞模式的漏洞基准测例; 通过识别互操作接口, 在 Python 官方软件包库 PyPI 中选取安装量最大的
16 个互操作软件包, 提取其中的互操作程序; 针对 2010 年以来代表性的先进 Python-C/C++互操作漏洞检查研究,
在漏洞基准测例和互操作软件包上进行详细的对比实验, 评估分析先进工具的可靠性、完备性和可扩展性, 揭示
在漏洞基准测例上漏报率高、在供应链软件包库上误报率高、可扩展性差的问题, 通过其中局部较优的解决方案
和整体不足启示后续研究的发展方向. 同时在安装量最大的 16 个互操作软件包上, 先进工具评估报告超过 700 个
漏洞警告, 经过人工分析检查, 确认在 6 个软件包中新发现 3 种共计 21 个实际漏洞. 漏洞基准套件的构建及评估
系统的设计目标如图 1 所示.
SOTA 互操作 Python/C API
PyPI
漏洞检查研究 文档 (v3.13)
含有 C/C++ 外部调用的 评估系统 互操作漏洞模式
Python 软件包库
互操作程序 漏洞标签 漏洞基准测例
漏洞基准套件
可靠性评估 可扩展性评估 完备性评估
图 1 漏洞基准套件构建及评估系统设计目标
本文主要贡献如下.
● 漏洞分类与基准构建. 本文系统地收集并归纳 Python 的 C/C++外部调用的安全隐患, 并据此构建了覆盖
15 种漏洞模式的基准套件, 包括不同语言特性互操作带来的漏洞测例, 以及 Python 软件供应链中高安装量的互操
作软件包中的实际工程漏洞.
● 评估系统与实证发现. 通过设计统一的评估系统, 基于漏洞基准套件, 我们全面评估已有的先进 Python-C/
C++互操作安全性分析工具, 确认新发现 3 种漏洞模式共 21 个真实存在于 6 个 PyPI 高安装量软件包的真实漏洞.
● 现状与发展方向分析. 评估结果反映互操作安全检查在可靠性、完备性、可扩展性等方面现存的不足, 揭
示复杂语言特性互操作分析能力的缺陷, 以及复杂系统动静态分析的构建要求. 漏洞基准套件和评估分析可以作
为未来互操作安全性分析方法和技术改进的对照标准与基础设施. 本文首先介绍 Python-C/C++互操作的基本机
制 (第 1 节), 然后通过系统的漏洞模式分类 (第 2 节) 和漏洞基准套件构建 (第 3 节), 全面地评估已有的先进
Python-C/C++互操作程序漏洞检查研究和工具 (第 4 节), 最后给出总结与展望 (第 5 节), 揭示 Python-C/C++互操
作程序安全性分析的现状和不足.
1 Python-C/C++互操作
Python/C API 是 CPython 编译器核心提供给 C/C++程序的编程接口, 用以实现 Python 程序的 C/C++扩展模
块 (包括 CPython 标准库的一部分) 或是将 Python 运行时嵌入 C/C++程序. Python 的 C/C++扩展模块被广泛使用
于 Python 生态的软件供应链, 如深度学习框架 TensorFlow 和 PyTorch、自动驾驶平台 Apollo、加密货币
Bitcoin 等. 如图 2 所示是来自 protobuf 项目的 Python-C/C++互操作实例. protobuf (protocol buffer) 是 Google 开源
的用以序列化结构化数据的项目, 底层使用 C 实现, 并提供多种语言接口. PyPI 同名软件包 protobuf 是其 Python
接口, 累积下载超过 4 亿次, 是诸多数据密集型项目如深度学习框架 TensorFlow 等的核心组件.
Python/C API 定义了一系列宏、函数和变量, 通过在跨语言互操作程序中包含 Python.h 头文件引入, 是
C/C++程序操作 Python 运行时的接口. 如图 2 中 message.c 第 24–29 行, Python/C API 结构体 PyType_Spec 类型的
变量 PyUpb_Message_Spec 定义扩展类 Message; PyUpb_Message_Slots 是一个 PyType_Slot 类型的 Python/C API
结构体数组, 定义在第 20–22 行; PyUpb_Message_Methods 是一个 PyMethodDef 类型的 Python/C API 结构体数组,

