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 结构体数组,
   31   32   33   34   35   36   37   38   39   40   41