1. 前言
Python Package Index(PyPI)是 Python 社区的官方第三方库仓库,作为一个开发者,我们可以通过 pip 工具方便地从 PyPI 上安装第三方库。然而,最近 PyPI 遇到了一些麻烦,被投毒的恶意软件包数量超过了 150 个,这使得开发者们感到十分担忧。
2. PyPI 遭遇投毒事件
2.1 事件详情
投毒事件发生在2021年11月16日,当天OSC(中国开源社区)的维护人员在使用 PyPI 工具时,发现他们正在安装的库被重定向到了外部地址,这表明库已经被篡改。后来的调查发现,PyPI 官方的仓库中有大量恶意的软件包,这些软件包包含恶意代码和后门。
2.2 恶意软件包的特点
这些恶意软件包都具有一定的相似性,它们的描述信息中经常包含与哈希和加密相关的关键字,而且它们的安装脚本也包含了可疑的代码。这些软件包实际上是通过替换正常软件包的方式进行传播的,它们的名称与正常软件包的名称非常相似,以致很难被察觉。
2.3 恶意软件包的影响
这些恶意软件包可能会对系统安全造成极大的威胁,因为它们可以通过后门获取用户的敏感信息,例如密码和银行账户信息。此外,恶意软件包还可以通过启用远程访问的功能,令攻击者轻松地获取用户计算机的控制权。
2.4 PyPI 官方的反应
PyPI 官方的工作人员表示,他们正在积极地处理这个问题。他们已经禁止了与恶意软件包相关的账户和 IP 地址,并采取了有效措施防止此类事件再次发生。同时,他们也强烈建议用户在下载软件包时加强安全措施,例如使用 HTTPS 或验证包的哈希值等方法。
3. 如何保证安全
3.1 使用官方源
一般来说,我们应该尽量使用官方源来下载软件包,以确保下载的安全性。但是,在这次事件中,官方源也被感染了,这让很多开发者都感到头疼。因此,我们应该在下载软件包之前,先自行判断是否可信,并且保持警惕。
import hashlib
import requests
def check_hash(pkg_name, pkg_version):
url = f'https://pypi.org/pypi/{pkg_name}/{pkg_version}/json'
response = requests.get(url)
if response.status_code == 200:
data = response.json()
sha256_digest = data['releases'][pkg_version][0]['digests']['sha256']
return sha256_digest
else:
return None
if __name__ == '__main__':
pkg_name = "requests"
pkg_version = "2.25.1"
pkg_url = f"https://files.pythonhosted.org/packages/18/ \ aa/fada1c1bf557213a6895458cc3aae2aead8e16904466cd29d83a80b54ffc/ \ requests-2.25.1-py2.py3-none-any.whl"
# 获取网站上的 sha256 值
site_hash = check_hash(pkg_name, pkg_version)
# 下载软件包
response = requests.get(pkg_url)
# 计算下载下来的软件包 sha256 值
downloaded_hash = hashlib.sha256(response.content).hexdigest()
# 对比两个 sha256 值是否相同
if site_hash == downloaded_hash:
print('软件包下载成功!')
else:
print('软件包下载失败!')
3.2 更新软件包
开发者们应该经常检查自己使用的软件包是否有更新,避免使用过时的软件包。因为很多过时的软件包会存在安全漏洞,这些漏洞可能被黑客利用,造成严重后果。
3.3 使用防病毒软件
开发者们还可以使用一些防病毒软件,如 ClamAV、McAfee 等。这些防病毒软件可以及时发现恶意软件包,并通过特定的算法将其从系统中删除。
4. 总结
软件包是开发者们日常开发必不可少的东西之一。而 PyPI 就是 Python 社区的一个官方第三方库仓库,其中包含了大量的优秀软件包,方便了开发者们的开发工作。然而,最近 PyPI 遭遇了投毒事件,这给开发者们的开发工作带来了很大的风险。因此,开发者们应该加强安全意识,使用合法的软件包,更新软件包,并使用防病毒软件等操作来确保系统安全。