官方Python存储库中的恶意模块处在安全区域中

尽管在机器上执行代码没有什么特别之处,但从安全角度来看,执行此代码的时刻是一个重要的细节。

Python编程语言允许您安装可以包含在程序中的包以扩展其功能。执行程序时,程序包中的代码将按预期执行。但是,一种鲜为人知的能力是代码也可以作为软件包本身安装的一部分来执行。

在GitHub上使用句柄mschwager的研究人员演示了一种攻击方法,该方法滥用Python模块中的“setup.py”文件,以便在安装软件包时执行代码执行。

使用此方法,攻击者可以将恶意代码放入可以使用root权限执行的程序包中,但并非所有程序包都需要此级别的权限。

为了证明他的观点,mschwager 通过创建一个他称为0wned的概念验证安装文件来详细说明攻击。以下代码显示了在“pip install”运行时如何调用自定义“PostInstallCommand”类。

from setuptools import setup
from setuptools.command.install import install

class PostInstallCommand(install):
    def run(self):
        # Insert code here
        install.run(self)

setup(
    ...
    cmdclass={
        'install': PostInstallCommand,
    },
    ...
)

安装文件允许在背地部署恶意软件

Python模块通常使用名为“pip”的包管理器安装,该管理器启动“setup.py”文件,该文件由包的开发人员提供用于安装目的。此文件通常很少受到关注,因为它仅用于帮助用户将模块添加到其计算机中。

但是,当谈到模块或软件包时,人们倾向于更彻底地检查它们,因为这是将在程序中导入和运行的代码。因此,他们更容易检查代码并发现恶意代码。

“当您使用IDE并打开模块功能时,它会打开Python目录中的文件,”Malwarebytes开发人员和恶意软件分析师Tigzy告诉BleepingComputer。“所以人们可以看出是否出现了问题,”他补充道。

但是,分析设置文件的可能性较小,这为攻击者提供了一种更简单的方法来入侵计算机而不会篡改模块。

此外,Tigzy解释说,为应用程序提供服务的Python包的代码可能永远不会执行,因为应用程序不需要该特定部分。

然而,在'setup.py'中放置恶意代码将允许安装和忽略恶意软件,即使根本不使用包或Python本身也是如此。

官方Python存储库中的恶意模块

恶意库在包存储库中并不罕见。去年,研究人员在PyPi中发现了其中的10个,PyPi是Python编程语言的官方第三方商店。

恶意开发人员使用类似于合法模块的名称上传他们的库,从而欺骗用户下载它们。

显然,攻击是有效的,因为用户认为包的名称是正确的,并且没有费心去查看代码或检查拼写。上传恶意内容是可能的,因为存储库缺少安全检查和添加到其索引的内容的筛选。

保持安全

mschwager建议开发人员始终对他们在系统上安装的Python模块持怀疑态度,特别是当他们需要root权限时。

在其他情况下,mschwager建议使用--user标志设置本地权限,并以散列检查模式安装软件包,以确保它们不会受到损害。

花费更多的时间来找到具有正确名称的模块也列在防御列表中,这样可以抵御这样的伎俩。

  • 发表于:
  • 原文链接https://www.bleepingcomputer.com/news/security/python-package-installation-can-trigger-malicious-code/
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券