PyPI是用于Python包的第三方软件存储库。每个人都可以上传软件包到它(参见(PyPI))。
我已经为PyPI提出了这个问题,但我也会对类似的存储库(如JavaScript(国家预防机制)或作曲家(PHP) )感兴趣。
我在CTAN (tex)聊天中问过这个问题。答案是没有安全措施。他们相信人们/开发者不会上传恶意软件。
发布于 2015-01-16 13:28:04
我最近写了一个关于这个话题的博客帖子。
回答你的观点:
PyPI如何防止人们上传恶意软件?
没有,任何Python代码都可以上传。在包安装期间可以执行任意代码。仔细审核您的依赖项。
当我在搜索软件时,我如何(更)确定它不是恶意软件?
下载tarball并查看代码。
作为一个软件包的开发人员,我能做些什么来让别人觉得使用我的包更节省呢?
如果您的用户信任您,PyPI运行得非常好。包是通过HTTPS提供的,校验和可以用来验证。
在存储库中是否有恶意软件的“历史”示例?他们造成了多大的伤害?
我不知道任何历史性的例子,但我可以很容易地上传一个演示包。PyPI没有采取任何措施来防止这种情况发生。它作为Python包的简单索引,取决于开发人员信任的用户。
发布于 2016-07-14 02:10:22
这里有两种威胁模型:
PyPI没有试图解决#1。在安装之前审核代码,并且只从有声望的开发人员那里安装软件包,这是针对这些问题的唯一“保护”。如果您发现了恶意包,您可以将其报告给PyPI维护人员,该包可能会被删除。但是实际上,没有针对它的保护,因为在PyPI包可供安装之前没有预先检查过它们。
关于第二种威胁模式,有一些安全措施。更新版本的PyPI通过HTTPS下载包,包可以可选择签署GPG。有一些实现更新框架(杜联)的建议,尽管我不知道他们已经走了多远。
通过限制安装程序在安装过程中不使用sudo,将安装到用户包或虚拟包可以限制恶意包可能造成的损害。但不要太依赖它。
发布于 2015-01-16 13:48:19
据我所知,一般来说,从在线代码库(例如rubygems、npm、nuget、PyPI等)获得的代码保证非常有限。在许多情况下,他们不支持或执行诸如签名代码或其他基于完整性的安全措施等内容,在某些情况下,对要部署的站点的身份验证只是用户名/密码组合,因此您不仅依赖于开发人员,而不是故意在代码中放置恶意软件,而且这些开发人员也有良好的操作安全实践。
一个更大的问题是,在许多情况下,您安装的库具有依赖关系,在某些情况下依赖于大量依赖,因此您依赖于那些依赖关系的开发人员也不是恶意的,并且具有良好的安全实践。
正如特里所说,在安装时(甚至在使用库之前),有许多代码库可以执行任意代码,所以仅仅安装就会产生不良后果,特别是作为特权用户进行安装。
就历史上的妥协实例而言,2013年的鲁比宝石妥协就是存储库遭到攻击的一个例子。
在解决问题方面,有一个更新框架倡议来尝试和改善这种情况。
https://security.stackexchange.com/questions/79326
复制相似问题