An Empirical Study of Malicious Code In PyPI Ecosystem PyPI生态系统中恶意代码的实证研究
Nanyang Technological University, Singapore;Sichuan University, China
Abstract
PyPI为开发者提供了一个方便易用的包管理平台,使他们能够快速实现特定的功能,提高工作效率。然而,PyPI生态系统的快速发展导致了严重的恶意包传播问题。恶意开发人员将恶意软件包伪装成正常的,给最终用户带来重大安全风险。
为此,我们进行了实证研究,了解PyPI生态系统中恶意代码生命周期的特征和现状。我们首先构建了自动化数据采集框架,并整理了包含4669个恶意包文件的多源恶意代码数据集。根据恶意行为特征,我们初步将这些恶意代码分为五类。我们的研究发现,超过 50% 的恶意代码表现出多种恶意行为,其中信息窃取和命令执行尤为普遍。此外,我们还观察到了几种新颖的攻击媒介和反检测技术。我们的分析显示,74.81%的恶意包通过源代码安装成功进入最终用户项目,从而增加了安全风险。一项现实调查显示,许多报告的恶意软件包持续存在于全球 PyPI 镜像服务器中,超过 72% 的恶意软件包在被发现后仍长期存在。最后,我们勾勒出PyPI生态系统中恶意代码的生命周期图,有效反映了恶意代码在不同阶段的特征。我们还提出了一些建议的缓解措施,以提高 Python 开源生态系统的安全性。
1.Introduction
Python广泛应用于各种程序系统的开发。它提供了一个官方的第三方存储库(即 PyPI.org [1]),其中包含大量可重用的包文件以加快项目开发。此外,GitHub、Gitee等在线软件源码托管服务平台也托管了大量可复用的包。虽然这为用户有效地使用各种功能提供了极大的便利,但平台本身并不保证内容的安全性。因此,犯罪分子可以上传恶意软件库和软件包文件 [2],迷惑开发人员并导致他们无意中下载这些软件包并将其导入到自己的项目中 [3]。这些具有恶意行为的代码,例如植入后门[4]、窃取敏感系统信息[5]等,造成了严重的软件安全风险。例如,Easyfuncsys [6] 包是恶意的,它会窃取用户设备上存储的“leveldb”文件,提取令牌信息,并将其发送到远程服务器。该软件包已被下载超过1045次,对用户的个人隐私构成重大威胁。
在PyPI生态系统中,目前的实证研究主要集中在恶意软件包级别[7]-[9],而源代码级别的相关问题尚未深入探讨。然而,缺乏可行的实证研究限制了我们对生态系统中恶意代码特征的洞察。实证研究可以揭示恶意代码的传播模式、影响因素和潜在危害,从而为研究人员开发更有效的检测方法提供可靠的基础。通过实证研究,更容易确保所提出的检测方法有效解决恶意代码问题。
此外,对于实证研究来说,恶意代码数据集是基石。构建可靠且高质量的 PyPI 恶意包数据集对于深入研究 PyPI 生态系统中恶意代码的属性和来源至关重要。然而,没有普遍接受和公开可用的 PyPI 恶意包数据集。而欧姆等人。 [10]建立了一个名为 Backstabbers-Knife-Collection 的 python 恶意代码数据集,它仅包含 250 个 PyPI 恶意包,缺乏足够的样本特征和元数据信息。因此,研究人员面临着基于公共数据开发和研究恶意代码检测算法的困难。需要开发全面的数据集来提供可靠的数据支持。
为了填补这一研究空白,本文旨在对 PyPI 生态系统内的恶意代码进行实证分析。我们首先构建一个自动化恶意代码收集框架,通过 PyPI 镜像和其他来源收集可用恶意代码的高质量数据集。
然后,我们设置了四个 RQ 来调查 PyPI 生态系统中恶意代码的生命周期阶段。研究从恶意贡献开发者出发,对恶意代码的属性(RQ1)和攻击策略(RQ2)进行深入分析,揭示攻击者的意图。随后重点关注恶意代码如何逃避检测并在PyPI平台上分发和传播(RQ3)。最后,对影响和最终用户系统上的恶意代码渗透 (RQ4)进行了调查。这四个研究问题贯穿整个生命周期,深入探讨恶意代码在不同阶段的行为和影响,同时提供与软件供应链安全相关的全面见解。
RQ1:代码属性。 PyPI 生态系统中恶意代码的主要属性和来源是什么?它们与其他平台相比如何?
RQ2:攻击策略。攻击者在将代码注入 PyPI 生态系统中的开源包时如何组合各种攻击策略和恶意行为,以及这些策略如何在不同平台和目标之间演变和适应?
RQ3:规避技术和分发。现有检测工具在识别恶意软件包方面的效果如何,恶意代码采用哪些规避方法来躲避这些工具,以及这些方法对其在实际应用程序中的分布有何影响?
RQ4:影响和渗透。在 PyPI 生态系统中,随着时间的推移,恶意软件包对最终用户的影响如何演变,哪些操作系统受到了影响,以及恶意软件包采用了哪些方法来渗透用户系统?
该研究的主要贡献可概括为以下几点:
- 我们构建了包含 4,467 个恶意代码的数据集,涵盖恶意软件样本、恶意代码片段和 PyPI 恶意软件包。值得注意的是,PyPI 恶意软件包子集包含 2,035 个实例,使其成为最大的公开可用的 PyPI 恶意包数据集。此外,本文提出的数据集构建方法也可以应用于其他编程语言。
- 我们构建了一个自动分类框架,将收集到的恶意代码分为不同类型。由于不同类型的恶意代码具有独特的触发方式和执行模式,我们提取了每种类型恶意代码的模式,为研究人员提供更好的检测恶意代码的思路。
- 我们对 PyPI 生态系统中的恶意代码进行了全面的实证研究。我们从恶意贡献者、开源平台和最终用户三个维度分析了恶意代码的特征、行为、传播和影响。此外,我们还提出了恶意代码的生命周期画像,有效揭示了恶意代码在不同阶段的特征。
- 我们在源代码级别分析了 PyPI 生态系统中的恶意代码,揭示了其行为模式和进化特征。我们发现了几种新颖的反检测技术。我们还在 PyPI 镜像服务器中发现了 1,791 个恶意软件包。清华镜像中恶意包残留率高达89%。此外,我们在安装、导入和运行时发现了三个攻击向量。
2.Background
A. Malicious Code 恶意代码
恶意代码是指故意制作的代码段或嵌入程序中以执行未经授权的行为的软件。攻击者利用恶意代码达到信息窃取和系统破坏等目的。恶意代码有多种类型,每种类型都有特定的功能和传播方法。病毒、蠕虫和僵尸网络可以自我复制;然而,病毒需要附加到其他程序才能传播和执行。勒索软件、间谍软件、广告软件、特洛伊木马和兔子不会自我复制,但可以在不附加到其他程序的情况下传播。
B. Python Package Manager Python包管理器
包管理器是一种软件工具,它能够以一致的方式自动执行计算机操作系统的安装、升级、配置和删除计算机程序的过程。它帮助用户管理不同软件包所需的依赖关系和库,简化软件安装过程。包管理器确保各个软件包一致运行并保持与其他系统组件的兼容性。 PyPI 为用户提供了一个用于搜索、安装和发布各种 Python 包的集中存储库。然而,该存储库中存在大量恶意代码。本文将重点对该代码进行实证分析,以揭示潜在的安全风险。
3.Data Collection And Classification
A. Data Collection
B. Malicious code classification
我们提出了一种基于API调用序列的聚类方法来分析和分类恶意代码。我们的目标是揭示恶意软件的行为模式,从而更有效地识别具有相似行为属性的恶意代码。我们从已知的与恶意行为密切相关的恶意代码中提取API调用序列来实现这一目标。这些API调用序列包含恶意代码在执行过程中如何与操作系统或其他软件模块交互的基本信息。通过对API调用序列进行聚类,我们可以发现不同恶意代码之间的共同行为。在实施聚类方法之前,我们使用词法分析技术对 API 调用进行标记分段。此步骤包括将 API 调用的代码拆分为基本语法元素(例如函数名称、参数和运算符),为后续向量化和聚类过程提供输入。接下来,我们使用词嵌入技术将词法分析后的 API 调用序列转换为数值向量。我们使用Word2Vec方法将原始API调用序列转换为数值向量以应用聚类算法。最后,利用谱聚类算法根据恶意代码的行为特征将其分为不同的类别。同时,最终的分类结果经过人工确认,保证聚类结果的准确性。如图所示,我们展示了 API 调用序列的聚类结果。我们成功识别出具有不同恶意行为的五个类别。每个类别都有独特的行为模式,可以帮助我们更好地了解恶意软件的行为特征,为进一步的恶意代码分析和检测提供有价值的信息。
4.Empirical Study 实证研究
A. Life cycle portrait of malicious code 恶意代码生命周期画像
B. RQ1 (Code Attributes): What are the primary attributes and sources of malicious code in the PyPI ecosystem, and how do they compare to other platforms? RQ1(代码属性):PyPI 生态系统中恶意代码的主要属性和来源是什么?与其他平台相比如何?
发现1:在PyPI生态系统中,恶意包的恶意代码量相对较少;然而,它们表现出高代码密度的普遍存在。
发现2:虽然来自不同数据源的恶意代码相似度较低且重叠较少,但我们发现攻击者利用渗透工具生成恶意代码并将其注入到 PyPI 生态系统中。
RQ1 的答案:在 PyPI 生态系统中,恶意代码表现出独特的属性组合,其特点是复杂性相对较低,但代码密度却很高,而且与其他数据源的相似性较低。
洞察:根据PyPI生态内恶意代码的特点,有必要研发针对性的检测工具。同时,关注渗透工具生成的攻击代码以及恶意代码作者的策略和传播方法有助于更有效地识别和减轻潜在的安全威胁。
C. RQ2 (Attack Tactics): How do attackers combine various attack strategies and malicious behaviors when injecting code into open-source packages in the PyPI ecosystem, and how do these tactics evolve and adapt across different platforms and objectives? RQ2(攻击策略):攻击者在向 PyPI 生态系统中的开源包中注入代码时如何组合各种攻击策略和恶意行为,以及这些策略如何在不同平台和目标之间演变和适应?
发现3:在PyPI生态系统中,恶意代码中普遍存在多种恶意行为,其中信息窃取和命令执行行为尤为突出,这表明攻击者更喜欢采用综合手段来实现攻击目标。
发现4:恶意代码具有显着的针对性和适应性,针对不同平台采用不同的攻击策略和触发机制。
发现 5:PyPI 生态系统中的恶意代码不是静态的,而是不断演变的。攻击者不断改进其恶意行为,以实现更复杂、更精细的功能和代码结构。
RQ2的答案:攻击者熟练地融合了多种攻击策略和恶意行为,其中信息窃取行为在这些多方面的恶意行为中表现得尤为突出。恶意代码具有明显的针对性和适应性,针对不同的系统具有不同的适配代码。此外,恶意代码表现出明显的持续进化特征,旨在实现更高的复杂性和完善的功能。
洞察:加深对恶意行为的深层原因和攻击者的目的的理解,关注恶意代码的演化特征,开发高效的检测工具。
D. RQ3 (Evasion Techniques and Distribution): How effective are existing detection tools at identifying malicious packages, which evasion methods do malicious code employ to elude these tools, and what is the impact of these methods on their distribution in real-world applications? RQ3(规避技术和分发):现有检测工具在识别恶意软件包方面的效果如何,恶意代码采用哪些规避方法来躲避这些工具,以及这些方法对其在实际应用程序中的分发有何影响?
发现6:现有的恶意代码检测工具在识别恶意包方面表现出一定的有效性,但误报率仍然相当高。
发现7:恶意代码采用多种反检测技术来逃避安全工具,包括代码混淆、外部负载、多阶段请求、行为重叠、间接导入、图像隐写术和沙箱逃逸。
发现8:各国PyPI镜像服务器中存在大量恶意软件包,其中中国镜像生态最为严重。
RQ3 的答案:事实证明,恶意代码能够通过采用多种反分析技术来逃避现有工具的检测。同时,PyPI 存储库中仍然存在大量恶意软件包,对最终用户构成严重的安全威胁。
洞察:有必要设计有针对性的反混淆和解密方法来对抗恶意代码使用的反检测技术。另外,镜像维护人员应及时清除恶意软件包,以增强镜像的安全性。
E. RQ4 (Impact and Infiltration) Within the PyPI ecosystem, how has the impact of malicious packages on end-users evolved over time, which operating systems have been affected, and what methods have been employed by malicious packages to infiltrate user systems? RQ4(影响和渗透)在 PyPI 生态系统中,随着时间的推移,恶意软件包对最终用户的影响如何演变,哪些操作系统受到了影响,以及恶意软件包采用了哪些方法来渗透用户系统?
发现9:不少恶意注册中心(72.34%)被发现后,其潜伏期之外的残留时间较长,这说明这些恶意注册中心在被发现后仍然存在。
发现10:PyPI生态系统中存在三种攻击向量,安装时攻击、运行时攻击和导入时攻击,其中安装时攻击最多。
1.安装时攻击意思是包本身是恶意的(setup.py)
2.导入时import-attack攻击意思是这个包本身非恶意,但导入了恶意包
3.运行时攻击意思是攻击是通过调用包含嵌入恶意代码的函数来执行的,当用户运行代码时,该函数就会激活
发现11:恶意软件包主要通过源代码安装(74.81%),其中Linux系统受影响最大(77.08%)。因此,Linux用户在使用pip等工具时需要谨慎选择和安装软件包,并仔细验证软件包的来源和可信性。
RQ4 的答案:在 PyPI 生态系统中,恶意软件包对最终用户的影响随着时间的推移逐渐增加。恶意软件包主要通过源代码安装攻击的方式渗透用户系统,其中Linux系统受影响最大。
洞察:研究人员应加强对恶意包的监控和分析,提高检测效率和准确性。最终用户在使用pip等工具选择和安装软件包时应谨慎,并验证软件包的来源和可信度,以确保系统安全。
5.Implications 影响
根据我们的发现,我们为各类参与者提出了缓解措施以及未来工作的研究方向。
用户:需要提高安全意识。安装安全软件包、定期扫描主机系统、及时更新本地软件包至关重要。利用官方注册中心和安全镜像源确保下载软件包的可靠性和安全性。
注册表维护者:应确保注册表的安全并防止恶意软件包的传播。这包括禁止恶意维护者的帐户和加强审查机制。提供先进且全面的检测工具来识别恶意包对于过滤和防御至关重要。提供完整的恶意包黑名单,保证镜像源的安全。
注册表镜像维护者:需要定期与官方注册表同步,以确保一致性并避免错过重要的更新和修复。及时删除恶意包可以保证PyPI镜像的安全。
研究人员:可以深入研究攻击向量,探索新的攻击模式和技术;研究先进、全面的恶意代码检测方法,对抗规避技术;关注代码演化,洞察演化趋势;研究多行为特征,优化恶意代码识别和防御。 。利用动态和静态分析以及机器学习技术来发现新的恶意代码。大规模扫描开源包时,重点关注安装时和导入时攻击向量,以提高扫描效率。
6.Related Work
A. Malicious Code Detection 恶意代码检测
B. Package Management Security 包管理安全
7.Conclusion
在本文中,我们构建了包含 4,669 个恶意代码的数据集并进行了大规模的实证研究。研究表明,PyPI生态系统中的恶意代码主要表现出单一功能,并且比其他平台中的恶意代码更简单。此外,恶意代码恶意行为较多,其中信息窃取和命令执行行为较为突出。恶意代码的攻击策略和触发方式因平台而异,但适应性强、针对性强,且具有不断演化、变异的特点。恶意代码利用许多反检测技术来绕过检测。最后我们发现,恶意代码主要通过源码安装的方式进入最终用户项目,并且以Linux系统为主要目标。
这项实证研究为 PyPI 生态系统中的恶意代码生命周期提供了有价值的见解,为未来的研究提供了可能的方向。此外,这些发现可以作为制定更有效的安全措施以降低恶意代码攻击风险的参考。
8.References
46
The datasets of the studies can be publicly accessed at:https://github.com/lxyeternal/pypi malregistry.